@burdenoff/cli-sdk 2026.1021.1 → 2026.1021.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/dist/{chunk-NLEVVDXR.js → chunk-SQSFZFQZ.js} +1 -1
  2. package/dist/{chunk-IZXPWPKX.js → chunk-UAFYTYK6.js} +7 -7
  3. package/dist/core/index.cjs +7 -7
  4. package/dist/core/index.js +1 -1
  5. package/dist/index.cjs +7 -7
  6. package/dist/index.js +1 -1
  7. package/dist/modules/adaptercloud/index.js +1 -1
  8. package/dist/modules/artistrybase/index.cjs +3 -3
  9. package/dist/modules/artistrybase/index.js +1 -1
  10. package/dist/modules/assethandler/index.cjs +1 -1
  11. package/dist/modules/assethandler/index.js +1 -1
  12. package/dist/modules/atheletebridge/index.cjs +6 -6
  13. package/dist/modules/atheletebridge/index.js +1 -1
  14. package/dist/modules/auth/index.cjs +5 -5
  15. package/dist/modules/auth/index.js +1 -1
  16. package/dist/modules/billing/index.js +1 -1
  17. package/dist/modules/brainyrich/index.cjs +2 -2
  18. package/dist/modules/brainyrich/index.js +1 -1
  19. package/dist/modules/buildmyiq/index.cjs +1 -1
  20. package/dist/modules/buildmyiq/index.js +1 -1
  21. package/dist/modules/channels/index.cjs +3 -3
  22. package/dist/modules/channels/index.js +1 -1
  23. package/dist/modules/collabkin/index.js +1 -1
  24. package/dist/modules/comradecircle/index.cjs +3 -3
  25. package/dist/modules/comradecircle/index.js +1 -1
  26. package/dist/modules/conversations/index.js +1 -1
  27. package/dist/modules/coolandlovely/index.js +1 -1
  28. package/dist/modules/cosmicintersection/index.cjs +4 -4
  29. package/dist/modules/cosmicintersection/index.js +1 -1
  30. package/dist/modules/crewfoundry/index.cjs +4 -4
  31. package/dist/modules/crewfoundry/index.js +1 -1
  32. package/dist/modules/devportal/index.cjs +3 -3
  33. package/dist/modules/devportal/index.js +1 -1
  34. package/dist/modules/ecoimpacthub/index.js +1 -1
  35. package/dist/modules/eventfullymanaged/index.js +1 -1
  36. package/dist/modules/export/index.cjs +2 -2
  37. package/dist/modules/export/index.js +1 -1
  38. package/dist/modules/files/index.cjs +4 -4
  39. package/dist/modules/files/index.js +1 -1
  40. package/dist/modules/fluidgrids/index.js +1 -1
  41. package/dist/modules/ggnomad/index.cjs +3 -3
  42. package/dist/modules/ggnomad/index.js +1 -1
  43. package/dist/modules/govcitizenhub/index.cjs +2 -2
  44. package/dist/modules/govcitizenhub/index.js +1 -1
  45. package/dist/modules/groups/index.js +1 -1
  46. package/dist/modules/headshotmarketing/index.js +1 -1
  47. package/dist/modules/hookmovies/index.js +1 -1
  48. package/dist/modules/housingvista/index.cjs +6 -6
  49. package/dist/modules/housingvista/index.js +1 -1
  50. package/dist/modules/integrations/index.cjs +1 -1
  51. package/dist/modules/integrations/index.js +1 -1
  52. package/dist/modules/intelwatchtower/index.cjs +3 -3
  53. package/dist/modules/intelwatchtower/index.js +1 -1
  54. package/dist/modules/kadaikodi/index.js +1 -1
  55. package/dist/modules/labsofscience/index.cjs +3 -3
  56. package/dist/modules/labsofscience/index.js +1 -1
  57. package/dist/modules/manufacturedops/index.js +1 -1
  58. package/dist/modules/movethewheels/index.js +1 -1
  59. package/dist/modules/mybodyshield/index.cjs +4 -4
  60. package/dist/modules/mybodyshield/index.js +1 -1
  61. package/dist/modules/notifications/index.cjs +2 -2
  62. package/dist/modules/notifications/index.js +1 -1
  63. package/dist/modules/organizations/index.js +1 -1
  64. package/dist/modules/planmagnet/index.js +1 -1
  65. package/dist/modules/products/index.cjs +4 -4
  66. package/dist/modules/products/index.js +1 -1
  67. package/dist/modules/proserviceworld/index.js +1 -1
  68. package/dist/modules/rbac/index.js +1 -1
  69. package/dist/modules/sandbox/index.cjs +3 -3
  70. package/dist/modules/sandbox/index.js +1 -1
  71. package/dist/modules/scheduler/index.cjs +4 -4
  72. package/dist/modules/scheduler/index.js +1 -1
  73. package/dist/modules/security/index.cjs +2 -2
  74. package/dist/modules/security/index.js +1 -1
  75. package/dist/modules/semanticfed/index.js +1 -1
  76. package/dist/modules/store/index.cjs +2 -2
  77. package/dist/modules/store/index.js +1 -1
  78. package/dist/modules/subscriberbot/index.js +1 -1
  79. package/dist/modules/support/index.js +1 -1
  80. package/dist/modules/tags/index.cjs +2 -2
  81. package/dist/modules/tags/index.js +1 -1
  82. package/dist/modules/technospam/index.cjs +2 -2
  83. package/dist/modules/technospam/index.js +1 -1
  84. package/dist/modules/theculturepost/index.js +1 -1
  85. package/dist/modules/theglobalfuel/index.js +1 -1
  86. package/dist/modules/timecampus/index.js +1 -1
  87. package/dist/modules/tours/index.cjs +2 -2
  88. package/dist/modules/tours/index.js +1 -1
  89. package/dist/modules/vibecontrols/index.js +1 -1
  90. package/dist/modules/workspaces/index.cjs +3 -3
  91. package/dist/modules/workspaces/index.js +1 -1
  92. package/package.json +1 -1
