@burdenoff/cli-sdk 2026.1031.2 → 2026.1101.1

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 (72) hide show
  1. package/dist/{chunk-SQSFZFQZ.js → chunk-W4JZR7RJ.js} +1 -1
  2. package/dist/{chunk-UAFYTYK6.js → chunk-YIY5IDXQ.js} +5 -5
  3. package/dist/core/index.cjs +4 -4
  4. package/dist/core/index.js +1 -1
  5. package/dist/index.cjs +4 -4
  6. package/dist/index.js +1 -1
  7. package/dist/modules/adaptercloud/index.js +1 -1
  8. package/dist/modules/artistrybase/index.js +1 -1
  9. package/dist/modules/assethandler/index.js +1 -1
  10. package/dist/modules/atheletebridge/index.js +1 -1
  11. package/dist/modules/auth/index.js +1 -1
  12. package/dist/modules/billing/index.cjs +1 -1
  13. package/dist/modules/billing/index.js +1 -1
  14. package/dist/modules/brainyrich/index.js +1 -1
  15. package/dist/modules/buildmyiq/index.cjs +3 -3
  16. package/dist/modules/buildmyiq/index.js +1 -1
  17. package/dist/modules/channels/index.js +1 -1
  18. package/dist/modules/collabkin/index.js +1 -1
  19. package/dist/modules/comradecircle/index.js +1 -1
  20. package/dist/modules/conversations/index.js +1 -1
  21. package/dist/modules/coolandlovely/index.js +1 -1
  22. package/dist/modules/cosmicintersection/index.js +1 -1
  23. package/dist/modules/crewfoundry/index.js +1 -1
  24. package/dist/modules/devportal/index.cjs +3 -3
  25. package/dist/modules/devportal/index.js +1 -1
  26. package/dist/modules/ecoimpacthub/index.js +1 -1
  27. package/dist/modules/eventfullymanaged/index.cjs +4 -4
  28. package/dist/modules/eventfullymanaged/index.js +1 -1
  29. package/dist/modules/export/index.js +1 -1
  30. package/dist/modules/files/index.js +1 -1
  31. package/dist/modules/fluidgrids/index.js +1 -1
  32. package/dist/modules/ggnomad/index.cjs +16 -16
  33. package/dist/modules/ggnomad/index.js +21 -21
  34. package/dist/modules/govcitizenhub/index.js +1 -1
  35. package/dist/modules/groups/index.js +1 -1
  36. package/dist/modules/headshotmarketing/index.js +1 -1
  37. package/dist/modules/hookmovies/index.js +1 -1
  38. package/dist/modules/housingvista/index.js +1 -1
  39. package/dist/modules/integrations/index.js +1 -1
  40. package/dist/modules/intelwatchtower/index.js +1 -1
  41. package/dist/modules/kadaikodi/index.js +1 -1
  42. package/dist/modules/labsofscience/index.js +1 -1
  43. package/dist/modules/manufacturedops/index.js +1 -1
  44. package/dist/modules/movethewheels/index.js +1 -1
  45. package/dist/modules/mybodyshield/index.cjs +52 -28
  46. package/dist/modules/mybodyshield/index.js +71 -47
  47. package/dist/modules/notifications/index.js +1 -1
  48. package/dist/modules/organizations/index.js +1 -1
  49. package/dist/modules/planmagnet/index.js +1 -1
  50. package/dist/modules/products/index.js +1 -1
  51. package/dist/modules/proserviceworld/index.js +1 -1
  52. package/dist/modules/rbac/index.js +1 -1
  53. package/dist/modules/sandbox/index.js +1 -1
  54. package/dist/modules/scheduler/index.js +1 -1
  55. package/dist/modules/security/index.cjs +3 -3
  56. package/dist/modules/security/index.js +1 -1
  57. package/dist/modules/semanticfed/index.js +1 -1
  58. package/dist/modules/store/index.cjs +3 -3
  59. package/dist/modules/store/index.js +1 -1
  60. package/dist/modules/subscriberbot/index.js +1 -1
  61. package/dist/modules/support/index.js +1 -1
  62. package/dist/modules/tags/index.cjs +2 -2
  63. package/dist/modules/tags/index.js +1 -1
  64. package/dist/modules/technospam/index.js +1 -1
  65. package/dist/modules/theculturepost/index.js +1 -1
  66. package/dist/modules/theglobalfuel/index.js +1 -1
  67. package/dist/modules/timecampus/index.cjs +3 -3
  68. package/dist/modules/timecampus/index.js +1 -1
  69. package/dist/modules/tours/index.js +1 -1
  70. package/dist/modules/vibecontrols/index.js +1 -1
  71. package/dist/modules/workspaces/index.js +1 -1
  72. package/package.json +1 -1
