@burdenoff/cli-sdk 2026.1021.1 → 2026.1031.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-NLEVVDXR.js → chunk-SQSFZFQZ.js} +1 -1
- package/dist/{chunk-IZXPWPKX.js → chunk-UAFYTYK6.js} +7 -7
- package/dist/core/index.cjs +7 -7
- package/dist/core/index.js +1 -1
- package/dist/index.cjs +7 -7
- package/dist/index.js +1 -1
- package/dist/modules/adaptercloud/index.js +1 -1
- package/dist/modules/artistrybase/index.cjs +3 -3
- package/dist/modules/artistrybase/index.js +1 -1
- package/dist/modules/assethandler/index.cjs +1 -1
- package/dist/modules/assethandler/index.js +1 -1
- package/dist/modules/atheletebridge/index.cjs +6 -6
- package/dist/modules/atheletebridge/index.js +1 -1
- package/dist/modules/auth/index.cjs +39 -17
- package/dist/modules/auth/index.js +42 -20
- package/dist/modules/billing/index.js +1 -1
- package/dist/modules/brainyrich/index.cjs +2 -2
- package/dist/modules/brainyrich/index.js +1 -1
- package/dist/modules/buildmyiq/index.cjs +1 -1
- package/dist/modules/buildmyiq/index.js +1 -1
- package/dist/modules/channels/index.cjs +13 -14
- package/dist/modules/channels/index.js +11 -12
- package/dist/modules/collabkin/index.js +1 -1
- package/dist/modules/comradecircle/index.cjs +3 -3
- package/dist/modules/comradecircle/index.js +1 -1
- package/dist/modules/conversations/index.cjs +1 -1
- package/dist/modules/conversations/index.js +5 -5
- package/dist/modules/coolandlovely/index.js +1 -1
- package/dist/modules/cosmicintersection/index.cjs +4 -4
- package/dist/modules/cosmicintersection/index.js +1 -1
- package/dist/modules/crewfoundry/index.cjs +4 -4
- package/dist/modules/crewfoundry/index.js +1 -1
- package/dist/modules/devportal/index.cjs +3 -3
- package/dist/modules/devportal/index.js +1 -1
- package/dist/modules/ecoimpacthub/index.js +1 -1
- package/dist/modules/eventfullymanaged/index.js +1 -1
- package/dist/modules/export/index.cjs +2 -2
- package/dist/modules/export/index.js +1 -1
- package/dist/modules/files/index.cjs +4 -4
- package/dist/modules/files/index.js +1 -1
- package/dist/modules/fluidgrids/index.js +1 -1
- package/dist/modules/ggnomad/index.cjs +3 -3
- package/dist/modules/ggnomad/index.js +1 -1
- package/dist/modules/govcitizenhub/index.cjs +2 -2
- package/dist/modules/govcitizenhub/index.js +1 -1
- package/dist/modules/groups/index.cjs +16 -15
- package/dist/modules/groups/index.js +15 -14
- package/dist/modules/headshotmarketing/index.js +1 -1
- package/dist/modules/hookmovies/index.js +1 -1
- package/dist/modules/housingvista/index.cjs +6 -6
- package/dist/modules/housingvista/index.js +1 -1
- package/dist/modules/integrations/index.cjs +1 -1
- package/dist/modules/integrations/index.js +1 -1
- package/dist/modules/intelwatchtower/index.cjs +3 -3
- package/dist/modules/intelwatchtower/index.js +1 -1
- package/dist/modules/kadaikodi/index.js +1 -1
- package/dist/modules/labsofscience/index.cjs +3 -3
- package/dist/modules/labsofscience/index.js +1 -1
- package/dist/modules/manufacturedops/index.js +1 -1
- package/dist/modules/movethewheels/index.js +1 -1
- package/dist/modules/mybodyshield/index.cjs +4 -4
- package/dist/modules/mybodyshield/index.js +1 -1
- package/dist/modules/notifications/index.cjs +2 -2
- package/dist/modules/notifications/index.js +1 -1
- package/dist/modules/organizations/index.js +1 -1
- package/dist/modules/planmagnet/index.js +1 -1
- package/dist/modules/products/index.cjs +5 -5
- package/dist/modules/products/index.js +5 -5
- package/dist/modules/proserviceworld/index.js +1 -1
- package/dist/modules/rbac/index.cjs +8 -19
- package/dist/modules/rbac/index.js +6 -17
- package/dist/modules/sandbox/index.cjs +3 -3
- package/dist/modules/sandbox/index.js +1 -1
- package/dist/modules/scheduler/index.cjs +4 -4
- package/dist/modules/scheduler/index.js +1 -1
- package/dist/modules/security/index.cjs +2 -2
- package/dist/modules/security/index.js +1 -1
- package/dist/modules/semanticfed/index.js +1 -1
- package/dist/modules/store/index.cjs +2 -2
- package/dist/modules/store/index.js +1 -1
- package/dist/modules/subscriberbot/index.js +1 -1
- package/dist/modules/support/index.js +1 -1
- package/dist/modules/tags/index.cjs +2 -2
- package/dist/modules/tags/index.js +1 -1
- package/dist/modules/technospam/index.cjs +2 -2
- package/dist/modules/technospam/index.js +1 -1
- package/dist/modules/theculturepost/index.js +1 -1
- package/dist/modules/theglobalfuel/index.js +1 -1
- package/dist/modules/timecampus/index.js +1 -1
- package/dist/modules/tours/index.cjs +2 -2
- package/dist/modules/tours/index.js +1 -1
- package/dist/modules/vibecontrols/index.js +1 -1
- package/dist/modules/workspaces/index.cjs +10 -10
- package/dist/modules/workspaces/index.js +12 -12
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import {b as b$1,o,p,q as q$1}from'./chunk-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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(
|
|
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(
|
|
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
|
|
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};
|
package/dist/core/index.cjs
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
'use strict';var fs=require('fs'),path=require('path'),os=require('os'),graphqlRequest=require('graphql-request'),
|
|
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
|
|
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
|
|
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
|
|
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(
|
|
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(
|
|
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
|
|
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/core/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-
|
|
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'),
|
|
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
|
|
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
|
|
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
|
|
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(
|
|
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(
|
|
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
|
|
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-
|
|
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-
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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-
|
|
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
|