@tigrisdata/cli 2.1.0 → 2.1.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/auth/client.js +1 -1
- package/dist/auth/config.js +1 -1
- package/dist/auth/s3-client.js +1 -1
- package/dist/cli.js +1 -1
- package/dist/index.js +1 -1
- package/dist/lib/buckets/create.js +2 -2
- package/dist/lib/buckets/list.js +6 -6
- package/dist/lib/login/select.js +3 -3
- package/dist/lib/login/ui.js +3 -3
- package/dist/lib/orgs/create.js +2 -2
- package/dist/lib/orgs/list.js +6 -6
- package/dist/lib/orgs/select.js +4 -4
- package/dist/lib/whoami.js +3 -3
- package/package.json +1 -1
package/dist/auth/client.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import
|
|
1
|
+
import l from"axios";import N from"open";function k(){return{domain:process.env.AUTH0_DOMAIN||"auth.tigris.dev",clientId:process.env.AUTH0_CLIENT_ID||"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",audience:process.env.AUTH0_AUDIENCE||"https://tigris-os-api"}}var w=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";import{homedir as A}from"os";import{join as C}from"path";import{readFileSync as x,writeFileSync as S,existsSync as y,mkdirSync as O}from"fs";import{chmod as P}from"fs/promises";var p=C(A(),".tigris"),g=C(p,"config.json");function E(){y(p)||O(p,{recursive:!0,mode:448})}function c(){if(y(g))try{let n=x(g,"utf8");return JSON.parse(n)}catch{return{}}return{}}async function f(n){E(),S(g,JSON.stringify(n,null,2),{mode:384});try{await P(g,384)}catch{}}async function u(n){let e=c();e.tokens=n,await f(e)}async function d(){return c().tokens||null}async function m(){let n=c();delete n.tokens,await f(n)}async function _(n){let e=c();e.organizations=n,await f(e)}function v(){return c().organizations||[]}async function I(n){let e=c();e.loginMethod=n,await f(e)}var T=class{config;baseUrl;constructor(){this.config=k(),this.baseUrl=`https://${this.config.domain}`}async login(e){let i=(await l.post(`${this.baseUrl}/oauth/device/code`,{client_id:this.config.clientId,audience:this.config.audience,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data;e?.onDeviceCode?.(i.user_code,i.verification_uri),await this.sleep(2e3);try{await N(i.verification_uri_complete)}catch{}e?.onWaiting?.();let r=await this.pollForToken(i.device_code,i.interval||5);await u(r),I("oauth"),await this.extractAndStoreOrganizations(r.idToken)}async pollForToken(e,t){let r=0;for(;r<60;){r++;try{let s=(await l.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,device_code:e,grant_type:"urn:ietf:params:oauth:grant-type:device_code"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,a=Date.now()+(s.expires_in||3600)*1e3;return{accessToken:s.access_token,refreshToken:s.refresh_token,idToken:s.id_token,expiresAt:a}}catch(o){if(l.isAxiosError(o)&&o.response){let s=o.response.data?.error;if(s==="authorization_pending"){await this.sleep(t*1e3);continue}if(s==="slow_down"){t+=5,await this.sleep(t*1e3);continue}throw new Error(o.response.data?.error_description||"Authentication failed")}throw o}}throw new Error("Authentication timed out. Please try again.")}async getAccessToken(){let e=await d();if(!e)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');let t=300*1e3;return Date.now()+t>=e.expiresAt&&(e=await this.refreshAccessToken(e)),e.accessToken}async refreshAccessToken(e){let t=null;if(e?.refreshToken?t=e:t=await d(),!t)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let r=(await l.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,grant_type:"refresh_token",refresh_token:t.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,o={accessToken:r.access_token,refreshToken:r.refresh_token||t.refreshToken,idToken:r.id_token||t.idToken,expiresAt:Date.now()+(r.expires_in||3600)*1e3};return await u(o),o}catch{throw await m(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await d();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let t=e.idToken.split(".")[1],i=Buffer.from(t,"base64").toString("utf8");return JSON.parse(i)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let t=e.split(".")[1],i=Buffer.from(t,"base64").toString("utf8"),o=JSON.parse(i)[w];if(!o)return;let s=o?.ns?.map(a=>typeof a=="object"&&a!==null?{id:a.id,name:a.name,displayName:a.name}:{id:a,name:a,displayName:a})||[];if(s.length===0)return;_(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),v()}async logout(){await m()}async isAuthenticated(){return await d()!==null}sleep(e){return new Promise(t=>setTimeout(t,e))}},h=null;function J(){return h||(h=new T),h}export{T as TigrisAuthClient,J as getAuthClient};
|
package/dist/auth/config.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function i(){return{domain:process.env.AUTH0_DOMAIN||"auth.tigris.dev",clientId:process.env.AUTH0_CLIENT_ID||"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",audience:process.env.AUTH0_AUDIENCE||"https://tigris-os-api"}}var t=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function e(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_STORAGE_IAM_ENDPOINT||"https://iam.storageapi.dev"}}export{t as TIGRIS_CLAIMS_NAMESPACE,i as getAuth0Config,e as getTigrisConfig};
|
package/dist/auth/s3-client.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{S3Client as
|
|
1
|
+
import{S3Client as z}from"@aws-sdk/client-s3";import{homedir as D}from"os";import{join as I}from"path";import{readFileSync as b,writeFileSync as K,existsSync as v,mkdirSync as R}from"fs";import{chmod as L}from"fs/promises";var m=I(D(),".tigris"),g=I(m,"config.json");function G(){v(m)||R(m,{recursive:!0,mode:448})}function c(){if(v(g))try{let t=b(g,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function l(t){G(),K(g,JSON.stringify(t,null,2),{mode:384});try{await L(g,384)}catch{}}async function h(t){let e=c();e.tokens=t,await l(e)}async function d(){return c().tokens||null}async function w(){let t=c();delete t.tokens,await l(t)}async function x(t){let e=c();e.organizations=t,await l(e)}function S(){return c().organizations||[]}function f(){return c().selectedOrganization||null}function T(){let t=c();return t.temporaryCredentials||t.credentials||null}async function P(t){let e=c();e.loginMethod=t,await l(e)}function O(){return c().loginMethod||null}import p from"axios";import U from"open";function u(){return{domain:process.env.AUTH0_DOMAIN||"auth.tigris.dev",clientId:process.env.AUTH0_CLIENT_ID||"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",audience:process.env.AUTH0_AUDIENCE||"https://tigris-os-api"}}var E=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function N(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_STORAGE_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var k=class{config;baseUrl;constructor(){this.config=u(),this.baseUrl=`https://${this.config.domain}`}async login(e){let i=(await p.post(`${this.baseUrl}/oauth/device/code`,{client_id:this.config.clientId,audience:this.config.audience,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data;e?.onDeviceCode?.(i.user_code,i.verification_uri),await this.sleep(2e3);try{await U(i.verification_uri_complete)}catch{}e?.onWaiting?.();let s=await this.pollForToken(i.device_code,i.interval||5);await h(s),P("oauth"),await this.extractAndStoreOrganizations(s.idToken)}async pollForToken(e,n){let s=0;for(;s<60;){s++;try{let a=(await p.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,device_code:e,grant_type:"urn:ietf:params:oauth:grant-type:device_code"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,r=Date.now()+(a.expires_in||3600)*1e3;return{accessToken:a.access_token,refreshToken:a.refresh_token,idToken:a.id_token,expiresAt:r}}catch(o){if(p.isAxiosError(o)&&o.response){let a=o.response.data?.error;if(a==="authorization_pending"){await this.sleep(n*1e3);continue}if(a==="slow_down"){n+=5,await this.sleep(n*1e3);continue}throw new Error(o.response.data?.error_description||"Authentication failed")}throw o}}throw new Error("Authentication timed out. Please try again.")}async getAccessToken(){let e=await d();if(!e)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');let n=300*1e3;return Date.now()+n>=e.expiresAt&&(e=await this.refreshAccessToken(e)),e.accessToken}async refreshAccessToken(e){let n=null;if(e?.refreshToken?n=e:n=await d(),!n)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let s=(await p.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,grant_type:"refresh_token",refresh_token:n.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,o={accessToken:s.access_token,refreshToken:s.refresh_token||n.refreshToken,idToken:s.id_token||n.idToken,expiresAt:Date.now()+(s.expires_in||3600)*1e3};return await h(o),o}catch{throw await w(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await d();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let n=e.idToken.split(".")[1],i=Buffer.from(n,"base64").toString("utf8");return JSON.parse(i)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let n=e.split(".")[1],i=Buffer.from(n,"base64").toString("utf8"),o=JSON.parse(i)[E];if(!o)return;let a=o?.ns?.map(r=>typeof r=="object"&&r!==null?{id:r.id,name:r.name,displayName:r.name}:{id:r,name:r,displayName:r})||[];if(a.length===0)return;x(a)}catch{}}async getOrganizations(){return await this.getAccessToken(),S()}async logout(){await w()}async isAuthenticated(){return await d()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},y=null;function C(){return y||(y=new k),y}var _=N(),F=u();async function A(){return O()}async function oe(){let t=await A();if(!t)throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.');if(t==="oauth"){let i=await C().getAccessToken();if(!f())throw new Error('No organization selected. Please run "tigris orgs select" first.');let o=_.endpoint,a=_.iamEndpoint,r=F.domain;return{sessionToken:i,accessKeyId:"",secretAccessKey:"",endpoint:o,organizationId:f()??void 0,iamEndpoint:a,authDomain:r}}let e=T();if(!e)throw new Error('No credentials found. Please run "tigris configure" first.');return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint}}async function re(){let t=await A();if(!t)throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.');if(t==="oauth"){let n=await C().getAccessToken(),i=f();if(!i)throw new Error('No organization selected. Please run "tigris orgs select" first.');let s=_.endpoint,o=new z({region:"auto",endpoint:s,credentials:{sessionToken:n,accessKeyId:"",secretAccessKey:""}});return o.middlewareStack.add(a=>async r=>{let M=r.request;return M.headers["x-Tigris-Namespace"]=i,await a(r)},{name:"x-Tigris-Namespace-Middleware",step:"build",override:!0}),o}else{let e=T();if(!e)throw new Error('No credentials found. Please run "tigris configure" first.');return new z({region:"auto",endpoint:e.endpoint,credentials:{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey}})}}async function se(){return await A()!==null}export{A as getLoginMethod,re as getS3Client,oe as getStorageConfig,se as isAuthenticated};
|
package/dist/cli.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{Command as v}from"commander";import{readFileSync as x}from"fs";import{join as E,dirname as k}from"path";import{fileURLToPath as j}from"url";import*as y from"yaml";var h="2.1.
|
|
2
|
+
import{Command as v}from"commander";import{readFileSync as x}from"fs";import{join as E,dirname as k}from"path";import{fileURLToPath as j}from"url";import*as y from"yaml";var h="2.1.1";var q=j(import.meta.url),R=k(q),P=E(R,"specs.yaml"),D=x(P,"utf8"),a=y.parse(D);function w(e){let t;e.type==="noun"?t=` ${e.name}`:(t=` --${e.name}`,e.alias&&(t+=`, -${e.alias}`));let n=26,s=t.length>=n?t+" ":t.padEnd(n),i=e.description;return e.options&&(Array.isArray(e.options)&&typeof e.options[0]=="string"?i+=` (options: ${e.options.join(", ")})`:i+=` (options: ${e.options.map(o=>o.value).join(", ")})`),e.default&&(i+=` [default: ${e.default}]`),e.required&&(i+=" [required]"),e["required-when"]&&(i+=` [required when: ${e["required-when"]}]`),e.multiple&&(i+=" [multiple values: comma-separated]"),e.type==="noun"&&(i+=" [positional argument]"),e.examples&&e.examples.length>0&&(i+=` (examples: ${e.examples.join(", ")})`),`${s}${i}`}function $(e){console.log(`
|
|
3
3
|
${a.name} ${e.name} - ${e.description}
|
|
4
4
|
`),e.operations&&e.operations.length>0&&(console.log("Operations:"),e.operations.forEach(t=>{let n=` ${t.name}`;if(t.alias){let i=Array.isArray(t.alias)?t.alias:[t.alias];n+=` (${i.join(", ")})`}let s=n.padEnd(24);console.log(`${s}${t.description}`)}),console.log()),e.arguments&&e.arguments.length>0&&(console.log("Arguments:"),e.arguments.forEach(t=>{console.log(w(t))}),console.log()),console.log(`Use "${a.name} ${e.name} <operation> help" for more information about an operation.`)}function M(e,t){console.log(`
|
|
5
5
|
${a.name} ${e.name} ${t.name} - ${t.description}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{Command as x}from"commander";import{readFileSync as v}from"fs";import{join as E,dirname as k}from"path";import{fileURLToPath as j}from"url";import*as y from"yaml";var h="2.1.
|
|
1
|
+
import{Command as x}from"commander";import{readFileSync as v}from"fs";import{join as E,dirname as k}from"path";import{fileURLToPath as j}from"url";import*as y from"yaml";var h="2.1.1";var q=j(import.meta.url),R=k(q),P=E(R,"specs.yaml"),D=v(P,"utf8"),a=y.parse(D);function w(e){let t;e.type==="noun"?t=` ${e.name}`:(t=` --${e.name}`,e.alias&&(t+=`, -${e.alias}`));let n=26,s=t.length>=n?t+" ":t.padEnd(n),i=e.description;return e.options&&(Array.isArray(e.options)&&typeof e.options[0]=="string"?i+=` (options: ${e.options.join(", ")})`:i+=` (options: ${e.options.map(o=>o.value).join(", ")})`),e.default&&(i+=` [default: ${e.default}]`),e.required&&(i+=" [required]"),e["required-when"]&&(i+=` [required when: ${e["required-when"]}]`),e.multiple&&(i+=" [multiple values: comma-separated]"),e.type==="noun"&&(i+=" [positional argument]"),e.examples&&e.examples.length>0&&(i+=` (examples: ${e.examples.join(", ")})`),`${s}${i}`}function $(e){console.log(`
|
|
2
2
|
${a.name} ${e.name} - ${e.description}
|
|
3
3
|
`),e.operations&&e.operations.length>0&&(console.log("Operations:"),e.operations.forEach(t=>{let n=` ${t.name}`;if(t.alias){let i=Array.isArray(t.alias)?t.alias:[t.alias];n+=` (${i.join(", ")})`}let s=n.padEnd(24);console.log(`${s}${t.description}`)}),console.log()),e.arguments&&e.arguments.length>0&&(console.log("Arguments:"),e.arguments.forEach(t=>{console.log(w(t))}),console.log()),console.log(`Use "${a.name} ${e.name} <operation> help" for more information about an operation.`)}function M(e,t){console.log(`
|
|
4
4
|
${a.name} ${e.name} ${t.name} - ${t.description}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
function f(t,e,n){for(let i of e)if(t[i]!==void 0)return t[i];return n}import
|
|
2
|
-
`),e&&(n=n.replace(/\{\{(\w+)\}\}/g,(i,
|
|
1
|
+
function f(t,e,n){for(let i of e)if(t[i]!==void 0)return t[i];return n}import he from"enquirer";import{readFileSync as Z,existsSync as ee}from"fs";import{join as D,dirname as te}from"path";import{fileURLToPath as ne}from"url";import*as R from"yaml";var ie=ne(import.meta.url),oe=te(ie),A=null;function se(){let t=oe;for(let e=0;e<5;e++){let n=D(t,"specs.yaml");if(ee(n))return n;t=D(t,"..")}throw new Error("Could not find specs.yaml")}function re(){if(!A){let t=se(),e=Z(t,"utf8");A=R.parse(e)}return A}function v(t,e){let i=re().commands.find(o=>o.name===t);return i?e&&i.operations?i.operations.find(o=>o.name===e)||null:i:null}function m(t,e,n){let i=v(t,n);return!i||!i.arguments?null:i.arguments.find(o=>o.name===e)||null}function h(t){return t.options?Array.isArray(t.options)&&typeof t.options[0]=="string"?t.options.map(e=>({name:e,message:e.charAt(0).toUpperCase()+e.slice(1),value:e})):Array.isArray(t.options)&&typeof t.options[0]=="object"?t.options.map(e=>({name:e.value,message:e.description?`${e.name} - ${e.description}`:e.name,value:e.value})):null:null}import{createBucket as ye}from"@tigrisdata/storage";import{S3Client as Ke}from"@aws-sdk/client-s3";import{homedir as ae}from"os";import{join as K}from"path";import{readFileSync as ce,writeFileSync as de,existsSync as L,mkdirSync as ge}from"fs";import{chmod as le}from"fs/promises";var I=K(ae(),".tigris"),T=K(I,"config.json");function ue(){L(I)||ge(I,{recursive:!0,mode:448})}function l(){if(L(T))try{let t=ce(T,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function w(t){ue(),de(T,JSON.stringify(t,null,2),{mode:384});try{await le(T,384)}catch{}}async function _(t){let e=l();e.tokens=t,await w(e)}async function y(){return l().tokens||null}async function P(){let t=l();delete t.tokens,await w(t)}async function $(t){let e=l();e.organizations=t,await w(e)}function F(){return l().organizations||[]}function b(){return l().selectedOrganization||null}function j(){let t=l();return t.temporaryCredentials||t.credentials||null}async function q(t){let e=l();e.loginMethod=t,await w(e)}function U(){return l().loginMethod||null}import k from"axios";import fe from"open";function S(){return{domain:process.env.AUTH0_DOMAIN||"auth.tigris.dev",clientId:process.env.AUTH0_CLIENT_ID||"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",audience:process.env.AUTH0_AUDIENCE||"https://tigris-os-api"}}var G=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function V(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_STORAGE_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var O=class{config;baseUrl;constructor(){this.config=S(),this.baseUrl=`https://${this.config.domain}`}async login(e){let i=(await k.post(`${this.baseUrl}/oauth/device/code`,{client_id:this.config.clientId,audience:this.config.audience,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data;e?.onDeviceCode?.(i.user_code,i.verification_uri),await this.sleep(2e3);try{await fe(i.verification_uri_complete)}catch{}e?.onWaiting?.();let o=await this.pollForToken(i.device_code,i.interval||5);await _(o),q("oauth"),await this.extractAndStoreOrganizations(o.idToken)}async pollForToken(e,n){let o=0;for(;o<60;){o++;try{let c=(await k.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,device_code:e,grant_type:"urn:ietf:params:oauth:grant-type:device_code"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,r=Date.now()+(c.expires_in||3600)*1e3;return{accessToken:c.access_token,refreshToken:c.refresh_token,idToken:c.id_token,expiresAt:r}}catch(s){if(k.isAxiosError(s)&&s.response){let c=s.response.data?.error;if(c==="authorization_pending"){await this.sleep(n*1e3);continue}if(c==="slow_down"){n+=5,await this.sleep(n*1e3);continue}throw new Error(s.response.data?.error_description||"Authentication failed")}throw s}}throw new Error("Authentication timed out. Please try again.")}async getAccessToken(){let e=await y();if(!e)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');let n=300*1e3;return Date.now()+n>=e.expiresAt&&(e=await this.refreshAccessToken(e)),e.accessToken}async refreshAccessToken(e){let n=null;if(e?.refreshToken?n=e:n=await y(),!n)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let o=(await k.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,grant_type:"refresh_token",refresh_token:n.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,s={accessToken:o.access_token,refreshToken:o.refresh_token||n.refreshToken,idToken:o.id_token||n.idToken,expiresAt:Date.now()+(o.expires_in||3600)*1e3};return await _(s),s}catch{throw await P(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await y();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let n=e.idToken.split(".")[1],i=Buffer.from(n,"base64").toString("utf8");return JSON.parse(i)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let n=e.split(".")[1],i=Buffer.from(n,"base64").toString("utf8"),s=JSON.parse(i)[G];if(!s)return;let c=s?.ns?.map(r=>typeof r=="object"&&r!==null?{id:r.id,name:r.name,displayName:r.name}:{id:r,name:r,displayName:r})||[];if(c.length===0)return;$(c)}catch{}}async getOrganizations(){return await this.getAccessToken(),F()}async logout(){await P()}async isAuthenticated(){return await y()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},M=null;function B(){return M||(M=new O),M}var H=V(),pe=S();async function me(){return U()}async function J(){let t=await me();if(!t)throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.');if(t==="oauth"){let i=await B().getAccessToken();if(!b())throw new Error('No organization selected. Please run "tigris orgs select" first.');let s=H.endpoint,c=H.iamEndpoint,r=pe.domain;return{sessionToken:i,accessKeyId:"",secretAccessKey:"",endpoint:s,organizationId:b()??void 0,iamEndpoint:c,authDomain:r}}let e=j();if(!e)throw new Error('No credentials found. Please run "tigris configure" first.');return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint}}var W={success:"\u2714",failure:"\u2716",hint:"\u2192"};function E(t){let e=v(t.command,t.operation);if(e)return e.messages}function N(t,e){let n=t;return n=n.replace(/\\n/g,`
|
|
2
|
+
`),e&&(n=n.replace(/\{\{(\w+)\}\}/g,(i,o)=>{let s=e[o];return s!==void 0?String(s):`{{${o}}}`})),n}function Y(t,e){let n=E(t);n?.onStart&&console.log(N(n.onStart,e))}function Q(t,e){let n=E(t);n?.onSuccess&&console.log(`${W.success} ${N(n.onSuccess,e)}`)}function x(t,e,n){let i=E(t);i?.onFailure&&console.error(`${W.failure} ${N(i.onFailure,n)}`),e&&console.error(` ${e}`)}function X(t,e){return{command:t,operation:e}}var{prompt:Ce}=he,C=X("buckets","create");async function Te(t){Y(C);let e=!f(t,["name"]),n=f(t,["name"]),i=e?void 0:f(t,["access","a","A"]),o=e?void 0:f(t,["enable-snapshots","s","S"]),s=e?void 0:f(t,["default-tier","t","T"]),c=e?void 0:f(t,["consistency","c","C"]),r=e?void 0:f(t,["region","r","R"]),u=[];if((!n||e)&&u.push({type:"input",name:"name",message:"Bucket name:",required:!0}),!i||e){let a=m("buckets","access","create"),g=h(a),d=g?.findIndex(p=>p.value===a?.default);u.push({type:"select",name:"access",message:"Access level:",choices:g||[],initial:d!==void 0&&d>=0?d:0})}if(!s||e){let a=m("buckets","default-tier","create"),g=h(a),d=g?.findIndex(p=>p.value===a?.default);u.push({type:"select",name:"defaultTier",message:"Default storage tier:",choices:g||[],initial:d!==void 0&&d>=0?d:0})}if(!c||e){let a=m("buckets","consistency","create"),g=h(a),d=g?.findIndex(p=>p.value===a?.default);u.push({type:"select",name:"consistency",message:"Consistency level:",choices:g||[],initial:d!==void 0&&d>=0?d:0})}if(!r||e){let a=m("buckets","region","create"),g=h(a),d=g?.findIndex(p=>p.value===a?.default);u.push({type:"select",name:"region",message:"Region:",choices:g||[],initial:d!==void 0&&d>=0?d:0})}if((o===void 0||e)&&u.push({type:"confirm",name:"enableSnapshots",message:"Enable snapshots?",initial:!0}),u.length>0)try{let a=await Ce(u);n=n||a.name,i=i||a.access,o=o!==void 0?o:a.enableSnapshots,s=s||a.defaultTier,c=c||a.consistency,r=r!==void 0?r:a.region}catch{x(C,"Operation cancelled"),process.exit(1)}n||(x(C,"Bucket name is required"),process.exit(1));let{error:z}=await ye(n,{defaultTier:s??"STANDARD",consistency:c==="strict"?"strict":"default",enableSnapshot:o===!0,region:r!=="global"&&r!==void 0?r.split(","):void 0,config:await J()});z&&(x(C,z.message),process.exit(1)),Q(C,{name:n})}export{Te as default};
|
package/dist/lib/buckets/list.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
function P(t,e,n){for(let o of e)if(t[o]!==void 0)return t[o];return n}function
|
|
2
|
-
`)}function
|
|
3
|
-
`)}function
|
|
4
|
-
`+r);let a="\u2502 "+e.map((c,
|
|
1
|
+
function P(t,e,n){for(let o of e)if(t[o]!==void 0)return t[o];return n}function ee(t){return JSON.stringify(t,null,2)}function te(t,e=" "){return Object.entries(t).map(([n,o])=>`${e}<${n}>${o}</${n}>`).join(`
|
|
2
|
+
`)}function ne(t,e,n){let o=[`<${e}>`];return t.forEach(r=>{o.push(` <${n}>`),o.push(te(r," ")),o.push(` </${n}>`)}),o.push(`</${e}>`),o.join(`
|
|
3
|
+
`)}function E(t){if(t==null)return"";if(t instanceof Date)return b(t);if(typeof t=="string"){let e=new Date(t);if(!isNaN(e.getTime())&&t.includes("T"))return b(e)}return String(t)}function b(t){return new Intl.DateTimeFormat(void 0,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}).format(t)}function oe(t,e){return e.map(n=>{if(n.width)return n.width;let o=n.header.length,r=t.reduce((i,s)=>{let a=E(s[n.key]);return Math.max(i,a.length)},0);return Math.max(o,r)})}function re(t,e){let n=[],o=oe(t,e),r="\u250C"+o.map(c=>"\u2500".repeat(c+2)).join("\u252C")+"\u2510",i="\u251C"+o.map(c=>"\u2500".repeat(c+2)).join("\u253C")+"\u2524",s="\u2514"+o.map(c=>"\u2500".repeat(c+2)).join("\u2534")+"\u2518";n.push(`
|
|
4
|
+
`+r);let a="\u2502 "+e.map((c,C)=>c.header.padEnd(o[C])).join(" \u2502 ")+" \u2502";return n.push(a),n.push(i),t.forEach(c=>{let C=e.map((I,O)=>{let M=E(c[I.key]);return I.align==="right"?M.padStart(o[O]):M.padEnd(o[O])});n.push("\u2502 "+C.join(" \u2502 ")+" \u2502")}),n.push(s+`
|
|
5
5
|
`),n.join(`
|
|
6
|
-
`)}function N(t,e,n,o,r){switch(e){case"json":return
|
|
7
|
-
`),e&&(n=n.replace(/\{\{(\w+)\}\}/g,(o,r)=>{let i=e[r];return i!==void 0?String(i):`{{${r}}}`})),n}function
|
|
6
|
+
`)}function N(t,e,n,o,r){switch(e){case"json":return ee(t);case"xml":return ne(t,n,o);default:return re(t,r)}}import{S3Client as $e}from"@aws-sdk/client-s3";import{homedir as ie}from"os";import{join as D}from"path";import{readFileSync as se,writeFileSync as ae,existsSync as z,mkdirSync as ce}from"fs";import{chmod as de}from"fs/promises";var T=D(ie(),".tigris"),l=D(T,"config.json");function ge(){z(T)||ce(T,{recursive:!0,mode:448})}function d(){if(z(l))try{let t=se(l,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function p(t){ge(),ae(l,JSON.stringify(t,null,2),{mode:384});try{await de(l,384)}catch{}}async function k(t){let e=d();e.tokens=t,await p(e)}async function u(){return d().tokens||null}async function x(){let t=d();delete t.tokens,await p(t)}async function R(t){let e=d();e.organizations=t,await p(e)}function j(){return d().organizations||[]}function S(){return d().selectedOrganization||null}function $(){let t=d();return t.temporaryCredentials||t.credentials||null}async function K(t){let e=d();e.loginMethod=t,await p(e)}function L(){return d().loginMethod||null}import m from"axios";import ue from"open";function f(){return{domain:process.env.AUTH0_DOMAIN||"auth.tigris.dev",clientId:process.env.AUTH0_CLIENT_ID||"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",audience:process.env.AUTH0_AUDIENCE||"https://tigris-os-api"}}var F=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function U(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_STORAGE_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var _=class{config;baseUrl;constructor(){this.config=f(),this.baseUrl=`https://${this.config.domain}`}async login(e){let o=(await m.post(`${this.baseUrl}/oauth/device/code`,{client_id:this.config.clientId,audience:this.config.audience,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data;e?.onDeviceCode?.(o.user_code,o.verification_uri),await this.sleep(2e3);try{await ue(o.verification_uri_complete)}catch{}e?.onWaiting?.();let r=await this.pollForToken(o.device_code,o.interval||5);await k(r),K("oauth"),await this.extractAndStoreOrganizations(r.idToken)}async pollForToken(e,n){let r=0;for(;r<60;){r++;try{let s=(await m.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,device_code:e,grant_type:"urn:ietf:params:oauth:grant-type:device_code"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,a=Date.now()+(s.expires_in||3600)*1e3;return{accessToken:s.access_token,refreshToken:s.refresh_token,idToken:s.id_token,expiresAt:a}}catch(i){if(m.isAxiosError(i)&&i.response){let s=i.response.data?.error;if(s==="authorization_pending"){await this.sleep(n*1e3);continue}if(s==="slow_down"){n+=5,await this.sleep(n*1e3);continue}throw new Error(i.response.data?.error_description||"Authentication failed")}throw i}}throw new Error("Authentication timed out. Please try again.")}async getAccessToken(){let e=await u();if(!e)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');let n=300*1e3;return Date.now()+n>=e.expiresAt&&(e=await this.refreshAccessToken(e)),e.accessToken}async refreshAccessToken(e){let n=null;if(e?.refreshToken?n=e:n=await u(),!n)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let r=(await m.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,grant_type:"refresh_token",refresh_token:n.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,i={accessToken:r.access_token,refreshToken:r.refresh_token||n.refreshToken,idToken:r.id_token||n.idToken,expiresAt:Date.now()+(r.expires_in||3600)*1e3};return await k(i),i}catch{throw await x(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await u();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let n=e.idToken.split(".")[1],o=Buffer.from(n,"base64").toString("utf8");return JSON.parse(o)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let n=e.split(".")[1],o=Buffer.from(n,"base64").toString("utf8"),i=JSON.parse(o)[F];if(!i)return;let s=i?.ns?.map(a=>typeof a=="object"&&a!==null?{id:a.id,name:a.name,displayName:a.name}:{id:a,name:a,displayName:a})||[];if(s.length===0)return;R(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),j()}async logout(){await x()}async isAuthenticated(){return await u()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},A=null;function V(){return A||(A=new _),A}var G=U(),le=f();async function pe(){return L()}async function B(){let t=await pe();if(!t)throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.');if(t==="oauth"){let o=await V().getAccessToken();if(!S())throw new Error('No organization selected. Please run "tigris orgs select" first.');let i=G.endpoint,s=G.iamEndpoint,a=le.domain;return{sessionToken:o,accessKeyId:"",secretAccessKey:"",endpoint:i,organizationId:S()??void 0,iamEndpoint:s,authDomain:a}}let e=$();if(!e)throw new Error('No credentials found. Please run "tigris configure" first.');return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint}}import{listBuckets as xe}from"@tigrisdata/storage";import{readFileSync as fe,existsSync as me}from"fs";import{join as q,dirname as he}from"path";import{fileURLToPath as ye}from"url";import*as H from"yaml";var we=ye(import.meta.url),Ce=he(we),v=null;function Te(){let t=Ce;for(let e=0;e<5;e++){let n=q(t,"specs.yaml");if(me(n))return n;t=q(t,"..")}throw new Error("Could not find specs.yaml")}function ke(){if(!v){let t=Te(),e=fe(t,"utf8");v=H.parse(e)}return v}function J(t,e){let o=ke().commands.find(r=>r.name===t);return o?e&&o.operations?o.operations.find(r=>r.name===e)||null:o:null}var W={success:"\u2714",failure:"\u2716",hint:"\u2192"};function h(t){let e=J(t.command,t.operation);if(e)return e.messages}function y(t,e){let n=t;return n=n.replace(/\\n/g,`
|
|
7
|
+
`),e&&(n=n.replace(/\{\{(\w+)\}\}/g,(o,r)=>{let i=e[r];return i!==void 0?String(i):`{{${r}}}`})),n}function X(t,e){let n=h(t);n?.onStart&&console.log(y(n.onStart,e))}function Y(t,e){let n=h(t);n?.onSuccess&&console.log(`${W.success} ${y(n.onSuccess,e)}`)}function w(t,e,n){let o=h(t);o?.onFailure&&console.error(`${W.failure} ${y(o.onFailure,n)}`),e&&console.error(` ${e}`)}function Q(t,e){let n=h(t);n?.onEmpty&&console.log(y(n.onEmpty,e))}function Z(t,e){return{command:t,operation:e}}var g=Z("buckets","list");async function Se(t){X(g);try{let e=P(t,["format","F"],"table"),{data:n,error:o}=await xe({config:await B()});if(o&&(w(g,o.message),process.exit(1)),!n.buckets||n.buckets.length===0){Q(g);return}let r=n.buckets.map(s=>({name:s.name,created:s.creationDate})),i=N(r,e,"buckets","bucket",[{key:"name",header:"Name"},{key:"created",header:"Created"}]);console.log(i),Y(g,{count:r.length})}catch(e){e instanceof Error?w(g,e.message):w(g,"An unknown error occurred"),process.exit(1)}}export{Se as default};
|
package/dist/lib/login/select.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import ge from"enquirer";import
|
|
2
|
-
`),t&&(n=n.replace(/\{\{(\w+)\}\}/g,(s,r)=>{let i=t[r];return i!==void 0?String(i):`{{${r}}}`})),n}function
|
|
1
|
+
import ge from"enquirer";import k from"axios";import te from"open";function z(){return{domain:process.env.AUTH0_DOMAIN||"auth.tigris.dev",clientId:process.env.AUTH0_CLIENT_ID||"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",audience:process.env.AUTH0_AUDIENCE||"https://tigris-os-api"}}var K=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";import{homedir as B}from"os";import{join as R}from"path";import{readFileSync as Y,writeFileSync as Q,existsSync as $,mkdirSync as X}from"fs";import{chmod as Z}from"fs/promises";var x=R(B(),".tigris"),S=R(x,"config.json");function ee(){$(x)||X(x,{recursive:!0,mode:448})}function c(){if($(S))try{let e=Y(S,"utf8");return JSON.parse(e)}catch{return{}}return{}}async function g(e){ee(),Q(S,JSON.stringify(e,null,2),{mode:384});try{await Z(S,384)}catch{}}async function v(e){let t=c();t.tokens=e,await g(t)}async function m(){return c().tokens||null}async function _(){let e=c();delete e.tokens,await g(e)}async function F(e){let t=c();t.organizations=e,await g(t)}function L(){return c().organizations||[]}async function U(e){let t=c();t.selectedOrganization=e,await g(t)}function I(){let e=c();return e.temporaryCredentials||e.credentials||null}async function j(e){let t=c();t.temporaryCredentials=e,await g(t)}async function T(e){let t=c();t.loginMethod=e,await g(t)}var O=class{config;baseUrl;constructor(){this.config=z(),this.baseUrl=`https://${this.config.domain}`}async login(t){let s=(await k.post(`${this.baseUrl}/oauth/device/code`,{client_id:this.config.clientId,audience:this.config.audience,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data;t?.onDeviceCode?.(s.user_code,s.verification_uri),await this.sleep(2e3);try{await te(s.verification_uri_complete)}catch{}t?.onWaiting?.();let r=await this.pollForToken(s.device_code,s.interval||5);await v(r),T("oauth"),await this.extractAndStoreOrganizations(r.idToken)}async pollForToken(t,n){let r=0;for(;r<60;){r++;try{let a=(await k.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,device_code:t,grant_type:"urn:ietf:params:oauth:grant-type:device_code"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,o=Date.now()+(a.expires_in||3600)*1e3;return{accessToken:a.access_token,refreshToken:a.refresh_token,idToken:a.id_token,expiresAt:o}}catch(i){if(k.isAxiosError(i)&&i.response){let a=i.response.data?.error;if(a==="authorization_pending"){await this.sleep(n*1e3);continue}if(a==="slow_down"){n+=5,await this.sleep(n*1e3);continue}throw new Error(i.response.data?.error_description||"Authentication failed")}throw i}}throw new Error("Authentication timed out. Please try again.")}async getAccessToken(){let t=await m();if(!t)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');let n=300*1e3;return Date.now()+n>=t.expiresAt&&(t=await this.refreshAccessToken(t)),t.accessToken}async refreshAccessToken(t){let n=null;if(t?.refreshToken?n=t:n=await m(),!n)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let r=(await k.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,grant_type:"refresh_token",refresh_token:n.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,i={accessToken:r.access_token,refreshToken:r.refresh_token||n.refreshToken,idToken:r.id_token||n.idToken,expiresAt:Date.now()+(r.expires_in||3600)*1e3};return await v(i),i}catch{throw await _(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let t=await m();if(!t||!t.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let n=t.idToken.split(".")[1],s=Buffer.from(n,"base64").toString("utf8");return JSON.parse(s)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(t){if(t)try{let n=t.split(".")[1],s=Buffer.from(n,"base64").toString("utf8"),i=JSON.parse(s)[K];if(!i)return;let a=i?.ns?.map(o=>typeof o=="object"&&o!==null?{id:o.id,name:o.name,displayName:o.name}:{id:o,name:o,displayName:o})||[];if(a.length===0)return;F(a)}catch{}}async getOrganizations(){return await this.getAccessToken(),L()}async logout(){await _()}async isAuthenticated(){return await m()!==null}sleep(t){return new Promise(n=>setTimeout(n,t))}},P=null;function q(){return P||(P=new O),P}import{readFileSync as ne,existsSync as se}from"fs";import{join as G,dirname as re}from"path";import{fileURLToPath as ie}from"url";import*as V from"yaml";var oe=ie(import.meta.url),ae=re(oe),M=null;function ce(){let e=ae;for(let t=0;t<5;t++){let n=G(e,"specs.yaml");if(se(n))return n;e=G(e,"..")}throw new Error("Could not find specs.yaml")}function le(){if(!M){let e=ce(),t=ne(e,"utf8");M=V.parse(t)}return M}function H(e,t){let s=le().commands.find(r=>r.name===e);return s?t&&s.operations?s.operations.find(r=>r.name===t)||null:s:null}var E={success:"\u2714",failure:"\u2716",hint:"\u2192"};function h(e){let t=H(e.command,e.operation);if(t)return t.messages}function y(e,t){let n=e;return n=n.replace(/\\n/g,`
|
|
2
|
+
`),t&&(n=n.replace(/\{\{(\w+)\}\}/g,(s,r)=>{let i=t[r];return i!==void 0?String(i):`{{${r}}}`})),n}function A(e,t){let n=h(e);n?.onStart&&console.log(y(n.onStart,t))}function C(e,t){let n=h(e);n?.onSuccess&&console.log(`${E.success} ${y(n.onSuccess,t)}`)}function l(e,t,n){let s=h(e);s?.onFailure&&console.error(`${E.failure} ${y(s.onFailure,n)}`),t&&console.error(` ${t}`)}function J(e,t){let n=h(e);n?.onAlreadyDone&&console.log(y(n.onAlreadyDone,t))}function W(e,t){let n=h(e);n?.hint&&console.log(`${E.hint} ${y(n.hint,t)}`)}function u(e,t){return{command:e,operation:t}}var f=u("login","ui");async function b(){A(f);try{let e=q();if(await e.isAuthenticated()){J(f);return}await e.login({onDeviceCode:(s,r)=>{console.log(`
|
|
3
3
|
Your confirmation code: ${s}
|
|
4
4
|
`),console.log(`If browser doesn't open, visit: ${r}`)},onWaiting:()=>console.log(`
|
|
5
|
-
Waiting for authentication...`)});let n=await e.getOrganizations();if(n.length>0){let s=n[0];U(s.id),
|
|
5
|
+
Waiting for authentication...`)});let n=await e.getOrganizations();if(n.length>0){let s=n[0];U(s.id),C(f,{org:s.displayName||s.name}),n.length>1&&W(f,{count:n.length})}else C(f,{org:"none"})}catch{l(f),process.exit(1)}}import de from"enquirer";var{prompt:D}=de,p=u("login","credentials");async function w(e){A(p);let t=e["access-key"]||e.accessKey||e.key||e.Key||e.accesskey,n=e["access-secret"]||e.accessSecret||e.secret||e.Secret||e.accesssecret,s=e.profile||e.Profile||e.p||e.P;if(!t||!n){let a=I();if(a)if(s)t=a.accessKeyId,n=a.secretAccessKey;else try{if((await D({type:"confirm",name:"useSaved",message:"Saved credentials found. Use them?",initial:!0})).useSaved)t=a.accessKeyId,n=a.secretAccessKey;else{let d=[];t||d.push({type:"input",name:"accessKey",message:"Tigris Access Key ID:",required:!0}),n||d.push({type:"password",name:"accessSecret",message:"Tigris Secret Access Key:",required:!0});let N=await D(d);t=t||N.accessKey,n=n||N.accessSecret}}catch{l(p,"Login cancelled"),process.exit(1)}else{s&&(l(p,'No saved credentials found. Please run "tigris configure" first.'),process.exit(1));try{let o=[];t||o.push({type:"input",name:"accessKey",message:"Tigris Access Key ID:",required:!0}),n||o.push({type:"password",name:"accessSecret",message:"Tigris Secret Access Key:",required:!0});let d=await D(o);t=t||d.accessKey,n=n||d.accessSecret}catch{l(p,"Login cancelled"),process.exit(1)}}}(!t||!n)&&(l(p,"Access key and secret are required"),process.exit(1));let i=I()?.endpoint||"https://t3.storage.dev";await j({accessKeyId:t,secretAccessKey:n,endpoint:i}),await T("credentials"),C(p)}var{prompt:ue}=ge,fe=u("login","select");async function pe(e){let t=e.profile||e.Profile||e.p||e.P,n=e["access-key"]||e.accessKey||e.key||e.Key||e.accesskey,s=e["access-secret"]||e.accessSecret||e.secret||e.Secret||e.accesssecret,r=e.oauth||e.OAuth||e.o||e.O;if(t){await w(e);return}if(n||s){await w(e);return}if(r){await b();return}try{(await ue({type:"select",name:"loginType",message:"How would you like to login?",choices:[{name:"user",message:"As a user (OAuth2 flow)",value:"user"},{name:"machine",message:"As a machine (Access Key & Secret)",value:"machine"}]})).loginType==="user"?await b():await w(e)}catch{l(fe,"Login cancelled"),process.exit(1)}}export{pe as default};
|
package/dist/lib/login/ui.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import m from"axios";import
|
|
2
|
-
`),e&&(n=n.replace(/\{\{(\w+)\}\}/g,(o,i)=>{let r=e[i];return r!==void 0?String(r):`{{${i}}}`})),n}function
|
|
1
|
+
import m from"axios";import B from"open";function v(){return{domain:process.env.AUTH0_DOMAIN||"auth.tigris.dev",clientId:process.env.AUTH0_CLIENT_ID||"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",audience:process.env.AUTH0_AUDIENCE||"https://tigris-os-api"}}var A=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";import{homedir as U}from"os";import{join as _}from"path";import{readFileSync as G,writeFileSync as V,existsSync as I,mkdirSync as H}from"fs";import{chmod as J}from"fs/promises";var h=_(U(),".tigris"),u=_(h,"config.json");function W(){I(h)||H(h,{recursive:!0,mode:448})}function c(){if(I(u))try{let t=G(u,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function g(t){W(),V(u,JSON.stringify(t,null,2),{mode:384});try{await J(u,384)}catch{}}async function C(t){let e=c();e.tokens=t,await g(e)}async function p(){return c().tokens||null}async function y(){let t=c();delete t.tokens,await g(t)}async function O(t){let e=c();e.organizations=t,await g(e)}function P(){return c().organizations||[]}async function M(t){let e=c();e.selectedOrganization=t,await g(e)}async function E(t){let e=c();e.loginMethod=t,await g(e)}var w=class{config;baseUrl;constructor(){this.config=v(),this.baseUrl=`https://${this.config.domain}`}async login(e){let o=(await m.post(`${this.baseUrl}/oauth/device/code`,{client_id:this.config.clientId,audience:this.config.audience,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data;e?.onDeviceCode?.(o.user_code,o.verification_uri),await this.sleep(2e3);try{await B(o.verification_uri_complete)}catch{}e?.onWaiting?.();let i=await this.pollForToken(o.device_code,o.interval||5);await C(i),E("oauth"),await this.extractAndStoreOrganizations(i.idToken)}async pollForToken(e,n){let i=0;for(;i<60;){i++;try{let s=(await m.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,device_code:e,grant_type:"urn:ietf:params:oauth:grant-type:device_code"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,a=Date.now()+(s.expires_in||3600)*1e3;return{accessToken:s.access_token,refreshToken:s.refresh_token,idToken:s.id_token,expiresAt:a}}catch(r){if(m.isAxiosError(r)&&r.response){let s=r.response.data?.error;if(s==="authorization_pending"){await this.sleep(n*1e3);continue}if(s==="slow_down"){n+=5,await this.sleep(n*1e3);continue}throw new Error(r.response.data?.error_description||"Authentication failed")}throw r}}throw new Error("Authentication timed out. Please try again.")}async getAccessToken(){let e=await p();if(!e)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');let n=300*1e3;return Date.now()+n>=e.expiresAt&&(e=await this.refreshAccessToken(e)),e.accessToken}async refreshAccessToken(e){let n=null;if(e?.refreshToken?n=e:n=await p(),!n)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let i=(await m.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,grant_type:"refresh_token",refresh_token:n.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,r={accessToken:i.access_token,refreshToken:i.refresh_token||n.refreshToken,idToken:i.id_token||n.idToken,expiresAt:Date.now()+(i.expires_in||3600)*1e3};return await C(r),r}catch{throw await y(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await p();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let n=e.idToken.split(".")[1],o=Buffer.from(n,"base64").toString("utf8");return JSON.parse(o)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let n=e.split(".")[1],o=Buffer.from(n,"base64").toString("utf8"),r=JSON.parse(o)[A];if(!r)return;let s=r?.ns?.map(a=>typeof a=="object"&&a!==null?{id:a.id,name:a.name,displayName:a.name}:{id:a,name:a,displayName:a})||[];if(s.length===0)return;O(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),P()}async logout(){await y()}async isAuthenticated(){return await p()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},T=null;function b(){return T||(T=new w),T}import{readFileSync as Y,existsSync as q}from"fs";import{join as z,dirname as K}from"path";import{fileURLToPath as Q}from"url";import*as N from"yaml";var X=Q(import.meta.url),Z=K(X),k=null;function ee(){let t=Z;for(let e=0;e<5;e++){let n=z(t,"specs.yaml");if(q(n))return n;t=z(t,"..")}throw new Error("Could not find specs.yaml")}function ne(){if(!k){let t=ee(),e=Y(t,"utf8");k=N.parse(e)}return k}function D(t,e){let o=ne().commands.find(i=>i.name===t);return o?e&&o.operations?o.operations.find(i=>i.name===e)||null:o:null}var S={success:"\u2714",failure:"\u2716",hint:"\u2192"};function d(t){let e=D(t.command,t.operation);if(e)return e.messages}function f(t,e){let n=t;return n=n.replace(/\\n/g,`
|
|
2
|
+
`),e&&(n=n.replace(/\{\{(\w+)\}\}/g,(o,i)=>{let r=e[i];return r!==void 0?String(r):`{{${i}}}`})),n}function R(t,e){let n=d(t);n?.onStart&&console.log(f(n.onStart,e))}function x(t,e){let n=d(t);n?.onSuccess&&console.log(`${S.success} ${f(n.onSuccess,e)}`)}function $(t,e,n){let o=d(t);o?.onFailure&&console.error(`${S.failure} ${f(o.onFailure,n)}`),e&&console.error(` ${e}`)}function F(t,e){let n=d(t);n?.onAlreadyDone&&console.log(f(n.onAlreadyDone,e))}function j(t,e){let n=d(t);n?.hint&&console.log(`${S.hint} ${f(n.hint,e)}`)}function L(t,e){return{command:t,operation:e}}var l=L("login","ui");async function te(){R(l);try{let t=b();if(await t.isAuthenticated()){F(l);return}await t.login({onDeviceCode:(o,i)=>{console.log(`
|
|
3
3
|
Your confirmation code: ${o}
|
|
4
4
|
`),console.log(`If browser doesn't open, visit: ${i}`)},onWaiting:()=>console.log(`
|
|
5
|
-
Waiting for authentication...`)});let n=await t.getOrganizations();if(n.length>0){let o=n[0];M(o.id),
|
|
5
|
+
Waiting for authentication...`)});let n=await t.getOrganizations();if(n.length>0){let o=n[0];M(o.id),x(l,{org:o.displayName||o.name}),n.length>1&&j(l,{count:n.length})}else x(l,{org:"none"})}catch{$(l),process.exit(1)}}var xe=te;export{xe as default,te as ui};
|
package/dist/lib/orgs/create.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createOrganization as
|
|
2
|
-
`),e&&(n=n.replace(/\{\{(\w+)\}\}/g,(o,i)=>{let r=e[i];return r!==void 0?String(r):`{{${i}}}`})),n}function
|
|
1
|
+
import{createOrganization as ge}from"@tigrisdata/storage";function I(t,e,n){for(let o of e)if(t[o]!==void 0)return t[o];return n}import{S3Client as Ae}from"@aws-sdk/client-s3";import{homedir as H}from"os";import{join as O}from"path";import{readFileSync as J,writeFileSync as B,existsSync as P,mkdirSync as W}from"fs";import{chmod as Y}from"fs/promises";var C=O(H(),".tigris"),l=O(C,"config.json");function Q(){P(C)||W(C,{recursive:!0,mode:448})}function c(){if(P(l))try{let t=J(l,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function p(t){Q(),B(l,JSON.stringify(t,null,2),{mode:384});try{await Y(l,384)}catch{}}async function w(t){let e=c();e.tokens=t,await p(e)}async function g(){return c().tokens||null}async function T(){let t=c();delete t.tokens,await p(t)}async function M(t){let e=c();e.organizations=t,await p(e)}function E(){return c().organizations||[]}function k(){return c().selectedOrganization||null}function N(){let t=c();return t.temporaryCredentials||t.credentials||null}async function z(t){let e=c();e.loginMethod=t,await p(e)}function b(){return c().loginMethod||null}import u from"axios";import X from"open";function f(){return{domain:process.env.AUTH0_DOMAIN||"auth.tigris.dev",clientId:process.env.AUTH0_CLIENT_ID||"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",audience:process.env.AUTH0_AUDIENCE||"https://tigris-os-api"}}var D=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function R(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_STORAGE_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var x=class{config;baseUrl;constructor(){this.config=f(),this.baseUrl=`https://${this.config.domain}`}async login(e){let o=(await u.post(`${this.baseUrl}/oauth/device/code`,{client_id:this.config.clientId,audience:this.config.audience,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data;e?.onDeviceCode?.(o.user_code,o.verification_uri),await this.sleep(2e3);try{await X(o.verification_uri_complete)}catch{}e?.onWaiting?.();let i=await this.pollForToken(o.device_code,o.interval||5);await w(i),z("oauth"),await this.extractAndStoreOrganizations(i.idToken)}async pollForToken(e,n){let i=0;for(;i<60;){i++;try{let s=(await u.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,device_code:e,grant_type:"urn:ietf:params:oauth:grant-type:device_code"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,a=Date.now()+(s.expires_in||3600)*1e3;return{accessToken:s.access_token,refreshToken:s.refresh_token,idToken:s.id_token,expiresAt:a}}catch(r){if(u.isAxiosError(r)&&r.response){let s=r.response.data?.error;if(s==="authorization_pending"){await this.sleep(n*1e3);continue}if(s==="slow_down"){n+=5,await this.sleep(n*1e3);continue}throw new Error(r.response.data?.error_description||"Authentication failed")}throw r}}throw new Error("Authentication timed out. Please try again.")}async getAccessToken(){let e=await g();if(!e)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');let n=300*1e3;return Date.now()+n>=e.expiresAt&&(e=await this.refreshAccessToken(e)),e.accessToken}async refreshAccessToken(e){let n=null;if(e?.refreshToken?n=e:n=await g(),!n)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let i=(await u.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,grant_type:"refresh_token",refresh_token:n.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,r={accessToken:i.access_token,refreshToken:i.refresh_token||n.refreshToken,idToken:i.id_token||n.idToken,expiresAt:Date.now()+(i.expires_in||3600)*1e3};return await w(r),r}catch{throw await T(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await g();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let n=e.idToken.split(".")[1],o=Buffer.from(n,"base64").toString("utf8");return JSON.parse(o)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let n=e.split(".")[1],o=Buffer.from(n,"base64").toString("utf8"),r=JSON.parse(o)[D];if(!r)return;let s=r?.ns?.map(a=>typeof a=="object"&&a!==null?{id:a.id,name:a.name,displayName:a.name}:{id:a,name:a,displayName:a})||[];if(s.length===0)return;M(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),E()}async logout(){await T()}async isAuthenticated(){return await g()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},S=null;function m(){return S||(S=new x),S}var K=R(),Z=f();async function ee(){return b()}async function L(){let t=await ee();if(!t)throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.');if(t==="oauth"){let o=await m().getAccessToken();if(!k())throw new Error('No organization selected. Please run "tigris orgs select" first.');let r=K.endpoint,s=K.iamEndpoint,a=Z.domain;return{sessionToken:o,accessKeyId:"",secretAccessKey:"",endpoint:r,organizationId:k()??void 0,iamEndpoint:s,authDomain:a}}let e=N();if(!e)throw new Error('No credentials found. Please run "tigris configure" first.');return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint}}import{readFileSync as te,existsSync as ne}from"fs";import{join as $,dirname as oe}from"path";import{fileURLToPath as ie}from"url";import*as F from"yaml";var re=ie(import.meta.url),se=oe(re),A=null;function ae(){let t=se;for(let e=0;e<5;e++){let n=$(t,"specs.yaml");if(ne(n))return n;t=$(t,"..")}throw new Error("Could not find specs.yaml")}function ce(){if(!A){let t=ae(),e=te(t,"utf8");A=F.parse(e)}return A}function j(t,e){let o=ce().commands.find(i=>i.name===t);return o?e&&o.operations?o.operations.find(i=>i.name===e)||null:o:null}var v={success:"\u2714",failure:"\u2716",hint:"\u2192"};function h(t){let e=j(t.command,t.operation);if(e)return e.messages}function y(t,e){let n=t;return n=n.replace(/\\n/g,`
|
|
2
|
+
`),e&&(n=n.replace(/\{\{(\w+)\}\}/g,(o,i)=>{let r=e[i];return r!==void 0?String(r):`{{${i}}}`})),n}function U(t,e){let n=h(t);n?.onStart&&console.log(y(n.onStart,e))}function G(t,e){let n=h(t);n?.onSuccess&&console.log(`${v.success} ${y(n.onSuccess,e)}`)}function _(t,e,n){let o=h(t);o?.onFailure&&console.error(`${v.failure} ${y(o.onFailure,n)}`),e&&console.error(` ${e}`)}function V(t,e){let n=h(t);n?.hint&&console.log(`${v.hint} ${y(n.hint,e)}`)}function q(t,e){return{command:t,operation:e}}var d=q("orgs","create");async function de(t){U(d);let e=I(t,["name","N"]);e||(_(d,"Organization name is required"),process.exit(1));let n=await L(),{data:o,error:i}=await ge(e,{config:n});i&&(_(d,i.message),process.exit(1));let r=m(),s=await r.refreshAccessToken();s.idToken&&await r.extractAndStoreOrganizations(s.idToken);let a=o.id;G(d,{name:e,id:a}),V(d,{name:e})}export{de as default};
|
package/dist/lib/orgs/list.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
function
|
|
2
|
-
`)}function Z(n,e,t){let
|
|
3
|
-
`)}function
|
|
4
|
-
`+
|
|
1
|
+
function P(n,e,t){for(let i of e)if(n[i]!==void 0)return n[i];return t}function Y(n){return JSON.stringify(n,null,2)}function Q(n,e=" "){return Object.entries(n).map(([t,i])=>`${e}<${t}>${i}</${t}>`).join(`
|
|
2
|
+
`)}function Z(n,e,t){let i=[`<${e}>`];return n.forEach(o=>{i.push(` <${t}>`),i.push(Q(o," ")),i.push(` </${t}>`)}),i.push(`</${e}>`),i.join(`
|
|
3
|
+
`)}function E(n){if(n==null)return"";if(n instanceof Date)return b(n);if(typeof n=="string"){let e=new Date(n);if(!isNaN(e.getTime())&&n.includes("T"))return b(e)}return String(n)}function b(n){return new Intl.DateTimeFormat(void 0,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}).format(n)}function ee(n,e){return e.map(t=>{if(t.width)return t.width;let i=t.header.length,o=n.reduce((r,c)=>{let s=E(c[t.key]);return Math.max(r,s.length)},0);return Math.max(i,o)})}function ne(n,e){let t=[],i=ee(n,e),o="\u250C"+i.map(a=>"\u2500".repeat(a+2)).join("\u252C")+"\u2510",r="\u251C"+i.map(a=>"\u2500".repeat(a+2)).join("\u253C")+"\u2524",c="\u2514"+i.map(a=>"\u2500".repeat(a+2)).join("\u2534")+"\u2518";t.push(`
|
|
4
|
+
`+o);let s="\u2502 "+e.map((a,y)=>a.header.padEnd(i[y])).join(" \u2502 ")+" \u2502";return t.push(s),t.push(r),n.forEach(a=>{let y=e.map((l,u)=>{let g=E(a[l.key]);return l.align==="right"?g.padStart(i[u]):g.padEnd(i[u])});t.push("\u2502 "+y.join(" \u2502 ")+" \u2502")}),t.push(c+`
|
|
5
5
|
`),t.join(`
|
|
6
|
-
`)}function N(n,e,t,o
|
|
7
|
-
`),e&&(t=t.replace(/\{\{(\w+)\}\}/g,(o
|
|
6
|
+
`)}function N(n,e,t,i,o){switch(e){case"json":return Y(n);case"xml":return Z(n,t,i);default:return ne(n,o)}}import C from"axios";import ce from"open";function z(){return{domain:process.env.AUTH0_DOMAIN||"auth.tigris.dev",clientId:process.env.AUTH0_CLIENT_ID||"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",audience:process.env.AUTH0_AUDIENCE||"https://tigris-os-api"}}var D=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";import{homedir as te}from"os";import{join as $}from"path";import{readFileSync as ie,writeFileSync as oe,existsSync as R,mkdirSync as re}from"fs";import{chmod as se}from"fs/promises";var S=$(te(),".tigris"),T=$(S,"config.json");function ae(){R(S)||re(S,{recursive:!0,mode:448})}function d(){if(R(T))try{let n=ie(T,"utf8");return JSON.parse(n)}catch{return{}}return{}}async function m(n){ae(),oe(T,JSON.stringify(n,null,2),{mode:384});try{await se(T,384)}catch{}}async function A(n){let e=d();e.tokens=n,await m(e)}async function h(){return d().tokens||null}async function _(){let n=d();delete n.tokens,await m(n)}async function j(n){let e=d();e.organizations=n,await m(e)}function F(){return d().organizations||[]}async function L(n){let e=d();e.selectedOrganization=n,await m(e)}function U(){return d().selectedOrganization||null}async function V(n){let e=d();e.loginMethod=n,await m(e)}var O=class{config;baseUrl;constructor(){this.config=z(),this.baseUrl=`https://${this.config.domain}`}async login(e){let i=(await C.post(`${this.baseUrl}/oauth/device/code`,{client_id:this.config.clientId,audience:this.config.audience,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data;e?.onDeviceCode?.(i.user_code,i.verification_uri),await this.sleep(2e3);try{await ce(i.verification_uri_complete)}catch{}e?.onWaiting?.();let o=await this.pollForToken(i.device_code,i.interval||5);await A(o),V("oauth"),await this.extractAndStoreOrganizations(o.idToken)}async pollForToken(e,t){let o=0;for(;o<60;){o++;try{let c=(await C.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,device_code:e,grant_type:"urn:ietf:params:oauth:grant-type:device_code"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,s=Date.now()+(c.expires_in||3600)*1e3;return{accessToken:c.access_token,refreshToken:c.refresh_token,idToken:c.id_token,expiresAt:s}}catch(r){if(C.isAxiosError(r)&&r.response){let c=r.response.data?.error;if(c==="authorization_pending"){await this.sleep(t*1e3);continue}if(c==="slow_down"){t+=5,await this.sleep(t*1e3);continue}throw new Error(r.response.data?.error_description||"Authentication failed")}throw r}}throw new Error("Authentication timed out. Please try again.")}async getAccessToken(){let e=await h();if(!e)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');let t=300*1e3;return Date.now()+t>=e.expiresAt&&(e=await this.refreshAccessToken(e)),e.accessToken}async refreshAccessToken(e){let t=null;if(e?.refreshToken?t=e:t=await h(),!t)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let o=(await C.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,grant_type:"refresh_token",refresh_token:t.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,r={accessToken:o.access_token,refreshToken:o.refresh_token||t.refreshToken,idToken:o.id_token||t.idToken,expiresAt:Date.now()+(o.expires_in||3600)*1e3};return await A(r),r}catch{throw await _(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await h();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let t=e.idToken.split(".")[1],i=Buffer.from(t,"base64").toString("utf8");return JSON.parse(i)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let t=e.split(".")[1],i=Buffer.from(t,"base64").toString("utf8"),r=JSON.parse(i)[D];if(!r)return;let c=r?.ns?.map(s=>typeof s=="object"&&s!==null?{id:s.id,name:s.name,displayName:s.name}:{id:s,name:s,displayName:s})||[];if(c.length===0)return;j(c)}catch{}}async getOrganizations(){return await this.getAccessToken(),F()}async logout(){await _()}async isAuthenticated(){return await h()!==null}sleep(e){return new Promise(t=>setTimeout(t,e))}},v=null;function G(){return v||(v=new O),v}import ye from"enquirer";import{readFileSync as de,existsSync as pe}from"fs";import{join as B,dirname as le}from"path";import{fileURLToPath as ue}from"url";import*as J from"yaml";var ge=ue(import.meta.url),fe=le(ge),I=null;function me(){let n=fe;for(let e=0;e<5;e++){let t=B(n,"specs.yaml");if(pe(t))return t;n=B(n,"..")}throw new Error("Could not find specs.yaml")}function he(){if(!I){let n=me(),e=de(n,"utf8");I=J.parse(e)}return I}function W(n,e){let i=he().commands.find(o=>o.name===n);return i?e&&i.operations?i.operations.find(o=>o.name===e)||null:i:null}var H={success:"\u2714",failure:"\u2716",hint:"\u2192"};function w(n){let e=W(n.command,n.operation);if(e)return e.messages}function k(n,e){let t=n;return t=t.replace(/\\n/g,`
|
|
7
|
+
`),e&&(t=t.replace(/\{\{(\w+)\}\}/g,(i,o)=>{let r=e[o];return r!==void 0?String(r):`{{${o}}}`})),t}function q(n,e){let t=w(n);t?.onStart&&console.log(k(t.onStart,e))}function M(n,e){let t=w(n);t?.onSuccess&&console.log(`${H.success} ${k(t.onSuccess,e)}`)}function x(n,e,t){let i=w(n);i?.onFailure&&console.error(`${H.failure} ${k(i.onFailure,t)}`),e&&console.error(` ${e}`)}function K(n,e){let t=w(n);t?.onEmpty&&console.log(k(t.onEmpty,e))}function X(n,e){return{command:n,operation:e}}var p=X("orgs","list");async function Te(n){q(p);let e=P(n,["format","f","F"],"select");try{let t=G();await t.getAccessToken();let i=await t.getOrganizations();if(i.length===0){K(p);return}let o=U();if(e==="select"){let s=i.map(a=>({name:a.id,message:`${a.displayName||a.name} (${a.id})`,hint:a.id===o?"currently selected":void 0}));try{let l=(await ye.prompt({type:"select",name:"organization",message:"Select an organization:",choices:s.map(f=>f.message),initial:o?i.findIndex(f=>f.id===o):0})).organization.match(/\(([^)]+)\)$/),u=l?l[1]:i[0].id;L(u);let g=i.find(f=>f.id===u);M(p,{name:g?.displayName||g?.name});return}catch{x(p,"Selection cancelled"),process.exit(0)}}let r=i.map(s=>({id:s.id,name:s.name,displayName:s.displayName||s.name,selected:s.id===o?"*":""})),c=N(r,e,"organizations","organization",[{key:"selected",header:" ",width:1},{key:"id",header:"ID"},{key:"name",header:"Name"},{key:"displayName",header:"Display Name"}]);console.log(c),M(p,{count:r.length})}catch(t){t instanceof Error?x(p,t.message):x(p),process.exit(1)}}export{Te as default};
|
package/dist/lib/orgs/select.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
function
|
|
2
|
-
`),e&&(n=n.replace(/\{\{(\w+)\}\}/g,(o,i)=>{let r=e[i];return r!==void 0?String(r):`{{${i}}}`})),n}function
|
|
3
|
-
`);
|
|
1
|
+
function x(t,e,n){for(let o of e)if(t[o]!==void 0)return t[o];return n}import u from"axios";import q from"open";function v(){return{domain:process.env.AUTH0_DOMAIN||"auth.tigris.dev",clientId:process.env.AUTH0_CLIENT_ID||"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",audience:process.env.AUTH0_AUDIENCE||"https://tigris-os-api"}}var A=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";import{homedir as L}from"os";import{join as _}from"path";import{readFileSync as U,writeFileSync as G,existsSync as O,mkdirSync as V}from"fs";import{chmod as H}from"fs/promises";var m=_(L(),".tigris"),f=_(m,"config.json");function J(){O(m)||V(m,{recursive:!0,mode:448})}function c(){if(O(f))try{let t=U(f,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function p(t){J(),G(f,JSON.stringify(t,null,2),{mode:384});try{await H(f,384)}catch{}}async function h(t){let e=c();e.tokens=t,await p(e)}async function l(){return c().tokens||null}async function C(){let t=c();delete t.tokens,await p(t)}async function I(t){let e=c();e.organizations=t,await p(e)}function M(){return c().organizations||[]}async function P(t){let e=c();e.selectedOrganization=t,await p(e)}async function E(t){let e=c();e.loginMethod=t,await p(e)}var T=class{config;baseUrl;constructor(){this.config=v(),this.baseUrl=`https://${this.config.domain}`}async login(e){let o=(await u.post(`${this.baseUrl}/oauth/device/code`,{client_id:this.config.clientId,audience:this.config.audience,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data;e?.onDeviceCode?.(o.user_code,o.verification_uri),await this.sleep(2e3);try{await q(o.verification_uri_complete)}catch{}e?.onWaiting?.();let i=await this.pollForToken(o.device_code,o.interval||5);await h(i),E("oauth"),await this.extractAndStoreOrganizations(i.idToken)}async pollForToken(e,n){let i=0;for(;i<60;){i++;try{let s=(await u.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,device_code:e,grant_type:"urn:ietf:params:oauth:grant-type:device_code"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,a=Date.now()+(s.expires_in||3600)*1e3;return{accessToken:s.access_token,refreshToken:s.refresh_token,idToken:s.id_token,expiresAt:a}}catch(r){if(u.isAxiosError(r)&&r.response){let s=r.response.data?.error;if(s==="authorization_pending"){await this.sleep(n*1e3);continue}if(s==="slow_down"){n+=5,await this.sleep(n*1e3);continue}throw new Error(r.response.data?.error_description||"Authentication failed")}throw r}}throw new Error("Authentication timed out. Please try again.")}async getAccessToken(){let e=await l();if(!e)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');let n=300*1e3;return Date.now()+n>=e.expiresAt&&(e=await this.refreshAccessToken(e)),e.accessToken}async refreshAccessToken(e){let n=null;if(e?.refreshToken?n=e:n=await l(),!n)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let i=(await u.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,grant_type:"refresh_token",refresh_token:n.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,r={accessToken:i.access_token,refreshToken:i.refresh_token||n.refreshToken,idToken:i.id_token||n.idToken,expiresAt:Date.now()+(i.expires_in||3600)*1e3};return await h(r),r}catch{throw await C(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await l();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let n=e.idToken.split(".")[1],o=Buffer.from(n,"base64").toString("utf8");return JSON.parse(o)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let n=e.split(".")[1],o=Buffer.from(n,"base64").toString("utf8"),r=JSON.parse(o)[A];if(!r)return;let s=r?.ns?.map(a=>typeof a=="object"&&a!==null?{id:a.id,name:a.name,displayName:a.name}:{id:a,name:a,displayName:a})||[];if(s.length===0)return;I(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),M()}async logout(){await C()}async isAuthenticated(){return await l()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},y=null;function b(){return y||(y=new T),y}import{readFileSync as B,existsSync as K}from"fs";import{join as z,dirname as W}from"path";import{fileURLToPath as Y}from"url";import*as N from"yaml";var Q=Y(import.meta.url),X=W(Q),k=null;function Z(){let t=X;for(let e=0;e<5;e++){let n=z(t,"specs.yaml");if(K(n))return n;t=z(t,"..")}throw new Error("Could not find specs.yaml")}function ee(){if(!k){let t=Z(),e=B(t,"utf8");k=N.parse(e)}return k}function D(t,e){let o=ee().commands.find(i=>i.name===t);return o?e&&o.operations?o.operations.find(i=>i.name===e)||null:o:null}var R={success:"\u2714",failure:"\u2716",hint:"\u2192"};function w(t){let e=D(t.command,t.operation);if(e)return e.messages}function S(t,e){let n=t;return n=n.replace(/\\n/g,`
|
|
2
|
+
`),e&&(n=n.replace(/\{\{(\w+)\}\}/g,(o,i)=>{let r=e[i];return r!==void 0?String(r):`{{${i}}}`})),n}function $(t,e){let n=w(t);n?.onStart&&console.log(S(n.onStart,e))}function F(t,e){let n=w(t);n?.onSuccess&&console.log(`${R.success} ${S(n.onSuccess,e)}`)}function d(t,e,n){let o=w(t);o?.onFailure&&console.error(`${R.failure} ${S(o.onFailure,n)}`),e&&console.error(` ${e}`)}function j(t,e){return{command:t,operation:e}}var g=j("orgs","select");async function ne(t){$(g);let e=x(t,["name","N"]);e||(d(g,"Organization name or ID is required"),process.exit(1));try{let n=b();await n.getAccessToken();let o=await n.getOrganizations(),i=o.find(r=>r.id===e||r.name===e);if(!i){let r=o.map(s=>` - ${s.name} (${s.id})`).join(`
|
|
3
|
+
`);d(g,`Organization "${e}" not found
|
|
4
4
|
|
|
5
5
|
Available organizations:
|
|
6
|
-
${r}`),process.exit(1)}
|
|
6
|
+
${r}`),process.exit(1)}P(i.id),F(g,{name:i.name})}catch(n){n instanceof Error?d(g,n.message):d(g),process.exit(1)}}export{ne as default};
|
package/dist/lib/whoami.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import g from"axios";import H from"open";function
|
|
2
|
-
`),e&&(t=t.replace(/\{\{(\w+)\}\}/g,(i,s)=>{let o=e[s];return o!==void 0?String(o):`{{${s}}}`})),t}function
|
|
3
|
-
`))}catch(n){n instanceof Error?w
|
|
1
|
+
import g from"axios";import H from"open";function k(){return{domain:process.env.AUTH0_DOMAIN||"auth.tigris.dev",clientId:process.env.AUTH0_CLIENT_ID||"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",audience:process.env.AUTH0_AUDIENCE||"https://tigris-os-api"}}var S=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";import{homedir as F}from"os";import{join as x}from"path";import{readFileSync as U,writeFileSync as j,existsSync as A,mkdirSync as L}from"fs";import{chmod as G}from"fs/promises";var f=x(F(),".tigris"),p=x(f,"config.json");function V(){A(f)||L(f,{recursive:!0,mode:448})}function c(){if(A(p))try{let n=U(p,"utf8");return JSON.parse(n)}catch{return{}}return{}}async function d(n){V(),j(p,JSON.stringify(n,null,2),{mode:384});try{await G(p,384)}catch{}}async function u(n){let e=c();e.tokens=n,await d(e)}async function l(){return c().tokens||null}async function m(){let n=c();delete n.tokens,await d(n)}async function v(n){let e=c();e.organizations=n,await d(e)}function _(){return c().organizations||[]}function I(){return c().selectedOrganization||null}async function O(n){let e=c();e.loginMethod=n,await d(e)}var C=class{config;baseUrl;constructor(){this.config=k(),this.baseUrl=`https://${this.config.domain}`}async login(e){let i=(await g.post(`${this.baseUrl}/oauth/device/code`,{client_id:this.config.clientId,audience:this.config.audience,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data;e?.onDeviceCode?.(i.user_code,i.verification_uri),await this.sleep(2e3);try{await H(i.verification_uri_complete)}catch{}e?.onWaiting?.();let s=await this.pollForToken(i.device_code,i.interval||5);await u(s),O("oauth"),await this.extractAndStoreOrganizations(s.idToken)}async pollForToken(e,t){let s=0;for(;s<60;){s++;try{let r=(await g.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,device_code:e,grant_type:"urn:ietf:params:oauth:grant-type:device_code"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,a=Date.now()+(r.expires_in||3600)*1e3;return{accessToken:r.access_token,refreshToken:r.refresh_token,idToken:r.id_token,expiresAt:a}}catch(o){if(g.isAxiosError(o)&&o.response){let r=o.response.data?.error;if(r==="authorization_pending"){await this.sleep(t*1e3);continue}if(r==="slow_down"){t+=5,await this.sleep(t*1e3);continue}throw new Error(o.response.data?.error_description||"Authentication failed")}throw o}}throw new Error("Authentication timed out. Please try again.")}async getAccessToken(){let e=await l();if(!e)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');let t=300*1e3;return Date.now()+t>=e.expiresAt&&(e=await this.refreshAccessToken(e)),e.accessToken}async refreshAccessToken(e){let t=null;if(e?.refreshToken?t=e:t=await l(),!t)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let s=(await g.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,grant_type:"refresh_token",refresh_token:t.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,o={accessToken:s.access_token,refreshToken:s.refresh_token||t.refreshToken,idToken:s.id_token||t.idToken,expiresAt:Date.now()+(s.expires_in||3600)*1e3};return await u(o),o}catch{throw await m(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await l();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let t=e.idToken.split(".")[1],i=Buffer.from(t,"base64").toString("utf8");return JSON.parse(i)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let t=e.split(".")[1],i=Buffer.from(t,"base64").toString("utf8"),o=JSON.parse(i)[S];if(!o)return;let r=o?.ns?.map(a=>typeof a=="object"&&a!==null?{id:a.id,name:a.name,displayName:a.name}:{id:a,name:a,displayName:a})||[];if(r.length===0)return;v(r)}catch{}}async getOrganizations(){return await this.getAccessToken(),_()}async logout(){await m()}async isAuthenticated(){return await l()!==null}sleep(e){return new Promise(t=>setTimeout(t,e))}},h=null;function P(){return h||(h=new C),h}import{readFileSync as J,existsSync as B}from"fs";import{join as M,dirname as q}from"path";import{fileURLToPath as K}from"url";import*as E from"yaml";var W=K(import.meta.url),Y=q(W),y=null;function Q(){let n=Y;for(let e=0;e<5;e++){let t=M(n,"specs.yaml");if(B(t))return t;n=M(n,"..")}throw new Error("Could not find specs.yaml")}function X(){if(!y){let n=Q(),e=J(n,"utf8");y=E.parse(e)}return y}function z(n,e){let i=X().commands.find(s=>s.name===n);return i?e&&i.operations?i.operations.find(s=>s.name===e)||null:i:null}var Z={success:"\u2714",failure:"\u2716",hint:"\u2192"};function b(n){let e=z(n.command,n.operation);if(e)return e.messages}function N(n,e){let t=n;return t=t.replace(/\\n/g,`
|
|
2
|
+
`),e&&(t=t.replace(/\{\{(\w+)\}\}/g,(i,s)=>{let o=e[s];return o!==void 0?String(o):`{{${s}}}`})),t}function T(n,e,t){let i=b(n);i?.onFailure&&console.error(`${Z.failure} ${N(i.onFailure,t)}`),e&&console.error(` ${e}`)}function D(n,e){let t=b(n);t?.onAlreadyDone&&console.log(N(t.onAlreadyDone,e))}function $(n,e){return{command:n,operation:e}}var w=$("whoami");async function ee(){try{let n=P();if(!await n.isAuthenticated()){D(w);return}let t=await n.getIdTokenClaims(),i=await n.getOrganizations(),s=I(),o=[];if(o.push(""),o.push("User Information:"),o.push(` Email: ${t.email||"N/A"}`),o.push(` User ID: ${t.sub}`),i.length>0){if(o.push(""),o.push(`Organizations (${i.length}):`),i.forEach(r=>{let R=r.id===s?">":" ";o.push(` ${R} ${r.name} (${r.id})`)}),s){let r=i.find(a=>a.id===s);r&&(o.push(""),o.push(`Active: ${r.name}`))}}else o.push(""),o.push("Organizations: None");o.push(""),console.log(o.join(`
|
|
3
|
+
`))}catch(n){n instanceof Error?T(w,n.message):T(w),process.exit(1)}}export{ee as default};
|