@@ -1 +1 @@
1
- import {b as b$1,o,p,q as q$1}from'./chunk-UAFYTYK6.js';var r=null;function T(t){r=t;}function e(){if(!r)throw new q$1("vibecontrols module helpers used before setHelpersContext was called");return r}function c(){let t=e();if(!t.auth.isAuthenticated())throw new p("Authentication required.",{hint:`Run \`${t.productName} auth login\` to authenticate.`})}async function q(t,n){return c(),e().gql.workspace.request(t,n)}async function w(t,n){return e().gql.global.request(t,n)}async function b(t,n){return e().gql.workspaceAuthOnly.request(t,n)}async function A(t,n){return e().gql.global.request(t,n)}function v(){e().gql.reset();}function I(t){let n=t instanceof Error?t.message:String(t);throw new o(n)}function k(t,n,p){e().output.formatAndOutput(t,n,p);}function E(t){e().output.printSuccess(t);}function O(t){e().output.printError(t);}function S(t){e().output.printInfo(t);}function D(t){e().output.printWarning(t);}function y(t){e().output.printJson(t);}function N(t){return e().output.formatStatus(t)}function R(t){return e().output.formatDate(t)}function W(t,n){return e().output.truncate(t,n)}function F(t,n){return e().output.confirm(t,n)}function L(t,n){e().output.printTable(t,n);}function V(){return e()}function P(){return e().auth.read()}function _(t){e().auth.write(t);}function K(){e().auth.clear();}function G(){return e().config.read()}function Y(t){return e().config.get(t)}function j(t,n){e().config.set(t,n);}function H(){return e().config.path()}var J=b$1;function B(){return e().config.resolveOIDC()}function U(t){return t?t.expiresAt?Date.now()>=t.expiresAt:false:e().auth.isTokenExpired()}export{J as A,B,U as C,T as a,q as b,w as c,b as d,A as e,v as f,I as g,k as h,E as i,O as j,S as k,D as l,y as m,N as n,R as o,W as p,F as q,L as r,V as s,P as t,_ as u,K as v,G as w,Y as x,j as y,H as z};
1
+ import {b as b$1,o,p,q as q$1}from'./chunk-YIY5IDXQ.js';var r=null;function T(t){r=t;}function e(){if(!r)throw new q$1("vibecontrols module helpers used before setHelpersContext was called");return r}function c(){let t=e();if(!t.auth.isAuthenticated())throw new p("Authentication required.",{hint:`Run \`${t.productName} auth login\` to authenticate.`})}async function q(t,n){return c(),e().gql.workspace.request(t,n)}async function w(t,n){return e().gql.global.request(t,n)}async function b(t,n){return e().gql.workspaceAuthOnly.request(t,n)}async function A(t,n){return e().gql.global.request(t,n)}function v(){e().gql.reset();}function I(t){let n=t instanceof Error?t.message:String(t);throw new o(n)}function k(t,n,p){e().output.formatAndOutput(t,n,p);}function E(t){e().output.printSuccess(t);}function O(t){e().output.printError(t);}function S(t){e().output.printInfo(t);}function D(t){e().output.printWarning(t);}function y(t){e().output.printJson(t);}function N(t){return e().output.formatStatus(t)}function R(t){return e().output.formatDate(t)}function W(t,n){return e().output.truncate(t,n)}function F(t,n){return e().output.confirm(t,n)}function L(t,n){e().output.printTable(t,n);}function V(){return e()}function P(){return e().auth.read()}function _(t){e().auth.write(t);}function K(){e().auth.clear();}function G(){return e().config.read()}function Y(t){return e().config.get(t)}function j(t,n){e().config.set(t,n);}function H(){return e().config.path()}var J=b$1;function B(){return e().config.resolveOIDC()}function U(t){return t?t.expiresAt?Date.now()>=t.expiresAt:false:e().auth.isTokenExpired()}export{J as A,B,U as C,T as a,q as b,w as c,b as d,A as e,v as f,I as g,k as h,E as i,O as j,S as k,D as l,y as m,N as n,R as o,W as p,F as q,L as r,V as s,P as t,_ as u,K as v,G as w,Y as x,j as y,H as z};
@@ -1,4 +1,4 @@
1
- import {existsSync,readFileSync,writeFileSync,chmodSync,unlinkSync,mkdirSync}from'fs';import {join}from'path';import {homedir}from'os';import {GraphQLClient}from'graphql-request';import x from'cross-fetch';import {Command}from'commander';var G=300*1e3;function O(e){let n=join(e,"auth.json");function r(){existsSync(e)||mkdirSync(e,{recursive:true,mode:448});}function t(){try{if(!existsSync(n))return null;let a=readFileSync(n,"utf8");return JSON.parse(a)}catch{return null}}function s(a){r(),writeFileSync(n,JSON.stringify(a,null,2),{encoding:"utf8",mode:384});try{chmodSync(n,384);}catch{}}function i(){try{existsSync(n)&&unlinkSync(n);}catch{}}function o(){let a=t();return a?.expiresAt?Date.now()>=a.expiresAt:false}function u(){let a=t();return a?.expiresAt?Date.now()+G>=a.expiresAt:false}function l(){let a=t();return a?.workspaceTokenExpiresAt?Date.now()>=a.workspaceTokenExpiresAt:false}function m(){let a=t();return a?.workspaceTokenExpiresAt?Date.now()+G>=a.workspaceTokenExpiresAt:false}function y(){return t()?.accessToken?!o():false}return {read:t,write:s,clear:i,isTokenExpired:o,isTokenExpiringSoon:u,isWorkspaceTokenExpired:l,isWorkspaceTokenExpiringSoon:m,isAuthenticated:y}}var ce=["workspaceEndpoint","globalEndpoint","oidcIssuer","clientId","defaultFormat","verbose","authServiceEndpoint","productOrigin"];function S(e){let n=join(homedir(),".config",e.configDirName),r=join(n,"config.json"),t={workspaceEndpoint:e.workspaceEndpointDefault,globalEndpoint:e.globalEndpointDefault};function s(){existsSync(n)||mkdirSync(n,{recursive:true,mode:448});}function i(c){if(e.envPrefix){let d=process.env[`${e.envPrefix}_${c}`];if(d)return d}let p=process.env[c];return p&&p.length>0?p:void 0}function o(c){if(!e.envPrefix)return;let p=process.env[`${e.envPrefix}_${c}`];return p&&p.length>0?p:void 0}function u(){let c={};try{existsSync(r)&&(c=JSON.parse(readFileSync(r,"utf8")));}catch{}return {...t,...c,workspaceEndpoint:i("WORKSPACE_ENDPOINT")??c.workspaceEndpoint??t.workspaceEndpoint,globalEndpoint:i("GLOBAL_ENDPOINT")??c.globalEndpoint??t.globalEndpoint,oidcIssuer:i("OIDC_ISSUER")??c.oidcIssuer,clientId:i("CLIENT_ID")??c.clientId,productOrigin:o("ORIGIN")??c.productOrigin}}function l(c){s(),writeFileSync(r,JSON.stringify(c,null,2),{encoding:"utf8"});try{chmodSync(r,384);}catch{}}function m(c){return u()[c]}function y(c,p){let d=u();d[c]=p,l(d);}function a(){let c=u(),p=c.clientId||e.oidcClientId,d=c.oidcIssuer;if(!d){let f=c.globalEndpoint;f.includes("localhost")||f.includes("127.0.0.1")?d=f.replace(/\/graphql$/,"").replace(/\/global\/graphql$/,"/global"):d=e.oidcIssuerProd??"https://graphql.burdenoff.com/global";}return {oidcIssuer:d,clientId:p}}function g(){let c=u();if(c.productOrigin)return c.productOrigin;if(e.productOrigins)try{let p=new URL(c.workspaceEndpoint).hostname.toLowerCase();return e.productOrigins[p]}catch{return}}return {read:u,write:l,get:m,set:y,path:()=>r,dir:()=>n,resolveOIDC:a,resolveProductOrigin:g}}async function ue(e){let n=`${e.oidcIssuer}/oidc/device/code`,r=new URLSearchParams({client_id:e.clientId,scope:"openid profile email offline_access"}),t=await x(n,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:r.toString()});if(!t.ok){let i=await t.text().catch(()=>"Unknown error");throw new Error(`Device code request failed (${t.status}): ${i}`)}let s=await t.json();return {deviceCode:s.device_code,userCode:s.user_code,verificationUri:s.verification_uri,verificationUriComplete:s.verification_uri_complete??null,expiresIn:s.expires_in,interval:s.interval??5}}async function le(e,n,r){let t=`${r.oidcIssuer}/oauth/device/token`,s=n;for(;;){await new Promise(l=>setTimeout(l,s*1e3));let i=await x(t,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:e,client_id:r.clientId}).toString()}),o=await i.json();if(i.ok&&o.access_token)return {accessToken:o.access_token,refreshToken:o.refresh_token??"",expiresIn:o.expires_in??3600};let u=o.error;switch(u){case "authorization_pending":continue;case "slow_down":s+=5;continue;case "expired_token":throw new Error("Device code has expired. Please try again.");case "access_denied":throw new Error("Authorization was denied by the user.");default:throw new Error(`Device code polling failed: ${o.error_description??u??"Unknown error"}`)}}}async function $(e,n,r,t){let i=await x(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({query:`
1
+ import {existsSync,readFileSync,writeFileSync,chmodSync,unlinkSync,mkdirSync}from'fs';import {join}from'path';import {homedir}from'os';import {GraphQLClient}from'graphql-request';import x from'cross-fetch';import {Command}from'commander';var W=300*1e3;function O(e){let n=join(e,"auth.json");function r(){existsSync(e)||mkdirSync(e,{recursive:true,mode:448});}function t(){try{if(!existsSync(n))return null;let a=readFileSync(n,"utf8");return JSON.parse(a)}catch{return null}}function s(a){r(),writeFileSync(n,JSON.stringify(a,null,2),{encoding:"utf8",mode:384});try{chmodSync(n,384);}catch{}}function i(){try{existsSync(n)&&unlinkSync(n);}catch{}}function o(){let a=t();return a?.expiresAt?Date.now()>=a.expiresAt:false}function u(){let a=t();return a?.expiresAt?Date.now()+W>=a.expiresAt:false}function l(){let a=t();return a?.workspaceTokenExpiresAt?Date.now()>=a.workspaceTokenExpiresAt:false}function m(){let a=t();return a?.workspaceTokenExpiresAt?Date.now()+W>=a.workspaceTokenExpiresAt:false}function y(){return t()?.accessToken?!o():false}return {read:t,write:s,clear:i,isTokenExpired:o,isTokenExpiringSoon:u,isWorkspaceTokenExpired:l,isWorkspaceTokenExpiringSoon:m,isAuthenticated:y}}var ce=["workspaceEndpoint","globalEndpoint","oidcIssuer","clientId","defaultFormat","verbose","authServiceEndpoint","productOrigin"];function S(e){let n=join(homedir(),".config",e.configDirName),r=join(n,"config.json"),t={workspaceEndpoint:e.workspaceEndpointDefault,globalEndpoint:e.globalEndpointDefault};function s(){existsSync(n)||mkdirSync(n,{recursive:true,mode:448});}function i(c){if(e.envPrefix){let d=process.env[`${e.envPrefix}_${c}`];if(d)return d}let p=process.env[c];return p&&p.length>0?p:void 0}function o(c){if(!e.envPrefix)return;let p=process.env[`${e.envPrefix}_${c}`];return p&&p.length>0?p:void 0}function u(){let c={};try{existsSync(r)&&(c=JSON.parse(readFileSync(r,"utf8")));}catch{}return {...t,...c,workspaceEndpoint:i("WORKSPACE_ENDPOINT")??c.workspaceEndpoint??t.workspaceEndpoint,globalEndpoint:i("GLOBAL_ENDPOINT")??c.globalEndpoint??t.globalEndpoint,oidcIssuer:i("OIDC_ISSUER")??c.oidcIssuer,clientId:i("CLIENT_ID")??c.clientId,productOrigin:o("ORIGIN")??c.productOrigin}}function l(c){s(),writeFileSync(r,JSON.stringify(c,null,2),{encoding:"utf8"});try{chmodSync(r,384);}catch{}}function m(c){return u()[c]}function y(c,p){let d=u();d[c]=p,l(d);}function a(){let c=u(),p=c.clientId||e.oidcClientId,d=c.oidcIssuer;if(!d){let f=c.globalEndpoint;f.includes("localhost")||f.includes("127.0.0.1")?d=f.replace(/\/graphql$/,"").replace(/\/global\/graphql$/,"/global"):d=e.oidcIssuerProd??"https://graphql.burdenoff.com/global";}return {oidcIssuer:d,clientId:p}}function g(){let c=u();if(c.productOrigin)return c.productOrigin;if(e.productOrigins)try{let p=new URL(c.workspaceEndpoint).hostname.toLowerCase();return e.productOrigins[p]}catch{return}}return {read:u,write:l,get:m,set:y,path:()=>r,dir:()=>n,resolveOIDC:a,resolveProductOrigin:g}}async function ue(e){let n=`${e.oidcIssuer}/oidc/device/code`,r=new URLSearchParams({client_id:e.clientId,scope:"openid profile email offline_access"}),t=await x(n,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:r.toString()});if(!t.ok){let i=await t.text().catch(()=>"Unknown error");throw new Error(`Device code request failed (${t.status}): ${i}`)}let s=await t.json();return {deviceCode:s.device_code,userCode:s.user_code,verificationUri:s.verification_uri,verificationUriComplete:s.verification_uri_complete??null,expiresIn:s.expires_in,interval:s.interval??5}}async function le(e,n,r){let t=`${r.oidcIssuer}/oauth/device/token`,s=n;for(;;){await new Promise(l=>setTimeout(l,s*1e3));let i=await x(t,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:e,client_id:r.clientId}).toString()}),o=await i.json();if(i.ok&&o.access_token)return {accessToken:o.access_token,refreshToken:o.refresh_token??"",expiresIn:o.expires_in??3600};let u=o.error;switch(u){case "authorization_pending":continue;case "slow_down":s+=5;continue;case "expired_token":throw new Error("Device code has expired. Please try again.");case "access_denied":throw new Error("Authorization was denied by the user.");default:throw new Error(`Device code polling failed: ${o.error_description??u??"Unknown error"}`)}}}async function $(e,n,r,t){let i=await x(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({query:`
2
2
  mutation AuthenticateApp($input: AuthenticateAppInput!) {
3
3
  authenticateApp(input: $input) {
4
4
  accessToken tokenType expiresIn scopes
@@ -17,7 +17,7 @@ import {existsSync,readFileSync,writeFileSync,chmodSync,unlinkSync,mkdirSync}fro
17
17
  items { id name slug tenantId organizationId }
18
18
  }
19
19
  }
20
- `,variables:{limit:50}})});if(!t.ok){let i=await t.text().catch(()=>"Unknown error");throw new Error(`Failed to fetch workspaces (${t.status}): ${i}`)}let s=await t.json();if(s.errors?.length)throw new Error(`Failed to fetch workspaces: ${s.errors[0]?.message??"unknown error"}`);return s.data?.myWorkspaces?.items??[]}function de(e){try{let n=new URL(e);return n.protocol==="http:"||n.protocol==="https:"}catch{return false}}async function ge(e){try{if(!de(e))return !1;let{execFile:n}=await import('child_process'),r=process.platform,t,s;return r==="darwin"?(t="open",s=[e]):r==="win32"?(t="cmd",s=["/c","start","",e]):(t="xdg-open",s=[e]),new Promise(i=>{n(t,s,o=>{i(!o);});})}catch{return false}}var fe=3e4,z=3,me=1e3;function ke(e){return new Promise(n=>setTimeout(n,e))}function we(e){if(e instanceof TypeError)return true;if(e&&typeof e=="object"&&"response"in e){let n=e.response;if(n&&typeof n.status=="number"&&n.status>=500)return true}return false}function B(e){if(e&&typeof e=="object"&&"response"in e){let n=e,r=n.response?.errors?.[0],t=r?.extensions?.originalError?.message;if(t)return t;if(r?.message)return r.message;if(n.message)return n.message}return e instanceof Error?e.message:String(e)}function T(e){let n={};return e?.accessToken&&(n.Authorization=`Bearer ${e.accessToken}`),e?.organizationId&&(n["x-org-id"]=e.organizationId),n}function V(e,n){let r=T(e);return n&&(r.Origin=n),e?.workspaceToken&&(r["X-Workspace-Authorization"]=`Bearer ${e.workspaceToken}`),e?.organizationId&&(r["x-org-id"]=e.organizationId),r}async function R(e,n,r){let t;for(let s=0;s<z;s++)try{let i=new AbortController,o=setTimeout(()=>i.abort(),fe);try{return await e.request({document:n,variables:r,signal:i.signal})}finally{clearTimeout(o);}}catch(i){if(t=i,i&&typeof i=="object"&&"response"in i){let o=i.response;if(o&&typeof o.status=="number"&&o.status>=400&&o.status<500)break}if(we(i)&&s<z-1){let o=me*Math.pow(2,s);await ke(o);continue}break}throw new Error(B(t))}function D(e,n){let r=null,t=null;function s(){let a=e.read(),g=n.read();return r=new GraphQLClient(a.workspaceEndpoint),r.setHeaders(V(g,e.resolveProductOrigin())),t=new GraphQLClient(a.globalEndpoint),t.setHeaders(T(g)),{workspace:r,global:t}}async function i(){let a=n.read();if(!a)return;if(a.authMethod==="client_credentials"&&a.clientId&&a.clientSecret){let d=e.read();try{let f=await $(d.globalEndpoint,a.clientId,a.clientSecret);n.write({...a,accessToken:f.accessToken,expiresAt:Date.now()+f.expiresIn*1e3}),r=null,t=null;}catch{}return}if(!a.refreshToken)return;let g=e.read(),c=new GraphQLClient(g.globalEndpoint);c.setHeaders({Authorization:`Bearer ${a.accessToken}`});let p=`
20
+ `,variables:{limit:50}})});if(!t.ok){let i=await t.text().catch(()=>"Unknown error");throw new Error(`Failed to fetch workspaces (${t.status}): ${i}`)}let s=await t.json();if(s.errors?.length)throw new Error(`Failed to fetch workspaces: ${s.errors[0]?.message??"unknown error"}`);return s.data?.myWorkspaces?.items??[]}function de(e){try{let n=new URL(e);return n.protocol==="http:"||n.protocol==="https:"}catch{return false}}async function ge(e){try{if(!de(e))return !1;let{execFile:n}=await import('child_process'),r=process.platform,t,s;return r==="darwin"?(t="open",s=[e]):r==="win32"?(t="cmd",s=["/c","start","",e]):(t="xdg-open",s=[e]),new Promise(i=>{n(t,s,o=>{i(!o);});})}catch{return false}}var fe=3e4,z=3,me=1e3;function ke(e){return new Promise(n=>setTimeout(n,e))}function he(e){if(e instanceof TypeError)return true;if(e&&typeof e=="object"&&"response"in e){let n=e.response;if(n&&typeof n.status=="number"&&n.status>=500)return true}return false}function B(e){if(e&&typeof e=="object"&&"response"in e){let r=e.response?.errors?.[0],t=r?.extensions?.originalError?.message;return t||(r?.message?r.message:"GraphQL request failed")}return e instanceof Error?e.message:String(e)}function T(e){let n={};return e?.accessToken&&(n.Authorization=`Bearer ${e.accessToken}`),e?.organizationId&&(n["x-org-id"]=e.organizationId),n}function V(e,n){let r=T(e);return n&&(r.Origin=n),e?.workspaceToken&&(r["X-Workspace-Authorization"]=`Bearer ${e.workspaceToken}`),e?.organizationId&&(r["x-org-id"]=e.organizationId),r}async function R(e,n,r){let t;for(let s=0;s<z;s++)try{let i=new AbortController,o=setTimeout(()=>i.abort(),fe);try{return await e.request({document:n,variables:r,signal:i.signal})}finally{clearTimeout(o);}}catch(i){if(t=i,i&&typeof i=="object"&&"response"in i){let o=i.response;if(o&&typeof o.status=="number"&&o.status>=400&&o.status<500)break}if(he(i)&&s<z-1){let o=me*Math.pow(2,s);await ke(o);continue}break}throw new Error(B(t))}function D(e,n){let r=null,t=null;function s(){let a=e.read(),g=n.read();return r=new GraphQLClient(a.workspaceEndpoint),r.setHeaders(V(g,e.resolveProductOrigin())),t=new GraphQLClient(a.globalEndpoint),t.setHeaders(T(g)),{workspace:r,global:t}}async function i(){let a=n.read();if(!a)return;if(a.authMethod==="client_credentials"&&a.clientId&&a.clientSecret){let d=e.read();try{let f=await $(d.globalEndpoint,a.clientId,a.clientSecret);n.write({...a,accessToken:f.accessToken,expiresAt:Date.now()+f.expiresIn*1e3}),r=null,t=null;}catch{}return}if(!a.refreshToken)return;let g=e.read(),c=new GraphQLClient(g.globalEndpoint);c.setHeaders({Authorization:`Bearer ${a.accessToken}`});let p=`
21
21
  mutation RefreshToken($token: String!) {
22
22
  refreshToken(token: $token) {
23
23
  accessToken
@@ -25,8 +25,8 @@ import {existsSync,readFileSync,writeFileSync,chmodSync,unlinkSync,mkdirSync}fro
25
25
  expiresIn
26
26
  }
27
27
  }
28
- `;try{let f=(await c.request(p,{token:a.refreshToken})).refreshToken;n.write({...a,accessToken:f.accessToken,refreshToken:f.refreshToken,expiresAt:Date.now()+f.expiresIn*1e3}),r=null,t=null;}catch{}}async function o(){let a=n.read();if(!a?.accessToken||!a.workspaceId||!a.organizationId)return;let g=e.read();try{let c=await P(g.workspaceEndpoint,a.accessToken,a.workspaceId,a.organizationId);n.write({...a,workspaceToken:c.token,workspaceTokenExpiresAt:new Date(c.expiresAt).getTime()}),r=null;}catch{}}async function u(){n.isTokenExpiringSoon()&&await i(),n.read()?.workspaceToken&&n.isWorkspaceTokenExpiringSoon()&&await o();}return {workspace:{async request(a,g){await u();let{workspace:c}=r?{workspace:r}:s();return c.setHeaders(V(n.read(),e.resolveProductOrigin())),R(c,a,g)}},global:{async request(a,g){let{global:c}=t?{global:t}:s();return c.setHeaders(T(n.read())),R(c,a,g)}},workspaceAuthOnly:{async request(a,g){let c=e.read(),p=n.read(),d=new GraphQLClient(c.workspaceEndpoint),f=T(p),W=e.resolveProductOrigin();return W&&(f.Origin=W),d.setHeaders(f),R(d,a,g)}},reset(){r=null,t=null;}}}function _(){return !!(process.stdout.isTTY&&process.stdin.isTTY)}function H(e){if(e.format){let n=e.format.toLowerCase();if(n==="json"||n==="table"||n==="yaml")return n}return _()?"table":"json"}function L(e){console.log(JSON.stringify(e,null,2));}function J(e,n){if(e.length===0)return;let r=e.map((i,o)=>{let u=i.length;for(let l of n){let m=l[o]??"";m.length>u&&(u=m.length);}return Math.min(u,50)}),t=r.map(i=>"-".repeat(i+2)).join("+"),s=i=>i.map((o,u)=>` ${(o??"").padEnd(r[u]??0)} `).join("|");console.log(s(e)),console.log(t);for(let i of n)console.log(s(i));}function q(e,n){let r=" ".repeat(n),t=[];for(let[s,i]of Object.entries(e))if(i==null)t.push(`${r}${s}: null`);else if(Array.isArray(i)){t.push(`${r}${s}:`);for(let o of i)typeof o=="object"&&o!==null?(t.push(`${r} -`),t.push(q(o,n+2))):t.push(`${r} - ${String(o)}`);}else typeof i=="object"?(t.push(`${r}${s}:`),t.push(q(i,n+1))):t.push(`${r}${s}: ${String(i)}`);return t.join(`
29
- `)}function Y(e){if(typeof e!="object"||e===null){console.log(String(e));return}console.log(q(e,0));}function he(e){console.log(`\u2713 ${e}`);}function K(e){console.error(`\u2717 ${e}`);}function ye(e){console.warn(`! ${e}`);}function Ce(e){console.log(`\u2139 ${e}`);}function xe(e){if(!e)return "-";try{return new Date(e).toLocaleString()}catch{return e}}function be(e){if(!e)return "-";switch(e.toUpperCase()){case "ACTIVE":case "RUNNING":case "HEALTHY":return `\u2713 ${e}`;case "INACTIVE":case "STOPPED":case "PENDING":return `\u25CB ${e}`;case "ERROR":return `\u2717 ${e}`;case "ARCHIVED":return `\u2192 ${e}`;case "STARTING":return `\u25B6 ${e}`;case "TERMINATED":return `\u25A0 ${e}`;default:return e}}function ve(e,n){return e?e.length<=n?e:e.substring(0,n-3)+"...":"-"}function Te(e,n,r){switch(H(e)){case "json":L(n);break;case "yaml":Y(n);break;case "table":r?J(r.headers,r.rows):L(n);break}}async function Ee(e,n){return n?true:_()?new Promise(r=>{process.stdout.write(`${e} [y/N] `),process.stdin.setEncoding("utf8"),process.stdin.once("data",t=>{let s=t.trim().toLowerCase();r(s==="y"||s==="yes");}),process.stdin.resume();}):(K(`${e} Use --force to skip confirmation.`),false)}var N={isInteractive:_,getFormat:H,formatAndOutput:Te,printJson:L,printTable:J,printYaml:Y,printSuccess:he,printError:K,printWarning:ye,printInfo:Ce,formatDate:xe,formatStatus:be,truncate:ve,confirm:Ee};function j(e={}){let{verbose:n=false,quiet:r=false}=e;return {debug(t,...s){n&&console.error(`[debug] ${t}`,...s);},info(t,...s){r||console.error(`[info] ${t}`,...s);},warn(t,...s){console.error(`[warn] ${t}`,...s);},error(t,...s){console.error(`[error] ${t}`,...s);}}}function Ie(e){return e.includes("localhost")||e.includes("127.0.0.1")?"local":e.includes("alpha")||e.includes("staging")?"staging":"prod"}function Ae(e){return !!e&&typeof e.debug=="function"&&typeof e.info=="function"}function Oe(e){let n=S(e.defaults),r=O(n.dir()),t=D(n,r),s=e.output??N,i=Ae(e.logger)?e.logger:j(e.logger),o=e.env??Ie(n.read().workspaceEndpoint);return {productName:e.productName,productVersion:e.productVersion,defaults:e.defaults,config:n,auth:r,gql:t,output:s,logger:i,env:o}}var C=class extends Error{exitCode;hint;constructor(n,r){super(n),this.name="CliUserError",this.exitCode=r?.exitCode??1,this.hint=r?.hint;}},b=class extends C{constructor(n,r){super(n,{exitCode:2,hint:r?.hint??"Run `<product> auth login` to authenticate."}),this.name="CliAuthError";}},h=class extends Error{cause;constructor(n,r){super(n),this.name="CliInternalError",this.cause=r;}};var E=class extends h{constructor(n,r){super(`Module '${n}' declares dependency on '${r}', but '${r}' is not in the module list.`),this.name="MissingDependencyError";}},I=class extends h{constructor(n){super(`Circular dependency detected among modules: ${n.join(" -> ")}`),this.name="CircularDependencyError";}};function F(e){let n=new Map;for(let o of e){if(n.has(o.id))throw new h(`Duplicate module id: '${o.id}'`);n.set(o.id,o);}for(let o of e)for(let u of o.dependsOn??[])if(!n.has(u))throw new E(o.id,u);let r=[],t=new Set,s=new Set;function i(o,u){if(!s.has(o.id)){if(t.has(o.id))throw new I([...u,o.id]);t.add(o.id);for(let l of o.dependsOn??[]){let m=n.get(l);m&&i(m,[...u,o.id]);}t.delete(o.id),s.add(o.id),r.push(o);}}for(let o of e)i(o,[]);return r}function $e(e,n,r){let t=new Command;t.name(r.name).description(r.description??"").version(r.version,"-v, --version").option("-f, --format <format>","Output format (json, table, yaml)").option("--verbose","Enable verbose logging").option("--no-color","Disable colored output"),t.hook("preAction",(o,u)=>{let l=t.opts().format;if(typeof l!="string")return;u.options.some(y=>y.attributeName()==="format")&&u.getOptionValue("format")===void 0&&u.setOptionValue("format",l);});let s=F(n);for(let o of s)o.register(t,e);r.helpExamples?.length&&t.addHelpText("after",`
28
+ `;try{let f=(await c.request(p,{token:a.refreshToken})).refreshToken;n.write({...a,accessToken:f.accessToken,refreshToken:f.refreshToken,expiresAt:Date.now()+f.expiresIn*1e3}),r=null,t=null;}catch{}}async function o(){let a=n.read();if(!a?.accessToken||!a.workspaceId||!a.organizationId)return;let g=e.read();try{let c=await P(g.workspaceEndpoint,a.accessToken,a.workspaceId,a.organizationId);n.write({...a,workspaceToken:c.token,workspaceTokenExpiresAt:new Date(c.expiresAt).getTime()}),r=null;}catch{}}async function u(){n.isTokenExpiringSoon()&&await i(),n.read()?.workspaceToken&&n.isWorkspaceTokenExpiringSoon()&&await o();}return {workspace:{async request(a,g){await u();let{workspace:c}=r?{workspace:r}:s();return c.setHeaders(V(n.read(),e.resolveProductOrigin())),R(c,a,g)}},global:{async request(a,g){let{global:c}=t?{global:t}:s();return c.setHeaders(T(n.read())),R(c,a,g)}},workspaceAuthOnly:{async request(a,g){let c=e.read(),p=n.read(),d=new GraphQLClient(c.workspaceEndpoint),f=T(p),G=e.resolveProductOrigin();return G&&(f.Origin=G),d.setHeaders(f),R(d,a,g)}},reset(){r=null,t=null;}}}function _(){return !!(process.stdout.isTTY&&process.stdin.isTTY)}function H(e){if(e.format){let n=e.format.toLowerCase();if(n==="json"||n==="table"||n==="yaml")return n}return _()?"table":"json"}function L(e){console.log(JSON.stringify(e,null,2));}function J(e,n){if(e.length===0)return;let r=e.map((i,o)=>{let u=i.length;for(let l of n){let m=l[o]??"";m.length>u&&(u=m.length);}return Math.min(u,50)}),t=r.map(i=>"-".repeat(i+2)).join("+"),s=i=>i.map((o,u)=>` ${(o??"").padEnd(r[u]??0)} `).join("|");console.log(s(e)),console.log(t);for(let i of n)console.log(s(i));}function q(e,n){let r=" ".repeat(n),t=[];for(let[s,i]of Object.entries(e))if(i==null)t.push(`${r}${s}: null`);else if(Array.isArray(i)){t.push(`${r}${s}:`);for(let o of i)typeof o=="object"&&o!==null?(t.push(`${r} -`),t.push(q(o,n+2))):t.push(`${r} - ${String(o)}`);}else typeof i=="object"?(t.push(`${r}${s}:`),t.push(q(i,n+1))):t.push(`${r}${s}: ${String(i)}`);return t.join(`
29
+ `)}function Y(e){if(typeof e!="object"||e===null){console.log(String(e));return}console.log(q(e,0));}function we(e){console.log(`\u2713 ${e}`);}function Q(e){console.error(`\u2717 ${e}`);}function ye(e){console.warn(`! ${e}`);}function Ce(e){console.log(`\u2139 ${e}`);}function xe(e){if(!e)return "-";try{return new Date(e).toLocaleString()}catch{return e}}function be(e){if(!e)return "-";switch(e.toUpperCase()){case "ACTIVE":case "RUNNING":case "HEALTHY":return `\u2713 ${e}`;case "INACTIVE":case "STOPPED":case "PENDING":return `\u25CB ${e}`;case "ERROR":return `\u2717 ${e}`;case "ARCHIVED":return `\u2192 ${e}`;case "STARTING":return `\u25B6 ${e}`;case "TERMINATED":return `\u25A0 ${e}`;default:return e}}function ve(e,n){return e?e.length<=n?e:e.substring(0,n-3)+"...":"-"}function Te(e,n,r){switch(H(e)){case "json":L(n);break;case "yaml":Y(n);break;case "table":r?J(r.headers,r.rows):L(n);break}}async function Ee(e,n){return n?true:_()?new Promise(r=>{process.stdout.write(`${e} [y/N] `),process.stdin.setEncoding("utf8"),process.stdin.once("data",t=>{let s=t.trim().toLowerCase();r(s==="y"||s==="yes");}),process.stdin.resume();}):(Q(`${e} Use --force to skip confirmation.`),false)}var N={isInteractive:_,getFormat:H,formatAndOutput:Te,printJson:L,printTable:J,printYaml:Y,printSuccess:we,printError:Q,printWarning:ye,printInfo:Ce,formatDate:xe,formatStatus:be,truncate:ve,confirm:Ee};function j(e={}){let{verbose:n=false,quiet:r=false}=e;return {debug(t,...s){n&&console.error(`[debug] ${t}`,...s);},info(t,...s){r||console.error(`[info] ${t}`,...s);},warn(t,...s){console.error(`[warn] ${t}`,...s);},error(t,...s){console.error(`[error] ${t}`,...s);}}}function Ie(e){return e.includes("localhost")||e.includes("127.0.0.1")?"local":e.includes("alpha")||e.includes("staging")?"staging":"prod"}function Ae(e){return !!e&&typeof e.debug=="function"&&typeof e.info=="function"}function Oe(e){let n=S(e.defaults),r=O(n.dir()),t=D(n,r),s=e.output??N,i=Ae(e.logger)?e.logger:j(e.logger),o=e.env??Ie(n.read().workspaceEndpoint);return {productName:e.productName,productVersion:e.productVersion,defaults:e.defaults,config:n,auth:r,gql:t,output:s,logger:i,env:o}}var C=class extends Error{exitCode;hint;constructor(n,r){super(n),this.name="CliUserError",this.exitCode=r?.exitCode??1,this.hint=r?.hint;}},b=class extends C{constructor(n,r){super(n,{exitCode:2,hint:r?.hint??"Run `<product> auth login` to authenticate."}),this.name="CliAuthError";}},w=class extends Error{cause;constructor(n,r){super(n),this.name="CliInternalError",this.cause=r;}};var E=class extends w{constructor(n,r){super(`Module '${n}' declares dependency on '${r}', but '${r}' is not in the module list.`),this.name="MissingDependencyError";}},I=class extends w{constructor(n){super(`Circular dependency detected among modules: ${n.join(" -> ")}`),this.name="CircularDependencyError";}};function F(e){let n=new Map;for(let o of e){if(n.has(o.id))throw new w(`Duplicate module id: '${o.id}'`);n.set(o.id,o);}for(let o of e)for(let u of o.dependsOn??[])if(!n.has(u))throw new E(o.id,u);let r=[],t=new Set,s=new Set;function i(o,u){if(!s.has(o.id)){if(t.has(o.id))throw new I([...u,o.id]);t.add(o.id);for(let l of o.dependsOn??[]){let m=n.get(l);m&&i(m,[...u,o.id]);}t.delete(o.id),s.add(o.id),r.push(o);}}for(let o of e)i(o,[]);return r}function $e(e,n,r){let t=new Command;t.name(r.name).description(r.description??"").version(r.version,"-v, --version").option("-f, --format <format>","Output format (json, table, yaml)").option("--verbose","Enable verbose logging").option("--no-color","Disable colored output"),t.hook("preAction",(o,u)=>{let l=t.opts().format;if(typeof l!="string")return;u.options.some(y=>y.attributeName()==="format")&&u.getOptionValue("format")===void 0&&u.setOptionValue("format",l);});let s=F(n);for(let o of s)o.register(t,e);r.helpExamples?.length&&t.addHelpText("after",`
30
30
  Examples:
31
31
  `+r.helpExamples.map(o=>" "+o).join(`
32
- `)),t.on("command:*",()=>{e.output.printError(`Invalid command: ${t.args.join(" ")}`),e.output.printInfo(`Run \`${r.name} --help\` for available commands.`),process.exit(1);});async function i(o=process.argv){try{await t.parseAsync(o),o.length<=2&&t.outputHelp();}catch(u){Pe(e,u);}}return {program:t,run:i}}function Pe(e,n){if(n instanceof b&&(e.output.printError(n.message),n.hint&&e.output.printInfo(n.hint),process.exit(n.exitCode)),n instanceof C&&(e.output.printError(n.message),n.hint&&e.output.printInfo(n.hint),process.exit(n.exitCode)),n instanceof h&&(e.output.printError(`Internal error: ${n.message}`),n.cause&&e.logger.debug("caused by:",n.cause),process.exit(70)),n&&typeof n=="object"&&"code"in n&&"exitCode"in n){let t=n.exitCode;process.exit(typeof t=="number"?t:0);}let r=n instanceof Error?n.message:String(n);e.output.printError(r),process.exit(1);}export{O as a,ce as b,S as c,ue as d,le as e,$ as f,P as g,pe as h,ge as i,B as j,D as k,N as l,j as m,Oe as n,C as o,b as p,h as q,E as r,I as s,F as t,$e as u};
32
+ `)),t.on("command:*",()=>{e.output.printError(`Invalid command: ${t.args.join(" ")}`),e.output.printInfo(`Run \`${r.name} --help\` for available commands.`),process.exit(1);});async function i(o=process.argv){try{await t.parseAsync(o),o.length<=2&&t.outputHelp();}catch(u){Pe(e,u);}}return {program:t,run:i}}function Pe(e,n){if(n instanceof b&&(e.output.printError(n.message),n.hint&&e.output.printInfo(n.hint),process.exit(n.exitCode)),n instanceof C&&(e.output.printError(n.message),n.hint&&e.output.printInfo(n.hint),process.exit(n.exitCode)),n instanceof w&&(e.output.printError(`Internal error: ${n.message}`),n.cause&&e.logger.debug("caused by:",n.cause),process.exit(70)),n&&typeof n=="object"&&"code"in n&&"exitCode"in n){let t=n.exitCode;process.exit(typeof t=="number"?t:0);}let r=n instanceof Error?n.message:String(n);e.output.printError(r),process.exit(1);}export{O as a,ce as b,S as c,ue as d,le as e,$ as f,P as g,pe as h,ge as i,B as j,D as k,N as l,j as m,Oe as n,C as o,b as p,w as q,E as r,I as s,F as t,$e as u};
@@ -1,4 +1,4 @@
1
- 'use strict';var fs=require('fs'),path=require('path'),os=require('os'),graphqlRequest=require('graphql-request'),C=require('cross-fetch'),commander=require('commander');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var C__default=/*#__PURE__*/_interopDefault(C);var W=300*1e3;function A(e){let n=path.join(e,"auth.json");function r(){fs.existsSync(e)||fs.mkdirSync(e,{recursive:true,mode:448});}function t(){try{if(!fs.existsSync(n))return null;let a=fs.readFileSync(n,"utf8");return JSON.parse(a)}catch{return null}}function s(a){r(),fs.writeFileSync(n,JSON.stringify(a,null,2),{encoding:"utf8",mode:384});try{fs.chmodSync(n,384);}catch{}}function i(){try{fs.existsSync(n)&&fs.unlinkSync(n);}catch{}}function o(){let a=t();return a?.expiresAt?Date.now()>=a.expiresAt:false}function u(){let a=t();return a?.expiresAt?Date.now()+W>=a.expiresAt:false}function l(){let a=t();return a?.workspaceTokenExpiresAt?Date.now()>=a.workspaceTokenExpiresAt:false}function m(){let a=t();return a?.workspaceTokenExpiresAt?Date.now()+W>=a.workspaceTokenExpiresAt:false}function h(){return t()?.accessToken?!o():false}return {read:t,write:s,clear:i,isTokenExpired:o,isTokenExpiringSoon:u,isWorkspaceTokenExpired:l,isWorkspaceTokenExpiringSoon:m,isAuthenticated:h}}var ae=["workspaceEndpoint","globalEndpoint","oidcIssuer","clientId","defaultFormat","verbose","authServiceEndpoint","productOrigin"];function O(e){let n=path.join(os.homedir(),".config",e.configDirName),r=path.join(n,"config.json"),t={workspaceEndpoint:e.workspaceEndpointDefault,globalEndpoint:e.globalEndpointDefault};function s(){fs.existsSync(n)||fs.mkdirSync(n,{recursive:true,mode:448});}function i(c){if(e.envPrefix){let d=process.env[`${e.envPrefix}_${c}`];if(d)return d}let p=process.env[c];return p&&p.length>0?p:void 0}function o(c){if(!e.envPrefix)return;let p=process.env[`${e.envPrefix}_${c}`];return p&&p.length>0?p:void 0}function u(){let c={};try{fs.existsSync(r)&&(c=JSON.parse(fs.readFileSync(r,"utf8")));}catch{}return {...t,...c,workspaceEndpoint:i("WORKSPACE_ENDPOINT")??c.workspaceEndpoint??t.workspaceEndpoint,globalEndpoint:i("GLOBAL_ENDPOINT")??c.globalEndpoint??t.globalEndpoint,oidcIssuer:i("OIDC_ISSUER")??c.oidcIssuer,clientId:i("CLIENT_ID")??c.clientId,productOrigin:o("ORIGIN")??c.productOrigin}}function l(c){s(),fs.writeFileSync(r,JSON.stringify(c,null,2),{encoding:"utf8"});try{fs.chmodSync(r,384);}catch{}}function m(c){return u()[c]}function h(c,p){let d=u();d[c]=p,l(d);}function a(){let c=u(),p=c.clientId||e.oidcClientId,d=c.oidcIssuer;if(!d){let f=c.globalEndpoint;f.includes("localhost")||f.includes("127.0.0.1")?d=f.replace(/\/graphql$/,"").replace(/\/global\/graphql$/,"/global"):d=e.oidcIssuerProd??"https://graphql.burdenoff.com/global";}return {oidcIssuer:d,clientId:p}}function g(){let c=u();if(c.productOrigin)return c.productOrigin;if(e.productOrigins)try{let p=new URL(c.workspaceEndpoint).hostname.toLowerCase();return e.productOrigins[p]}catch{return}}return {read:u,write:l,get:m,set:h,path:()=>r,dir:()=>n,resolveOIDC:a,resolveProductOrigin:g}}async function ce(e){let n=`${e.oidcIssuer}/oidc/device/code`,r=new URLSearchParams({client_id:e.clientId,scope:"openid profile email offline_access"}),t=await C__default.default(n,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:r.toString()});if(!t.ok){let i=await t.text().catch(()=>"Unknown error");throw new Error(`Device code request failed (${t.status}): ${i}`)}let s=await t.json();return {deviceCode:s.device_code,userCode:s.user_code,verificationUri:s.verification_uri,verificationUriComplete:s.verification_uri_complete??null,expiresIn:s.expires_in,interval:s.interval??5}}async function ue(e,n,r){let t=`${r.oidcIssuer}/oauth/device/token`,s=n;for(;;){await new Promise(l=>setTimeout(l,s*1e3));let i=await C__default.default(t,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:e,client_id:r.clientId}).toString()}),o=await i.json();if(i.ok&&o.access_token)return {accessToken:o.access_token,refreshToken:o.refresh_token??"",expiresIn:o.expires_in??3600};let u=o.error;switch(u){case "authorization_pending":continue;case "slow_down":s+=5;continue;case "expired_token":throw new Error("Device code has expired. Please try again.");case "access_denied":throw new Error("Authorization was denied by the user.");default:throw new Error(`Device code polling failed: ${o.error_description??u??"Unknown error"}`)}}}async function S(e,n,r,t){let i=await C__default.default(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({query:`
1
+ 'use strict';var fs=require('fs'),path=require('path'),os=require('os'),graphqlRequest=require('graphql-request'),C=require('cross-fetch'),commander=require('commander');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var C__default=/*#__PURE__*/_interopDefault(C);var G=300*1e3;function A(e){let n=path.join(e,"auth.json");function r(){fs.existsSync(e)||fs.mkdirSync(e,{recursive:true,mode:448});}function t(){try{if(!fs.existsSync(n))return null;let a=fs.readFileSync(n,"utf8");return JSON.parse(a)}catch{return null}}function s(a){r(),fs.writeFileSync(n,JSON.stringify(a,null,2),{encoding:"utf8",mode:384});try{fs.chmodSync(n,384);}catch{}}function i(){try{fs.existsSync(n)&&fs.unlinkSync(n);}catch{}}function o(){let a=t();return a?.expiresAt?Date.now()>=a.expiresAt:false}function u(){let a=t();return a?.expiresAt?Date.now()+G>=a.expiresAt:false}function l(){let a=t();return a?.workspaceTokenExpiresAt?Date.now()>=a.workspaceTokenExpiresAt:false}function m(){let a=t();return a?.workspaceTokenExpiresAt?Date.now()+G>=a.workspaceTokenExpiresAt:false}function w(){return t()?.accessToken?!o():false}return {read:t,write:s,clear:i,isTokenExpired:o,isTokenExpiringSoon:u,isWorkspaceTokenExpired:l,isWorkspaceTokenExpiringSoon:m,isAuthenticated:w}}var ae=["workspaceEndpoint","globalEndpoint","oidcIssuer","clientId","defaultFormat","verbose","authServiceEndpoint","productOrigin"];function O(e){let n=path.join(os.homedir(),".config",e.configDirName),r=path.join(n,"config.json"),t={workspaceEndpoint:e.workspaceEndpointDefault,globalEndpoint:e.globalEndpointDefault};function s(){fs.existsSync(n)||fs.mkdirSync(n,{recursive:true,mode:448});}function i(c){if(e.envPrefix){let d=process.env[`${e.envPrefix}_${c}`];if(d)return d}let p=process.env[c];return p&&p.length>0?p:void 0}function o(c){if(!e.envPrefix)return;let p=process.env[`${e.envPrefix}_${c}`];return p&&p.length>0?p:void 0}function u(){let c={};try{fs.existsSync(r)&&(c=JSON.parse(fs.readFileSync(r,"utf8")));}catch{}return {...t,...c,workspaceEndpoint:i("WORKSPACE_ENDPOINT")??c.workspaceEndpoint??t.workspaceEndpoint,globalEndpoint:i("GLOBAL_ENDPOINT")??c.globalEndpoint??t.globalEndpoint,oidcIssuer:i("OIDC_ISSUER")??c.oidcIssuer,clientId:i("CLIENT_ID")??c.clientId,productOrigin:o("ORIGIN")??c.productOrigin}}function l(c){s(),fs.writeFileSync(r,JSON.stringify(c,null,2),{encoding:"utf8"});try{fs.chmodSync(r,384);}catch{}}function m(c){return u()[c]}function w(c,p){let d=u();d[c]=p,l(d);}function a(){let c=u(),p=c.clientId||e.oidcClientId,d=c.oidcIssuer;if(!d){let f=c.globalEndpoint;f.includes("localhost")||f.includes("127.0.0.1")?d=f.replace(/\/graphql$/,"").replace(/\/global\/graphql$/,"/global"):d=e.oidcIssuerProd??"https://graphql.burdenoff.com/global";}return {oidcIssuer:d,clientId:p}}function g(){let c=u();if(c.productOrigin)return c.productOrigin;if(e.productOrigins)try{let p=new URL(c.workspaceEndpoint).hostname.toLowerCase();return e.productOrigins[p]}catch{return}}return {read:u,write:l,get:m,set:w,path:()=>r,dir:()=>n,resolveOIDC:a,resolveProductOrigin:g}}async function ce(e){let n=`${e.oidcIssuer}/oidc/device/code`,r=new URLSearchParams({client_id:e.clientId,scope:"openid profile email offline_access"}),t=await C__default.default(n,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:r.toString()});if(!t.ok){let i=await t.text().catch(()=>"Unknown error");throw new Error(`Device code request failed (${t.status}): ${i}`)}let s=await t.json();return {deviceCode:s.device_code,userCode:s.user_code,verificationUri:s.verification_uri,verificationUriComplete:s.verification_uri_complete??null,expiresIn:s.expires_in,interval:s.interval??5}}async function ue(e,n,r){let t=`${r.oidcIssuer}/oauth/device/token`,s=n;for(;;){await new Promise(l=>setTimeout(l,s*1e3));let i=await C__default.default(t,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:e,client_id:r.clientId}).toString()}),o=await i.json();if(i.ok&&o.access_token)return {accessToken:o.access_token,refreshToken:o.refresh_token??"",expiresIn:o.expires_in??3600};let u=o.error;switch(u){case "authorization_pending":continue;case "slow_down":s+=5;continue;case "expired_token":throw new Error("Device code has expired. Please try again.");case "access_denied":throw new Error("Authorization was denied by the user.");default:throw new Error(`Device code polling failed: ${o.error_description??u??"Unknown error"}`)}}}async function S(e,n,r,t){let i=await C__default.default(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({query:`
2
2
  mutation AuthenticateApp($input: AuthenticateAppInput!) {
3
3
  authenticateApp(input: $input) {
4
4
  accessToken tokenType expiresIn scopes
@@ -17,7 +17,7 @@
17
17
  items { id name slug tenantId organizationId }
18
18
  }
19
19
  }
20
- `,variables:{limit:50}})});if(!t.ok){let i=await t.text().catch(()=>"Unknown error");throw new Error(`Failed to fetch workspaces (${t.status}): ${i}`)}let s=await t.json();if(s.errors?.length)throw new Error(`Failed to fetch workspaces: ${s.errors[0]?.message??"unknown error"}`);return s.data?.myWorkspaces?.items??[]}function pe(e){try{let n=new URL(e);return n.protocol==="http:"||n.protocol==="https:"}catch{return false}}async function de(e){try{if(!pe(e))return !1;let{execFile:n}=await import('child_process'),r=process.platform,t,s;return r==="darwin"?(t="open",s=[e]):r==="win32"?(t="cmd",s=["/c","start","",e]):(t="xdg-open",s=[e]),new Promise(i=>{n(t,s,o=>{i(!o);});})}catch{return false}}var ge=3e4,U=3,fe=1e3;function me(e){return new Promise(n=>setTimeout(n,e))}function ke(e){if(e instanceof TypeError)return true;if(e&&typeof e=="object"&&"response"in e){let n=e.response;if(n&&typeof n.status=="number"&&n.status>=500)return true}return false}function V(e){if(e&&typeof e=="object"&&"response"in e){let n=e,r=n.response?.errors?.[0],t=r?.extensions?.originalError?.message;if(t)return t;if(r?.message)return r.message;if(n.message)return n.message}return e instanceof Error?e.message:String(e)}function v(e){let n={};return e?.accessToken&&(n.Authorization=`Bearer ${e.accessToken}`),e?.organizationId&&(n["x-org-id"]=e.organizationId),n}function z(e,n){let r=v(e);return n&&(r.Origin=n),e?.workspaceToken&&(r["X-Workspace-Authorization"]=`Bearer ${e.workspaceToken}`),e?.organizationId&&(r["x-org-id"]=e.organizationId),r}async function P(e,n,r){let t;for(let s=0;s<U;s++)try{let i=new AbortController,o=setTimeout(()=>i.abort(),ge);try{return await e.request({document:n,variables:r,signal:i.signal})}finally{clearTimeout(o);}}catch(i){if(t=i,i&&typeof i=="object"&&"response"in i){let o=i.response;if(o&&typeof o.status=="number"&&o.status>=400&&o.status<500)break}if(ke(i)&&s<U-1){let o=fe*Math.pow(2,s);await me(o);continue}break}throw new Error(V(t))}function R(e,n){let r=null,t=null;function s(){let a=e.read(),g=n.read();return r=new graphqlRequest.GraphQLClient(a.workspaceEndpoint),r.setHeaders(z(g,e.resolveProductOrigin())),t=new graphqlRequest.GraphQLClient(a.globalEndpoint),t.setHeaders(v(g)),{workspace:r,global:t}}async function i(){let a=n.read();if(!a)return;if(a.authMethod==="client_credentials"&&a.clientId&&a.clientSecret){let d=e.read();try{let f=await S(d.globalEndpoint,a.clientId,a.clientSecret);n.write({...a,accessToken:f.accessToken,expiresAt:Date.now()+f.expiresIn*1e3}),r=null,t=null;}catch{}return}if(!a.refreshToken)return;let g=e.read(),c=new graphqlRequest.GraphQLClient(g.globalEndpoint);c.setHeaders({Authorization:`Bearer ${a.accessToken}`});let p=`
20
+ `,variables:{limit:50}})});if(!t.ok){let i=await t.text().catch(()=>"Unknown error");throw new Error(`Failed to fetch workspaces (${t.status}): ${i}`)}let s=await t.json();if(s.errors?.length)throw new Error(`Failed to fetch workspaces: ${s.errors[0]?.message??"unknown error"}`);return s.data?.myWorkspaces?.items??[]}function pe(e){try{let n=new URL(e);return n.protocol==="http:"||n.protocol==="https:"}catch{return false}}async function de(e){try{if(!pe(e))return !1;let{execFile:n}=await import('child_process'),r=process.platform,t,s;return r==="darwin"?(t="open",s=[e]):r==="win32"?(t="cmd",s=["/c","start","",e]):(t="xdg-open",s=[e]),new Promise(i=>{n(t,s,o=>{i(!o);});})}catch{return false}}var ge=3e4,U=3,fe=1e3;function me(e){return new Promise(n=>setTimeout(n,e))}function ke(e){if(e instanceof TypeError)return true;if(e&&typeof e=="object"&&"response"in e){let n=e.response;if(n&&typeof n.status=="number"&&n.status>=500)return true}return false}function V(e){if(e&&typeof e=="object"&&"response"in e){let r=e.response?.errors?.[0],t=r?.extensions?.originalError?.message;return t||(r?.message?r.message:"GraphQL request failed")}return e instanceof Error?e.message:String(e)}function v(e){let n={};return e?.accessToken&&(n.Authorization=`Bearer ${e.accessToken}`),e?.organizationId&&(n["x-org-id"]=e.organizationId),n}function z(e,n){let r=v(e);return n&&(r.Origin=n),e?.workspaceToken&&(r["X-Workspace-Authorization"]=`Bearer ${e.workspaceToken}`),e?.organizationId&&(r["x-org-id"]=e.organizationId),r}async function P(e,n,r){let t;for(let s=0;s<U;s++)try{let i=new AbortController,o=setTimeout(()=>i.abort(),ge);try{return await e.request({document:n,variables:r,signal:i.signal})}finally{clearTimeout(o);}}catch(i){if(t=i,i&&typeof i=="object"&&"response"in i){let o=i.response;if(o&&typeof o.status=="number"&&o.status>=400&&o.status<500)break}if(ke(i)&&s<U-1){let o=fe*Math.pow(2,s);await me(o);continue}break}throw new Error(V(t))}function R(e,n){let r=null,t=null;function s(){let a=e.read(),g=n.read();return r=new graphqlRequest.GraphQLClient(a.workspaceEndpoint),r.setHeaders(z(g,e.resolveProductOrigin())),t=new graphqlRequest.GraphQLClient(a.globalEndpoint),t.setHeaders(v(g)),{workspace:r,global:t}}async function i(){let a=n.read();if(!a)return;if(a.authMethod==="client_credentials"&&a.clientId&&a.clientSecret){let d=e.read();try{let f=await S(d.globalEndpoint,a.clientId,a.clientSecret);n.write({...a,accessToken:f.accessToken,expiresAt:Date.now()+f.expiresIn*1e3}),r=null,t=null;}catch{}return}if(!a.refreshToken)return;let g=e.read(),c=new graphqlRequest.GraphQLClient(g.globalEndpoint);c.setHeaders({Authorization:`Bearer ${a.accessToken}`});let p=`
21
21
  mutation RefreshToken($token: String!) {
22
22
  refreshToken(token: $token) {
23
23
  accessToken
@@ -26,7 +26,7 @@
26
26
  }
27
27
  }
28
28
  `;try{let f=(await c.request(p,{token:a.refreshToken})).refreshToken;n.write({...a,accessToken:f.accessToken,refreshToken:f.refreshToken,expiresAt:Date.now()+f.expiresIn*1e3}),r=null,t=null;}catch{}}async function o(){let a=n.read();if(!a?.accessToken||!a.workspaceId||!a.organizationId)return;let g=e.read();try{let c=await $(g.workspaceEndpoint,a.accessToken,a.workspaceId,a.organizationId);n.write({...a,workspaceToken:c.token,workspaceTokenExpiresAt:new Date(c.expiresAt).getTime()}),r=null;}catch{}}async function u(){n.isTokenExpiringSoon()&&await i(),n.read()?.workspaceToken&&n.isWorkspaceTokenExpiringSoon()&&await o();}return {workspace:{async request(a,g){await u();let{workspace:c}=r?{workspace:r}:s();return c.setHeaders(z(n.read(),e.resolveProductOrigin())),P(c,a,g)}},global:{async request(a,g){let{global:c}=t?{global:t}:s();return c.setHeaders(v(n.read())),P(c,a,g)}},workspaceAuthOnly:{async request(a,g){let c=e.read(),p=n.read(),d=new graphqlRequest.GraphQLClient(c.workspaceEndpoint),f=v(p),F=e.resolveProductOrigin();return F&&(f.Origin=F),d.setHeaders(f),P(d,a,g)}},reset(){r=null,t=null;}}}function q(){return !!(process.stdout.isTTY&&process.stdin.isTTY)}function B(e){if(e.format){let n=e.format.toLowerCase();if(n==="json"||n==="table"||n==="yaml")return n}return q()?"table":"json"}function D(e){console.log(JSON.stringify(e,null,2));}function H(e,n){if(e.length===0)return;let r=e.map((i,o)=>{let u=i.length;for(let l of n){let m=l[o]??"";m.length>u&&(u=m.length);}return Math.min(u,50)}),t=r.map(i=>"-".repeat(i+2)).join("+"),s=i=>i.map((o,u)=>` ${(o??"").padEnd(r[u]??0)} `).join("|");console.log(s(e)),console.log(t);for(let i of n)console.log(s(i));}function L(e,n){let r=" ".repeat(n),t=[];for(let[s,i]of Object.entries(e))if(i==null)t.push(`${r}${s}: null`);else if(Array.isArray(i)){t.push(`${r}${s}:`);for(let o of i)typeof o=="object"&&o!==null?(t.push(`${r} -`),t.push(L(o,n+2))):t.push(`${r} - ${String(o)}`);}else typeof i=="object"?(t.push(`${r}${s}:`),t.push(L(i,n+1))):t.push(`${r}${s}: ${String(i)}`);return t.join(`
29
- `)}function J(e){if(typeof e!="object"||e===null){console.log(String(e));return}console.log(L(e,0));}function we(e){console.log(`\u2713 ${e}`);}function Y(e){console.error(`\u2717 ${e}`);}function he(e){console.warn(`! ${e}`);}function ye(e){console.log(`\u2139 ${e}`);}function Ce(e){if(!e)return "-";try{return new Date(e).toLocaleString()}catch{return e}}function xe(e){if(!e)return "-";switch(e.toUpperCase()){case "ACTIVE":case "RUNNING":case "HEALTHY":return `\u2713 ${e}`;case "INACTIVE":case "STOPPED":case "PENDING":return `\u25CB ${e}`;case "ERROR":return `\u2717 ${e}`;case "ARCHIVED":return `\u2192 ${e}`;case "STARTING":return `\u25B6 ${e}`;case "TERMINATED":return `\u25A0 ${e}`;default:return e}}function be(e,n){return e?e.length<=n?e:e.substring(0,n-3)+"...":"-"}function ve(e,n,r){switch(B(e)){case "json":D(n);break;case "yaml":J(n);break;case "table":r?H(r.headers,r.rows):D(n);break}}async function Te(e,n){return n?true:q()?new Promise(r=>{process.stdout.write(`${e} [y/N] `),process.stdin.setEncoding("utf8"),process.stdin.once("data",t=>{let s=t.trim().toLowerCase();r(s==="y"||s==="yes");}),process.stdin.resume();}):(Y(`${e} Use --force to skip confirmation.`),false)}var _={isInteractive:q,getFormat:B,formatAndOutput:ve,printJson:D,printTable:H,printYaml:J,printSuccess:we,printError:Y,printWarning:he,printInfo:ye,formatDate:Ce,formatStatus:xe,truncate:be,confirm:Te};function N(e={}){let{verbose:n=false,quiet:r=false}=e;return {debug(t,...s){n&&console.error(`[debug] ${t}`,...s);},info(t,...s){r||console.error(`[info] ${t}`,...s);},warn(t,...s){console.error(`[warn] ${t}`,...s);},error(t,...s){console.error(`[error] ${t}`,...s);}}}function Ee(e){return e.includes("localhost")||e.includes("127.0.0.1")?"local":e.includes("alpha")||e.includes("staging")?"staging":"prod"}function Ie(e){return !!e&&typeof e.debug=="function"&&typeof e.info=="function"}function Ae(e){let n=O(e.defaults),r=A(n.dir()),t=R(n,r),s=e.output??_,i=Ie(e.logger)?e.logger:N(e.logger),o=e.env??Ee(n.read().workspaceEndpoint);return {productName:e.productName,productVersion:e.productVersion,defaults:e.defaults,config:n,auth:r,gql:t,output:s,logger:i,env:o}}var y=class extends Error{exitCode;hint;constructor(n,r){super(n),this.name="CliUserError",this.exitCode=r?.exitCode??1,this.hint=r?.hint;}},x=class extends y{constructor(n,r){super(n,{exitCode:2,hint:r?.hint??"Run `<product> auth login` to authenticate."}),this.name="CliAuthError";}},w=class extends Error{cause;constructor(n,r){super(n),this.name="CliInternalError",this.cause=r;}};var T=class extends w{constructor(n,r){super(`Module '${n}' declares dependency on '${r}', but '${r}' is not in the module list.`),this.name="MissingDependencyError";}},E=class extends w{constructor(n){super(`Circular dependency detected among modules: ${n.join(" -> ")}`),this.name="CircularDependencyError";}};function j(e){let n=new Map;for(let o of e){if(n.has(o.id))throw new w(`Duplicate module id: '${o.id}'`);n.set(o.id,o);}for(let o of e)for(let u of o.dependsOn??[])if(!n.has(u))throw new T(o.id,u);let r=[],t=new Set,s=new Set;function i(o,u){if(!s.has(o.id)){if(t.has(o.id))throw new E([...u,o.id]);t.add(o.id);for(let l of o.dependsOn??[]){let m=n.get(l);m&&i(m,[...u,o.id]);}t.delete(o.id),s.add(o.id),r.push(o);}}for(let o of e)i(o,[]);return r}function Se(e,n,r){let t=new commander.Command;t.name(r.name).description(r.description??"").version(r.version,"-v, --version").option("-f, --format <format>","Output format (json, table, yaml)").option("--verbose","Enable verbose logging").option("--no-color","Disable colored output"),t.hook("preAction",(o,u)=>{let l=t.opts().format;if(typeof l!="string")return;u.options.some(h=>h.attributeName()==="format")&&u.getOptionValue("format")===void 0&&u.setOptionValue("format",l);});let s=j(n);for(let o of s)o.register(t,e);r.helpExamples?.length&&t.addHelpText("after",`
29
+ `)}function J(e){if(typeof e!="object"||e===null){console.log(String(e));return}console.log(L(e,0));}function he(e){console.log(`\u2713 ${e}`);}function Y(e){console.error(`\u2717 ${e}`);}function we(e){console.warn(`! ${e}`);}function ye(e){console.log(`\u2139 ${e}`);}function Ce(e){if(!e)return "-";try{return new Date(e).toLocaleString()}catch{return e}}function xe(e){if(!e)return "-";switch(e.toUpperCase()){case "ACTIVE":case "RUNNING":case "HEALTHY":return `\u2713 ${e}`;case "INACTIVE":case "STOPPED":case "PENDING":return `\u25CB ${e}`;case "ERROR":return `\u2717 ${e}`;case "ARCHIVED":return `\u2192 ${e}`;case "STARTING":return `\u25B6 ${e}`;case "TERMINATED":return `\u25A0 ${e}`;default:return e}}function be(e,n){return e?e.length<=n?e:e.substring(0,n-3)+"...":"-"}function ve(e,n,r){switch(B(e)){case "json":D(n);break;case "yaml":J(n);break;case "table":r?H(r.headers,r.rows):D(n);break}}async function Te(e,n){return n?true:q()?new Promise(r=>{process.stdout.write(`${e} [y/N] `),process.stdin.setEncoding("utf8"),process.stdin.once("data",t=>{let s=t.trim().toLowerCase();r(s==="y"||s==="yes");}),process.stdin.resume();}):(Y(`${e} Use --force to skip confirmation.`),false)}var _={isInteractive:q,getFormat:B,formatAndOutput:ve,printJson:D,printTable:H,printYaml:J,printSuccess:he,printError:Y,printWarning:we,printInfo:ye,formatDate:Ce,formatStatus:xe,truncate:be,confirm:Te};function N(e={}){let{verbose:n=false,quiet:r=false}=e;return {debug(t,...s){n&&console.error(`[debug] ${t}`,...s);},info(t,...s){r||console.error(`[info] ${t}`,...s);},warn(t,...s){console.error(`[warn] ${t}`,...s);},error(t,...s){console.error(`[error] ${t}`,...s);}}}function Ee(e){return e.includes("localhost")||e.includes("127.0.0.1")?"local":e.includes("alpha")||e.includes("staging")?"staging":"prod"}function Ie(e){return !!e&&typeof e.debug=="function"&&typeof e.info=="function"}function Ae(e){let n=O(e.defaults),r=A(n.dir()),t=R(n,r),s=e.output??_,i=Ie(e.logger)?e.logger:N(e.logger),o=e.env??Ee(n.read().workspaceEndpoint);return {productName:e.productName,productVersion:e.productVersion,defaults:e.defaults,config:n,auth:r,gql:t,output:s,logger:i,env:o}}var y=class extends Error{exitCode;hint;constructor(n,r){super(n),this.name="CliUserError",this.exitCode=r?.exitCode??1,this.hint=r?.hint;}},x=class extends y{constructor(n,r){super(n,{exitCode:2,hint:r?.hint??"Run `<product> auth login` to authenticate."}),this.name="CliAuthError";}},h=class extends Error{cause;constructor(n,r){super(n),this.name="CliInternalError",this.cause=r;}};var T=class extends h{constructor(n,r){super(`Module '${n}' declares dependency on '${r}', but '${r}' is not in the module list.`),this.name="MissingDependencyError";}},E=class extends h{constructor(n){super(`Circular dependency detected among modules: ${n.join(" -> ")}`),this.name="CircularDependencyError";}};function j(e){let n=new Map;for(let o of e){if(n.has(o.id))throw new h(`Duplicate module id: '${o.id}'`);n.set(o.id,o);}for(let o of e)for(let u of o.dependsOn??[])if(!n.has(u))throw new T(o.id,u);let r=[],t=new Set,s=new Set;function i(o,u){if(!s.has(o.id)){if(t.has(o.id))throw new E([...u,o.id]);t.add(o.id);for(let l of o.dependsOn??[]){let m=n.get(l);m&&i(m,[...u,o.id]);}t.delete(o.id),s.add(o.id),r.push(o);}}for(let o of e)i(o,[]);return r}function Se(e,n,r){let t=new commander.Command;t.name(r.name).description(r.description??"").version(r.version,"-v, --version").option("-f, --format <format>","Output format (json, table, yaml)").option("--verbose","Enable verbose logging").option("--no-color","Disable colored output"),t.hook("preAction",(o,u)=>{let l=t.opts().format;if(typeof l!="string")return;u.options.some(w=>w.attributeName()==="format")&&u.getOptionValue("format")===void 0&&u.setOptionValue("format",l);});let s=j(n);for(let o of s)o.register(t,e);r.helpExamples?.length&&t.addHelpText("after",`
30
30
  Examples:
31
31
  `+r.helpExamples.map(o=>" "+o).join(`
32
- `)),t.on("command:*",()=>{e.output.printError(`Invalid command: ${t.args.join(" ")}`),e.output.printInfo(`Run \`${r.name} --help\` for available commands.`),process.exit(1);});async function i(o=process.argv){try{await t.parseAsync(o),o.length<=2&&t.outputHelp();}catch(u){$e(e,u);}}return {program:t,run:i}}function $e(e,n){if(n instanceof x&&(e.output.printError(n.message),n.hint&&e.output.printInfo(n.hint),process.exit(n.exitCode)),n instanceof y&&(e.output.printError(n.message),n.hint&&e.output.printInfo(n.hint),process.exit(n.exitCode)),n instanceof w&&(e.output.printError(`Internal error: ${n.message}`),n.cause&&e.logger.debug("caused by:",n.cause),process.exit(70)),n&&typeof n=="object"&&"code"in n&&"exitCode"in n){let t=n.exitCode;process.exit(typeof t=="number"?t:0);}let r=n instanceof Error?n.message:String(n);e.output.printError(r),process.exit(1);}exports.CircularDependencyError=E;exports.CliAuthError=x;exports.CliInternalError=w;exports.CliUserError=y;exports.KNOWN_CONFIG_KEYS=ae;exports.MissingDependencyError=T;exports.buildContext=Ae;exports.clientCredentialsFlow=S;exports.createAuthStore=A;exports.createConfigStore=O;exports.createGqlClients=R;exports.createLogger=N;exports.createProgram=Se;exports.defaultOutputAdapter=_;exports.extractGqlErrorMessage=V;exports.fetchWorkspaces=le;exports.issueWorkspaceToken=$;exports.openBrowser=de;exports.pollForToken=ue;exports.sortModules=j;exports.startDeviceCodeFlow=ce;
32
+ `)),t.on("command:*",()=>{e.output.printError(`Invalid command: ${t.args.join(" ")}`),e.output.printInfo(`Run \`${r.name} --help\` for available commands.`),process.exit(1);});async function i(o=process.argv){try{await t.parseAsync(o),o.length<=2&&t.outputHelp();}catch(u){$e(e,u);}}return {program:t,run:i}}function $e(e,n){if(n instanceof x&&(e.output.printError(n.message),n.hint&&e.output.printInfo(n.hint),process.exit(n.exitCode)),n instanceof y&&(e.output.printError(n.message),n.hint&&e.output.printInfo(n.hint),process.exit(n.exitCode)),n instanceof h&&(e.output.printError(`Internal error: ${n.message}`),n.cause&&e.logger.debug("caused by:",n.cause),process.exit(70)),n&&typeof n=="object"&&"code"in n&&"exitCode"in n){let t=n.exitCode;process.exit(typeof t=="number"?t:0);}let r=n instanceof Error?n.message:String(n);e.output.printError(r),process.exit(1);}exports.CircularDependencyError=E;exports.CliAuthError=x;exports.CliInternalError=h;exports.CliUserError=y;exports.KNOWN_CONFIG_KEYS=ae;exports.MissingDependencyError=T;exports.buildContext=Ae;exports.clientCredentialsFlow=S;exports.createAuthStore=A;exports.createConfigStore=O;exports.createGqlClients=R;exports.createLogger=N;exports.createProgram=Se;exports.defaultOutputAdapter=_;exports.extractGqlErrorMessage=V;exports.fetchWorkspaces=le;exports.issueWorkspaceToken=$;exports.openBrowser=de;exports.pollForToken=ue;exports.sortModules=j;exports.startDeviceCodeFlow=ce;
@@ -1 +1 @@
1
- export{s as CircularDependencyError,p as CliAuthError,q as CliInternalError,o as CliUserError,b as KNOWN_CONFIG_KEYS,r as MissingDependencyError,n as buildContext,f as clientCredentialsFlow,a as createAuthStore,c as createConfigStore,k as createGqlClients,m as createLogger,u as createProgram,l as defaultOutputAdapter,j as extractGqlErrorMessage,h as fetchWorkspaces,g as issueWorkspaceToken,i as openBrowser,e as pollForToken,t as sortModules,d as startDeviceCodeFlow}from'../chunk-UAFYTYK6.js';
1
+ export{s as CircularDependencyError,p as CliAuthError,q as CliInternalError,o as CliUserError,b as KNOWN_CONFIG_KEYS,r as MissingDependencyError,n as buildContext,f as clientCredentialsFlow,a as createAuthStore,c as createConfigStore,k as createGqlClients,m as createLogger,u as createProgram,l as defaultOutputAdapter,j as extractGqlErrorMessage,h as fetchWorkspaces,g as issueWorkspaceToken,i as openBrowser,e as pollForToken,t as sortModules,d as startDeviceCodeFlow}from'../chunk-YIY5IDXQ.js';
package/dist/index.cjs CHANGED
@@ -1,4 +1,4 @@
1
- 'use strict';var fs=require('fs'),path=require('path'),os=require('os'),graphqlRequest=require('graphql-request'),C=require('cross-fetch'),commander=require('commander');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var C__default=/*#__PURE__*/_interopDefault(C);var W=300*1e3;function A(e){let n=path.join(e,"auth.json");function r(){fs.existsSync(e)||fs.mkdirSync(e,{recursive:true,mode:448});}function t(){try{if(!fs.existsSync(n))return null;let a=fs.readFileSync(n,"utf8");return JSON.parse(a)}catch{return null}}function s(a){r(),fs.writeFileSync(n,JSON.stringify(a,null,2),{encoding:"utf8",mode:384});try{fs.chmodSync(n,384);}catch{}}function i(){try{fs.existsSync(n)&&fs.unlinkSync(n);}catch{}}function o(){let a=t();return a?.expiresAt?Date.now()>=a.expiresAt:false}function u(){let a=t();return a?.expiresAt?Date.now()+W>=a.expiresAt:false}function l(){let a=t();return a?.workspaceTokenExpiresAt?Date.now()>=a.workspaceTokenExpiresAt:false}function m(){let a=t();return a?.workspaceTokenExpiresAt?Date.now()+W>=a.workspaceTokenExpiresAt:false}function h(){return t()?.accessToken?!o():false}return {read:t,write:s,clear:i,isTokenExpired:o,isTokenExpiringSoon:u,isWorkspaceTokenExpired:l,isWorkspaceTokenExpiringSoon:m,isAuthenticated:h}}var ae=["workspaceEndpoint","globalEndpoint","oidcIssuer","clientId","defaultFormat","verbose","authServiceEndpoint","productOrigin"];function O(e){let n=path.join(os.homedir(),".config",e.configDirName),r=path.join(n,"config.json"),t={workspaceEndpoint:e.workspaceEndpointDefault,globalEndpoint:e.globalEndpointDefault};function s(){fs.existsSync(n)||fs.mkdirSync(n,{recursive:true,mode:448});}function i(c){if(e.envPrefix){let d=process.env[`${e.envPrefix}_${c}`];if(d)return d}let p=process.env[c];return p&&p.length>0?p:void 0}function o(c){if(!e.envPrefix)return;let p=process.env[`${e.envPrefix}_${c}`];return p&&p.length>0?p:void 0}function u(){let c={};try{fs.existsSync(r)&&(c=JSON.parse(fs.readFileSync(r,"utf8")));}catch{}return {...t,...c,workspaceEndpoint:i("WORKSPACE_ENDPOINT")??c.workspaceEndpoint??t.workspaceEndpoint,globalEndpoint:i("GLOBAL_ENDPOINT")??c.globalEndpoint??t.globalEndpoint,oidcIssuer:i("OIDC_ISSUER")??c.oidcIssuer,clientId:i("CLIENT_ID")??c.clientId,productOrigin:o("ORIGIN")??c.productOrigin}}function l(c){s(),fs.writeFileSync(r,JSON.stringify(c,null,2),{encoding:"utf8"});try{fs.chmodSync(r,384);}catch{}}function m(c){return u()[c]}function h(c,p){let d=u();d[c]=p,l(d);}function a(){let c=u(),p=c.clientId||e.oidcClientId,d=c.oidcIssuer;if(!d){let f=c.globalEndpoint;f.includes("localhost")||f.includes("127.0.0.1")?d=f.replace(/\/graphql$/,"").replace(/\/global\/graphql$/,"/global"):d=e.oidcIssuerProd??"https://graphql.burdenoff.com/global";}return {oidcIssuer:d,clientId:p}}function g(){let c=u();if(c.productOrigin)return c.productOrigin;if(e.productOrigins)try{let p=new URL(c.workspaceEndpoint).hostname.toLowerCase();return e.productOrigins[p]}catch{return}}return {read:u,write:l,get:m,set:h,path:()=>r,dir:()=>n,resolveOIDC:a,resolveProductOrigin:g}}async function ce(e){let n=`${e.oidcIssuer}/oidc/device/code`,r=new URLSearchParams({client_id:e.clientId,scope:"openid profile email offline_access"}),t=await C__default.default(n,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:r.toString()});if(!t.ok){let i=await t.text().catch(()=>"Unknown error");throw new Error(`Device code request failed (${t.status}): ${i}`)}let s=await t.json();return {deviceCode:s.device_code,userCode:s.user_code,verificationUri:s.verification_uri,verificationUriComplete:s.verification_uri_complete??null,expiresIn:s.expires_in,interval:s.interval??5}}async function ue(e,n,r){let t=`${r.oidcIssuer}/oauth/device/token`,s=n;for(;;){await new Promise(l=>setTimeout(l,s*1e3));let i=await C__default.default(t,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:e,client_id:r.clientId}).toString()}),o=await i.json();if(i.ok&&o.access_token)return {accessToken:o.access_token,refreshToken:o.refresh_token??"",expiresIn:o.expires_in??3600};let u=o.error;switch(u){case "authorization_pending":continue;case "slow_down":s+=5;continue;case "expired_token":throw new Error("Device code has expired. Please try again.");case "access_denied":throw new Error("Authorization was denied by the user.");default:throw new Error(`Device code polling failed: ${o.error_description??u??"Unknown error"}`)}}}async function S(e,n,r,t){let i=await C__default.default(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({query:`
1
+ 'use strict';var fs=require('fs'),path=require('path'),os=require('os'),graphqlRequest=require('graphql-request'),C=require('cross-fetch'),commander=require('commander');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var C__default=/*#__PURE__*/_interopDefault(C);var G=300*1e3;function A(e){let n=path.join(e,"auth.json");function r(){fs.existsSync(e)||fs.mkdirSync(e,{recursive:true,mode:448});}function t(){try{if(!fs.existsSync(n))return null;let a=fs.readFileSync(n,"utf8");return JSON.parse(a)}catch{return null}}function s(a){r(),fs.writeFileSync(n,JSON.stringify(a,null,2),{encoding:"utf8",mode:384});try{fs.chmodSync(n,384);}catch{}}function i(){try{fs.existsSync(n)&&fs.unlinkSync(n);}catch{}}function o(){let a=t();return a?.expiresAt?Date.now()>=a.expiresAt:false}function u(){let a=t();return a?.expiresAt?Date.now()+G>=a.expiresAt:false}function l(){let a=t();return a?.workspaceTokenExpiresAt?Date.now()>=a.workspaceTokenExpiresAt:false}function m(){let a=t();return a?.workspaceTokenExpiresAt?Date.now()+G>=a.workspaceTokenExpiresAt:false}function w(){return t()?.accessToken?!o():false}return {read:t,write:s,clear:i,isTokenExpired:o,isTokenExpiringSoon:u,isWorkspaceTokenExpired:l,isWorkspaceTokenExpiringSoon:m,isAuthenticated:w}}var ae=["workspaceEndpoint","globalEndpoint","oidcIssuer","clientId","defaultFormat","verbose","authServiceEndpoint","productOrigin"];function O(e){let n=path.join(os.homedir(),".config",e.configDirName),r=path.join(n,"config.json"),t={workspaceEndpoint:e.workspaceEndpointDefault,globalEndpoint:e.globalEndpointDefault};function s(){fs.existsSync(n)||fs.mkdirSync(n,{recursive:true,mode:448});}function i(c){if(e.envPrefix){let d=process.env[`${e.envPrefix}_${c}`];if(d)return d}let p=process.env[c];return p&&p.length>0?p:void 0}function o(c){if(!e.envPrefix)return;let p=process.env[`${e.envPrefix}_${c}`];return p&&p.length>0?p:void 0}function u(){let c={};try{fs.existsSync(r)&&(c=JSON.parse(fs.readFileSync(r,"utf8")));}catch{}return {...t,...c,workspaceEndpoint:i("WORKSPACE_ENDPOINT")??c.workspaceEndpoint??t.workspaceEndpoint,globalEndpoint:i("GLOBAL_ENDPOINT")??c.globalEndpoint??t.globalEndpoint,oidcIssuer:i("OIDC_ISSUER")??c.oidcIssuer,clientId:i("CLIENT_ID")??c.clientId,productOrigin:o("ORIGIN")??c.productOrigin}}function l(c){s(),fs.writeFileSync(r,JSON.stringify(c,null,2),{encoding:"utf8"});try{fs.chmodSync(r,384);}catch{}}function m(c){return u()[c]}function w(c,p){let d=u();d[c]=p,l(d);}function a(){let c=u(),p=c.clientId||e.oidcClientId,d=c.oidcIssuer;if(!d){let f=c.globalEndpoint;f.includes("localhost")||f.includes("127.0.0.1")?d=f.replace(/\/graphql$/,"").replace(/\/global\/graphql$/,"/global"):d=e.oidcIssuerProd??"https://graphql.burdenoff.com/global";}return {oidcIssuer:d,clientId:p}}function g(){let c=u();if(c.productOrigin)return c.productOrigin;if(e.productOrigins)try{let p=new URL(c.workspaceEndpoint).hostname.toLowerCase();return e.productOrigins[p]}catch{return}}return {read:u,write:l,get:m,set:w,path:()=>r,dir:()=>n,resolveOIDC:a,resolveProductOrigin:g}}async function ce(e){let n=`${e.oidcIssuer}/oidc/device/code`,r=new URLSearchParams({client_id:e.clientId,scope:"openid profile email offline_access"}),t=await C__default.default(n,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:r.toString()});if(!t.ok){let i=await t.text().catch(()=>"Unknown error");throw new Error(`Device code request failed (${t.status}): ${i}`)}let s=await t.json();return {deviceCode:s.device_code,userCode:s.user_code,verificationUri:s.verification_uri,verificationUriComplete:s.verification_uri_complete??null,expiresIn:s.expires_in,interval:s.interval??5}}async function ue(e,n,r){let t=`${r.oidcIssuer}/oauth/device/token`,s=n;for(;;){await new Promise(l=>setTimeout(l,s*1e3));let i=await C__default.default(t,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:e,client_id:r.clientId}).toString()}),o=await i.json();if(i.ok&&o.access_token)return {accessToken:o.access_token,refreshToken:o.refresh_token??"",expiresIn:o.expires_in??3600};let u=o.error;switch(u){case "authorization_pending":continue;case "slow_down":s+=5;continue;case "expired_token":throw new Error("Device code has expired. Please try again.");case "access_denied":throw new Error("Authorization was denied by the user.");default:throw new Error(`Device code polling failed: ${o.error_description??u??"Unknown error"}`)}}}async function S(e,n,r,t){let i=await C__default.default(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({query:`
2
2
  mutation AuthenticateApp($input: AuthenticateAppInput!) {
3
3
  authenticateApp(input: $input) {
4
4
  accessToken tokenType expiresIn scopes
@@ -17,7 +17,7 @@
17
17
  items { id name slug tenantId organizationId }
18
18
  }
19
19
  }
20
- `,variables:{limit:50}})});if(!t.ok){let i=await t.text().catch(()=>"Unknown error");throw new Error(`Failed to fetch workspaces (${t.status}): ${i}`)}let s=await t.json();if(s.errors?.length)throw new Error(`Failed to fetch workspaces: ${s.errors[0]?.message??"unknown error"}`);return s.data?.myWorkspaces?.items??[]}function pe(e){try{let n=new URL(e);return n.protocol==="http:"||n.protocol==="https:"}catch{return false}}async function de(e){try{if(!pe(e))return !1;let{execFile:n}=await import('child_process'),r=process.platform,t,s;return r==="darwin"?(t="open",s=[e]):r==="win32"?(t="cmd",s=["/c","start","",e]):(t="xdg-open",s=[e]),new Promise(i=>{n(t,s,o=>{i(!o);});})}catch{return false}}var ge=3e4,U=3,fe=1e3;function me(e){return new Promise(n=>setTimeout(n,e))}function ke(e){if(e instanceof TypeError)return true;if(e&&typeof e=="object"&&"response"in e){let n=e.response;if(n&&typeof n.status=="number"&&n.status>=500)return true}return false}function V(e){if(e&&typeof e=="object"&&"response"in e){let n=e,r=n.response?.errors?.[0],t=r?.extensions?.originalError?.message;if(t)return t;if(r?.message)return r.message;if(n.message)return n.message}return e instanceof Error?e.message:String(e)}function v(e){let n={};return e?.accessToken&&(n.Authorization=`Bearer ${e.accessToken}`),e?.organizationId&&(n["x-org-id"]=e.organizationId),n}function z(e,n){let r=v(e);return n&&(r.Origin=n),e?.workspaceToken&&(r["X-Workspace-Authorization"]=`Bearer ${e.workspaceToken}`),e?.organizationId&&(r["x-org-id"]=e.organizationId),r}async function P(e,n,r){let t;for(let s=0;s<U;s++)try{let i=new AbortController,o=setTimeout(()=>i.abort(),ge);try{return await e.request({document:n,variables:r,signal:i.signal})}finally{clearTimeout(o);}}catch(i){if(t=i,i&&typeof i=="object"&&"response"in i){let o=i.response;if(o&&typeof o.status=="number"&&o.status>=400&&o.status<500)break}if(ke(i)&&s<U-1){let o=fe*Math.pow(2,s);await me(o);continue}break}throw new Error(V(t))}function R(e,n){let r=null,t=null;function s(){let a=e.read(),g=n.read();return r=new graphqlRequest.GraphQLClient(a.workspaceEndpoint),r.setHeaders(z(g,e.resolveProductOrigin())),t=new graphqlRequest.GraphQLClient(a.globalEndpoint),t.setHeaders(v(g)),{workspace:r,global:t}}async function i(){let a=n.read();if(!a)return;if(a.authMethod==="client_credentials"&&a.clientId&&a.clientSecret){let d=e.read();try{let f=await S(d.globalEndpoint,a.clientId,a.clientSecret);n.write({...a,accessToken:f.accessToken,expiresAt:Date.now()+f.expiresIn*1e3}),r=null,t=null;}catch{}return}if(!a.refreshToken)return;let g=e.read(),c=new graphqlRequest.GraphQLClient(g.globalEndpoint);c.setHeaders({Authorization:`Bearer ${a.accessToken}`});let p=`
20
+ `,variables:{limit:50}})});if(!t.ok){let i=await t.text().catch(()=>"Unknown error");throw new Error(`Failed to fetch workspaces (${t.status}): ${i}`)}let s=await t.json();if(s.errors?.length)throw new Error(`Failed to fetch workspaces: ${s.errors[0]?.message??"unknown error"}`);return s.data?.myWorkspaces?.items??[]}function pe(e){try{let n=new URL(e);return n.protocol==="http:"||n.protocol==="https:"}catch{return false}}async function de(e){try{if(!pe(e))return !1;let{execFile:n}=await import('child_process'),r=process.platform,t,s;return r==="darwin"?(t="open",s=[e]):r==="win32"?(t="cmd",s=["/c","start","",e]):(t="xdg-open",s=[e]),new Promise(i=>{n(t,s,o=>{i(!o);});})}catch{return false}}var ge=3e4,U=3,fe=1e3;function me(e){return new Promise(n=>setTimeout(n,e))}function ke(e){if(e instanceof TypeError)return true;if(e&&typeof e=="object"&&"response"in e){let n=e.response;if(n&&typeof n.status=="number"&&n.status>=500)return true}return false}function V(e){if(e&&typeof e=="object"&&"response"in e){let r=e.response?.errors?.[0],t=r?.extensions?.originalError?.message;return t||(r?.message?r.message:"GraphQL request failed")}return e instanceof Error?e.message:String(e)}function v(e){let n={};return e?.accessToken&&(n.Authorization=`Bearer ${e.accessToken}`),e?.organizationId&&(n["x-org-id"]=e.organizationId),n}function z(e,n){let r=v(e);return n&&(r.Origin=n),e?.workspaceToken&&(r["X-Workspace-Authorization"]=`Bearer ${e.workspaceToken}`),e?.organizationId&&(r["x-org-id"]=e.organizationId),r}async function P(e,n,r){let t;for(let s=0;s<U;s++)try{let i=new AbortController,o=setTimeout(()=>i.abort(),ge);try{return await e.request({document:n,variables:r,signal:i.signal})}finally{clearTimeout(o);}}catch(i){if(t=i,i&&typeof i=="object"&&"response"in i){let o=i.response;if(o&&typeof o.status=="number"&&o.status>=400&&o.status<500)break}if(ke(i)&&s<U-1){let o=fe*Math.pow(2,s);await me(o);continue}break}throw new Error(V(t))}function R(e,n){let r=null,t=null;function s(){let a=e.read(),g=n.read();return r=new graphqlRequest.GraphQLClient(a.workspaceEndpoint),r.setHeaders(z(g,e.resolveProductOrigin())),t=new graphqlRequest.GraphQLClient(a.globalEndpoint),t.setHeaders(v(g)),{workspace:r,global:t}}async function i(){let a=n.read();if(!a)return;if(a.authMethod==="client_credentials"&&a.clientId&&a.clientSecret){let d=e.read();try{let f=await S(d.globalEndpoint,a.clientId,a.clientSecret);n.write({...a,accessToken:f.accessToken,expiresAt:Date.now()+f.expiresIn*1e3}),r=null,t=null;}catch{}return}if(!a.refreshToken)return;let g=e.read(),c=new graphqlRequest.GraphQLClient(g.globalEndpoint);c.setHeaders({Authorization:`Bearer ${a.accessToken}`});let p=`
21
21
  mutation RefreshToken($token: String!) {
22
22
  refreshToken(token: $token) {
23
23
  accessToken
@@ -26,7 +26,7 @@
26
26
  }
27
27
  }
28
28
  `;try{let f=(await c.request(p,{token:a.refreshToken})).refreshToken;n.write({...a,accessToken:f.accessToken,refreshToken:f.refreshToken,expiresAt:Date.now()+f.expiresIn*1e3}),r=null,t=null;}catch{}}async function o(){let a=n.read();if(!a?.accessToken||!a.workspaceId||!a.organizationId)return;let g=e.read();try{let c=await $(g.workspaceEndpoint,a.accessToken,a.workspaceId,a.organizationId);n.write({...a,workspaceToken:c.token,workspaceTokenExpiresAt:new Date(c.expiresAt).getTime()}),r=null;}catch{}}async function u(){n.isTokenExpiringSoon()&&await i(),n.read()?.workspaceToken&&n.isWorkspaceTokenExpiringSoon()&&await o();}return {workspace:{async request(a,g){await u();let{workspace:c}=r?{workspace:r}:s();return c.setHeaders(z(n.read(),e.resolveProductOrigin())),P(c,a,g)}},global:{async request(a,g){let{global:c}=t?{global:t}:s();return c.setHeaders(v(n.read())),P(c,a,g)}},workspaceAuthOnly:{async request(a,g){let c=e.read(),p=n.read(),d=new graphqlRequest.GraphQLClient(c.workspaceEndpoint),f=v(p),F=e.resolveProductOrigin();return F&&(f.Origin=F),d.setHeaders(f),P(d,a,g)}},reset(){r=null,t=null;}}}function q(){return !!(process.stdout.isTTY&&process.stdin.isTTY)}function B(e){if(e.format){let n=e.format.toLowerCase();if(n==="json"||n==="table"||n==="yaml")return n}return q()?"table":"json"}function D(e){console.log(JSON.stringify(e,null,2));}function H(e,n){if(e.length===0)return;let r=e.map((i,o)=>{let u=i.length;for(let l of n){let m=l[o]??"";m.length>u&&(u=m.length);}return Math.min(u,50)}),t=r.map(i=>"-".repeat(i+2)).join("+"),s=i=>i.map((o,u)=>` ${(o??"").padEnd(r[u]??0)} `).join("|");console.log(s(e)),console.log(t);for(let i of n)console.log(s(i));}function L(e,n){let r=" ".repeat(n),t=[];for(let[s,i]of Object.entries(e))if(i==null)t.push(`${r}${s}: null`);else if(Array.isArray(i)){t.push(`${r}${s}:`);for(let o of i)typeof o=="object"&&o!==null?(t.push(`${r} -`),t.push(L(o,n+2))):t.push(`${r} - ${String(o)}`);}else typeof i=="object"?(t.push(`${r}${s}:`),t.push(L(i,n+1))):t.push(`${r}${s}: ${String(i)}`);return t.join(`
29
- `)}function J(e){if(typeof e!="object"||e===null){console.log(String(e));return}console.log(L(e,0));}function we(e){console.log(`\u2713 ${e}`);}function Y(e){console.error(`\u2717 ${e}`);}function he(e){console.warn(`! ${e}`);}function ye(e){console.log(`\u2139 ${e}`);}function Ce(e){if(!e)return "-";try{return new Date(e).toLocaleString()}catch{return e}}function xe(e){if(!e)return "-";switch(e.toUpperCase()){case "ACTIVE":case "RUNNING":case "HEALTHY":return `\u2713 ${e}`;case "INACTIVE":case "STOPPED":case "PENDING":return `\u25CB ${e}`;case "ERROR":return `\u2717 ${e}`;case "ARCHIVED":return `\u2192 ${e}`;case "STARTING":return `\u25B6 ${e}`;case "TERMINATED":return `\u25A0 ${e}`;default:return e}}function be(e,n){return e?e.length<=n?e:e.substring(0,n-3)+"...":"-"}function ve(e,n,r){switch(B(e)){case "json":D(n);break;case "yaml":J(n);break;case "table":r?H(r.headers,r.rows):D(n);break}}async function Te(e,n){return n?true:q()?new Promise(r=>{process.stdout.write(`${e} [y/N] `),process.stdin.setEncoding("utf8"),process.stdin.once("data",t=>{let s=t.trim().toLowerCase();r(s==="y"||s==="yes");}),process.stdin.resume();}):(Y(`${e} Use --force to skip confirmation.`),false)}var _={isInteractive:q,getFormat:B,formatAndOutput:ve,printJson:D,printTable:H,printYaml:J,printSuccess:we,printError:Y,printWarning:he,printInfo:ye,formatDate:Ce,formatStatus:xe,truncate:be,confirm:Te};function N(e={}){let{verbose:n=false,quiet:r=false}=e;return {debug(t,...s){n&&console.error(`[debug] ${t}`,...s);},info(t,...s){r||console.error(`[info] ${t}`,...s);},warn(t,...s){console.error(`[warn] ${t}`,...s);},error(t,...s){console.error(`[error] ${t}`,...s);}}}function Ee(e){return e.includes("localhost")||e.includes("127.0.0.1")?"local":e.includes("alpha")||e.includes("staging")?"staging":"prod"}function Ie(e){return !!e&&typeof e.debug=="function"&&typeof e.info=="function"}function Ae(e){let n=O(e.defaults),r=A(n.dir()),t=R(n,r),s=e.output??_,i=Ie(e.logger)?e.logger:N(e.logger),o=e.env??Ee(n.read().workspaceEndpoint);return {productName:e.productName,productVersion:e.productVersion,defaults:e.defaults,config:n,auth:r,gql:t,output:s,logger:i,env:o}}var y=class extends Error{exitCode;hint;constructor(n,r){super(n),this.name="CliUserError",this.exitCode=r?.exitCode??1,this.hint=r?.hint;}},x=class extends y{constructor(n,r){super(n,{exitCode:2,hint:r?.hint??"Run `<product> auth login` to authenticate."}),this.name="CliAuthError";}},w=class extends Error{cause;constructor(n,r){super(n),this.name="CliInternalError",this.cause=r;}};var T=class extends w{constructor(n,r){super(`Module '${n}' declares dependency on '${r}', but '${r}' is not in the module list.`),this.name="MissingDependencyError";}},E=class extends w{constructor(n){super(`Circular dependency detected among modules: ${n.join(" -> ")}`),this.name="CircularDependencyError";}};function j(e){let n=new Map;for(let o of e){if(n.has(o.id))throw new w(`Duplicate module id: '${o.id}'`);n.set(o.id,o);}for(let o of e)for(let u of o.dependsOn??[])if(!n.has(u))throw new T(o.id,u);let r=[],t=new Set,s=new Set;function i(o,u){if(!s.has(o.id)){if(t.has(o.id))throw new E([...u,o.id]);t.add(o.id);for(let l of o.dependsOn??[]){let m=n.get(l);m&&i(m,[...u,o.id]);}t.delete(o.id),s.add(o.id),r.push(o);}}for(let o of e)i(o,[]);return r}function Se(e,n,r){let t=new commander.Command;t.name(r.name).description(r.description??"").version(r.version,"-v, --version").option("-f, --format <format>","Output format (json, table, yaml)").option("--verbose","Enable verbose logging").option("--no-color","Disable colored output"),t.hook("preAction",(o,u)=>{let l=t.opts().format;if(typeof l!="string")return;u.options.some(h=>h.attributeName()==="format")&&u.getOptionValue("format")===void 0&&u.setOptionValue("format",l);});let s=j(n);for(let o of s)o.register(t,e);r.helpExamples?.length&&t.addHelpText("after",`
29
+ `)}function J(e){if(typeof e!="object"||e===null){console.log(String(e));return}console.log(L(e,0));}function he(e){console.log(`\u2713 ${e}`);}function Y(e){console.error(`\u2717 ${e}`);}function we(e){console.warn(`! ${e}`);}function ye(e){console.log(`\u2139 ${e}`);}function Ce(e){if(!e)return "-";try{return new Date(e).toLocaleString()}catch{return e}}function xe(e){if(!e)return "-";switch(e.toUpperCase()){case "ACTIVE":case "RUNNING":case "HEALTHY":return `\u2713 ${e}`;case "INACTIVE":case "STOPPED":case "PENDING":return `\u25CB ${e}`;case "ERROR":return `\u2717 ${e}`;case "ARCHIVED":return `\u2192 ${e}`;case "STARTING":return `\u25B6 ${e}`;case "TERMINATED":return `\u25A0 ${e}`;default:return e}}function be(e,n){return e?e.length<=n?e:e.substring(0,n-3)+"...":"-"}function ve(e,n,r){switch(B(e)){case "json":D(n);break;case "yaml":J(n);break;case "table":r?H(r.headers,r.rows):D(n);break}}async function Te(e,n){return n?true:q()?new Promise(r=>{process.stdout.write(`${e} [y/N] `),process.stdin.setEncoding("utf8"),process.stdin.once("data",t=>{let s=t.trim().toLowerCase();r(s==="y"||s==="yes");}),process.stdin.resume();}):(Y(`${e} Use --force to skip confirmation.`),false)}var _={isInteractive:q,getFormat:B,formatAndOutput:ve,printJson:D,printTable:H,printYaml:J,printSuccess:he,printError:Y,printWarning:we,printInfo:ye,formatDate:Ce,formatStatus:xe,truncate:be,confirm:Te};function N(e={}){let{verbose:n=false,quiet:r=false}=e;return {debug(t,...s){n&&console.error(`[debug] ${t}`,...s);},info(t,...s){r||console.error(`[info] ${t}`,...s);},warn(t,...s){console.error(`[warn] ${t}`,...s);},error(t,...s){console.error(`[error] ${t}`,...s);}}}function Ee(e){return e.includes("localhost")||e.includes("127.0.0.1")?"local":e.includes("alpha")||e.includes("staging")?"staging":"prod"}function Ie(e){return !!e&&typeof e.debug=="function"&&typeof e.info=="function"}function Ae(e){let n=O(e.defaults),r=A(n.dir()),t=R(n,r),s=e.output??_,i=Ie(e.logger)?e.logger:N(e.logger),o=e.env??Ee(n.read().workspaceEndpoint);return {productName:e.productName,productVersion:e.productVersion,defaults:e.defaults,config:n,auth:r,gql:t,output:s,logger:i,env:o}}var y=class extends Error{exitCode;hint;constructor(n,r){super(n),this.name="CliUserError",this.exitCode=r?.exitCode??1,this.hint=r?.hint;}},x=class extends y{constructor(n,r){super(n,{exitCode:2,hint:r?.hint??"Run `<product> auth login` to authenticate."}),this.name="CliAuthError";}},h=class extends Error{cause;constructor(n,r){super(n),this.name="CliInternalError",this.cause=r;}};var T=class extends h{constructor(n,r){super(`Module '${n}' declares dependency on '${r}', but '${r}' is not in the module list.`),this.name="MissingDependencyError";}},E=class extends h{constructor(n){super(`Circular dependency detected among modules: ${n.join(" -> ")}`),this.name="CircularDependencyError";}};function j(e){let n=new Map;for(let o of e){if(n.has(o.id))throw new h(`Duplicate module id: '${o.id}'`);n.set(o.id,o);}for(let o of e)for(let u of o.dependsOn??[])if(!n.has(u))throw new T(o.id,u);let r=[],t=new Set,s=new Set;function i(o,u){if(!s.has(o.id)){if(t.has(o.id))throw new E([...u,o.id]);t.add(o.id);for(let l of o.dependsOn??[]){let m=n.get(l);m&&i(m,[...u,o.id]);}t.delete(o.id),s.add(o.id),r.push(o);}}for(let o of e)i(o,[]);return r}function Se(e,n,r){let t=new commander.Command;t.name(r.name).description(r.description??"").version(r.version,"-v, --version").option("-f, --format <format>","Output format (json, table, yaml)").option("--verbose","Enable verbose logging").option("--no-color","Disable colored output"),t.hook("preAction",(o,u)=>{let l=t.opts().format;if(typeof l!="string")return;u.options.some(w=>w.attributeName()==="format")&&u.getOptionValue("format")===void 0&&u.setOptionValue("format",l);});let s=j(n);for(let o of s)o.register(t,e);r.helpExamples?.length&&t.addHelpText("after",`
30
30
  Examples:
31
31
  `+r.helpExamples.map(o=>" "+o).join(`
32
- `)),t.on("command:*",()=>{e.output.printError(`Invalid command: ${t.args.join(" ")}`),e.output.printInfo(`Run \`${r.name} --help\` for available commands.`),process.exit(1);});async function i(o=process.argv){try{await t.parseAsync(o),o.length<=2&&t.outputHelp();}catch(u){$e(e,u);}}return {program:t,run:i}}function $e(e,n){if(n instanceof x&&(e.output.printError(n.message),n.hint&&e.output.printInfo(n.hint),process.exit(n.exitCode)),n instanceof y&&(e.output.printError(n.message),n.hint&&e.output.printInfo(n.hint),process.exit(n.exitCode)),n instanceof w&&(e.output.printError(`Internal error: ${n.message}`),n.cause&&e.logger.debug("caused by:",n.cause),process.exit(70)),n&&typeof n=="object"&&"code"in n&&"exitCode"in n){let t=n.exitCode;process.exit(typeof t=="number"?t:0);}let r=n instanceof Error?n.message:String(n);e.output.printError(r),process.exit(1);}exports.CircularDependencyError=E;exports.CliAuthError=x;exports.CliInternalError=w;exports.CliUserError=y;exports.KNOWN_CONFIG_KEYS=ae;exports.MissingDependencyError=T;exports.buildContext=Ae;exports.clientCredentialsFlow=S;exports.createAuthStore=A;exports.createConfigStore=O;exports.createGqlClients=R;exports.createLogger=N;exports.createProgram=Se;exports.defaultOutputAdapter=_;exports.extractGqlErrorMessage=V;exports.fetchWorkspaces=le;exports.issueWorkspaceToken=$;exports.openBrowser=de;exports.pollForToken=ue;exports.sortModules=j;exports.startDeviceCodeFlow=ce;
32
+ `)),t.on("command:*",()=>{e.output.printError(`Invalid command: ${t.args.join(" ")}`),e.output.printInfo(`Run \`${r.name} --help\` for available commands.`),process.exit(1);});async function i(o=process.argv){try{await t.parseAsync(o),o.length<=2&&t.outputHelp();}catch(u){$e(e,u);}}return {program:t,run:i}}function $e(e,n){if(n instanceof x&&(e.output.printError(n.message),n.hint&&e.output.printInfo(n.hint),process.exit(n.exitCode)),n instanceof y&&(e.output.printError(n.message),n.hint&&e.output.printInfo(n.hint),process.exit(n.exitCode)),n instanceof h&&(e.output.printError(`Internal error: ${n.message}`),n.cause&&e.logger.debug("caused by:",n.cause),process.exit(70)),n&&typeof n=="object"&&"code"in n&&"exitCode"in n){let t=n.exitCode;process.exit(typeof t=="number"?t:0);}let r=n instanceof Error?n.message:String(n);e.output.printError(r),process.exit(1);}exports.CircularDependencyError=E;exports.CliAuthError=x;exports.CliInternalError=h;exports.CliUserError=y;exports.KNOWN_CONFIG_KEYS=ae;exports.MissingDependencyError=T;exports.buildContext=Ae;exports.clientCredentialsFlow=S;exports.createAuthStore=A;exports.createConfigStore=O;exports.createGqlClients=R;exports.createLogger=N;exports.createProgram=Se;exports.defaultOutputAdapter=_;exports.extractGqlErrorMessage=V;exports.fetchWorkspaces=le;exports.issueWorkspaceToken=$;exports.openBrowser=de;exports.pollForToken=ue;exports.sortModules=j;exports.startDeviceCodeFlow=ce;
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- export{s as CircularDependencyError,p as CliAuthError,q as CliInternalError,o as CliUserError,b as KNOWN_CONFIG_KEYS,r as MissingDependencyError,n as buildContext,f as clientCredentialsFlow,a as createAuthStore,c as createConfigStore,k as createGqlClients,m as createLogger,u as createProgram,l as defaultOutputAdapter,j as extractGqlErrorMessage,h as fetchWorkspaces,g as issueWorkspaceToken,i as openBrowser,e as pollForToken,t as sortModules,d as startDeviceCodeFlow}from'./chunk-UAFYTYK6.js';
1
+ export{s as CircularDependencyError,p as CliAuthError,q as CliInternalError,o as CliUserError,b as KNOWN_CONFIG_KEYS,r as MissingDependencyError,n as buildContext,f as clientCredentialsFlow,a as createAuthStore,c as createConfigStore,k as createGqlClients,m as createLogger,u as createProgram,l as defaultOutputAdapter,j as extractGqlErrorMessage,h as fetchWorkspaces,g as issueWorkspaceToken,i as openBrowser,e as pollForToken,t as sortModules,d as startDeviceCodeFlow}from'./chunk-YIY5IDXQ.js';
@@ -1,4 +1,4 @@
1
- import {a,b as b$1,h as h$1,p,g,i,d}from'../../chunk-SQSFZFQZ.js';import {o}from'../../chunk-UAFYTYK6.js';var S=`
1
+ import {a,b as b$1,h as h$1,p,g,i,d}from'../../chunk-W4JZR7RJ.js';import {o}from'../../chunk-YIY5IDXQ.js';var S=`
2
2
  query AdaptercloudGetAdapter($id: ID!) {
3
3
  adaAdapter(id: $id) {
4
4
  id workspaceId name slug description kind status version vendor
@@ -1,4 +1,4 @@
1
- import {a,b as b$1,h as h$1,p,g,i,d}from'../../chunk-SQSFZFQZ.js';import {o}from'../../chunk-UAFYTYK6.js';var v=`
1
+ import {a,b as b$1,h as h$1,p,g,i,d}from'../../chunk-W4JZR7RJ.js';import {o}from'../../chunk-YIY5IDXQ.js';var v=`
2
2
  query ArtListWorks(
3
3
  $medium: ArtMedium
4
4
  $status: ArtWorkStatus
@@ -1,4 +1,4 @@
1
- import {a,b as b$1,h as h$1,p as p$1,g,i,o as o$1}from'../../chunk-SQSFZFQZ.js';import {o}from'../../chunk-UAFYTYK6.js';var C=`
1
+ import {a,b as b$1,h as h$1,p as p$1,g,i,o as o$1}from'../../chunk-W4JZR7RJ.js';import {o}from'../../chunk-YIY5IDXQ.js';var C=`
2
2
  query AssetHandlerGetAsset($id: ID!) {
3
3
  asset(id: $id) {
4
4
  id assetNumber name description category status condition
@@ -1,4 +1,4 @@
1
- import {a,b as b$1,h,p,g,i,d}from'../../chunk-SQSFZFQZ.js';import {o}from'../../chunk-UAFYTYK6.js';var y=`
1
+ import {a,b as b$1,h,p,g,i,d}from'../../chunk-W4JZR7RJ.js';import {o}from'../../chunk-YIY5IDXQ.js';var y=`
2
2
  query AthListTeams(
3
3
  $pagination: PaginationInput
4
4
  $sport: AthSport
@@ -1,4 +1,4 @@
1
- import {Lc,Mc}from'../../chunk-REBBLQFS.js';import {a,s,g,t,e,l,v,f,i,w,C,o,h,u,c,p,n,m,k,B}from'../../chunk-SQSFZFQZ.js';import {q,o as o$1,f as f$1,h as h$1,g as g$1,d,i as i$1,e as e$1}from'../../chunk-UAFYTYK6.js';async function j(s,p){if(s.length===0)throw new o$1("No workspaces to choose from");if(p.preferredId){let g=s.find(f=>f.id===p.preferredId);if(!g)throw new o$1(`Workspace ${p.preferredId} is not one of your workspaces`);return {workspace:g,prompted:false}}let[i]=s;if(s.length===1||!p.interactive)return {workspace:i,prompted:false};let o=await p.ask(`
1
+ import {Lc,Mc}from'../../chunk-REBBLQFS.js';import {a,s,g,t,e,l,v,f,i,w,C,o,h,u,c,p,n,m,k,B}from'../../chunk-W4JZR7RJ.js';import {q,o as o$1,f as f$1,h as h$1,g as g$1,d,i as i$1,e as e$1}from'../../chunk-YIY5IDXQ.js';async function j(s,p){if(s.length===0)throw new o$1("No workspaces to choose from");if(p.preferredId){let g=s.find(f=>f.id===p.preferredId);if(!g)throw new o$1(`Workspace ${p.preferredId} is not one of your workspaces`);return {workspace:g,prompted:false}}let[i]=s;if(s.length===1||!p.interactive)return {workspace:i,prompted:false};let o=await p.ask(`
2
2
  Select workspace [1-${s.length}]: `),c=o===null?-1:parseInt(o.trim(),10)-1;return {workspace:(c>=0&&c<s.length?s[c]:void 0)??i,prompted:true}}async function J(s){let i=(await import('readline')).createInterface({input:process.stdin,output:process.stdout});return new Promise(o=>{let c=false;i.on("close",()=>{c||o(null);}),i.question(s,u=>{c=true,i.close(),o(u);});})}function Q(s$1){let p=s$1.command("auth").description("Authentication commands");p.command("login").description(`Authenticate with ${s().productName}`).option("--client-credentials","Authenticate as an app with client ID and secret").option("--workspace-id <id>","Workspace to bind the session to").action(async i=>{try{i.clientCredentials?await Pe(i.workspaceId):await Ce(i.workspaceId);}catch(o){g(o);}}),p.command("logout").description("Revoke tokens and clear stored auth").action(async()=>{try{if(t()?.accessToken)try{await e(Lc);}catch{l("Server-side logout failed, clearing local tokens");}v(),f(),i("Logged out successfully");}catch(i){g(i);}}),p.command("status").description("Show current auth state").option("-f, --format <format>","Output format (json, table)").action(i=>{let o$1=t(),c=w(),u=!!o$1?.accessToken,g=o$1?.accessToken?C(o$1):false,f=o$1?.expiresAt?o(new Date(o$1.expiresAt).toISOString()):"-",h$1=o$1?.authMethod==="client_credentials"?"Client Credentials":"OAuth2 Device Code",e=o$1?.workspaceTokenExpiresAt?o(new Date(o$1.workspaceTokenExpiresAt).toISOString()):"-";h(i,{authenticated:u,method:h$1,expired:g,expiresAt:f,workspaceId:o$1?.workspaceId??"-",organizationId:o$1?.organizationId??"-",workspaceTokenExpiresAt:e,workspaceEndpoint:c.workspaceEndpoint,globalEndpoint:c.globalEndpoint},{headers:["Key","Value"],rows:[["Authenticated",String(u)],["Method",h$1],["Expired",String(g)],["Expires At",f],["Workspace ID",o$1?.workspaceId??"-"],["Organization ID",o$1?.organizationId??"-"],["Workspace Token Expires",e],["Workspace Endpoint",c.workspaceEndpoint],["Global Endpoint",c.globalEndpoint]]});}),p.command("token").description("Print access token to stdout").option("--workspace","Print workspace token instead").action(i=>{let o=t();if(i.workspace){if(!o?.workspaceToken)throw new o$1(`No workspace token. Set a workspace: ${s().productName} workspace set <id>`);process.stdout.write(o.workspaceToken);return}if(!o?.accessToken)throw new o$1(`Not authenticated. Run: ${s().productName} auth login`);process.stdout.write(o.accessToken);}),p.command("refresh").description("Force token refresh").action(async()=>{try{let i$1=t();if(!i$1?.refreshToken&&i$1?.authMethod!=="client_credentials")throw new o$1(`No refresh token available. Run: ${s().productName} auth login`);if(i$1?.authMethod==="client_credentials"&&i$1.clientId&&i$1.clientSecret){let u$1=w(),g=await f$1(u$1.globalEndpoint,i$1.clientId,i$1.clientSecret);u({...i$1,accessToken:g.accessToken,expiresAt:Date.now()+g.expiresIn*1e3}),f(),i("App token refreshed successfully"),i$1.workspaceId&&i$1.organizationId&&await X();return}let c=(await e(Mc,{token:i$1.refreshToken})).refreshToken;u({...i$1,accessToken:c.accessToken,refreshToken:c.refreshToken,expiresAt:Date.now()+c.expiresIn*1e3}),f(),i("Token refreshed successfully"),i$1.workspaceId&&i$1.organizationId&&await X();}catch(i){g(i);}});}async function X(){let s=t();if(!s?.accessToken||!s.workspaceId||!s.organizationId)return;let p=w();try{let i$1=await g$1(p.workspaceEndpoint,s.accessToken,s.workspaceId,s.organizationId);u({...s,workspaceToken:i$1.token,workspaceTokenExpiresAt:new Date(i$1.expiresAt).getTime()}),f(),i("Workspace token refreshed");}catch{l("Workspace token refresh failed \u2014 workspace operations may require re-login");}}async function Ce(s$1){let p=w(),{oidcIssuer:i$2,clientId:o}=B(),c={...p,oidcIssuer:i$2,clientId:o};k("Starting device code authentication...");let u$1=await d(c);console.log(""),console.log(` Open: ${u$1.verificationUri}`),console.log(` Code: ${u$1.userCode}`),console.log(""),await i$1(u$1.verificationUriComplete??u$1.verificationUri)?k("Browser opened"):l("Could not open browser \u2014 open the URL manually"),k("Waiting for authorization...");let f$1=await e$1(u$1.deviceCode,u$1.interval,c),h=f$1.accessToken,e=Date.now()+f$1.expiresIn*1e3;u({accessToken:h,refreshToken:f$1.refreshToken,expiresAt:e,authMethod:"device_code"}),f(),k("Fetching workspaces...");try{let t=await h$1(p.globalEndpoint,h);if(t.length===0){i("Authentication successful (no workspaces found)");return}let n=!!process.stdin.isTTY;t.length>1&&n&&!s$1&&(console.log(`
3
3
  Available workspaces:`),t.forEach((A,C)=>console.log(` ${C+1}. ${A.name} (${A.slug})`)));let{workspace:m}=await j(t,{preferredId:s$1,interactive:n,ask:J});t.length>1&&!n&&!s$1&&k(`${t.length} workspaces available; pass --workspace-id or run \`${s().productName} workspace set <id>\` to switch`),k(`Using workspace: ${m.name} (${m.id})`);let I=await g$1(p.workspaceEndpoint,h,m.id,m.organizationId);u({accessToken:h,refreshToken:f$1.refreshToken,expiresAt:e,workspaceToken:I.token,workspaceTokenExpiresAt:new Date(I.expiresAt).getTime(),workspaceId:m.id,organizationId:m.organizationId,authMethod:"device_code"}),f(),i("Authentication successful");}catch(t){u({accessToken:h,refreshToken:f$1.refreshToken,expiresAt:e,authMethod:"device_code"}),f(),i("Authentication successful"),l(`Workspace token not obtained: ${t instanceof Error?t.message:String(t)}`),k(`Set workspace manually: ${s().productName} workspace set <id>`);}}async function Pe(s){let p=w(),o=(await import('readline')).createInterface({input:process.stdin,output:process.stdout}),c=await new Promise(I=>{o.question("Client ID: ",A=>I(A.trim()));}),u$1=await new Promise(I=>{o.question("Client Secret: ",A=>{o.close(),I(A.trim());});});if(!c||!u$1)throw new o$1("Client ID and secret cannot be empty");k("Authenticating app...");let g=await f$1(p.globalEndpoint,c,u$1),f$2=g.accessToken,h=Date.now()+g.expiresIn*1e3,e,t,n=s,m;if(n)try{let A=(await h$1(p.globalEndpoint,f$2)).find(C=>C.id===n);if(A){m=A.organizationId;let C=await g$1(p.workspaceEndpoint,f$2,n,m);e=C.token,t=new Date(C.expiresAt).getTime(),k(`Workspace token issued for: ${A.name}`);}else l(`Workspace ${n} not found \u2014 skipping workspace token`),n=void 0;}catch(I){l(`Workspace token failed: ${I instanceof Error?I.message:String(I)}`);}u({accessToken:f$2,refreshToken:"",expiresAt:h,workspaceToken:e,workspaceTokenExpiresAt:t,workspaceId:n,organizationId:m,authMethod:"client_credentials",clientId:c,clientSecret:u$1}),f(),i("App authentication successful");}var Z=`
4
4
  query currentUser {
@@ -102,4 +102,4 @@
102
102
  id name limits currentUsageSum reusable
103
103
  }
104
104
  }
105
- `;async function w(){let o=await s(k);if(!o.getDefaultBillingAccount?.id)throw new d("No default billing account on file. Pass --account <id> explicitly.");return o.getDefaultBillingAccount.id}function z(o){let i=o.command("billing").description("Billing: subscriptions, invoices, credits"),p=i.command("subscriptions").description("Subscriptions");p.command("list").description("List active subscriptions").option("--account <id>","Billing account id (defaults to current)").option("-f, --format <format>").action(async t=>{try{let e=t.account??await w(),n=await s(D,{billingAccountId:e});c(t,n.getActiveSubscriptions,{headers:["ID","Status","Plan","Seats","NextBilling"],rows:n.getActiveSubscriptions.map(r=>[m(r.id,12),I(r.status),r.plan?.name??"-",String(r.seatCount??"-"),x(r.nextBillingDate)])});}catch(e){a(e);}}),p.command("get").description("Get a subscription").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let n=await s(R,{id:t});if(!n.getSubscription)throw new d(`Subscription ${t} not found`);c(e,n.getSubscription);}catch(n){a(n);}}),p.command("upgrade").description("Change subscription seat count").argument("<id>").requiredOption("--seats <n>","Target seat count",t=>parseInt(t,10)).option("-f, --format <format>").action(async(t,e)=>{try{let n={subscriptionId:t,seatCount:e.seats},r=await s(_,{input:n});f(`Seat count updated to ${r.updateSubscriptionSeats.seatCount}`),c(e,r.updateSubscriptionSeats);}catch(n){a(n);}}),p.command("cancel").description("Cancel a subscription").argument("<id>").option("--reason <s>").action(async(t,e)=>{try{let n={subscriptionId:t,reason:e.reason},r=await s($,{input:n});f("Subscription canceled"),c({},r.cancelSubscription);}catch(n){a(n);}});let T=i.command("plans").description("Plans");T.command("list").description("List available plans").option("--product <id>").option("-f, --format <format>").action(async t=>{try{let e={};t.product&&(e.productId=t.product);let n=await s(L,{filter:Object.keys(e).length?e:void 0});c(t,n.getAllPlans,{headers:["ID","Name","Price","Currency","Duration"],rows:n.getAllPlans.map(r=>[m(r.id,12),r.name,String(r.price??"-"),r.currency??"-",r.duration??"-"])});}catch(e){a(e);}}),T.command("get").description("Get a plan").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let n=await s(N,{id:t});if(!n.getPlan)throw new d(`Plan ${t} not found`);c(e,n.getPlan);}catch(n){a(n);}}),i.command("addons").description("Addons").command("list").description("List addons").option("--product <id>").option("--limit <n>","Page size",t=>parseInt(t,10),50).option("-f, --format <format>").action(async t=>{try{let e={};t.product&&(e.productId=t.product);let n=await s(q,{filter:Object.keys(e).length?e:void 0,limit:t.limit});c(t,n.getAllAddOns);}catch(e){a(e);}});let h=i.command("invoices").description("Invoices");h.command("list").description("List invoices").option("--account <id>").option("--page <n>","",t=>parseInt(t,10),1).option("--page-size <n>","",t=>parseInt(t,10),20).option("-f, --format <format>").action(async t=>{try{let e=t.account??await w(),n=await s(G,{billingAccountId:e,page:t.page,pageSize:t.pageSize});c(t,n.getPaginatedInvoices.invoices,{headers:["ID","#","Status","Total","Currency","Paid"],rows:n.getPaginatedInvoices.invoices.map(r=>[m(r.id,12),r.invoiceNumber??"-",I(r.status),String(r.total??"-"),r.currency??"-",x(r.paidAt)])});}catch(e){a(e);}}),h.command("get").description("Get an invoice").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let n=await s(A,{id:t});if(!n.getInvoice)throw new d(`Invoice ${t} not found`);c(e,n.getInvoice);}catch(n){a(n);}}),h.command("download").description("Print invoice PDF URL (browser-only download)").argument("<id>").action(async t=>{try{let e=await s(A,{id:t});if(!e.getInvoice?.pdfUrl)throw new d(`Invoice ${t} has no pdfUrl`);O("PDF URL:"),console.log(e.getInvoice.pdfUrl);}catch(e){a(e);}});let y=i.command("payment-methods").description("Payment methods");y.command("list").description("List payment methods").option("--account <id>").option("-f, --format <format>").action(async t=>{try{let e=t.account??await w(),n=await s(M,{billingAccountId:e});c(t,n.getPaymentMethods,{headers:["ID","Type","Brand","Last4","Default","Verified"],rows:n.getPaymentMethods.map(r=>[m(r.id,12),r.type,r.brand??"-",r.last4??"-",String(!!r.isDefault),String(!!r.isVerified)])});}catch(e){a(e);}}),y.command("add").description("Add a payment method (card metadata only \u2014 providers handle secrets)").requiredOption("--type <t>","CREDIT_CARD|BANK|UPI","CREDIT_CARD").requiredOption("--last4 <s>").option("--brand <s>","Visa|MasterCard|...").option("--expiry-month <n>","",t=>parseInt(t,10)).option("--expiry-year <n>","",t=>parseInt(t,10)).option("--account <id>").option("--default","Make it the default").option("-f, --format <format>").action(async t=>{try{let n={billingAccountId:t.account??await w(),type:t.type.toUpperCase(),last4:t.last4,brand:t.brand,expiryMonth:t.expiryMonth,expiryYear:t.expiryYear,isDefault:!!t.default},r=await s(U,{input:n});f("Payment method added"),c(t,r.addPaymentMethod);}catch(e){a(e);}}),y.command("remove").description("Remove a payment method").argument("<id>").action(async t=>{try{await s(F,{id:t}),f("Payment method removed");}catch(e){a(e);}});let C=i.command("credits").description("Credits & withdrawal");C.command("balance").description("Show current credit balance").option("-f, --format <format>").action(async t=>{try{let e=await s(k);c(t,e.getDefaultBillingAccount);}catch(e){a(e);}}),C.command("grant").description("Grant credits to a billing account (admin)").requiredOption("--account <id>").requiredOption("--amount <n>","Amount",t=>parseFloat(t)).option("--reason <s>").action(async t=>{try{let e={billingAccountId:t.account,amount:t.amount,reason:t.reason??"cli-grant"};await s(B,{input:e}),f("Credits granted");}catch(e){a(e);}}),C.command("withdraw").description("Request a credit withdrawal").requiredOption("--account <id>").requiredOption("--amount <n>","Amount",t=>parseFloat(t)).requiredOption("--payout <id>","Payout account id").action(async t=>{try{let e={billingAccountId:t.account,creditAmount:t.amount,payoutAccountId:t.payout};await s(W,{input:e}),f("Withdrawal requested");}catch(e){a(e);}}),i.command("refunds").description("Pending refunds").option("--page <n>","",t=>parseInt(t,10),0).option("--page-size <n>","",t=>parseInt(t,10),20).option("-f, --format <format>").action(async t=>{try{let e=await s(j,{page:t.page,pageSize:t.pageSize});c(t,e.getPendingRefunds.records);}catch(e){a(e);}}),i.command("quota").description("Quotas for a subscription").argument("<subscriptionId>").option("-f, --format <format>").action(async(t,e)=>{try{let n=await s(V,{subscriptionId:t});c(e,n.getAllQuotasOfSub);}catch(n){a(n);}});}var it={id:"billing",version:"1.0.0",displayName:"Billing",dependsOn:["auth"],register(o,i){P(i),z(o);}},we=it;module.exports=we;
105
+ `;async function h(){let o=await s(k);if(!o.getDefaultBillingAccount?.id)throw new d("No default billing account on file. Pass --account <id> explicitly.");return o.getDefaultBillingAccount.id}function z(o){let i=o.command("billing").description("Billing: subscriptions, invoices, credits"),p=i.command("subscriptions").description("Subscriptions");p.command("list").description("List active subscriptions").option("--account <id>","Billing account id (defaults to current)").option("-f, --format <format>").action(async t=>{try{let e=t.account??await h(),n=await s(D,{billingAccountId:e});c(t,n.getActiveSubscriptions,{headers:["ID","Status","Plan","Seats","NextBilling"],rows:n.getActiveSubscriptions.map(r=>[m(r.id,12),I(r.status),r.plan?.name??"-",String(r.seatCount??"-"),x(r.nextBillingDate)])});}catch(e){a(e);}}),p.command("get").description("Get a subscription").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let n=await s(R,{id:t});if(!n.getSubscription)throw new d(`Subscription ${t} not found`);c(e,n.getSubscription);}catch(n){a(n);}}),p.command("upgrade").description("Change subscription seat count").argument("<id>").requiredOption("--seats <n>","Target seat count",t=>parseInt(t,10)).option("-f, --format <format>").action(async(t,e)=>{try{let n={subscriptionId:t,seatCount:e.seats},r=await s(_,{input:n});f(`Seat count updated to ${r.updateSubscriptionSeats.seatCount}`),c(e,r.updateSubscriptionSeats);}catch(n){a(n);}}),p.command("cancel").description("Cancel a subscription").argument("<id>").option("--reason <s>").action(async(t,e)=>{try{let n={subscriptionId:t,reason:e.reason},r=await s($,{input:n});f("Subscription canceled"),c({},r.cancelSubscription);}catch(n){a(n);}});let T=i.command("plans").description("Plans");T.command("list").description("List available plans").option("--product <id>").option("-f, --format <format>").action(async t=>{try{let e={};t.product&&(e.productId=t.product);let n=await s(L,{filter:Object.keys(e).length?e:void 0});c(t,n.getAllPlans,{headers:["ID","Name","Price","Currency","Duration"],rows:n.getAllPlans.map(r=>[m(r.id,12),r.name,String(r.price??"-"),r.currency??"-",r.duration??"-"])});}catch(e){a(e);}}),T.command("get").description("Get a plan").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let n=await s(N,{id:t});if(!n.getPlan)throw new d(`Plan ${t} not found`);c(e,n.getPlan);}catch(n){a(n);}}),i.command("addons").description("Addons").command("list").description("List addons").option("--product <id>").option("--limit <n>","Page size",t=>parseInt(t,10),50).option("-f, --format <format>").action(async t=>{try{let e={};t.product&&(e.productId=t.product);let n=await s(q,{filter:Object.keys(e).length?e:void 0,limit:t.limit});c(t,n.getAllAddOns);}catch(e){a(e);}});let w=i.command("invoices").description("Invoices");w.command("list").description("List invoices").option("--account <id>").option("--page <n>","",t=>parseInt(t,10),1).option("--page-size <n>","",t=>parseInt(t,10),20).option("-f, --format <format>").action(async t=>{try{let e=t.account??await h(),n=await s(G,{billingAccountId:e,page:t.page,pageSize:t.pageSize});c(t,n.getPaginatedInvoices.invoices,{headers:["ID","#","Status","Total","Currency","Paid"],rows:n.getPaginatedInvoices.invoices.map(r=>[m(r.id,12),r.invoiceNumber??"-",I(r.status),String(r.total??"-"),r.currency??"-",x(r.paidAt)])});}catch(e){a(e);}}),w.command("get").description("Get an invoice").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let n=await s(A,{id:t});if(!n.getInvoice)throw new d(`Invoice ${t} not found`);c(e,n.getInvoice);}catch(n){a(n);}}),w.command("download").description("Print invoice PDF URL (browser-only download)").argument("<id>").action(async t=>{try{let e=await s(A,{id:t});if(!e.getInvoice?.pdfUrl)throw new d(`Invoice ${t} has no pdfUrl`);O("PDF URL:"),console.log(e.getInvoice.pdfUrl);}catch(e){a(e);}});let y=i.command("payment-methods").description("Payment methods");y.command("list").description("List payment methods").option("--account <id>").option("-f, --format <format>").action(async t=>{try{let e=t.account??await h(),n=await s(M,{billingAccountId:e});c(t,n.getPaymentMethods,{headers:["ID","Type","Brand","Last4","Default","Verified"],rows:n.getPaymentMethods.map(r=>[m(r.id,12),r.type,r.brand??"-",r.last4??"-",String(!!r.isDefault),String(!!r.isVerified)])});}catch(e){a(e);}}),y.command("add").description("Add a payment method (card metadata only \u2014 providers handle secrets)").requiredOption("--type <t>","CREDIT_CARD|BANK|UPI","CREDIT_CARD").requiredOption("--last4 <s>").option("--brand <s>","Visa|MasterCard|...").option("--expiry-month <n>","",t=>parseInt(t,10)).option("--expiry-year <n>","",t=>parseInt(t,10)).option("--account <id>").option("--default","Make it the default").option("-f, --format <format>").action(async t=>{try{let n={billingAccountId:t.account??await h(),type:t.type.toUpperCase(),last4:t.last4,brand:t.brand,expiryMonth:t.expiryMonth,expiryYear:t.expiryYear,isDefault:!!t.default},r=await s(U,{input:n});f("Payment method added"),c(t,r.addPaymentMethod);}catch(e){a(e);}}),y.command("remove").description("Remove a payment method").argument("<id>").action(async t=>{try{await s(F,{id:t}),f("Payment method removed");}catch(e){a(e);}});let C=i.command("credits").description("Credits & withdrawal");C.command("balance").description("Show current credit balance").option("-f, --format <format>").action(async t=>{try{let e=await s(k);c(t,e.getDefaultBillingAccount);}catch(e){a(e);}}),C.command("grant").description("Grant credits to a billing account (admin)").requiredOption("--account <id>").requiredOption("--amount <n>","Amount",t=>parseFloat(t)).option("--reason <s>").action(async t=>{try{let e={billingAccountId:t.account,amount:t.amount,reason:t.reason??"cli-grant"};await s(B,{input:e}),f("Credits granted");}catch(e){a(e);}}),C.command("withdraw").description("Request a credit withdrawal").requiredOption("--account <id>").requiredOption("--amount <n>","Amount",t=>parseFloat(t)).requiredOption("--payout <id>","Payout account id").action(async t=>{try{let e={billingAccountId:t.account,creditAmount:t.amount,payoutAccountId:t.payout};await s(W,{input:e}),f("Withdrawal requested");}catch(e){a(e);}}),i.command("refunds").description("Pending refunds").option("--page <n>","",t=>parseInt(t,10),0).option("--page-size <n>","",t=>parseInt(t,10),20).option("-f, --format <format>").action(async t=>{try{let e=await s(j,{page:t.page,pageSize:t.pageSize});c(t,e.getPendingRefunds.records);}catch(e){a(e);}}),i.command("quota").description("Quotas for a subscription").argument("<subscriptionId>").option("-f, --format <format>").action(async(t,e)=>{try{let n=await s(V,{subscriptionId:t});c(e,n.getAllQuotasOfSub);}catch(n){a(n);}});}var it={id:"billing",version:"1.0.0",displayName:"Billing",dependsOn:["auth"],register(o,i){P(i),z(o);}},he=it;module.exports=he;
@@ -1,4 +1,4 @@
1
- import {a,c,h as h$1,p,n,o,g,i,k}from'../../chunk-SQSFZFQZ.js';import {o as o$1}from'../../chunk-UAFYTYK6.js';var A=`
1
+ import {a,c,h as h$1,p,n,o,g,i,k}from'../../chunk-W4JZR7RJ.js';import {o as o$1}from'../../chunk-YIY5IDXQ.js';var A=`
2
2
  query GetDefaultBillingAccount {
3
3
  getDefaultBillingAccount {
4
4
  id creditAmount currency
@@ -1,4 +1,4 @@
1
- import {a,b,h as h$1,p as p$1,g,i,d as d$1}from'../../chunk-SQSFZFQZ.js';import {o}from'../../chunk-UAFYTYK6.js';var C=`
1
+ import {a,b,h as h$1,p as p$1,g,i,d as d$1}from'../../chunk-W4JZR7RJ.js';import {o}from'../../chunk-YIY5IDXQ.js';var C=`
2
2
  query BrainyrichGetHousehold($id: ID!) {
3
3
  braHousehold(id: $id) {
4
4
  id name advisorId aum currency riskProfile status notes
@@ -138,14 +138,14 @@
138
138
  id courseId name status capacity facilitatorId startDate endDate createdAt
139
139
  }
140
140
  }
141
- `,K=`
141
+ `,Q=`
142
142
  query BuiListCertificates($courseId: ID, $learnerId: ID) {
143
143
  buiListCertificates(courseId: $courseId, learnerId: $learnerId) {
144
144
  id courseId learnerId enrollmentId serial status finalScore
145
145
  issuedAt expiresAt revokedAt createdAt updatedAt workspaceId
146
146
  }
147
147
  }
148
- `,Q=`
148
+ `,K=`
149
149
  mutation BuiIssueCertificate($input: BuiIssueCertificateInput!) {
150
150
  buiIssueCertificate(input: $input) {
151
151
  id courseId learnerId enrollmentId serial status finalScore
@@ -228,4 +228,4 @@
228
228
  query BuiHealth {
229
229
  buiHealth
230
230
  }
231
- `;function y(o,r){try{return JSON.parse(r)}catch{throw new m(`--${o} must be valid JSON`)}}function l(o){let r=Number.parseInt(o,10);if(Number.isNaN(r))throw new m(`Expected an integer but got "${o}"`);return r}function I(o){let r=Number.parseFloat(o);if(Number.isNaN(r))throw new m(`Expected a number but got "${o}"`);return r}function S(o){return o==="true"}function k(o){return o.split(",").map(r=>r.trim()).filter(r=>r.length>0)}function it(o){let r=o.command("courses").description("Buildmyiq courses");r.command("list").description("List courses").option("--status <s>","DRAFT|IN_REVIEW|PUBLISHED|ARCHIVED").option("--level <l>","BEGINNER|INTERMEDIATE|ADVANCED|EXPERT").option("--limit <n>","Page size",l,50).option("--offset <n>","Offset",l,0).option("--cursor <c>","Pagination cursor").option("-f, --format <format>","Output format").action(async t=>{try{let e={};t.limit!==void 0&&(e.limit=t.limit),t.offset!==void 0&&(e.offset=t.offset),t.cursor&&(e.cursor=t.cursor);let n=await a(L,{status:t.status?t.status.toUpperCase():void 0,level:t.level?t.level.toUpperCase():void 0,pagination:Object.keys(e).length?e:void 0});s(t,n.buiListCourses.items,{headers:["ID","Title","Level","Status","Language","Hours"],rows:n.buiListCourses.items.map(c=>[d(c.id,12),c.title,c.level,c.status,c.language??"-",c.estimatedHours!=null?String(c.estimatedHours):"-"])});}catch(e){i(e);}}),r.command("get").description("Get a course by id").argument("<id>","Course ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(O,{id:t});if(!n.buiCourse)throw new m(`Course ${t} not found`);s(e,n.buiCourse);}catch(n){i(n);}}),r.command("create").description("Create a course").requiredOption("--slug <slug>","URL slug").requiredOption("--title <title>","Course title").option("--summary <s>","Short summary").option("--description <s>","Description").option("--level <l>","BEGINNER|INTERMEDIATE|ADVANCED|EXPERT","BEGINNER").option("--language <l>","Language code").option("--estimated-hours <n>","Estimated hours",l).option("--public","Make the course public").option("--instructor <id>","Instructor user ID").option("--skill <id>","Skill ID").option("--cover-file <id>","Cover image File ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={slug:t.slug,title:t.title,level:(t.level??"BEGINNER").toUpperCase()};t.summary&&(e.summary=t.summary),t.description&&(e.description=t.description),t.language&&(e.language=t.language),t.estimatedHours!==void 0&&(e.estimatedHours=t.estimatedHours),t.public&&(e.isPublic=!0),t.instructor&&(e.instructorId=t.instructor),t.skill&&(e.skillId=t.skill),t.coverFile&&(e.coverFileId=t.coverFile),t.tags&&(e.tags=k(t.tags));let n=await a(R,{input:e});u(`Course created: ${n.buiCreateCourse.title}`),s(t,n.buiCreateCourse);}catch(e){i(e);}}),r.command("update").description("Update a course").argument("<id>","Course ID").option("--title <title>","Course title").option("--summary <s>","Short summary").option("--description <s>","Description").option("--level <l>","BEGINNER|INTERMEDIATE|ADVANCED|EXPERT").option("--language <l>","Language code").option("--estimated-hours <n>","Estimated hours",l).option("--public <bool>","true|false",S).option("--instructor <id>","Instructor user ID").option("--skill <id>","Skill ID").option("--cover-file <id>","Cover image File ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.title&&(n.title=e.title),e.summary!==void 0&&(n.summary=e.summary),e.description!==void 0&&(n.description=e.description),e.level&&(n.level=e.level.toUpperCase()),e.language&&(n.language=e.language),e.estimatedHours!==void 0&&(n.estimatedHours=e.estimatedHours),e.public!==void 0&&(n.isPublic=e.public),e.instructor&&(n.instructorId=e.instructor),e.skill&&(n.skillId=e.skill),e.coverFile&&(n.coverFileId=e.coverFile),e.tags&&(n.tags=k(e.tags)),!Object.keys(n).length)throw new m("No updates specified");let c=await a(v,{id:t,input:n});u("Course updated"),s(e,c.buiUpdateCourse);}catch(n){i(n);}}),r.command("publish").description("Publish a course through its authoring lifecycle").argument("<id>","Course ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(D,{id:t});u(`Course published: ${n.buiPublishCourse.title}`),s(e,n.buiPublishCourse);}catch(n){i(n);}}),r.command("archive").description("Archive a course").argument("<id>","Course ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a($,{id:t});u(n.buiArchiveCourse?"Course archived":"Course not archived"),s(e,{archived:n.buiArchiveCourse});}catch(n){i(n);}});}function st(o){let r=o.command("modules").description("Buildmyiq course modules");r.command("list").description("List modules for a course").requiredOption("--course <id>","Course ID").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(P,{courseId:t.course});s(t,e.buiListModules,{headers:["ID","Title","Position","Description"],rows:e.buiListModules.map(n=>[d(n.id,12),n.title,String(n.position),d(n.description??"-",40)])});}catch(e){i(e);}}),r.command("create").description("Create a module").requiredOption("--course <id>","Course ID").requiredOption("--title <title>","Module title").option("--description <s>","Description").option("--position <n>","Ordering position",l).option("-f, --format <format>","Output format").action(async t=>{try{let e={courseId:t.course,title:t.title};t.description&&(e.description=t.description),t.position!==void 0&&(e.position=t.position);let n=await a(N,{input:e});u(`Module created: ${n.buiCreateModule.title}`),s(t,n.buiCreateModule);}catch(e){i(e);}});}function at(o){let r=o.command("lessons").description("Buildmyiq course lessons");r.command("list").description("List lessons for a course").requiredOption("--course <id>","Course ID").option("--module <id>","Filter by module ID").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(q,{courseId:t.course,moduleId:t.module});s(t,e.buiListLessons,{headers:["ID","Title","Type","Position","Duration","Preview"],rows:e.buiListLessons.map(n=>[d(n.id,12),n.title,n.type,String(n.position),n.durationMin!=null?String(n.durationMin):"-",n.isPreview?"yes":"no"])});}catch(e){i(e);}}),r.command("create").description("Create a lesson").requiredOption("--course <id>","Course ID").requiredOption("--title <title>","Lesson title").option("--module <id>","Module ID").option("--type <t>","ARTICLE|VIDEO|QUIZ|ASSIGNMENT|LIVE_SESSION|INTERACTIVE","ARTICLE").option("--content <s>","Lesson content").option("--duration-min <n>","Duration (minutes)",l).option("--position <n>","Ordering position",l).option("--preview","Mark as a preview lesson").option("--media-file <id>","Media File ID").option("-f, --format <format>","Output format").action(async t=>{try{let e={courseId:t.course,title:t.title,type:(t.type??"ARTICLE").toUpperCase()};t.module&&(e.moduleId=t.module),t.content&&(e.content=t.content),t.durationMin!==void 0&&(e.durationMin=t.durationMin),t.position!==void 0&&(e.position=t.position),t.preview&&(e.isPreview=!0),t.mediaFile&&(e.mediaFileId=t.mediaFile);let n=await a(_,{input:e});u(`Lesson created: ${n.buiCreateLesson.title}`),s(t,n.buiCreateLesson);}catch(e){i(e);}});}function ut(o){let r=o.command("skills").description("Buildmyiq skills taxonomy");r.command("list").description("List skills").option("--category <c>","TECHNICAL|COGNITIVE|CREATIVE|SOCIAL|BUSINESS|LANGUAGE").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(M,{category:t.category?t.category.toUpperCase():void 0});s(t,e.buiListSkills,{headers:["ID","Name","Category","Active","Description"],rows:e.buiListSkills.map(n=>[d(n.id,12),n.name,n.category,n.isActive?"yes":"no",d(n.description??"-",40)])});}catch(e){i(e);}}),r.command("create").description("Create a skill").requiredOption("--name <name>","Skill name").option("--category <c>","TECHNICAL|COGNITIVE|CREATIVE|SOCIAL|BUSINESS|LANGUAGE","TECHNICAL").option("--description <s>","Description").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name,category:(t.category??"TECHNICAL").toUpperCase()};t.description&&(e.description=t.description);let n=await a(B,{input:e});u(`Skill created: ${n.buiCreateSkill.name}`),s(t,n.buiCreateSkill);}catch(e){i(e);}});}function ct(o){let r=o.command("enrollments").description("Buildmyiq enrollments & lesson progress");r.command("list").description("List enrollments").option("--course <id>","Filter by course ID").option("--learner <id>","Filter by learner ID").option("--status <s>","ENROLLED|IN_PROGRESS|COMPLETED|DROPPED|EXPIRED").option("--limit <n>","Page size",l,50).option("--offset <n>","Offset",l,0).option("--cursor <c>","Pagination cursor").option("-f, --format <format>","Output format").action(async t=>{try{let e={};t.limit!==void 0&&(e.limit=t.limit),t.offset!==void 0&&(e.offset=t.offset),t.cursor&&(e.cursor=t.cursor);let n=await a(G,{courseId:t.course,learnerId:t.learner,status:t.status?t.status.toUpperCase():void 0,pagination:Object.keys(e).length?e:void 0});s(t,n.buiListEnrollments.items,{headers:["ID","Course","Learner","Status","Progress %"],rows:n.buiListEnrollments.items.map(c=>[d(c.id,12),d(c.courseId,12),d(c.learnerId,12),c.status,String(c.progressPct)])});}catch(e){i(e);}}),r.command("get").description("Get an enrollment by id").argument("<id>","Enrollment ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(U,{id:t});if(!n.buiEnrollment)throw new m(`Enrollment ${t} not found`);s(e,n.buiEnrollment);}catch(n){i(n);}}),r.command("enroll").description("Enroll a learner in a course").requiredOption("--course <id>","Course ID").option("--learner <id>","Learner ID (defaults to the calling actor)").option("--cohort <id>","Cohort ID").option("--expires-at <iso>","Expiry (ISO date)").option("-f, --format <format>","Output format").action(async t=>{try{let e={courseId:t.course};t.learner&&(e.learnerId=t.learner),t.cohort&&(e.cohortId=t.cohort),t.expiresAt&&(e.expiresAt=t.expiresAt);let n=await a(F,{input:e});u(`Enrolled: ${n.buiEnroll.id}`),s(t,n.buiEnroll);}catch(e){i(e);}}),r.command("transition").description("Advance an enrollment through its lifecycle").argument("<id>","Enrollment ID").requiredOption("--status <s>","ENROLLED|IN_PROGRESS|COMPLETED|DROPPED|EXPIRED").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(H,{id:t,status:e.status.toUpperCase()});u(`Enrollment status set to ${n.buiTransitionEnrollment.status}`),s(e,n.buiTransitionEnrollment);}catch(n){i(n);}}),r.command("record-progress").description("Record lesson progress for an enrollment").requiredOption("--enrollment <id>","Enrollment ID").requiredOption("--lesson <id>","Lesson ID").option("--status <s>","NOT_STARTED|IN_PROGRESS|COMPLETED","IN_PROGRESS").option("--seconds-spent <n>","Seconds spent",l).option("-f, --format <format>","Output format").action(async t=>{try{let e={enrollmentId:t.enrollment,lessonId:t.lesson,status:(t.status??"IN_PROGRESS").toUpperCase()};t.secondsSpent!==void 0&&(e.secondsSpent=t.secondsSpent);let n=await a(W,{input:e});u(`Progress recorded: ${n.buiRecordLessonProgress.status}`),s(t,n.buiRecordLessonProgress);}catch(e){i(e);}});}function dt(o){let r=o.command("cohorts").description("Buildmyiq cohorts");r.command("list").description("List cohorts").option("--course <id>","Filter by course ID").option("--status <s>","SCHEDULED|ENROLLING|ACTIVE|COMPLETED|CANCELLED").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(j,{courseId:t.course,status:t.status?t.status.toUpperCase():void 0});s(t,e.buiListCohorts,{headers:["ID","Name","Status","Capacity","Start","End"],rows:e.buiListCohorts.map(n=>[d(n.id,12),n.name,n.status,String(n.capacity),E(n.startDate),E(n.endDate)])});}catch(e){i(e);}}),r.command("create").description("Create a cohort").requiredOption("--course <id>","Course ID").requiredOption("--name <name>","Cohort name").option("--capacity <n>","Capacity",l).option("--facilitator <id>","Facilitator user ID").option("--start-date <iso>","Start date (ISO)").option("--end-date <iso>","End date (ISO)").option("-f, --format <format>","Output format").action(async t=>{try{let e={courseId:t.course,name:t.name};t.capacity!==void 0&&(e.capacity=t.capacity),t.facilitator&&(e.facilitatorId=t.facilitator),t.startDate&&(e.startDate=t.startDate),t.endDate&&(e.endDate=t.endDate);let n=await a(V,{input:e});u(`Cohort created: ${n.buiCreateCohort.name}`),s(t,n.buiCreateCohort);}catch(e){i(e);}});}function pt(o){let r=o.command("certificates").description("Buildmyiq certificates");r.command("list").description("List certificates").option("--course <id>","Filter by course ID").option("--learner <id>","Filter by learner ID").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(K,{courseId:t.course,learnerId:t.learner});s(t,e.buiListCertificates,{headers:["ID","Serial","Learner","Status","Score","Issued"],rows:e.buiListCertificates.map(n=>[d(n.id,12),n.serial,d(n.learnerId,12),n.status,n.finalScore!=null?String(n.finalScore):"-",E(n.issuedAt)])});}catch(e){i(e);}}),r.command("issue").description("Issue a certificate").requiredOption("--course <id>","Course ID").requiredOption("--learner <id>","Learner ID").requiredOption("--serial <s>","Certificate serial").option("--enrollment <id>","Enrollment ID").option("--final-score <n>","Final score",I).option("--file <id>","Rendered certificate PDF File ID").option("--expires-at <iso>","Expiry (ISO date)").option("-f, --format <format>","Output format").action(async t=>{try{let e={courseId:t.course,learnerId:t.learner,serial:t.serial};t.enrollment&&(e.enrollmentId=t.enrollment),t.finalScore!==void 0&&(e.finalScore=t.finalScore),t.file&&(e.fileId=t.file),t.expiresAt&&(e.expiresAt=t.expiresAt);let n=await a(Q,{input:e});u(`Certificate issued: ${n.buiIssueCertificate.serial}`),s(t,n.buiIssueCertificate);}catch(e){i(e);}}),r.command("revoke").description("Revoke a certificate").argument("<id>","Certificate ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(z,{id:t});u(`Certificate revoked: ${n.buiRevokeCertificate.serial}`),s(e,n.buiRevokeCertificate);}catch(n){i(n);}});}function lt(o){let r=o.command("assessments").description("Buildmyiq assessments & questions");r.command("list").description("List assessments for a course").requiredOption("--course <id>","Course ID").option("--status <s>","DRAFT|PUBLISHED|ARCHIVED").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(Y,{courseId:t.course,status:t.status?t.status.toUpperCase():void 0});s(t,e.buiListAssessments,{headers:["ID","Title","Type","Status","Pass","Attempts","Graded"],rows:e.buiListAssessments.map(n=>[d(n.id,12),n.title,n.type,n.status,n.passingScore!=null?String(n.passingScore):"-",n.maxAttempts!=null?String(n.maxAttempts):"-",n.isGraded?"yes":"no"])});}catch(e){i(e);}}),r.command("get").description("Get an assessment by id").argument("<id>","Assessment ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(J,{id:t});if(!n.buiAssessment)throw new m(`Assessment ${t} not found`);s(e,n.buiAssessment);}catch(n){i(n);}}),r.command("create").description("Create an assessment").requiredOption("--course <id>","Course ID").requiredOption("--title <title>","Assessment title").option("--type <t>","QUIZ|EXAM|ASSIGNMENT|SURVEY|PRACTICAL","QUIZ").option("--description <s>","Description").option("--passing-score <n>","Passing score",I).option("--max-attempts <n>","Max attempts",l).option("--time-limit-min <n>","Time limit (minutes)",l).option("--graded","Mark assessment as graded").option("-f, --format <format>","Output format").action(async t=>{try{let e={courseId:t.course,title:t.title,type:(t.type??"QUIZ").toUpperCase()};t.description&&(e.description=t.description),t.passingScore!==void 0&&(e.passingScore=t.passingScore),t.maxAttempts!==void 0&&(e.maxAttempts=t.maxAttempts),t.timeLimitMin!==void 0&&(e.timeLimitMin=t.timeLimitMin),t.graded&&(e.isGraded=!0);let n=await a(X,{input:e});u(`Assessment created: ${n.buiCreateAssessment.title}`),s(t,n.buiCreateAssessment);}catch(e){i(e);}}),r.command("publish").description("Publish an assessment").argument("<id>","Assessment ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(Z,{id:t});u(`Assessment published: ${n.buiPublishAssessment.title}`),s(e,n.buiPublishAssessment);}catch(n){i(n);}}),r.command("add-question").description("Add a question to an assessment").requiredOption("--assessment <id>","Assessment ID").requiredOption("--prompt <p>","Question prompt").option("--type <t>","SINGLE_CHOICE|MULTIPLE_CHOICE|TRUE_FALSE|SHORT_ANSWER|ESSAY|CODE","SINGLE_CHOICE").option("--points <n>","Points",I).option("--position <n>","Ordering position",l).option("--explanation <s>","Explanation").option("--options <json>","Options JSON").option("--answer-key <json>","Answer key JSON").option("-f, --format <format>","Output format").action(async t=>{try{let e={assessmentId:t.assessment,prompt:t.prompt,type:(t.type??"SINGLE_CHOICE").toUpperCase()};t.points!==void 0&&(e.points=t.points),t.position!==void 0&&(e.position=t.position),t.explanation&&(e.explanation=t.explanation),t.options&&(e.options=y("options",t.options)),t.answerKey&&(e.answerKey=y("answer-key",t.answerKey));let n=await a(tt,{input:e});u(`Question added: ${d(n.buiCreateQuestion.prompt,40)}`),s(t,n.buiCreateQuestion);}catch(e){i(e);}});}function mt(o){let r=o.command("submissions").description("Buildmyiq assessment submissions");r.command("list").description("List submissions").option("--assessment <id>","Filter by assessment ID").option("--learner <id>","Filter by learner ID").option("--status <s>","IN_PROGRESS|SUBMITTED|GRADING|GRADED|RETURNED").option("--limit <n>","Page size",l,50).option("--offset <n>","Offset",l,0).option("--cursor <c>","Pagination cursor").option("-f, --format <format>","Output format").action(async t=>{try{let e={};t.limit!==void 0&&(e.limit=t.limit),t.offset!==void 0&&(e.offset=t.offset),t.cursor&&(e.cursor=t.cursor);let n=await a(et,{assessmentId:t.assessment,learnerId:t.learner,status:t.status?t.status.toUpperCase():void 0,pagination:Object.keys(e).length?e:void 0});s(t,n.buiListSubmissions.items,{headers:["ID","Assessment","Learner","Attempt","Status","Score","Passed"],rows:n.buiListSubmissions.items.map(c=>[d(c.id,12),d(c.assessmentId,12),d(c.learnerId,12),String(c.attempt),c.status,c.score!=null?String(c.score):"-",c.passed==null?"-":c.passed?"yes":"no"])});}catch(e){i(e);}}),r.command("submit").description("Submit an assessment attempt").requiredOption("--assessment <id>","Assessment ID").option("--learner <id>","Learner ID (defaults to the calling actor)").option("--enrollment <id>","Enrollment ID").option("--attempt <n>","Attempt number",l).option("--answers <json>","Answers JSON").option("-f, --format <format>","Output format").action(async t=>{try{let e={assessmentId:t.assessment};t.learner&&(e.learnerId=t.learner),t.enrollment&&(e.enrollmentId=t.enrollment),t.attempt!==void 0&&(e.attempt=t.attempt),t.answers&&(e.answers=y("answers",t.answers));let n=await a(nt,{input:e});u(`Submission created: ${n.buiSubmitAssessment.id}`),s(t,n.buiSubmitAssessment);}catch(e){i(e);}}),r.command("grade").description("Grade a submission").argument("<id>","Submission ID").requiredOption("--score <n>","Score",I).option("--passed <bool>","true|false",S).option("--feedback <s>","Feedback").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={score:e.score};e.passed!==void 0&&(n.passed=e.passed),e.feedback&&(n.feedback=e.feedback);let c=await a(rt,{id:t,input:n});u(`Submission graded: ${c.buiGradeSubmission.status}`),s(e,c.buiGradeSubmission);}catch(n){i(n);}});}function ft(o){o.command("health").description("Buildmyiq subgraph liveness/identity probe (public)").option("-f, --format <format>","Output format").action(async r=>{try{let t=await w(ot);u(t.buiHealth),s(r,{health:t.buiHealth});}catch(t){i(t);}});}var Tt={id:"buildmyiq",version:"1.0.0",displayName:"Buildmyiq",dependsOn:["auth","workspaces"],register(o,r){T(r);let t=o.command("buildmyiq").description("Buildmyiq education, learning & development platform");it(t),st(t),at(t),ut(t),ct(t),dt(t),pt(t),lt(t),mt(t),ft(t);}},kn=Tt;module.exports=kn;
231
+ `;function y(o,r){try{return JSON.parse(r)}catch{throw new m(`--${o} must be valid JSON`)}}function l(o){let r=Number.parseInt(o,10);if(Number.isNaN(r))throw new m(`Expected an integer but got "${o}"`);return r}function I(o){let r=Number.parseFloat(o);if(Number.isNaN(r))throw new m(`Expected a number but got "${o}"`);return r}function S(o){return o==="true"}function k(o){return o.split(",").map(r=>r.trim()).filter(r=>r.length>0)}function it(o){let r=o.command("courses").description("Buildmyiq courses");r.command("list").description("List courses").option("--status <s>","DRAFT|IN_REVIEW|PUBLISHED|ARCHIVED").option("--level <l>","BEGINNER|INTERMEDIATE|ADVANCED|EXPERT").option("--limit <n>","Page size",l,50).option("--offset <n>","Offset",l,0).option("--cursor <c>","Pagination cursor").option("-f, --format <format>","Output format").action(async t=>{try{let e={};t.limit!==void 0&&(e.limit=t.limit),t.offset!==void 0&&(e.offset=t.offset),t.cursor&&(e.cursor=t.cursor);let n=await a(L,{status:t.status?t.status.toUpperCase():void 0,level:t.level?t.level.toUpperCase():void 0,pagination:Object.keys(e).length?e:void 0});s(t,n.buiListCourses.items,{headers:["ID","Title","Level","Status","Language","Hours"],rows:n.buiListCourses.items.map(c=>[d(c.id,12),c.title,c.level,c.status,c.language??"-",c.estimatedHours!=null?String(c.estimatedHours):"-"])});}catch(e){i(e);}}),r.command("get").description("Get a course by id").argument("<id>","Course ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(O,{id:t});if(!n.buiCourse)throw new m(`Course ${t} not found`);s(e,n.buiCourse);}catch(n){i(n);}}),r.command("create").description("Create a course").requiredOption("--slug <slug>","URL slug").requiredOption("--title <title>","Course title").option("--summary <s>","Short summary").option("--description <s>","Description").option("--level <l>","BEGINNER|INTERMEDIATE|ADVANCED|EXPERT","BEGINNER").option("--language <l>","Language code").option("--estimated-hours <n>","Estimated hours",l).option("--public","Make the course public").option("--instructor <id>","Instructor user ID").option("--skill <id>","Skill ID").option("--cover-file <id>","Cover image File ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={slug:t.slug,title:t.title,level:(t.level??"BEGINNER").toUpperCase()};t.summary&&(e.summary=t.summary),t.description&&(e.description=t.description),t.language&&(e.language=t.language),t.estimatedHours!==void 0&&(e.estimatedHours=t.estimatedHours),t.public&&(e.isPublic=!0),t.instructor&&(e.instructorId=t.instructor),t.skill&&(e.skillId=t.skill),t.coverFile&&(e.coverFileId=t.coverFile),t.tags&&(e.tags=k(t.tags));let n=await a(R,{input:e});u(`Course created: ${n.buiCreateCourse.title}`),s(t,n.buiCreateCourse);}catch(e){i(e);}}),r.command("update").description("Update a course").argument("<id>","Course ID").option("--title <title>","Course title").option("--summary <s>","Short summary").option("--description <s>","Description").option("--level <l>","BEGINNER|INTERMEDIATE|ADVANCED|EXPERT").option("--language <l>","Language code").option("--estimated-hours <n>","Estimated hours",l).option("--public <bool>","true|false",S).option("--instructor <id>","Instructor user ID").option("--skill <id>","Skill ID").option("--cover-file <id>","Cover image File ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.title&&(n.title=e.title),e.summary!==void 0&&(n.summary=e.summary),e.description!==void 0&&(n.description=e.description),e.level&&(n.level=e.level.toUpperCase()),e.language&&(n.language=e.language),e.estimatedHours!==void 0&&(n.estimatedHours=e.estimatedHours),e.public!==void 0&&(n.isPublic=e.public),e.instructor&&(n.instructorId=e.instructor),e.skill&&(n.skillId=e.skill),e.coverFile&&(n.coverFileId=e.coverFile),e.tags&&(n.tags=k(e.tags)),!Object.keys(n).length)throw new m("No updates specified");let c=await a(v,{id:t,input:n});u("Course updated"),s(e,c.buiUpdateCourse);}catch(n){i(n);}}),r.command("publish").description("Publish a course through its authoring lifecycle").argument("<id>","Course ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(D,{id:t});u(`Course published: ${n.buiPublishCourse.title}`),s(e,n.buiPublishCourse);}catch(n){i(n);}}),r.command("archive").description("Archive a course").argument("<id>","Course ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a($,{id:t});u(n.buiArchiveCourse?"Course archived":"Course not archived"),s(e,{archived:n.buiArchiveCourse});}catch(n){i(n);}});}function st(o){let r=o.command("modules").description("Buildmyiq course modules");r.command("list").description("List modules for a course").requiredOption("--course <id>","Course ID").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(P,{courseId:t.course});s(t,e.buiListModules,{headers:["ID","Title","Position","Description"],rows:e.buiListModules.map(n=>[d(n.id,12),n.title,String(n.position),d(n.description??"-",40)])});}catch(e){i(e);}}),r.command("create").description("Create a module").requiredOption("--course <id>","Course ID").requiredOption("--title <title>","Module title").option("--description <s>","Description").option("--position <n>","Ordering position",l).option("-f, --format <format>","Output format").action(async t=>{try{let e={courseId:t.course,title:t.title};t.description&&(e.description=t.description),t.position!==void 0&&(e.position=t.position);let n=await a(N,{input:e});u(`Module created: ${n.buiCreateModule.title}`),s(t,n.buiCreateModule);}catch(e){i(e);}});}function at(o){let r=o.command("lessons").description("Buildmyiq course lessons");r.command("list").description("List lessons for a course").requiredOption("--course <id>","Course ID").option("--module <id>","Filter by module ID").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(q,{courseId:t.course,moduleId:t.module});s(t,e.buiListLessons,{headers:["ID","Title","Type","Position","Duration","Preview"],rows:e.buiListLessons.map(n=>[d(n.id,12),n.title,n.type,String(n.position),n.durationMin!=null?String(n.durationMin):"-",n.isPreview?"yes":"no"])});}catch(e){i(e);}}),r.command("create").description("Create a lesson").requiredOption("--course <id>","Course ID").requiredOption("--title <title>","Lesson title").option("--module <id>","Module ID").option("--type <t>","ARTICLE|VIDEO|QUIZ|ASSIGNMENT|LIVE_SESSION|INTERACTIVE","ARTICLE").option("--content <s>","Lesson content").option("--duration-min <n>","Duration (minutes)",l).option("--position <n>","Ordering position",l).option("--preview","Mark as a preview lesson").option("--media-file <id>","Media File ID").option("-f, --format <format>","Output format").action(async t=>{try{let e={courseId:t.course,title:t.title,type:(t.type??"ARTICLE").toUpperCase()};t.module&&(e.moduleId=t.module),t.content&&(e.content=t.content),t.durationMin!==void 0&&(e.durationMin=t.durationMin),t.position!==void 0&&(e.position=t.position),t.preview&&(e.isPreview=!0),t.mediaFile&&(e.mediaFileId=t.mediaFile);let n=await a(_,{input:e});u(`Lesson created: ${n.buiCreateLesson.title}`),s(t,n.buiCreateLesson);}catch(e){i(e);}});}function ut(o){let r=o.command("skills").description("Buildmyiq skills taxonomy");r.command("list").description("List skills").option("--category <c>","TECHNICAL|COGNITIVE|CREATIVE|SOCIAL|BUSINESS|LANGUAGE").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(M,{category:t.category?t.category.toUpperCase():void 0});s(t,e.buiListSkills,{headers:["ID","Name","Category","Active","Description"],rows:e.buiListSkills.map(n=>[d(n.id,12),n.name,n.category,n.isActive?"yes":"no",d(n.description??"-",40)])});}catch(e){i(e);}}),r.command("create").description("Create a skill").requiredOption("--name <name>","Skill name").option("--category <c>","TECHNICAL|COGNITIVE|CREATIVE|SOCIAL|BUSINESS|LANGUAGE","TECHNICAL").option("--description <s>","Description").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name,category:(t.category??"TECHNICAL").toUpperCase()};t.description&&(e.description=t.description);let n=await a(B,{input:e});u(`Skill created: ${n.buiCreateSkill.name}`),s(t,n.buiCreateSkill);}catch(e){i(e);}});}function ct(o){let r=o.command("enrollments").description("Buildmyiq enrollments & lesson progress");r.command("list").description("List enrollments").option("--course <id>","Filter by course ID").option("--learner <id>","Filter by learner ID").option("--status <s>","ENROLLED|IN_PROGRESS|COMPLETED|DROPPED|EXPIRED").option("--limit <n>","Page size",l,50).option("--offset <n>","Offset",l,0).option("--cursor <c>","Pagination cursor").option("-f, --format <format>","Output format").action(async t=>{try{let e={};t.limit!==void 0&&(e.limit=t.limit),t.offset!==void 0&&(e.offset=t.offset),t.cursor&&(e.cursor=t.cursor);let n=await a(G,{courseId:t.course,learnerId:t.learner,status:t.status?t.status.toUpperCase():void 0,pagination:Object.keys(e).length?e:void 0});s(t,n.buiListEnrollments.items,{headers:["ID","Course","Learner","Status","Progress %"],rows:n.buiListEnrollments.items.map(c=>[d(c.id,12),d(c.courseId,12),d(c.learnerId,12),c.status,String(c.progressPct)])});}catch(e){i(e);}}),r.command("get").description("Get an enrollment by id").argument("<id>","Enrollment ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(U,{id:t});if(!n.buiEnrollment)throw new m(`Enrollment ${t} not found`);s(e,n.buiEnrollment);}catch(n){i(n);}}),r.command("enroll").description("Enroll a learner in a course").requiredOption("--course <id>","Course ID").option("--learner <id>","Learner ID (defaults to the calling actor)").option("--cohort <id>","Cohort ID").option("--expires-at <iso>","Expiry (ISO date)").option("-f, --format <format>","Output format").action(async t=>{try{let e={courseId:t.course};t.learner&&(e.learnerId=t.learner),t.cohort&&(e.cohortId=t.cohort),t.expiresAt&&(e.expiresAt=t.expiresAt);let n=await a(F,{input:e});u(`Enrolled: ${n.buiEnroll.id}`),s(t,n.buiEnroll);}catch(e){i(e);}}),r.command("transition").description("Advance an enrollment through its lifecycle").argument("<id>","Enrollment ID").requiredOption("--status <s>","ENROLLED|IN_PROGRESS|COMPLETED|DROPPED|EXPIRED").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(H,{id:t,status:e.status.toUpperCase()});u(`Enrollment status set to ${n.buiTransitionEnrollment.status}`),s(e,n.buiTransitionEnrollment);}catch(n){i(n);}}),r.command("record-progress").description("Record lesson progress for an enrollment").requiredOption("--enrollment <id>","Enrollment ID").requiredOption("--lesson <id>","Lesson ID").option("--status <s>","NOT_STARTED|IN_PROGRESS|COMPLETED","IN_PROGRESS").option("--seconds-spent <n>","Seconds spent",l).option("-f, --format <format>","Output format").action(async t=>{try{let e={enrollmentId:t.enrollment,lessonId:t.lesson,status:(t.status??"IN_PROGRESS").toUpperCase()};t.secondsSpent!==void 0&&(e.secondsSpent=t.secondsSpent);let n=await a(W,{input:e});u(`Progress recorded: ${n.buiRecordLessonProgress.status}`),s(t,n.buiRecordLessonProgress);}catch(e){i(e);}});}function dt(o){let r=o.command("cohorts").description("Buildmyiq cohorts");r.command("list").description("List cohorts").option("--course <id>","Filter by course ID").option("--status <s>","SCHEDULED|ENROLLING|ACTIVE|COMPLETED|CANCELLED").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(j,{courseId:t.course,status:t.status?t.status.toUpperCase():void 0});s(t,e.buiListCohorts,{headers:["ID","Name","Status","Capacity","Start","End"],rows:e.buiListCohorts.map(n=>[d(n.id,12),n.name,n.status,String(n.capacity),E(n.startDate),E(n.endDate)])});}catch(e){i(e);}}),r.command("create").description("Create a cohort").requiredOption("--course <id>","Course ID").requiredOption("--name <name>","Cohort name").option("--capacity <n>","Capacity",l).option("--facilitator <id>","Facilitator user ID").option("--start-date <iso>","Start date (ISO)").option("--end-date <iso>","End date (ISO)").option("-f, --format <format>","Output format").action(async t=>{try{let e={courseId:t.course,name:t.name};t.capacity!==void 0&&(e.capacity=t.capacity),t.facilitator&&(e.facilitatorId=t.facilitator),t.startDate&&(e.startDate=t.startDate),t.endDate&&(e.endDate=t.endDate);let n=await a(V,{input:e});u(`Cohort created: ${n.buiCreateCohort.name}`),s(t,n.buiCreateCohort);}catch(e){i(e);}});}function pt(o){let r=o.command("certificates").description("Buildmyiq certificates");r.command("list").description("List certificates").option("--course <id>","Filter by course ID").option("--learner <id>","Filter by learner ID").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(Q,{courseId:t.course,learnerId:t.learner});s(t,e.buiListCertificates,{headers:["ID","Serial","Learner","Status","Score","Issued"],rows:e.buiListCertificates.map(n=>[d(n.id,12),n.serial,d(n.learnerId,12),n.status,n.finalScore!=null?String(n.finalScore):"-",E(n.issuedAt)])});}catch(e){i(e);}}),r.command("issue").description("Issue a certificate").requiredOption("--course <id>","Course ID").requiredOption("--learner <id>","Learner ID").requiredOption("--serial <s>","Certificate serial").option("--enrollment <id>","Enrollment ID").option("--final-score <n>","Final score",I).option("--file <id>","Rendered certificate PDF File ID").option("--expires-at <iso>","Expiry (ISO date)").option("-f, --format <format>","Output format").action(async t=>{try{let e={courseId:t.course,learnerId:t.learner,serial:t.serial};t.enrollment&&(e.enrollmentId=t.enrollment),t.finalScore!==void 0&&(e.finalScore=t.finalScore),t.file&&(e.fileId=t.file),t.expiresAt&&(e.expiresAt=t.expiresAt);let n=await a(K,{input:e});u(`Certificate issued: ${n.buiIssueCertificate.serial}`),s(t,n.buiIssueCertificate);}catch(e){i(e);}}),r.command("revoke").description("Revoke a certificate").argument("<id>","Certificate ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(z,{id:t});u(`Certificate revoked: ${n.buiRevokeCertificate.serial}`),s(e,n.buiRevokeCertificate);}catch(n){i(n);}});}function lt(o){let r=o.command("assessments").description("Buildmyiq assessments & questions");r.command("list").description("List assessments for a course").requiredOption("--course <id>","Course ID").option("--status <s>","DRAFT|PUBLISHED|ARCHIVED").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(Y,{courseId:t.course,status:t.status?t.status.toUpperCase():void 0});s(t,e.buiListAssessments,{headers:["ID","Title","Type","Status","Pass","Attempts","Graded"],rows:e.buiListAssessments.map(n=>[d(n.id,12),n.title,n.type,n.status,n.passingScore!=null?String(n.passingScore):"-",n.maxAttempts!=null?String(n.maxAttempts):"-",n.isGraded?"yes":"no"])});}catch(e){i(e);}}),r.command("get").description("Get an assessment by id").argument("<id>","Assessment ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(J,{id:t});if(!n.buiAssessment)throw new m(`Assessment ${t} not found`);s(e,n.buiAssessment);}catch(n){i(n);}}),r.command("create").description("Create an assessment").requiredOption("--course <id>","Course ID").requiredOption("--title <title>","Assessment title").option("--type <t>","QUIZ|EXAM|ASSIGNMENT|SURVEY|PRACTICAL","QUIZ").option("--description <s>","Description").option("--passing-score <n>","Passing score",I).option("--max-attempts <n>","Max attempts",l).option("--time-limit-min <n>","Time limit (minutes)",l).option("--graded","Mark assessment as graded").option("-f, --format <format>","Output format").action(async t=>{try{let e={courseId:t.course,title:t.title,type:(t.type??"QUIZ").toUpperCase()};t.description&&(e.description=t.description),t.passingScore!==void 0&&(e.passingScore=t.passingScore),t.maxAttempts!==void 0&&(e.maxAttempts=t.maxAttempts),t.timeLimitMin!==void 0&&(e.timeLimitMin=t.timeLimitMin),t.graded&&(e.isGraded=!0);let n=await a(X,{input:e});u(`Assessment created: ${n.buiCreateAssessment.title}`),s(t,n.buiCreateAssessment);}catch(e){i(e);}}),r.command("publish").description("Publish an assessment").argument("<id>","Assessment ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(Z,{id:t});u(`Assessment published: ${n.buiPublishAssessment.title}`),s(e,n.buiPublishAssessment);}catch(n){i(n);}}),r.command("add-question").description("Add a question to an assessment").requiredOption("--assessment <id>","Assessment ID").requiredOption("--prompt <p>","Question prompt").option("--type <t>","SINGLE_CHOICE|MULTIPLE_CHOICE|TRUE_FALSE|SHORT_ANSWER|ESSAY|CODE","SINGLE_CHOICE").option("--points <n>","Points",I).option("--position <n>","Ordering position",l).option("--explanation <s>","Explanation").option("--options <json>","Options JSON").option("--answer-key <json>","Answer key JSON").option("-f, --format <format>","Output format").action(async t=>{try{let e={assessmentId:t.assessment,prompt:t.prompt,type:(t.type??"SINGLE_CHOICE").toUpperCase()};t.points!==void 0&&(e.points=t.points),t.position!==void 0&&(e.position=t.position),t.explanation&&(e.explanation=t.explanation),t.options&&(e.options=y("options",t.options)),t.answerKey&&(e.answerKey=y("answer-key",t.answerKey));let n=await a(tt,{input:e});u(`Question added: ${d(n.buiCreateQuestion.prompt,40)}`),s(t,n.buiCreateQuestion);}catch(e){i(e);}});}function mt(o){let r=o.command("submissions").description("Buildmyiq assessment submissions");r.command("list").description("List submissions").option("--assessment <id>","Filter by assessment ID").option("--learner <id>","Filter by learner ID").option("--status <s>","IN_PROGRESS|SUBMITTED|GRADING|GRADED|RETURNED").option("--limit <n>","Page size",l,50).option("--offset <n>","Offset",l,0).option("--cursor <c>","Pagination cursor").option("-f, --format <format>","Output format").action(async t=>{try{let e={};t.limit!==void 0&&(e.limit=t.limit),t.offset!==void 0&&(e.offset=t.offset),t.cursor&&(e.cursor=t.cursor);let n=await a(et,{assessmentId:t.assessment,learnerId:t.learner,status:t.status?t.status.toUpperCase():void 0,pagination:Object.keys(e).length?e:void 0});s(t,n.buiListSubmissions.items,{headers:["ID","Assessment","Learner","Attempt","Status","Score","Passed"],rows:n.buiListSubmissions.items.map(c=>[d(c.id,12),d(c.assessmentId,12),d(c.learnerId,12),String(c.attempt),c.status,c.score!=null?String(c.score):"-",c.passed==null?"-":c.passed?"yes":"no"])});}catch(e){i(e);}}),r.command("submit").description("Submit an assessment attempt").requiredOption("--assessment <id>","Assessment ID").option("--learner <id>","Learner ID (defaults to the calling actor)").option("--enrollment <id>","Enrollment ID").option("--attempt <n>","Attempt number",l).option("--answers <json>","Answers JSON").option("-f, --format <format>","Output format").action(async t=>{try{let e={assessmentId:t.assessment};t.learner&&(e.learnerId=t.learner),t.enrollment&&(e.enrollmentId=t.enrollment),t.attempt!==void 0&&(e.attempt=t.attempt),t.answers&&(e.answers=y("answers",t.answers));let n=await a(nt,{input:e});u(`Submission created: ${n.buiSubmitAssessment.id}`),s(t,n.buiSubmitAssessment);}catch(e){i(e);}}),r.command("grade").description("Grade a submission").argument("<id>","Submission ID").requiredOption("--score <n>","Score",I).option("--passed <bool>","true|false",S).option("--feedback <s>","Feedback").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={score:e.score};e.passed!==void 0&&(n.passed=e.passed),e.feedback&&(n.feedback=e.feedback);let c=await a(rt,{id:t,input:n});u(`Submission graded: ${c.buiGradeSubmission.status}`),s(e,c.buiGradeSubmission);}catch(n){i(n);}});}function ft(o){o.command("health").description("Buildmyiq subgraph liveness/identity probe (public)").option("-f, --format <format>","Output format").action(async r=>{try{let t=await w(ot);u(t.buiHealth),s(r,{health:t.buiHealth});}catch(t){i(t);}});}var Tt={id:"buildmyiq",version:"1.0.0",displayName:"Buildmyiq",dependsOn:["auth","workspaces"],register(o,r){T(r);let t=o.command("buildmyiq").description("Buildmyiq education, learning & development platform");it(t),st(t),at(t),ut(t),ct(t),dt(t),pt(t),lt(t),mt(t),ft(t);}},kn=Tt;module.exports=kn;
@@ -1,4 +1,4 @@
1
- import {a,b,h as h$1,p,g,i,o as o$1,d}from'../../chunk-SQSFZFQZ.js';import {o}from'../../chunk-UAFYTYK6.js';var L=`
1
+ import {a,b,h as h$1,p,g,i,o as o$1,d}from'../../chunk-W4JZR7RJ.js';import {o}from'../../chunk-YIY5IDXQ.js';var L=`
2
2
  query BuiGetCourse($id: ID!) {
3
3
  buiCourse(id: $id) {
4
4
  id workspaceId slug title summary description level status language
@@ -1,4 +1,4 @@
1
- import {a,c,h,p,n,g,s,i,l,o as o$1}from'../../chunk-SQSFZFQZ.js';import {o}from'../../chunk-UAFYTYK6.js';var I=`
1
+ import {a,c,h,p,n,g,s,i,l,o as o$1}from'../../chunk-W4JZR7RJ.js';import {o}from'../../chunk-YIY5IDXQ.js';var I=`
2
2
  query GetChannels($filter: ChannelFilterInput, $pagination: ChannelPaginationInput) {
3
3
  getChannels(filter: $filter, pagination: $pagination) {
4
4
  items { id name platform adapterType status connectionHealth priority createdAt }