@@ -1 +1 @@
1
- import {b as b$1,o,p,q as q$1}from'./chunk-IZXPWPKX.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-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,23 +1,23 @@
1
- import {existsSync,readFileSync,writeFileSync,chmodSync,unlinkSync,mkdirSync}from'fs';import {join}from'path';import {homedir}from'os';import {GraphQLClient}from'graphql-request';import C 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 d(){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 b(){return t()?.accessToken?!o():false}return {read:t,write:s,clear:i,isTokenExpired:o,isTokenExpiringSoon:u,isWorkspaceTokenExpired:d,isWorkspaceTokenExpiringSoon:m,isAuthenticated:b}}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 p=process.env[`${e.envPrefix}_${c}`];if(p)return p}let l=process.env[c];return l&&l.length>0?l:void 0}function o(c){if(!e.envPrefix)return;let l=process.env[`${e.envPrefix}_${c}`];return l&&l.length>0?l: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 d(c){s(),writeFileSync(r,JSON.stringify(c,null,2),{encoding:"utf8"});try{chmodSync(r,384);}catch{}}function m(c){return u()[c]}function b(c,l){let p=u();p[c]=l,d(p);}function a(){let c=u(),l=c.clientId||e.oidcClientId,p=c.oidcIssuer;if(!p){let f=c.globalEndpoint;f.includes("localhost")||f.includes("127.0.0.1")?p=f.replace(/\/graphql$/,"").replace(/\/global\/graphql$/,"/global"):p=e.oidcIssuerProd??"https://graphql.burdenoff.com/global";}return {oidcIssuer:p,clientId:l}}function g(){let c=u();if(c.productOrigin)return c.productOrigin;if(e.productOrigins)try{let l=new URL(c.workspaceEndpoint).hostname.toLowerCase();return e.productOrigins[l]}catch{return}}return {read:u,write:d,get:m,set:b,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 C(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(d=>setTimeout(d,s*1e3));let i=await C(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 C(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 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:`
2
2
  mutation AuthenticateApp($input: AuthenticateAppInput!) {
3
3
  authenticateApp(input: $input) {
4
4
  accessToken tokenType expiresIn scopes
5
5
  }
6
6
  }
7
- `,variables:{input:{clientId:n,clientSecret:r,scopes:t}}})});if(!i.ok){let u=await i.text().catch(()=>"Unknown error");throw new Error(`App authentication failed (${i.status}): ${u}`)}let o=await i.json();if(o.errors?.length)throw new Error(`App authentication failed: ${o.errors[0]?.message??"unknown error"}`);if(!o.data?.authenticateApp?.accessToken)throw new Error("App authentication failed: no access token returned");return o.data.authenticateApp}async function P(e,n,r,t){let i=await C(e,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n}`},body:JSON.stringify({query:`
7
+ `,variables:{input:{clientId:n,clientSecret:r,scopes:t}}})});if(!i.ok){let u=await i.text().catch(()=>"Unknown error");throw new Error(`App authentication failed (${i.status}): ${u}`)}let o=await i.json();if(o.errors?.length)throw new Error(`App authentication failed: ${o.errors[0]?.message??"unknown error"}`);if(!o.data?.authenticateApp?.accessToken)throw new Error("App authentication failed: no access token returned");return o.data.authenticateApp}async function P(e,n,r,t){let i=await x(e,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n}`},body:JSON.stringify({query:`
8
8
  mutation IssueWorkspaceToken($input: IssueWorkspaceTokenInput!) {
9
9
  issueWorkspaceToken(input: $input) {
10
10
  success token expiresAt scopes
11
11
  error { code message }
12
12
  }
13
13
  }
14
- `,variables:{input:{workspaceId:r,organizationId:t}}})});if(!i.ok){let d=await i.text().catch(()=>"Unknown error");throw new Error(`Workspace token request failed (${i.status}): ${d}`)}let o=await i.json();if(o.errors?.length)throw new Error(`Workspace token failed: ${o.errors[0]?.message??"unknown error"}`);let u=o.data?.issueWorkspaceToken;if(!u?.success||!u.token){let d=u?.error?.message??"Unknown error";throw new Error(`Workspace token failed: ${d}`)}return {token:u.token,expiresAt:u.expiresAt??"",scopes:u.scopes??[]}}async function pe(e,n){let t=await C(e,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n}`},body:JSON.stringify({query:`
14
+ `,variables:{input:{workspaceId:r,organizationId:t}}})});if(!i.ok){let l=await i.text().catch(()=>"Unknown error");throw new Error(`Workspace token request failed (${i.status}): ${l}`)}let o=await i.json();if(o.errors?.length)throw new Error(`Workspace token failed: ${o.errors[0]?.message??"unknown error"}`);let u=o.data?.issueWorkspaceToken;if(!u?.success||!u.token){let l=u?.error?.message??"Unknown error";throw new Error(`Workspace token failed: ${l}`)}return {token:u.token,expiresAt:u.expiresAt??"",scopes:u.scopes??[]}}async function pe(e,n){let t=await x(e,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n}`},body:JSON.stringify({query:`
15
15
  query MyWorkspaces($limit: Int) {
16
16
  myWorkspaces(limit: $limit) {
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 H(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 B(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(H(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(B(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 p=e.read();try{let f=await $(p.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 l=`
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=`
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(l,{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(B(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(),l=n.read(),p=new GraphQLClient(c.workspaceEndpoint),f=T(l),W=e.resolveProductOrigin();return W&&(f.Origin=W),p.setHeaders(f),R(p,a,g)}},reset(){r=null,t=null;}}}function _(){return !!(process.stdout.isTTY&&process.stdin.isTTY)}function V(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 d of n){let m=d[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(V(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:V,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 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 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 d of o.dependsOn??[]){let m=n.get(d);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");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),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",`
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 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);}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,H as j,D as k,N as l,j as m,Oe as n,y as o,x 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 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};
@@ -1,23 +1,23 @@
1
- 'use strict';var fs=require('fs'),path=require('path'),os=require('os'),graphqlRequest=require('graphql-request'),y=require('cross-fetch'),commander=require('commander');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var y__default=/*#__PURE__*/_interopDefault(y);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 d(){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 x(){return t()?.accessToken?!o():false}return {read:t,write:s,clear:i,isTokenExpired:o,isTokenExpiringSoon:u,isWorkspaceTokenExpired:d,isWorkspaceTokenExpiringSoon:m,isAuthenticated:x}}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 p=process.env[`${e.envPrefix}_${c}`];if(p)return p}let l=process.env[c];return l&&l.length>0?l:void 0}function o(c){if(!e.envPrefix)return;let l=process.env[`${e.envPrefix}_${c}`];return l&&l.length>0?l: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 d(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 x(c,l){let p=u();p[c]=l,d(p);}function a(){let c=u(),l=c.clientId||e.oidcClientId,p=c.oidcIssuer;if(!p){let f=c.globalEndpoint;f.includes("localhost")||f.includes("127.0.0.1")?p=f.replace(/\/graphql$/,"").replace(/\/global\/graphql$/,"/global"):p=e.oidcIssuerProd??"https://graphql.burdenoff.com/global";}return {oidcIssuer:p,clientId:l}}function g(){let c=u();if(c.productOrigin)return c.productOrigin;if(e.productOrigins)try{let l=new URL(c.workspaceEndpoint).hostname.toLowerCase();return e.productOrigins[l]}catch{return}}return {read:u,write:d,get:m,set:x,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 y__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(d=>setTimeout(d,s*1e3));let i=await y__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 y__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 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:`
2
2
  mutation AuthenticateApp($input: AuthenticateAppInput!) {
3
3
  authenticateApp(input: $input) {
4
4
  accessToken tokenType expiresIn scopes
5
5
  }
6
6
  }
7
- `,variables:{input:{clientId:n,clientSecret:r,scopes:t}}})});if(!i.ok){let u=await i.text().catch(()=>"Unknown error");throw new Error(`App authentication failed (${i.status}): ${u}`)}let o=await i.json();if(o.errors?.length)throw new Error(`App authentication failed: ${o.errors[0]?.message??"unknown error"}`);if(!o.data?.authenticateApp?.accessToken)throw new Error("App authentication failed: no access token returned");return o.data.authenticateApp}async function $(e,n,r,t){let i=await y__default.default(e,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n}`},body:JSON.stringify({query:`
7
+ `,variables:{input:{clientId:n,clientSecret:r,scopes:t}}})});if(!i.ok){let u=await i.text().catch(()=>"Unknown error");throw new Error(`App authentication failed (${i.status}): ${u}`)}let o=await i.json();if(o.errors?.length)throw new Error(`App authentication failed: ${o.errors[0]?.message??"unknown error"}`);if(!o.data?.authenticateApp?.accessToken)throw new Error("App authentication failed: no access token returned");return o.data.authenticateApp}async function $(e,n,r,t){let i=await C__default.default(e,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n}`},body:JSON.stringify({query:`
8
8
  mutation IssueWorkspaceToken($input: IssueWorkspaceTokenInput!) {
9
9
  issueWorkspaceToken(input: $input) {
10
10
  success token expiresAt scopes
11
11
  error { code message }
12
12
  }
13
13
  }
14
- `,variables:{input:{workspaceId:r,organizationId:t}}})});if(!i.ok){let d=await i.text().catch(()=>"Unknown error");throw new Error(`Workspace token request failed (${i.status}): ${d}`)}let o=await i.json();if(o.errors?.length)throw new Error(`Workspace token failed: ${o.errors[0]?.message??"unknown error"}`);let u=o.data?.issueWorkspaceToken;if(!u?.success||!u.token){let d=u?.error?.message??"Unknown error";throw new Error(`Workspace token failed: ${d}`)}return {token:u.token,expiresAt:u.expiresAt??"",scopes:u.scopes??[]}}async function le(e,n){let t=await y__default.default(e,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n}`},body:JSON.stringify({query:`
14
+ `,variables:{input:{workspaceId:r,organizationId:t}}})});if(!i.ok){let l=await i.text().catch(()=>"Unknown error");throw new Error(`Workspace token request failed (${i.status}): ${l}`)}let o=await i.json();if(o.errors?.length)throw new Error(`Workspace token failed: ${o.errors[0]?.message??"unknown error"}`);let u=o.data?.issueWorkspaceToken;if(!u?.success||!u.token){let l=u?.error?.message??"Unknown error";throw new Error(`Workspace token failed: ${l}`)}return {token:u.token,expiresAt:u.expiresAt??"",scopes:u.scopes??[]}}async function le(e,n){let t=await C__default.default(e,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n}`},body:JSON.stringify({query:`
15
15
  query MyWorkspaces($limit: Int) {
16
16
  myWorkspaces(limit: $limit) {
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 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 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(B(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 p=e.read();try{let f=await S(p.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 l=`
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=`
21
21
  mutation RefreshToken($token: String!) {
22
22
  refreshToken(token: $token) {
23
23
  accessToken
@@ -25,8 +25,8 @@
25
25
  expiresIn
26
26
  }
27
27
  }
28
- `;try{let f=(await c.request(l,{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(),l=n.read(),p=new graphqlRequest.GraphQLClient(c.workspaceEndpoint),f=v(l),F=e.resolveProductOrigin();return F&&(f.Origin=F),p.setHeaders(f),P(p,a,g)}},reset(){r=null,t=null;}}}function q(){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 q()?"table":"json"}function D(e){console.log(JSON.stringify(e,null,2));}function V(e,n){if(e.length===0)return;let r=e.map((i,o)=>{let u=i.length;for(let d of n){let m=d[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(H(e)){case "json":D(n);break;case "yaml":J(n);break;case "table":r?V(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:H,formatAndOutput:ve,printJson:D,printTable:V,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 h=class extends Error{exitCode;hint;constructor(n,r){super(n),this.name="CliUserError",this.exitCode=r?.exitCode??1,this.hint=r?.hint;}},C=class extends h{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 d of o.dependsOn??[]){let m=n.get(d);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");let s=j(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 $(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",`
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 C&&(e.output.printError(n.message),n.hint&&e.output.printInfo(n.hint),process.exit(n.exitCode)),n instanceof h&&(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=C;exports.CliInternalError=w;exports.CliUserError=h;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=B;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 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;
@@ -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-IZXPWPKX.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-UAFYTYK6.js';
package/dist/index.cjs CHANGED
@@ -1,23 +1,23 @@
1
- 'use strict';var fs=require('fs'),path=require('path'),os=require('os'),graphqlRequest=require('graphql-request'),y=require('cross-fetch'),commander=require('commander');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var y__default=/*#__PURE__*/_interopDefault(y);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 d(){let a=t();return a?.workspaceTokenExpiresAt?Date.now()>=a.workspaceTokenExpiresAt:false}function k(){let a=t();return a?.workspaceTokenExpiresAt?Date.now()+W>=a.workspaceTokenExpiresAt:false}function x(){return t()?.accessToken?!o():false}return {read:t,write:s,clear:i,isTokenExpired:o,isTokenExpiringSoon:u,isWorkspaceTokenExpired:d,isWorkspaceTokenExpiringSoon:k,isAuthenticated:x}}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 p=process.env[`${e.envPrefix}_${c}`];if(p)return p}let l=process.env[c];return l&&l.length>0?l:void 0}function o(c){if(!e.envPrefix)return;let l=process.env[`${e.envPrefix}_${c}`];return l&&l.length>0?l: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 d(c){s(),fs.writeFileSync(r,JSON.stringify(c,null,2),{encoding:"utf8"});try{fs.chmodSync(r,384);}catch{}}function k(c){return u()[c]}function x(c,l){let p=u();p[c]=l,d(p);}function a(){let c=u(),l=c.clientId||e.oidcClientId,p=c.oidcIssuer;if(!p){let f=c.globalEndpoint;f.includes("localhost")||f.includes("127.0.0.1")?p=f.replace(/\/graphql$/,"").replace(/\/global\/graphql$/,"/global"):p=e.oidcIssuerProd??"https://graphql.burdenoff.com/global";}return {oidcIssuer:p,clientId:l}}function g(){let c=u();if(c.productOrigin)return c.productOrigin;if(e.productOrigins)try{let l=new URL(c.workspaceEndpoint).hostname.toLowerCase();return e.productOrigins[l]}catch{return}}return {read:u,write:d,get:k,set:x,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 y__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(d=>setTimeout(d,s*1e3));let i=await y__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 y__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 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:`
2
2
  mutation AuthenticateApp($input: AuthenticateAppInput!) {
3
3
  authenticateApp(input: $input) {
4
4
  accessToken tokenType expiresIn scopes
5
5
  }
6
6
  }
7
- `,variables:{input:{clientId:n,clientSecret:r,scopes:t}}})});if(!i.ok){let u=await i.text().catch(()=>"Unknown error");throw new Error(`App authentication failed (${i.status}): ${u}`)}let o=await i.json();if(o.errors?.length)throw new Error(`App authentication failed: ${o.errors[0]?.message??"unknown error"}`);if(!o.data?.authenticateApp?.accessToken)throw new Error("App authentication failed: no access token returned");return o.data.authenticateApp}async function $(e,n,r,t){let i=await y__default.default(e,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n}`},body:JSON.stringify({query:`
7
+ `,variables:{input:{clientId:n,clientSecret:r,scopes:t}}})});if(!i.ok){let u=await i.text().catch(()=>"Unknown error");throw new Error(`App authentication failed (${i.status}): ${u}`)}let o=await i.json();if(o.errors?.length)throw new Error(`App authentication failed: ${o.errors[0]?.message??"unknown error"}`);if(!o.data?.authenticateApp?.accessToken)throw new Error("App authentication failed: no access token returned");return o.data.authenticateApp}async function $(e,n,r,t){let i=await C__default.default(e,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n}`},body:JSON.stringify({query:`
8
8
  mutation IssueWorkspaceToken($input: IssueWorkspaceTokenInput!) {
9
9
  issueWorkspaceToken(input: $input) {
10
10
  success token expiresAt scopes
11
11
  error { code message }
12
12
  }
13
13
  }
14
- `,variables:{input:{workspaceId:r,organizationId:t}}})});if(!i.ok){let d=await i.text().catch(()=>"Unknown error");throw new Error(`Workspace token request failed (${i.status}): ${d}`)}let o=await i.json();if(o.errors?.length)throw new Error(`Workspace token failed: ${o.errors[0]?.message??"unknown error"}`);let u=o.data?.issueWorkspaceToken;if(!u?.success||!u.token){let d=u?.error?.message??"Unknown error";throw new Error(`Workspace token failed: ${d}`)}return {token:u.token,expiresAt:u.expiresAt??"",scopes:u.scopes??[]}}async function le(e,n){let t=await y__default.default(e,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n}`},body:JSON.stringify({query:`
14
+ `,variables:{input:{workspaceId:r,organizationId:t}}})});if(!i.ok){let l=await i.text().catch(()=>"Unknown error");throw new Error(`Workspace token request failed (${i.status}): ${l}`)}let o=await i.json();if(o.errors?.length)throw new Error(`Workspace token failed: ${o.errors[0]?.message??"unknown error"}`);let u=o.data?.issueWorkspaceToken;if(!u?.success||!u.token){let l=u?.error?.message??"Unknown error";throw new Error(`Workspace token failed: ${l}`)}return {token:u.token,expiresAt:u.expiresAt??"",scopes:u.scopes??[]}}async function le(e,n){let t=await C__default.default(e,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n}`},body:JSON.stringify({query:`
15
15
  query MyWorkspaces($limit: Int) {
16
16
  myWorkspaces(limit: $limit) {
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 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 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(B(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 p=e.read();try{let f=await S(p.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 l=`
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=`
21
21
  mutation RefreshToken($token: String!) {
22
22
  refreshToken(token: $token) {
23
23
  accessToken
@@ -25,8 +25,8 @@
25
25
  expiresIn
26
26
  }
27
27
  }
28
- `;try{let f=(await c.request(l,{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(),l=n.read(),p=new graphqlRequest.GraphQLClient(c.workspaceEndpoint),f=v(l),F=e.resolveProductOrigin();return F&&(f.Origin=F),p.setHeaders(f),P(p,a,g)}},reset(){r=null,t=null;}}}function q(){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 q()?"table":"json"}function D(e){console.log(JSON.stringify(e,null,2));}function V(e,n){if(e.length===0)return;let r=e.map((i,o)=>{let u=i.length;for(let d of n){let k=d[o]??"";k.length>u&&(u=k.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(H(e)){case "json":D(n);break;case "yaml":J(n);break;case "table":r?V(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:H,formatAndOutput:ve,printJson:D,printTable:V,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 h=class extends Error{exitCode;hint;constructor(n,r){super(n),this.name="CliUserError",this.exitCode=r?.exitCode??1,this.hint=r?.hint;}},C=class extends h{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 d of o.dependsOn??[]){let k=n.get(d);k&&i(k,[...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");let s=j(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 $(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",`
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 C&&(e.output.printError(n.message),n.hint&&e.output.printInfo(n.hint),process.exit(n.exitCode)),n instanceof h&&(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=C;exports.CliInternalError=w;exports.CliUserError=h;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=B;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 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;
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-IZXPWPKX.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-UAFYTYK6.js';
@@ -1,4 +1,4 @@
1
- import {a,b as b$1,h as h$1,p,g,i,d}from'../../chunk-NLEVVDXR.js';import {o}from'../../chunk-IZXPWPKX.js';var S=`
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=`
2
2
  query AdaptercloudGetAdapter($id: ID!) {
3
3
  adaAdapter(id: $id) {
4
4
  id workspaceId name slug description kind status version vendor
@@ -101,13 +101,13 @@
101
101
  id title slug description medium visibility tags coverFileId createdAt
102
102
  }
103
103
  }
104
- `,q=`
104
+ `,V=`
105
105
  mutation ArtUpdateCollection($id: ID!, $input: ArtUpdateCollectionInput!) {
106
106
  artUpdateCollection(id: $id, input: $input) {
107
107
  id title slug description medium visibility tags coverFileId updatedAt
108
108
  }
109
109
  }
110
- `,V=`
110
+ `,q=`
111
111
  mutation ArtAddWorkToCollection($collectionId: ID!, $workId: ID!) {
112
112
  artAddWorkToCollection(collectionId: $collectionId, workId: $workId) {
113
113
  id title slug visibility updatedAt
@@ -331,4 +331,4 @@
331
331
  query ArtHealth {
332
332
  artHealth
333
333
  }
334
- `;function h(c,i){try{return JSON.parse(i)}catch{throw new l(`--${c} must be valid JSON`)}}function g(c){let i=Number.parseInt(c,10);if(Number.isNaN(i))throw new l(`Expected an integer but got "${c}"`);return i}function v(c){let i=Number.parseFloat(c);if(Number.isNaN(i))throw new l(`Expected a number but got "${c}"`);return i}function I(c){return c.split(",").map(i=>i.trim()).filter(i=>i.length>0)}function ht(c){let i=c.command("works").description("Artistrybase creative works");i.command("list").description("List works").option("--medium <m>","ART|AUDIO|MIXED|STORY|VIDEO").option("--status <s>","DRAFT|IN_REVIEW|APPROVED|RELEASED|ARCHIVED").option("--production <id>","Filter by production ID").option("--limit <n>","Page size",g,50).option("--offset <n>","Offset",g,0).option("-f, --format <format>","Output format").action(async e=>{try{let t={limit:e.limit,offset:e.offset},r=await d(O,{medium:e.medium?e.medium.toUpperCase():void 0,status:e.status?e.status.toUpperCase():void 0,productionId:e.production,pagination:t});a(e,r.artListWorks.items,{headers:["ID","Title","Medium","Status","Visibility"],rows:r.artListWorks.items.map(u=>[m(u.id,12),u.title,u.medium,u.status,u.visibility])});}catch(t){s(t);}}),i.command("get").description("Get a work by id").argument("<id>","Work ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r=await d(D,{id:e});if(!r.artWork)throw new l(`Work ${e} not found`);a(t,r.artWork);}catch(r){s(r);}}),i.command("create").description("Create a work").requiredOption("--title <t>","Title").option("--medium <m>","ART|AUDIO|MIXED|STORY|VIDEO","MIXED").option("--visibility <v>","PRIVATE|PUBLIC|UNLISTED","PRIVATE").option("--summary <s>","Summary").option("--production <id>","Production ID").option("--cover-file <id>","Cover file ID").option("--duration-ms <n>","Duration in ms",g).option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async e=>{try{let t={title:e.title,medium:(e.medium??"MIXED").toUpperCase(),visibility:(e.visibility??"PRIVATE").toUpperCase()};e.summary&&(t.summary=e.summary),e.production&&(t.productionId=e.production),e.coverFile&&(t.coverFileId=e.coverFile),e.durationMs!==void 0&&(t.durationMs=e.durationMs),e.tags&&(t.tags=I(e.tags));let r=await d(L,{input:t});p(`Work created: ${r.artCreateWork.title}`),a(e,r.artCreateWork);}catch(t){s(t);}}),i.command("update").description("Update a work").argument("<id>","Work ID").option("--title <t>","Title").option("--medium <m>","ART|AUDIO|MIXED|STORY|VIDEO").option("--visibility <v>","PRIVATE|PUBLIC|UNLISTED").option("--summary <s>","Summary").option("--production <id>","Production ID").option("--cover-file <id>","Cover file ID").option("--duration-ms <n>","Duration in ms",g).option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r={};if(t.title&&(r.title=t.title),t.medium&&(r.medium=t.medium.toUpperCase()),t.visibility&&(r.visibility=t.visibility.toUpperCase()),t.summary!==void 0&&(r.summary=t.summary),t.production&&(r.productionId=t.production),t.coverFile&&(r.coverFileId=t.coverFile),t.durationMs!==void 0&&(r.durationMs=t.durationMs),t.tags&&(r.tags=I(t.tags)),!Object.keys(r).length)throw new l("No updates specified");let u=await d(P,{id:e,input:r});p("Work updated"),a(t,u.artUpdateWork);}catch(r){s(r);}}),i.command("archive").description("Archive a work").argument("<id>","Work ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r=await d(x,{id:e});p(`Work archived: ${String(r.artArchiveWork)}`),a(t,{archived:r.artArchiveWork});}catch(r){s(r);}}),i.command("publish-version").description("Promote a version to the work's published current version").argument("<workId>","Work ID").requiredOption("--version <id>","Version ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r=await d(S,{workId:e,versionId:t.version});p("Version published"),a(t,r.artPublishWorkVersion);}catch(r){s(r);}});let n=c.command("versions").description("Artistrybase work versions");n.command("list").description("List versions for a work").requiredOption("--work <id>","Work ID").option("-f, --format <format>","Output format").action(async e=>{try{let t=await d(_,{workId:e.work});a(e,t.artListWorkVersions,{headers:["ID","No","Label","Published","File"],rows:t.artListWorkVersions.map(r=>[m(r.id,12),String(r.versionNo),r.label??"-",r.isPublished?"yes":"no",m(String(r.fileId??"-"),12)])});}catch(t){s(t);}}),n.command("add").description("Upload a new immutable version of a work").requiredOption("--work <id>","Work ID").option("--label <l>","Version label").option("--notes <n>","Notes").option("--file <id>","Source file ID").option("--checksum <c>","Checksum").option("-f, --format <format>","Output format").action(async e=>{try{let t={workId:e.work};e.label&&(t.label=e.label),e.notes&&(t.notes=e.notes),e.file&&(t.fileId=e.file),e.checksum&&(t.checksum=e.checksum);let r=await d($,{input:t});p(`Version added: v${r.artAddWorkVersion.versionNo}`),a(e,r.artAddWorkVersion);}catch(t){s(t);}});let o=c.command("assets").description("Artistrybase work assets");o.command("list").description("List assets for a work").requiredOption("--work <id>","Work ID").option("-f, --format <format>","Output format").action(async e=>{try{let t=await d(N,{workId:e.work});a(e,t.artListAssets,{headers:["ID","Kind","File","MIME"],rows:t.artListAssets.map(r=>[m(r.id,12),r.kind,m(r.fileId,12),r.mimeType??"-"])});}catch(t){s(t);}}),o.command("add").description("Attach a file asset to a work").requiredOption("--work <id>","Work ID").requiredOption("--file <id>","File ID").option("--kind <k>","SOURCE|MASTER|PREVIEW|COVER|CAPTION|ATTACHMENT","SOURCE").option("--mime-type <t>","MIME type").option("--version <id>","Version ID").option("--width <n>","Width",g).option("--height <n>","Height",g).option("--duration-ms <n>","Duration in ms",g).option("-f, --format <format>","Output format").action(async e=>{try{let t={workId:e.work,fileId:e.file,kind:(e.kind??"SOURCE").toUpperCase()};e.mimeType&&(t.mimeType=e.mimeType),e.version&&(t.versionId=e.version),e.width!==void 0&&(t.width=e.width),e.height!==void 0&&(t.height=e.height),e.durationMs!==void 0&&(t.durationMs=e.durationMs);let r=await d(U,{input:t});p(`Asset added: ${r.artAddAsset.kind}`),a(e,r.artAddAsset);}catch(t){s(t);}});}function vt(c){let i=c.command("collections").description("Artistrybase curated collections");i.command("list").description("List collections").option("--visibility <v>","PRIVATE|PUBLIC|UNLISTED").option("--limit <n>","Page size",g,50).option("--offset <n>","Offset",g,0).option("-f, --format <format>","Output format").action(async n=>{try{let o=await d(W,{visibility:n.visibility?n.visibility.toUpperCase():void 0,pagination:{limit:n.limit,offset:n.offset}});a(n,o.artListCollections.items,{headers:["ID","Title","Slug","Medium","Visibility"],rows:o.artListCollections.items.map(e=>[m(e.id,12),e.title,e.slug,e.medium??"-",e.visibility])});}catch(o){s(o);}}),i.command("get").description("Get a collection by id").argument("<id>","Collection ID").option("-f, --format <format>","Output format").action(async(n,o)=>{try{let e=await d(F,{id:n});if(!e.artCollection)throw new l(`Collection ${n} not found`);a(o,e.artCollection);}catch(e){s(e);}}),i.command("create").description("Create a collection").requiredOption("--title <t>","Title").requiredOption("--slug <s>","URL slug").option("--description <d>","Description").option("--medium <m>","ART|AUDIO|MIXED|STORY|VIDEO").option("--visibility <v>","PRIVATE|PUBLIC|UNLISTED","PRIVATE").option("--cover-file <id>","Cover file ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async n=>{try{let o={title:n.title,slug:n.slug,visibility:(n.visibility??"PRIVATE").toUpperCase()};n.description&&(o.description=n.description),n.medium&&(o.medium=n.medium.toUpperCase()),n.coverFile&&(o.coverFileId=n.coverFile),n.tags&&(o.tags=I(n.tags));let e=await d(M,{input:o});p(`Collection created: ${e.artCreateCollection.title}`),a(n,e.artCreateCollection);}catch(o){s(o);}}),i.command("update").description("Update a collection").argument("<id>","Collection ID").option("--title <t>","Title").option("--description <d>","Description").option("--medium <m>","ART|AUDIO|MIXED|STORY|VIDEO").option("--visibility <v>","PRIVATE|PUBLIC|UNLISTED").option("--cover-file <id>","Cover file ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(n,o)=>{try{let e={};if(o.title&&(e.title=o.title),o.description!==void 0&&(e.description=o.description),o.medium&&(e.medium=o.medium.toUpperCase()),o.visibility&&(e.visibility=o.visibility.toUpperCase()),o.coverFile&&(e.coverFileId=o.coverFile),o.tags&&(e.tags=I(o.tags)),!Object.keys(e).length)throw new l("No updates specified");let t=await d(q,{id:n,input:e});p("Collection updated"),a(o,t.artUpdateCollection);}catch(e){s(e);}}),i.command("add-work").description("Add a work to a collection").argument("<collectionId>","Collection ID").requiredOption("--work <id>","Work ID").option("-f, --format <format>","Output format").action(async(n,o)=>{try{let e=await d(V,{collectionId:n,workId:o.work});p("Work added to collection"),a(o,e.artAddWorkToCollection);}catch(e){s(e);}}),i.command("remove-work").description("Remove a work from a collection").argument("<collectionId>","Collection ID").requiredOption("--work <id>","Work ID").option("-f, --format <format>","Output format").action(async(n,o)=>{try{let e=await d(B,{collectionId:n,workId:o.work});p("Work removed from collection"),a(o,e.artRemoveWorkFromCollection);}catch(e){s(e);}});}function bt(c){let i=c.command("productions").description("Artistrybase productions");i.command("list").description("List productions").option("--status <s>","Production status").option("--limit <n>","Page size",g,50).option("--offset <n>","Offset",g,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await d(H,{status:e.status?e.status.toUpperCase():void 0,pagination:{limit:e.limit,offset:e.offset}});a(e,t.artListProductions.items,{headers:["ID","Title","Slug","Medium","Status"],rows:t.artListProductions.items.map(r=>[m(r.id,12),r.title,r.slug,r.medium,r.status])});}catch(t){s(t);}}),i.command("get").description("Get a production by id").argument("<id>","Production ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r=await d(G,{id:e});if(!r.artProduction)throw new l(`Production ${e} not found`);a(t,r.artProduction);}catch(r){s(r);}}),i.command("create").description("Create a production").requiredOption("--title <t>","Title").requiredOption("--slug <s>","URL slug").option("--medium <m>","ART|AUDIO|MIXED|STORY|VIDEO","MIXED").option("--synopsis <s>","Synopsis").option("--start-date <iso>","Start date (ISO)").option("--target-date <iso>","Target date (ISO)").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async e=>{try{let t={title:e.title,slug:e.slug,medium:(e.medium??"MIXED").toUpperCase()};e.synopsis&&(t.synopsis=e.synopsis),e.startDate&&(t.startDate=e.startDate),e.targetDate&&(t.targetDate=e.targetDate),e.tags&&(t.tags=I(e.tags));let r=await d(j,{input:t});p(`Production created: ${r.artCreateProduction.title}`),a(e,r.artCreateProduction);}catch(t){s(t);}}),i.command("update").description("Update a production").argument("<id>","Production ID").option("--title <t>","Title").option("--medium <m>","ART|AUDIO|MIXED|STORY|VIDEO").option("--synopsis <s>","Synopsis").option("--start-date <iso>","Start date (ISO)").option("--target-date <iso>","Target date (ISO)").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r={};if(t.title&&(r.title=t.title),t.medium&&(r.medium=t.medium.toUpperCase()),t.synopsis!==void 0&&(r.synopsis=t.synopsis),t.startDate&&(r.startDate=t.startDate),t.targetDate&&(r.targetDate=t.targetDate),t.tags&&(r.tags=I(t.tags)),!Object.keys(r).length)throw new l("No updates specified");let u=await d(K,{id:e,input:r});p("Production updated"),a(t,u.artUpdateProduction);}catch(r){s(r);}}),i.command("transition").description("Advance a production through its lifecycle").argument("<id>","Production ID").requiredOption("--status <s>","PLANNING|IN_PRODUCTION|POST|REVIEW|ON_HOLD|RELEASED|CANCELLED").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r=await d(z,{id:e,status:t.status.toUpperCase()});p(`Production status set to ${r.artTransitionProduction.status}`),a(t,r.artTransitionProduction);}catch(r){s(r);}});let n=c.command("members").description("Artistrybase production members");n.command("list").description("List members for a production").requiredOption("--production <id>","Production ID").option("-f, --format <format>","Output format").action(async e=>{try{let t=await d(J,{productionId:e.production});a(e,t.artListProductionMembers,{headers:["ID","Member","Role","Title","Lead"],rows:t.artListProductionMembers.map(r=>[m(r.id,12),m(r.memberId,12),r.role,r.title??"-",r.isLead?"yes":"no"])});}catch(t){s(t);}}),n.command("add").description("Add a member to a production").requiredOption("--production <id>","Production ID").requiredOption("--member <id>","Member user ID").option("--role <r>","OWNER|PRODUCER|EDITOR|CREATOR|COLLABORATOR|REVIEWER|VIEWER","COLLABORATOR").option("--title <t>","Title").option("--lead","Mark as lead").option("-f, --format <format>","Output format").action(async e=>{try{let t={productionId:e.production,memberId:e.member,role:(e.role??"COLLABORATOR").toUpperCase(),isLead:e.lead??!1};e.title&&(t.title=e.title);let r=await d(Y,{input:t});p("Member added"),a(e,r.artAddProductionMember);}catch(t){s(t);}}),n.command("remove").description("Remove a production member").argument("<id>","Member ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r=await d(X,{id:e});p(`Member removed: ${String(r.artRemoveProductionMember)}`),a(t,{removed:r.artRemoveProductionMember});}catch(r){s(r);}});let o=c.command("references").description("Artistrybase production references");o.command("list").description("List references for a production").requiredOption("--production <id>","Production ID").option("-f, --format <format>","Output format").action(async e=>{try{let t=await d(Q,{productionId:e.production});a(e,t.artListReferences,{headers:["ID","Title","URL","File"],rows:t.artListReferences.map(r=>[m(r.id,12),r.title,m(r.url??"-",30),r.fileId?m(r.fileId,12):"-"])});}catch(t){s(t);}}),o.command("add").description("Add a reference to a production").requiredOption("--production <id>","Production ID").requiredOption("--title <t>","Title").option("--url <u>","Reference URL").option("--note <n>","Note").option("--file <id>","Attached file ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async e=>{try{let t={productionId:e.production,title:e.title};e.url&&(t.url=e.url),e.note&&(t.note=e.note),e.file&&(t.fileId=e.file),e.tags&&(t.tags=I(e.tags));let r=await d(Z,{input:t});p(`Reference added: ${r.artAddReference.title}`),a(e,r.artAddReference);}catch(t){s(t);}}),o.command("remove").description("Remove a reference").argument("<id>","Reference ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r=await d(tt,{id:e});p(`Reference removed: ${String(r.artRemoveReference)}`),a(t,{removed:r.artRemoveReference});}catch(r){s(r);}});}function Et(c){let i=c.command("reviews").description("Artistrybase review rounds");i.command("list").description("List review rounds for a work").requiredOption("--work <id>","Work ID").option("--status <s>","OPEN|CHANGES_REQUESTED|APPROVED|CLOSED").option("-f, --format <format>","Output format").action(async t=>{try{let r=await d(et,{workId:t.work,status:t.status?t.status.toUpperCase():void 0});a(t,r.artListReviewRounds,{headers:["ID","Round","Status","Title"],rows:r.artListReviewRounds.map(u=>[m(u.id,12),String(u.round),u.status,u.title??"-"])});}catch(r){s(r);}}),i.command("get").description("Get a review round by id").argument("<id>","Review round ID").option("-f, --format <format>","Output format").action(async(t,r)=>{try{let u=await d(rt,{id:t});if(!u.artReviewRound)throw new l(`Review round ${t} not found`);a(r,u.artReviewRound);}catch(u){s(u);}}),i.command("open").description("Open a review round on a work").requiredOption("--work <id>","Work ID").option("--version <id>","Version ID").option("--title <t>","Title").option("--due-date <iso>","Due date (ISO)").option("-f, --format <format>","Output format").action(async t=>{try{let r={workId:t.work};t.version&&(r.versionId=t.version),t.title&&(r.title=t.title),t.dueDate&&(r.dueDate=t.dueDate);let u=await d(ot,{input:r});p(`Review round opened: round ${u.artOpenReviewRound.round}`),a(t,u.artOpenReviewRound);}catch(r){s(r);}}),i.command("transition").description("Advance a review round through its lifecycle").argument("<id>","Review round ID").requiredOption("--status <s>","OPEN|CHANGES_REQUESTED|APPROVED|CLOSED").option("-f, --format <format>","Output format").action(async(t,r)=>{try{let u=await d(it,{id:t,status:r.status.toUpperCase()});p(`Review round status set to ${u.artTransitionReviewRound.status}`),a(r,u.artTransitionReviewRound);}catch(u){s(u);}});let n=c.command("feedback").description("Artistrybase review feedback");n.command("add").description("Add feedback to a review round").requiredOption("--round <id>","Review round ID").requiredOption("--body <text>","Feedback body").option("--anchor-type <t>","GENERAL|TIMECODE|PAGE|CHAPTER|PIN","GENERAL").option("--anchor-value <v>","Anchor value").option("-f, --format <format>","Output format").action(async t=>{try{let r={reviewRoundId:t.round,body:t.body,anchorType:(t.anchorType??"GENERAL").toUpperCase()};t.anchorValue&&(r.anchorValue=t.anchorValue);let u=await d(nt,{input:r});p("Feedback added"),a(t,u.artAddFeedback);}catch(r){s(r);}}),n.command("resolve").description("Resolve (or mark) a feedback item").argument("<id>","Feedback ID").requiredOption("--status <s>","OPEN|RESOLVED|WONT_FIX").option("-f, --format <format>","Output format").action(async(t,r)=>{try{let u=await d(st,{id:t,status:r.status.toUpperCase()});p(`Feedback status set to ${u.artResolveFeedback.status}`),a(r,u.artResolveFeedback);}catch(u){s(u);}}),c.command("approvals").description("Artistrybase review approvals").command("record").description("Record an approval decision on a review round").requiredOption("--round <id>","Review round ID").requiredOption("--decision <d>","PENDING|APPROVED|REJECTED").option("--comment <c>","Comment").option("-f, --format <format>","Output format").action(async t=>{try{let r={reviewRoundId:t.round,decision:t.decision.toUpperCase()};t.comment&&(r.comment=t.comment);let u=await d(at,{input:r});p(`Approval recorded: ${u.artRecordApproval.decision}`),a(t,u.artRecordApproval);}catch(r){s(r);}});let e=c.command("releases").description("Artistrybase release pipeline");e.command("list").description("List releases for a work").requiredOption("--work <id>","Work ID").option("--status <s>","SCHEDULED|PUBLISHED|UNPUBLISHED|FAILED").option("-f, --format <format>","Output format").action(async t=>{try{let r=await d(dt,{workId:t.work,status:t.status?t.status.toUpperCase():void 0});a(t,r.artListReleases,{headers:["ID","Channel","Status","Visibility"],rows:r.artListReleases.map(u=>[m(u.id,12),u.channel,u.status,u.visibility])});}catch(r){s(r);}}),e.command("create").description("Create a release for a work").requiredOption("--work <id>","Work ID").option("--version <id>","Version ID").option("--channel <c>","Release channel").option("--notes <n>","Notes").option("--visibility <v>","PRIVATE|PUBLIC|UNLISTED","PUBLIC").option("--scheduled-for <iso>","Scheduled for (ISO)").option("-f, --format <format>","Output format").action(async t=>{try{let r={workId:t.work,visibility:(t.visibility??"PUBLIC").toUpperCase()};t.version&&(r.versionId=t.version),t.channel&&(r.channel=t.channel),t.notes&&(r.notes=t.notes),t.scheduledFor&&(r.scheduledFor=t.scheduledFor);let u=await d(ct,{input:r});p(`Release created on channel ${u.artCreateRelease.channel}`),a(t,u.artCreateRelease);}catch(r){s(r);}}),e.command("publish").description("Publish a release").argument("<id>","Release ID").option("-f, --format <format>","Output format").action(async(t,r)=>{try{let u=await d(ut,{id:t});p(`Release published: ${u.artPublishRelease.status}`),a(r,u.artPublishRelease);}catch(u){s(u);}});}function Tt(c){let i=c.command("portfolios").description("Artistrybase public portfolios");i.command("list").description("List portfolios").option("--visibility <v>","PRIVATE|PUBLIC|UNLISTED").option("--limit <n>","Page size",g,50).option("--offset <n>","Offset",g,0).option("-f, --format <format>","Output format").action(async o=>{try{let e=await d(pt,{visibility:o.visibility?o.visibility.toUpperCase():void 0,pagination:{limit:o.limit,offset:o.offset}});a(o,e.artListPortfolios.items,{headers:["ID","Handle","Display Name","Visibility","Followers"],rows:e.artListPortfolios.items.map(t=>[m(t.id,12),t.handle,t.displayName,t.visibility,String(t.followerCount)])});}catch(e){s(e);}}),i.command("get").description("Get a portfolio by id").argument("<id>","Portfolio ID").option("-f, --format <format>","Output format").action(async(o,e)=>{try{let t=await d(lt,{id:o});if(!t.artPortfolio)throw new l(`Portfolio ${o} not found`);a(e,t.artPortfolio);}catch(t){s(t);}}),i.command("create").description("Create a portfolio").requiredOption("--handle <h>","Unique handle").requiredOption("--display-name <n>","Display name").option("--bio <b>","Bio").option("--owner <id>","Owner user ID").option("--visibility <v>","PRIVATE|PUBLIC|UNLISTED","PUBLIC").option("--avatar-file <id>","Avatar file ID").option("--banner-file <id>","Banner file ID").option("--featured-works <csv>","Comma-separated work IDs").option("--links <json>","Links JSON").option("-f, --format <format>","Output format").action(async o=>{try{let e={handle:o.handle,displayName:o.displayName,visibility:(o.visibility??"PUBLIC").toUpperCase()};o.bio&&(e.bio=o.bio),o.owner&&(e.ownerId=o.owner),o.avatarFile&&(e.avatarFileId=o.avatarFile),o.bannerFile&&(e.bannerFileId=o.bannerFile),o.featuredWorks&&(e.featuredWorkIds=I(o.featuredWorks)),o.links&&(e.links=h("links",o.links));let t=await d(mt,{input:e});p(`Portfolio created: ${t.artCreatePortfolio.handle}`),a(o,t.artCreatePortfolio);}catch(e){s(e);}}),i.command("update").description("Update a portfolio").argument("<id>","Portfolio ID").option("--display-name <n>","Display name").option("--bio <b>","Bio").option("--visibility <v>","PRIVATE|PUBLIC|UNLISTED").option("--avatar-file <id>","Avatar file ID").option("--banner-file <id>","Banner file ID").option("--featured-works <csv>","Comma-separated work IDs").option("--links <json>","Links JSON").option("-f, --format <format>","Output format").action(async(o,e)=>{try{let t={};if(e.displayName&&(t.displayName=e.displayName),e.bio!==void 0&&(t.bio=e.bio),e.visibility&&(t.visibility=e.visibility.toUpperCase()),e.avatarFile&&(t.avatarFileId=e.avatarFile),e.bannerFile&&(t.bannerFileId=e.bannerFile),e.featuredWorks&&(t.featuredWorkIds=I(e.featuredWorks)),e.links&&(t.links=h("links",e.links)),!Object.keys(t).length)throw new l("No updates specified");let r=await d(ft,{id:o,input:t});p("Portfolio updated"),a(e,r.artUpdatePortfolio);}catch(t){s(t);}}),i.command("archive").description("Archive a portfolio").argument("<id>","Portfolio ID").option("-f, --format <format>","Output format").action(async(o,e)=>{try{let t=await d(gt,{id:o});p(`Portfolio archived: ${String(t.artArchivePortfolio)}`),a(e,{archived:t.artArchivePortfolio});}catch(t){s(t);}}),i.command("follow").description("Follow a portfolio").argument("<portfolioId>","Portfolio ID").option("--no-notify","Do not receive notifications").option("-f, --format <format>","Output format").action(async(o,e)=>{try{let t=await d(It,{portfolioId:o,notify:e.notify});p("Portfolio followed"),a(e,t.artFollowPortfolio);}catch(t){s(t);}}),i.command("unfollow").description("Unfollow a portfolio").argument("<portfolioId>","Portfolio ID").option("-f, --format <format>","Output format").action(async(o,e)=>{try{let t=await d(wt,{portfolioId:o});p(`Portfolio unfollowed: ${String(t.artUnfollowPortfolio)}`),a(e,{unfollowed:t.artUnfollowPortfolio});}catch(t){s(t);}});let n=c.command("licenses").description("Artistrybase work licenses");n.command("list").description("List licenses for a work").requiredOption("--work <id>","Work ID").option("-f, --format <format>","Output format").action(async o=>{try{let e=await d(Rt,{workId:o.work});a(o,e.artListLicenses,{headers:["ID","Name","Model","Status","Price","Currency"],rows:e.artListLicenses.map(t=>[m(t.id,12),t.name,t.model,t.status,String(t.priceAmount),t.currency])});}catch(e){s(e);}}),n.command("create").description("Create a license for a work").requiredOption("--work <id>","Work ID").requiredOption("--name <n>","License name").option("--model <m>","FREE|LICENSE|PURCHASE|MEMBERSHIP","FREE").option("--price <n>","Price amount",v).option("--currency <c>","Currency code").option("--spdx <s>","SPDX identifier").option("--terms <t>","License terms").option("--attribution <a>","Attribution text").option("-f, --format <format>","Output format").action(async o=>{try{let e={workId:o.work,name:o.name,model:(o.model??"FREE").toUpperCase()};o.price!==void 0&&(e.priceAmount=o.price),o.currency&&(e.currency=o.currency),o.spdx&&(e.spdx=o.spdx),o.terms&&(e.terms=o.terms),o.attribution&&(e.attribution=o.attribution);let t=await d(At,{input:e});p(`License created: ${t.artCreateLicense.name}`),a(o,t.artCreateLicense);}catch(e){s(e);}}),n.command("update").description("Update a license").argument("<id>","License ID").option("--name <n>","License name").option("--model <m>","FREE|LICENSE|PURCHASE|MEMBERSHIP").option("--price <n>","Price amount",v).option("--currency <c>","Currency code").option("--spdx <s>","SPDX identifier").option("--terms <t>","License terms").option("--attribution <a>","Attribution text").option("-f, --format <format>","Output format").action(async(o,e)=>{try{let t={};if(e.name&&(t.name=e.name),e.model&&(t.model=e.model.toUpperCase()),e.price!==void 0&&(t.priceAmount=e.price),e.currency&&(t.currency=e.currency),e.spdx&&(t.spdx=e.spdx),e.terms&&(t.terms=e.terms),e.attribution&&(t.attribution=e.attribution),!Object.keys(t).length)throw new l("No updates specified");let r=await d(kt,{id:o,input:t});p("License updated"),a(e,r.artUpdateLicense);}catch(t){s(t);}}),n.command("activate").description("Activate a license").argument("<id>","License ID").option("-f, --format <format>","Output format").action(async(o,e)=>{try{let t=await d(yt,{id:o});p(`License activated: ${t.artActivateLicense.status}`),a(e,t.artActivateLicense);}catch(t){s(t);}});}function Ot(c){c.command("health").description("Artistrybase subgraph health check (public)").option("-f, --format <format>","Output format").action(async i=>{try{let n=await C(Ct);p(n.artHealth),a(i,{health:n.artHealth});}catch(n){s(n);}});}var qt={id:"artistrybase",version:"1.0.0",displayName:"Artistrybase",dependsOn:["auth","workspaces"],register(c,i){T(i);let n=c.command("artistrybase").description("Artistrybase multi-medium creative platform");ht(n),vt(n),bt(n),Et(n),Tt(n),Ot(n);}},Cr=qt;module.exports=Cr;
334
+ `;function h(c,i){try{return JSON.parse(i)}catch{throw new l(`--${c} must be valid JSON`)}}function g(c){let i=Number.parseInt(c,10);if(Number.isNaN(i))throw new l(`Expected an integer but got "${c}"`);return i}function v(c){let i=Number.parseFloat(c);if(Number.isNaN(i))throw new l(`Expected a number but got "${c}"`);return i}function I(c){return c.split(",").map(i=>i.trim()).filter(i=>i.length>0)}function ht(c){let i=c.command("works").description("Artistrybase creative works");i.command("list").description("List works").option("--medium <m>","ART|AUDIO|MIXED|STORY|VIDEO").option("--status <s>","DRAFT|IN_REVIEW|APPROVED|RELEASED|ARCHIVED").option("--production <id>","Filter by production ID").option("--limit <n>","Page size",g,50).option("--offset <n>","Offset",g,0).option("-f, --format <format>","Output format").action(async e=>{try{let t={limit:e.limit,offset:e.offset},r=await d(O,{medium:e.medium?e.medium.toUpperCase():void 0,status:e.status?e.status.toUpperCase():void 0,productionId:e.production,pagination:t});a(e,r.artListWorks.items,{headers:["ID","Title","Medium","Status","Visibility"],rows:r.artListWorks.items.map(u=>[m(u.id,12),u.title,u.medium,u.status,u.visibility])});}catch(t){s(t);}}),i.command("get").description("Get a work by id").argument("<id>","Work ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r=await d(D,{id:e});if(!r.artWork)throw new l(`Work ${e} not found`);a(t,r.artWork);}catch(r){s(r);}}),i.command("create").description("Create a work").requiredOption("--title <t>","Title").option("--medium <m>","ART|AUDIO|MIXED|STORY|VIDEO","MIXED").option("--visibility <v>","PRIVATE|PUBLIC|UNLISTED","PRIVATE").option("--summary <s>","Summary").option("--production <id>","Production ID").option("--cover-file <id>","Cover file ID").option("--duration-ms <n>","Duration in ms",g).option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async e=>{try{let t={title:e.title,medium:(e.medium??"MIXED").toUpperCase(),visibility:(e.visibility??"PRIVATE").toUpperCase()};e.summary&&(t.summary=e.summary),e.production&&(t.productionId=e.production),e.coverFile&&(t.coverFileId=e.coverFile),e.durationMs!==void 0&&(t.durationMs=e.durationMs),e.tags&&(t.tags=I(e.tags));let r=await d(L,{input:t});p(`Work created: ${r.artCreateWork.title}`),a(e,r.artCreateWork);}catch(t){s(t);}}),i.command("update").description("Update a work").argument("<id>","Work ID").option("--title <t>","Title").option("--medium <m>","ART|AUDIO|MIXED|STORY|VIDEO").option("--visibility <v>","PRIVATE|PUBLIC|UNLISTED").option("--summary <s>","Summary").option("--production <id>","Production ID").option("--cover-file <id>","Cover file ID").option("--duration-ms <n>","Duration in ms",g).option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r={};if(t.title&&(r.title=t.title),t.medium&&(r.medium=t.medium.toUpperCase()),t.visibility&&(r.visibility=t.visibility.toUpperCase()),t.summary!==void 0&&(r.summary=t.summary),t.production&&(r.productionId=t.production),t.coverFile&&(r.coverFileId=t.coverFile),t.durationMs!==void 0&&(r.durationMs=t.durationMs),t.tags&&(r.tags=I(t.tags)),!Object.keys(r).length)throw new l("No updates specified");let u=await d(P,{id:e,input:r});p("Work updated"),a(t,u.artUpdateWork);}catch(r){s(r);}}),i.command("archive").description("Archive a work").argument("<id>","Work ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r=await d(x,{id:e});p(`Work archived: ${String(r.artArchiveWork)}`),a(t,{archived:r.artArchiveWork});}catch(r){s(r);}}),i.command("publish-version").description("Promote a version to the work's published current version").argument("<workId>","Work ID").requiredOption("--version <id>","Version ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r=await d(S,{workId:e,versionId:t.version});p("Version published"),a(t,r.artPublishWorkVersion);}catch(r){s(r);}});let n=c.command("versions").description("Artistrybase work versions");n.command("list").description("List versions for a work").requiredOption("--work <id>","Work ID").option("-f, --format <format>","Output format").action(async e=>{try{let t=await d(_,{workId:e.work});a(e,t.artListWorkVersions,{headers:["ID","No","Label","Published","File"],rows:t.artListWorkVersions.map(r=>[m(r.id,12),String(r.versionNo),r.label??"-",r.isPublished?"yes":"no",m(String(r.fileId??"-"),12)])});}catch(t){s(t);}}),n.command("add").description("Upload a new immutable version of a work").requiredOption("--work <id>","Work ID").option("--label <l>","Version label").option("--notes <n>","Notes").option("--file <id>","Source file ID").option("--checksum <c>","Checksum").option("-f, --format <format>","Output format").action(async e=>{try{let t={workId:e.work};e.label&&(t.label=e.label),e.notes&&(t.notes=e.notes),e.file&&(t.fileId=e.file),e.checksum&&(t.checksum=e.checksum);let r=await d($,{input:t});p(`Version added: v${r.artAddWorkVersion.versionNo}`),a(e,r.artAddWorkVersion);}catch(t){s(t);}});let o=c.command("assets").description("Artistrybase work assets");o.command("list").description("List assets for a work").requiredOption("--work <id>","Work ID").option("-f, --format <format>","Output format").action(async e=>{try{let t=await d(N,{workId:e.work});a(e,t.artListAssets,{headers:["ID","Kind","File","MIME"],rows:t.artListAssets.map(r=>[m(r.id,12),r.kind,m(r.fileId,12),r.mimeType??"-"])});}catch(t){s(t);}}),o.command("add").description("Attach a file asset to a work").requiredOption("--work <id>","Work ID").requiredOption("--file <id>","File ID").option("--kind <k>","SOURCE|MASTER|PREVIEW|COVER|CAPTION|ATTACHMENT","SOURCE").option("--mime-type <t>","MIME type").option("--version <id>","Version ID").option("--width <n>","Width",g).option("--height <n>","Height",g).option("--duration-ms <n>","Duration in ms",g).option("-f, --format <format>","Output format").action(async e=>{try{let t={workId:e.work,fileId:e.file,kind:(e.kind??"SOURCE").toUpperCase()};e.mimeType&&(t.mimeType=e.mimeType),e.version&&(t.versionId=e.version),e.width!==void 0&&(t.width=e.width),e.height!==void 0&&(t.height=e.height),e.durationMs!==void 0&&(t.durationMs=e.durationMs);let r=await d(U,{input:t});p(`Asset added: ${r.artAddAsset.kind}`),a(e,r.artAddAsset);}catch(t){s(t);}});}function vt(c){let i=c.command("collections").description("Artistrybase curated collections");i.command("list").description("List collections").option("--visibility <v>","PRIVATE|PUBLIC|UNLISTED").option("--limit <n>","Page size",g,50).option("--offset <n>","Offset",g,0).option("-f, --format <format>","Output format").action(async n=>{try{let o=await d(W,{visibility:n.visibility?n.visibility.toUpperCase():void 0,pagination:{limit:n.limit,offset:n.offset}});a(n,o.artListCollections.items,{headers:["ID","Title","Slug","Medium","Visibility"],rows:o.artListCollections.items.map(e=>[m(e.id,12),e.title,e.slug,e.medium??"-",e.visibility])});}catch(o){s(o);}}),i.command("get").description("Get a collection by id").argument("<id>","Collection ID").option("-f, --format <format>","Output format").action(async(n,o)=>{try{let e=await d(F,{id:n});if(!e.artCollection)throw new l(`Collection ${n} not found`);a(o,e.artCollection);}catch(e){s(e);}}),i.command("create").description("Create a collection").requiredOption("--title <t>","Title").requiredOption("--slug <s>","URL slug").option("--description <d>","Description").option("--medium <m>","ART|AUDIO|MIXED|STORY|VIDEO").option("--visibility <v>","PRIVATE|PUBLIC|UNLISTED","PRIVATE").option("--cover-file <id>","Cover file ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async n=>{try{let o={title:n.title,slug:n.slug,visibility:(n.visibility??"PRIVATE").toUpperCase()};n.description&&(o.description=n.description),n.medium&&(o.medium=n.medium.toUpperCase()),n.coverFile&&(o.coverFileId=n.coverFile),n.tags&&(o.tags=I(n.tags));let e=await d(M,{input:o});p(`Collection created: ${e.artCreateCollection.title}`),a(n,e.artCreateCollection);}catch(o){s(o);}}),i.command("update").description("Update a collection").argument("<id>","Collection ID").option("--title <t>","Title").option("--description <d>","Description").option("--medium <m>","ART|AUDIO|MIXED|STORY|VIDEO").option("--visibility <v>","PRIVATE|PUBLIC|UNLISTED").option("--cover-file <id>","Cover file ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(n,o)=>{try{let e={};if(o.title&&(e.title=o.title),o.description!==void 0&&(e.description=o.description),o.medium&&(e.medium=o.medium.toUpperCase()),o.visibility&&(e.visibility=o.visibility.toUpperCase()),o.coverFile&&(e.coverFileId=o.coverFile),o.tags&&(e.tags=I(o.tags)),!Object.keys(e).length)throw new l("No updates specified");let t=await d(V,{id:n,input:e});p("Collection updated"),a(o,t.artUpdateCollection);}catch(e){s(e);}}),i.command("add-work").description("Add a work to a collection").argument("<collectionId>","Collection ID").requiredOption("--work <id>","Work ID").option("-f, --format <format>","Output format").action(async(n,o)=>{try{let e=await d(q,{collectionId:n,workId:o.work});p("Work added to collection"),a(o,e.artAddWorkToCollection);}catch(e){s(e);}}),i.command("remove-work").description("Remove a work from a collection").argument("<collectionId>","Collection ID").requiredOption("--work <id>","Work ID").option("-f, --format <format>","Output format").action(async(n,o)=>{try{let e=await d(B,{collectionId:n,workId:o.work});p("Work removed from collection"),a(o,e.artRemoveWorkFromCollection);}catch(e){s(e);}});}function bt(c){let i=c.command("productions").description("Artistrybase productions");i.command("list").description("List productions").option("--status <s>","Production status").option("--limit <n>","Page size",g,50).option("--offset <n>","Offset",g,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await d(H,{status:e.status?e.status.toUpperCase():void 0,pagination:{limit:e.limit,offset:e.offset}});a(e,t.artListProductions.items,{headers:["ID","Title","Slug","Medium","Status"],rows:t.artListProductions.items.map(r=>[m(r.id,12),r.title,r.slug,r.medium,r.status])});}catch(t){s(t);}}),i.command("get").description("Get a production by id").argument("<id>","Production ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r=await d(G,{id:e});if(!r.artProduction)throw new l(`Production ${e} not found`);a(t,r.artProduction);}catch(r){s(r);}}),i.command("create").description("Create a production").requiredOption("--title <t>","Title").requiredOption("--slug <s>","URL slug").option("--medium <m>","ART|AUDIO|MIXED|STORY|VIDEO","MIXED").option("--synopsis <s>","Synopsis").option("--start-date <iso>","Start date (ISO)").option("--target-date <iso>","Target date (ISO)").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async e=>{try{let t={title:e.title,slug:e.slug,medium:(e.medium??"MIXED").toUpperCase()};e.synopsis&&(t.synopsis=e.synopsis),e.startDate&&(t.startDate=e.startDate),e.targetDate&&(t.targetDate=e.targetDate),e.tags&&(t.tags=I(e.tags));let r=await d(j,{input:t});p(`Production created: ${r.artCreateProduction.title}`),a(e,r.artCreateProduction);}catch(t){s(t);}}),i.command("update").description("Update a production").argument("<id>","Production ID").option("--title <t>","Title").option("--medium <m>","ART|AUDIO|MIXED|STORY|VIDEO").option("--synopsis <s>","Synopsis").option("--start-date <iso>","Start date (ISO)").option("--target-date <iso>","Target date (ISO)").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r={};if(t.title&&(r.title=t.title),t.medium&&(r.medium=t.medium.toUpperCase()),t.synopsis!==void 0&&(r.synopsis=t.synopsis),t.startDate&&(r.startDate=t.startDate),t.targetDate&&(r.targetDate=t.targetDate),t.tags&&(r.tags=I(t.tags)),!Object.keys(r).length)throw new l("No updates specified");let u=await d(K,{id:e,input:r});p("Production updated"),a(t,u.artUpdateProduction);}catch(r){s(r);}}),i.command("transition").description("Advance a production through its lifecycle").argument("<id>","Production ID").requiredOption("--status <s>","PLANNING|IN_PRODUCTION|POST|REVIEW|ON_HOLD|RELEASED|CANCELLED").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r=await d(z,{id:e,status:t.status.toUpperCase()});p(`Production status set to ${r.artTransitionProduction.status}`),a(t,r.artTransitionProduction);}catch(r){s(r);}});let n=c.command("members").description("Artistrybase production members");n.command("list").description("List members for a production").requiredOption("--production <id>","Production ID").option("-f, --format <format>","Output format").action(async e=>{try{let t=await d(J,{productionId:e.production});a(e,t.artListProductionMembers,{headers:["ID","Member","Role","Title","Lead"],rows:t.artListProductionMembers.map(r=>[m(r.id,12),m(r.memberId,12),r.role,r.title??"-",r.isLead?"yes":"no"])});}catch(t){s(t);}}),n.command("add").description("Add a member to a production").requiredOption("--production <id>","Production ID").requiredOption("--member <id>","Member user ID").option("--role <r>","OWNER|PRODUCER|EDITOR|CREATOR|COLLABORATOR|REVIEWER|VIEWER","COLLABORATOR").option("--title <t>","Title").option("--lead","Mark as lead").option("-f, --format <format>","Output format").action(async e=>{try{let t={productionId:e.production,memberId:e.member,role:(e.role??"COLLABORATOR").toUpperCase(),isLead:e.lead??!1};e.title&&(t.title=e.title);let r=await d(Y,{input:t});p("Member added"),a(e,r.artAddProductionMember);}catch(t){s(t);}}),n.command("remove").description("Remove a production member").argument("<id>","Member ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r=await d(X,{id:e});p(`Member removed: ${String(r.artRemoveProductionMember)}`),a(t,{removed:r.artRemoveProductionMember});}catch(r){s(r);}});let o=c.command("references").description("Artistrybase production references");o.command("list").description("List references for a production").requiredOption("--production <id>","Production ID").option("-f, --format <format>","Output format").action(async e=>{try{let t=await d(Q,{productionId:e.production});a(e,t.artListReferences,{headers:["ID","Title","URL","File"],rows:t.artListReferences.map(r=>[m(r.id,12),r.title,m(r.url??"-",30),r.fileId?m(r.fileId,12):"-"])});}catch(t){s(t);}}),o.command("add").description("Add a reference to a production").requiredOption("--production <id>","Production ID").requiredOption("--title <t>","Title").option("--url <u>","Reference URL").option("--note <n>","Note").option("--file <id>","Attached file ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async e=>{try{let t={productionId:e.production,title:e.title};e.url&&(t.url=e.url),e.note&&(t.note=e.note),e.file&&(t.fileId=e.file),e.tags&&(t.tags=I(e.tags));let r=await d(Z,{input:t});p(`Reference added: ${r.artAddReference.title}`),a(e,r.artAddReference);}catch(t){s(t);}}),o.command("remove").description("Remove a reference").argument("<id>","Reference ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r=await d(tt,{id:e});p(`Reference removed: ${String(r.artRemoveReference)}`),a(t,{removed:r.artRemoveReference});}catch(r){s(r);}});}function Et(c){let i=c.command("reviews").description("Artistrybase review rounds");i.command("list").description("List review rounds for a work").requiredOption("--work <id>","Work ID").option("--status <s>","OPEN|CHANGES_REQUESTED|APPROVED|CLOSED").option("-f, --format <format>","Output format").action(async t=>{try{let r=await d(et,{workId:t.work,status:t.status?t.status.toUpperCase():void 0});a(t,r.artListReviewRounds,{headers:["ID","Round","Status","Title"],rows:r.artListReviewRounds.map(u=>[m(u.id,12),String(u.round),u.status,u.title??"-"])});}catch(r){s(r);}}),i.command("get").description("Get a review round by id").argument("<id>","Review round ID").option("-f, --format <format>","Output format").action(async(t,r)=>{try{let u=await d(rt,{id:t});if(!u.artReviewRound)throw new l(`Review round ${t} not found`);a(r,u.artReviewRound);}catch(u){s(u);}}),i.command("open").description("Open a review round on a work").requiredOption("--work <id>","Work ID").option("--version <id>","Version ID").option("--title <t>","Title").option("--due-date <iso>","Due date (ISO)").option("-f, --format <format>","Output format").action(async t=>{try{let r={workId:t.work};t.version&&(r.versionId=t.version),t.title&&(r.title=t.title),t.dueDate&&(r.dueDate=t.dueDate);let u=await d(ot,{input:r});p(`Review round opened: round ${u.artOpenReviewRound.round}`),a(t,u.artOpenReviewRound);}catch(r){s(r);}}),i.command("transition").description("Advance a review round through its lifecycle").argument("<id>","Review round ID").requiredOption("--status <s>","OPEN|CHANGES_REQUESTED|APPROVED|CLOSED").option("-f, --format <format>","Output format").action(async(t,r)=>{try{let u=await d(it,{id:t,status:r.status.toUpperCase()});p(`Review round status set to ${u.artTransitionReviewRound.status}`),a(r,u.artTransitionReviewRound);}catch(u){s(u);}});let n=c.command("feedback").description("Artistrybase review feedback");n.command("add").description("Add feedback to a review round").requiredOption("--round <id>","Review round ID").requiredOption("--body <text>","Feedback body").option("--anchor-type <t>","GENERAL|TIMECODE|PAGE|CHAPTER|PIN","GENERAL").option("--anchor-value <v>","Anchor value").option("-f, --format <format>","Output format").action(async t=>{try{let r={reviewRoundId:t.round,body:t.body,anchorType:(t.anchorType??"GENERAL").toUpperCase()};t.anchorValue&&(r.anchorValue=t.anchorValue);let u=await d(nt,{input:r});p("Feedback added"),a(t,u.artAddFeedback);}catch(r){s(r);}}),n.command("resolve").description("Resolve (or mark) a feedback item").argument("<id>","Feedback ID").requiredOption("--status <s>","OPEN|RESOLVED|WONT_FIX").option("-f, --format <format>","Output format").action(async(t,r)=>{try{let u=await d(st,{id:t,status:r.status.toUpperCase()});p(`Feedback status set to ${u.artResolveFeedback.status}`),a(r,u.artResolveFeedback);}catch(u){s(u);}}),c.command("approvals").description("Artistrybase review approvals").command("record").description("Record an approval decision on a review round").requiredOption("--round <id>","Review round ID").requiredOption("--decision <d>","PENDING|APPROVED|REJECTED").option("--comment <c>","Comment").option("-f, --format <format>","Output format").action(async t=>{try{let r={reviewRoundId:t.round,decision:t.decision.toUpperCase()};t.comment&&(r.comment=t.comment);let u=await d(at,{input:r});p(`Approval recorded: ${u.artRecordApproval.decision}`),a(t,u.artRecordApproval);}catch(r){s(r);}});let e=c.command("releases").description("Artistrybase release pipeline");e.command("list").description("List releases for a work").requiredOption("--work <id>","Work ID").option("--status <s>","SCHEDULED|PUBLISHED|UNPUBLISHED|FAILED").option("-f, --format <format>","Output format").action(async t=>{try{let r=await d(dt,{workId:t.work,status:t.status?t.status.toUpperCase():void 0});a(t,r.artListReleases,{headers:["ID","Channel","Status","Visibility"],rows:r.artListReleases.map(u=>[m(u.id,12),u.channel,u.status,u.visibility])});}catch(r){s(r);}}),e.command("create").description("Create a release for a work").requiredOption("--work <id>","Work ID").option("--version <id>","Version ID").option("--channel <c>","Release channel").option("--notes <n>","Notes").option("--visibility <v>","PRIVATE|PUBLIC|UNLISTED","PUBLIC").option("--scheduled-for <iso>","Scheduled for (ISO)").option("-f, --format <format>","Output format").action(async t=>{try{let r={workId:t.work,visibility:(t.visibility??"PUBLIC").toUpperCase()};t.version&&(r.versionId=t.version),t.channel&&(r.channel=t.channel),t.notes&&(r.notes=t.notes),t.scheduledFor&&(r.scheduledFor=t.scheduledFor);let u=await d(ct,{input:r});p(`Release created on channel ${u.artCreateRelease.channel}`),a(t,u.artCreateRelease);}catch(r){s(r);}}),e.command("publish").description("Publish a release").argument("<id>","Release ID").option("-f, --format <format>","Output format").action(async(t,r)=>{try{let u=await d(ut,{id:t});p(`Release published: ${u.artPublishRelease.status}`),a(r,u.artPublishRelease);}catch(u){s(u);}});}function Tt(c){let i=c.command("portfolios").description("Artistrybase public portfolios");i.command("list").description("List portfolios").option("--visibility <v>","PRIVATE|PUBLIC|UNLISTED").option("--limit <n>","Page size",g,50).option("--offset <n>","Offset",g,0).option("-f, --format <format>","Output format").action(async o=>{try{let e=await d(pt,{visibility:o.visibility?o.visibility.toUpperCase():void 0,pagination:{limit:o.limit,offset:o.offset}});a(o,e.artListPortfolios.items,{headers:["ID","Handle","Display Name","Visibility","Followers"],rows:e.artListPortfolios.items.map(t=>[m(t.id,12),t.handle,t.displayName,t.visibility,String(t.followerCount)])});}catch(e){s(e);}}),i.command("get").description("Get a portfolio by id").argument("<id>","Portfolio ID").option("-f, --format <format>","Output format").action(async(o,e)=>{try{let t=await d(lt,{id:o});if(!t.artPortfolio)throw new l(`Portfolio ${o} not found`);a(e,t.artPortfolio);}catch(t){s(t);}}),i.command("create").description("Create a portfolio").requiredOption("--handle <h>","Unique handle").requiredOption("--display-name <n>","Display name").option("--bio <b>","Bio").option("--owner <id>","Owner user ID").option("--visibility <v>","PRIVATE|PUBLIC|UNLISTED","PUBLIC").option("--avatar-file <id>","Avatar file ID").option("--banner-file <id>","Banner file ID").option("--featured-works <csv>","Comma-separated work IDs").option("--links <json>","Links JSON").option("-f, --format <format>","Output format").action(async o=>{try{let e={handle:o.handle,displayName:o.displayName,visibility:(o.visibility??"PUBLIC").toUpperCase()};o.bio&&(e.bio=o.bio),o.owner&&(e.ownerId=o.owner),o.avatarFile&&(e.avatarFileId=o.avatarFile),o.bannerFile&&(e.bannerFileId=o.bannerFile),o.featuredWorks&&(e.featuredWorkIds=I(o.featuredWorks)),o.links&&(e.links=h("links",o.links));let t=await d(mt,{input:e});p(`Portfolio created: ${t.artCreatePortfolio.handle}`),a(o,t.artCreatePortfolio);}catch(e){s(e);}}),i.command("update").description("Update a portfolio").argument("<id>","Portfolio ID").option("--display-name <n>","Display name").option("--bio <b>","Bio").option("--visibility <v>","PRIVATE|PUBLIC|UNLISTED").option("--avatar-file <id>","Avatar file ID").option("--banner-file <id>","Banner file ID").option("--featured-works <csv>","Comma-separated work IDs").option("--links <json>","Links JSON").option("-f, --format <format>","Output format").action(async(o,e)=>{try{let t={};if(e.displayName&&(t.displayName=e.displayName),e.bio!==void 0&&(t.bio=e.bio),e.visibility&&(t.visibility=e.visibility.toUpperCase()),e.avatarFile&&(t.avatarFileId=e.avatarFile),e.bannerFile&&(t.bannerFileId=e.bannerFile),e.featuredWorks&&(t.featuredWorkIds=I(e.featuredWorks)),e.links&&(t.links=h("links",e.links)),!Object.keys(t).length)throw new l("No updates specified");let r=await d(ft,{id:o,input:t});p("Portfolio updated"),a(e,r.artUpdatePortfolio);}catch(t){s(t);}}),i.command("archive").description("Archive a portfolio").argument("<id>","Portfolio ID").option("-f, --format <format>","Output format").action(async(o,e)=>{try{let t=await d(gt,{id:o});p(`Portfolio archived: ${String(t.artArchivePortfolio)}`),a(e,{archived:t.artArchivePortfolio});}catch(t){s(t);}}),i.command("follow").description("Follow a portfolio").argument("<portfolioId>","Portfolio ID").option("--no-notify","Do not receive notifications").option("-f, --format <format>","Output format").action(async(o,e)=>{try{let t=await d(It,{portfolioId:o,notify:e.notify});p("Portfolio followed"),a(e,t.artFollowPortfolio);}catch(t){s(t);}}),i.command("unfollow").description("Unfollow a portfolio").argument("<portfolioId>","Portfolio ID").option("-f, --format <format>","Output format").action(async(o,e)=>{try{let t=await d(wt,{portfolioId:o});p(`Portfolio unfollowed: ${String(t.artUnfollowPortfolio)}`),a(e,{unfollowed:t.artUnfollowPortfolio});}catch(t){s(t);}});let n=c.command("licenses").description("Artistrybase work licenses");n.command("list").description("List licenses for a work").requiredOption("--work <id>","Work ID").option("-f, --format <format>","Output format").action(async o=>{try{let e=await d(Rt,{workId:o.work});a(o,e.artListLicenses,{headers:["ID","Name","Model","Status","Price","Currency"],rows:e.artListLicenses.map(t=>[m(t.id,12),t.name,t.model,t.status,String(t.priceAmount),t.currency])});}catch(e){s(e);}}),n.command("create").description("Create a license for a work").requiredOption("--work <id>","Work ID").requiredOption("--name <n>","License name").option("--model <m>","FREE|LICENSE|PURCHASE|MEMBERSHIP","FREE").option("--price <n>","Price amount",v).option("--currency <c>","Currency code").option("--spdx <s>","SPDX identifier").option("--terms <t>","License terms").option("--attribution <a>","Attribution text").option("-f, --format <format>","Output format").action(async o=>{try{let e={workId:o.work,name:o.name,model:(o.model??"FREE").toUpperCase()};o.price!==void 0&&(e.priceAmount=o.price),o.currency&&(e.currency=o.currency),o.spdx&&(e.spdx=o.spdx),o.terms&&(e.terms=o.terms),o.attribution&&(e.attribution=o.attribution);let t=await d(At,{input:e});p(`License created: ${t.artCreateLicense.name}`),a(o,t.artCreateLicense);}catch(e){s(e);}}),n.command("update").description("Update a license").argument("<id>","License ID").option("--name <n>","License name").option("--model <m>","FREE|LICENSE|PURCHASE|MEMBERSHIP").option("--price <n>","Price amount",v).option("--currency <c>","Currency code").option("--spdx <s>","SPDX identifier").option("--terms <t>","License terms").option("--attribution <a>","Attribution text").option("-f, --format <format>","Output format").action(async(o,e)=>{try{let t={};if(e.name&&(t.name=e.name),e.model&&(t.model=e.model.toUpperCase()),e.price!==void 0&&(t.priceAmount=e.price),e.currency&&(t.currency=e.currency),e.spdx&&(t.spdx=e.spdx),e.terms&&(t.terms=e.terms),e.attribution&&(t.attribution=e.attribution),!Object.keys(t).length)throw new l("No updates specified");let r=await d(kt,{id:o,input:t});p("License updated"),a(e,r.artUpdateLicense);}catch(t){s(t);}}),n.command("activate").description("Activate a license").argument("<id>","License ID").option("-f, --format <format>","Output format").action(async(o,e)=>{try{let t=await d(yt,{id:o});p(`License activated: ${t.artActivateLicense.status}`),a(e,t.artActivateLicense);}catch(t){s(t);}});}function Ot(c){c.command("health").description("Artistrybase subgraph health check (public)").option("-f, --format <format>","Output format").action(async i=>{try{let n=await C(Ct);p(n.artHealth),a(i,{health:n.artHealth});}catch(n){s(n);}});}var Vt={id:"artistrybase",version:"1.0.0",displayName:"Artistrybase",dependsOn:["auth","workspaces"],register(c,i){T(i);let n=c.command("artistrybase").description("Artistrybase multi-medium creative platform");ht(n),vt(n),bt(n),Et(n),Tt(n),Ot(n);}},Cr=Vt;module.exports=Cr;
@@ -1,4 +1,4 @@
1
- import {a,b as b$1,h as h$1,p,g,i,d}from'../../chunk-NLEVVDXR.js';import {o}from'../../chunk-IZXPWPKX.js';var v=`
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=`
2
2
  query ArtListWorks(
3
3
  $medium: ArtMedium
4
4
  $status: ArtWorkStatus