@tigrisdata/cli 2.2.0 → 2.3.0
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 +2 -2
- package/dist/index.js +4 -4
- package/dist/lib/buckets/create.js +1 -1
- package/dist/lib/buckets/delete.js +2 -2
- package/dist/lib/buckets/get.js +4 -4
- package/dist/lib/buckets/list.js +3 -3
- package/dist/lib/buckets/set.js +2 -0
- package/dist/lib/cp.js +1 -1
- package/dist/lib/credentials/test.js +2 -0
- package/dist/lib/forks/create.js +2 -2
- package/dist/lib/forks/list.js +2 -2
- package/dist/lib/login/credentials.js +1 -1
- package/dist/lib/login/oauth.js +2 -2
- package/dist/lib/login/select.js +3 -3
- package/dist/lib/ls.js +1 -1
- package/dist/lib/mk.js +1 -1
- package/dist/lib/mv.js +1 -1
- package/dist/lib/objects/delete.js +2 -2
- package/dist/lib/objects/get.js +2 -2
- package/dist/lib/objects/list.js +4 -4
- package/dist/lib/objects/put.js +3 -3
- package/dist/lib/organizations/create.js +3 -3
- package/dist/lib/organizations/list.js +7 -7
- package/dist/lib/organizations/select.js +5 -5
- package/dist/lib/rm.js +1 -1
- package/dist/lib/snapshots/list.js +7 -7
- package/dist/lib/snapshots/take.js +2 -2
- package/dist/lib/touch.js +1 -1
- package/dist/lib/whoami.js +3 -3
- package/dist/specs.yaml +51 -0
- package/dist/utils/options.js +1 -1
- package/package.json +3 -2
package/dist/auth/client.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import f 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 x}from"os";import{join as C}from"path";import{readFileSync as A,writeFileSync as S,existsSync as y,mkdirSync as
|
|
1
|
+
import f 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 x}from"os";import{join as C}from"path";import{readFileSync as A,writeFileSync as S,existsSync as y,mkdirSync as P}from"fs";import{chmod as O}from"fs/promises";var p=C(x(),".tigris"),g=C(p,"config.json");function E(){y(p)||P(p,{recursive:!0,mode:448})}function c(){if(y(g))try{let t=A(g,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function l(t){E(),S(g,JSON.stringify(t,null,2),{mode:384});try{await O(g,384)}catch{}}async function u(t){let e=c();e.tokens=t,await l(e)}async function d(){return c().tokens||null}async function m(){let t=c();delete t.tokens,await l(t)}async function _(t){let e=c();e.organizations=t,await l(e)}function v(){return c().organizations||[]}async function I(t){let e=c();e.loginMethod=t,await l(e)}var T=class{config;baseUrl;constructor(){this.config=k(),this.baseUrl=`https://${this.config.domain}`}async login(e){let i=(await f.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,n){let r=0;for(;r<60;){r++;try{let s=(await f.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(f.isAxiosError(o)&&o.response){let s=o.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(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 r=(await f.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: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 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 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)[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(n=>setTimeout(n,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 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.
|
|
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_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 M}from"@aws-sdk/client-s3";import{homedir as b}from"os";import{join as v}from"path";import{readFileSync as K,writeFileSync as R,existsSync as x,mkdirSync as L}from"fs";import{chmod as
|
|
1
|
+
import{S3Client as M}from"@aws-sdk/client-s3";import{homedir as b}from"os";import{join as v}from"path";import{readFileSync as K,writeFileSync as R,existsSync as x,mkdirSync as L}from"fs";import{chmod as U}from"fs/promises";var h=v(b(),".tigris"),g=v(h,"config.json");function F(){x(h)||L(h,{recursive:!0,mode:448})}function c(){if(x(g))try{let n=K(g,"utf8");return JSON.parse(n)}catch{return{}}return{}}async function l(n){F(),R(g,JSON.stringify(n,null,2),{mode:384});try{await U(g,384)}catch{}}async function T(n){let e=c();e.tokens=n,await l(e)}async function d(){return c().tokens||null}async function w(){let n=c();delete n.tokens,await l(n)}async function S(n){let e=c();e.organizations=n,await l(e)}function P(){return c().organizations||[]}function f(){return c().selectedOrganization||null}function u(){let n=c();return n.temporaryCredentials||n.credentials||null}async function O(n){let e=c();e.loginMethod=n,await l(e)}function E(){return c().loginMethod||null}import m from"axios";import G from"open";function p(){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 N=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function z(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var C=class{config;baseUrl;constructor(){this.config=p(),this.baseUrl=`https://${this.config.domain}`}async login(e){let i=(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?.(i.user_code,i.verification_uri),await this.sleep(2e3);try{await G(i.verification_uri_complete)}catch{}e?.onWaiting?.();let r=await this.pollForToken(i.device_code,i.interval||5);await T(r),O("oauth"),await this.extractAndStoreOrganizations(r.idToken)}async pollForToken(e,t){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(o){if(m.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 m.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 T(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 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)[N];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(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),P()}async logout(){await w()}async isAuthenticated(){return await d()!==null}sleep(e){return new Promise(t=>setTimeout(t,e))}},y=null;function k(){return y||(y=new C),y}var _=z(),j=p();async function A(){return E()}async function re(){if(await A()==="oauth"){let i=await k().getAccessToken();if(!f())throw new Error('No organization selected. Please run "tigris orgs select" first.');let o=_.endpoint,s=_.iamEndpoint,a=j.domain;return{sessionToken:i,accessKeyId:"",secretAccessKey:"",endpoint:o,organizationId:f()??void 0,iamEndpoint:s,authDomain:a}}let e=u();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint};throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}async function se(){if(await A()==="oauth"){let i=await k().getAccessToken(),r=f();if(!r)throw new Error('No organization selected. Please run "tigris orgs select" first.');let o=_.endpoint,s=new M({region:"auto",endpoint:o,credentials:{sessionToken:i,accessKeyId:"",secretAccessKey:""}});return s.middlewareStack.add(a=>async I=>{let D=I.request;return D.headers["x-Tigris-Namespace"]=r,await a(I)},{name:"x-Tigris-Namespace-Middleware",step:"build",override:!0}),s}let e=u();if(e)return new M({region:"auto",endpoint:e.endpoint,credentials:{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey}});throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}async function ae(){return await A()!==null?!0:u()!==null}export{A as getLoginMethod,se as getS3Client,re as getStorageConfig,ae as isAuthenticated};
|
package/dist/cli.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{Command as E}from"commander";import{readFileSync as k,existsSync as q}from"fs";import{join as u,dirname as R}from"path";import{fileURLToPath as P}from"url";import*as C from"yaml";var b="2.
|
|
2
|
+
import{Command as E}from"commander";import{readFileSync as k,existsSync as q}from"fs";import{join as u,dirname as R}from"path";import{fileURLToPath as P}from"url";import*as C from"yaml";var b="2.3.0";process.on("unhandledRejection",e=>{(e===""||e===void 0)&&(console.error(`
|
|
3
3
|
Operation cancelled`),process.exit(1)),console.error(`
|
|
4
4
|
Error:`,e instanceof Error?e.message:e),process.exit(1)});process.on("uncaughtException",e=>{console.error(`
|
|
5
5
|
Error:`,e.message),process.exit(1)});var D=P(import.meta.url),p=R(D),V=u(p,"specs.yaml"),M=k(V,"utf8"),l=C.parse(M);function y(e,t){return(t?[u(p,"lib",e,`${t}.js`),u(p,"lib",e,t,"index.js")]:[u(p,"lib",`${e}.js`),u(p,"lib",e,"index.js")]).some(i=>q(i))}function A(e){let t;e.type==="positional"?t=` ${e.name}`:(t=` --${e.name}`,e.alias&&e.alias.length===1&&(t+=`, -${e.alias}`));let n=26,i=t.length>=n?t+" ":t.padEnd(n),s=e.description;return e.options&&(Array.isArray(e.options)&&typeof e.options[0]=="string"?s+=` (options: ${e.options.join(", ")})`:s+=` (options: ${e.options.map(o=>o.value).join(", ")})`),e.default&&(s+=` [default: ${e.default}]`),e.required&&(s+=" [required]"),e["required-when"]&&(s+=` [required when: ${e["required-when"]}]`),e.multiple&&(s+=" [multiple values: comma-separated]"),e.type==="positional"&&(s+=" [positional argument]"),e.examples&&e.examples.length>0&&(s+=` (examples: ${e.examples.join(", ")})`),`${i}${s}`}function w(e){if(console.log(`
|
|
@@ -9,5 +9,5 @@ ${l.name} ${e.name} ${t.name} - ${t.description}
|
|
|
9
9
|
`),t.arguments&&t.arguments.length>0&&(console.log("Arguments:"),t.arguments.forEach(n=>{console.log(A(n))}),console.log())}function T(e){return y(e.name)?!0:e.operations?e.operations.some(t=>y(e.name,t.name)):!1}function v(){console.log(`Tigris CLI Version: ${b}
|
|
10
10
|
`),console.log(`Usage: tigris [command] [options]
|
|
11
11
|
`),console.log("Commands:"),l.commands.filter(T).forEach(t=>{let n=` ${t.name}`;t.alias&&(n+=` (${t.alias})`);let i=n.padEnd(24);console.log(`${i}${t.description}`)}),console.log(`
|
|
12
|
-
Use "${l.name} <command> help" for more information about a command.`)}function m(e,t=[]){t.forEach(n=>{if(n.type==="positional"){let i=n.required?`<${n.name}>`:`[${n.name}]`;e.argument(i,n.description)}else{let s=n.alias&&n.alias.length===1?`-${n.alias}, --${n.name}`:`--${n.name}`;n.type==="flag"||(n.options?s+=" <value>":s+=n.required||n["required-when"]?" <value>":" [value]"),e.option(s,n.description,n.default)}})}function g(e,t){for(let n of e){if(n["required-when"]){let[i,s]=n["required-when"].split("="),o=h(t,i,e),r=h(t,n.name,e);if(o===s&&!r)return console.error(`--${n.name} is required when --${i} is ${s}`),!1}if(n.required&&!h(t,n.name,e))return console.error(`--${n.name} is required`),!1}return!0}function h(e,t,n){if(n){let s=n.find(o=>o.name===t);if(s&&s.alias){let o=s.alias.charAt(0).toUpperCase()+s.alias.slice(1);if(e[o]!==void 0)return e[o]}}let i=[t,t.replace(/-/g,""),t.replace(/-/g,"").toLowerCase(),t.charAt(0).toUpperCase(),_(t)];for(let s of i)if(e[s]!==void 0)return e[s]}function _(e){return e.replace(/-([a-z])/g,(t,n)=>n.toUpperCase())}async function H(e,t){let n=t?[`./lib/${e}/${t}.js`,`./lib/${e}/${t}/index.js`]:[`./lib/${e}.js`,`./lib/${e}/index.js`];for(let s of n){let o=await import(s).catch(()=>null);if(o)return{module:o,error:null}}return{module:null,error:`Command not found: ${t?`${e} ${t}`:e}`}}async function $(e,t,n=[],i={},s){if(s){let x=s.replace(/\\n/g,`
|
|
12
|
+
Use "${l.name} <command> help" for more information about a command.`)}function m(e,t=[]){t.forEach(n=>{if(n.type==="positional"){let i=n.required?`<${n.name}>`:`[${n.name}]`;e.argument(i,n.description)}else{let s=n.alias&&n.alias.length===1?`-${n.alias}, --${n.name}`:`--${n.name}`;n.type==="flag"||(n.type==="boolean"?s+=" [value]":n.options?s+=" <value>":s+=n.required||n["required-when"]?" <value>":" [value]"),e.option(s,n.description,n.default)}})}function g(e,t){for(let n of e){if(n["required-when"]){let[i,s]=n["required-when"].split("="),o=h(t,i,e),r=h(t,n.name,e);if(o===s&&!r)return console.error(`--${n.name} is required when --${i} is ${s}`),!1}if(n.required&&!h(t,n.name,e))return console.error(`--${n.name} is required`),!1}return!0}function h(e,t,n){if(n){let s=n.find(o=>o.name===t);if(s&&s.alias){let o=s.alias.charAt(0).toUpperCase()+s.alias.slice(1);if(e[o]!==void 0)return e[o]}}let i=[t,t.replace(/-/g,""),t.replace(/-/g,"").toLowerCase(),t.charAt(0).toUpperCase(),_(t)];for(let s of i)if(e[s]!==void 0)return e[s]}function _(e){return e.replace(/-([a-z])/g,(t,n)=>n.toUpperCase())}async function H(e,t){let n=t?[`./lib/${e}/${t}.js`,`./lib/${e}/${t}/index.js`]:[`./lib/${e}.js`,`./lib/${e}/index.js`];for(let s of n){let o=await import(s).catch(()=>null);if(o)return{module:o,error:null}}return{module:null,error:`Command not found: ${t?`${e} ${t}`:e}`}}async function $(e,t,n=[],i={},s){if(s){let x=s.replace(/\\n/g,`
|
|
13
13
|
`);console.log(x)}let{module:o,error:r}=await H(e,t);(r||!o)&&(console.error(r),process.exit(1));let a=t||e,d=o.default||o[a];typeof d!="function"&&(console.error(`Command not implemented: ${a}`),process.exit(1)),await d({...i,_positional:n})}var f=new E;f.name(l.name).description(l.description).version(l.version);function c(e,t,n){let i;"optsWithGlobals"in n&&typeof n.optsWithGlobals=="function"?i=n.optsWithGlobals():"opts"in n&&typeof n.opts=="function"?i=n.opts():i=n;let s={...i};return e.filter(r=>r.type==="positional").forEach((r,a)=>{t[a]!==void 0&&(r.multiple?s[r.name]=t[a].split(",").map(d=>d.trim()):s[r.name]=t[a])}),e.forEach(r=>{r.multiple&&r.type!=="positional"&&s[r.name]&&typeof s[r.name]=="string"&&(s[r.name]=s[r.name].split(",").map(a=>a.trim()))}),s}l.commands.forEach(e=>{let t=f.command(e.name).description(e.description);if(e.alias&&t.alias(e.alias),e.operations&&e.operations.length>0)if(e.operations.forEach(n=>{let i=t.command(n.name).description(n.description);n.alias&&(Array.isArray(n.alias)?n.alias:[n.alias]).forEach(o=>i.alias(o)),m(i,n.arguments),i.action(async(...s)=>{let o=s.pop(),r=s;n.arguments&&!g(n.arguments,c(n.arguments,r,o))||await $(e.name,n.name,r,c(n.arguments||[],r,o),n.message)}),i.command("help").description("Show help for this operation").action(()=>{U(e,n)})}),e.default){let n=e.operations?.find(i=>i.name===e.default);if(n){m(t,e.arguments),m(t,n.arguments);let i=[...e.arguments||[],...n.arguments||[]];t.action(async(...s)=>{let o=s.pop(),r=s;i.length>0&&!g(i,c(i,r,o))||await $(e.name,n.name,r,c(i,r,o),e.message||n.message)})}}else t.action(()=>{w(e)});else m(t,e.arguments),t.action(async(...n)=>{let i=n.pop(),s=n;e.arguments&&!g(e.arguments,c(e.arguments,s,i))||await $(e.name,void 0,s,c(e.arguments||[],s,i),e.message)});t.command("help").description("Show help for this command").action(()=>{w(e)})});f.command("help").description("Show general help").action(()=>{v()});f.action(()=>{v()});f.parse();
|
package/dist/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import{Command as E}from"commander";import{readFileSync as k,existsSync as q}from"fs";import{join as u,dirname as R}from"path";import{fileURLToPath as P}from"url";import*as C from"yaml";var b="2.
|
|
1
|
+
import{Command as E}from"commander";import{readFileSync as k,existsSync as q}from"fs";import{join as u,dirname as R}from"path";import{fileURLToPath as P}from"url";import*as C from"yaml";var b="2.3.0";process.on("unhandledRejection",e=>{(e===""||e===void 0)&&(console.error(`
|
|
2
2
|
Operation cancelled`),process.exit(1)),console.error(`
|
|
3
3
|
Error:`,e instanceof Error?e.message:e),process.exit(1)});process.on("uncaughtException",e=>{console.error(`
|
|
4
4
|
Error:`,e.message),process.exit(1)});var D=P(import.meta.url),p=R(D),V=u(p,"specs.yaml"),M=k(V,"utf8"),l=C.parse(M);function y(e,t){return(t?[u(p,"lib",e,`${t}.js`),u(p,"lib",e,t,"index.js")]:[u(p,"lib",`${e}.js`),u(p,"lib",e,"index.js")]).some(i=>q(i))}function A(e){let t;e.type==="positional"?t=` ${e.name}`:(t=` --${e.name}`,e.alias&&e.alias.length===1&&(t+=`, -${e.alias}`));let n=26,i=t.length>=n?t+" ":t.padEnd(n),s=e.description;return e.options&&(Array.isArray(e.options)&&typeof e.options[0]=="string"?s+=` (options: ${e.options.join(", ")})`:s+=` (options: ${e.options.map(o=>o.value).join(", ")})`),e.default&&(s+=` [default: ${e.default}]`),e.required&&(s+=" [required]"),e["required-when"]&&(s+=` [required when: ${e["required-when"]}]`),e.multiple&&(s+=" [multiple values: comma-separated]"),e.type==="positional"&&(s+=" [positional argument]"),e.examples&&e.examples.length>0&&(s+=` (examples: ${e.examples.join(", ")})`),`${i}${s}`}function w(e){if(console.log(`
|
|
5
5
|
${l.name} ${e.name} - ${e.description}
|
|
6
6
|
`),e.operations&&e.operations.length>0){let t=e.operations.filter(n=>y(e.name,n.name));t.length>0&&(console.log("Operations:"),t.forEach(n=>{let i=` ${n.name}`;if(n.alias){let o=Array.isArray(n.alias)?n.alias:[n.alias];i+=` (${o.join(", ")})`}let s=i.padEnd(24);console.log(`${s}${n.description}`)}),console.log())}e.arguments&&e.arguments.length>0&&(console.log("Arguments:"),e.arguments.forEach(t=>{console.log(A(t))}),console.log()),console.log(`Use "${l.name} ${e.name} <operation> help" for more information about an operation.`)}function U(e,t){console.log(`
|
|
7
7
|
${l.name} ${e.name} ${t.name} - ${t.description}
|
|
8
|
-
`),t.arguments&&t.arguments.length>0&&(console.log("Arguments:"),t.arguments.forEach(n=>{console.log(A(n))}),console.log())}function T(e){return y(e.name)?!0:e.operations?e.operations.some(t=>y(e.name,t.name)):!1}function
|
|
8
|
+
`),t.arguments&&t.arguments.length>0&&(console.log("Arguments:"),t.arguments.forEach(n=>{console.log(A(n))}),console.log())}function T(e){return y(e.name)?!0:e.operations?e.operations.some(t=>y(e.name,t.name)):!1}function v(){console.log(`Tigris CLI Version: ${b}
|
|
9
9
|
`),console.log(`Usage: tigris [command] [options]
|
|
10
10
|
`),console.log("Commands:"),l.commands.filter(T).forEach(t=>{let n=` ${t.name}`;t.alias&&(n+=` (${t.alias})`);let i=n.padEnd(24);console.log(`${i}${t.description}`)}),console.log(`
|
|
11
|
-
Use "${l.name} <command> help" for more information about a command.`)}function m(e,t=[]){t.forEach(n=>{if(n.type==="positional"){let i=n.required?`<${n.name}>`:`[${n.name}]`;e.argument(i,n.description)}else{let s=n.alias&&n.alias.length===1?`-${n.alias}, --${n.name}`:`--${n.name}`;n.type==="flag"||(n.options?s+=" <value>":s+=n.required||n["required-when"]?" <value>":" [value]"),e.option(s,n.description,n.default)}})}function g(e,t){for(let n of e){if(n["required-when"]){let[i,s]=n["required-when"].split("="),o=h(t,i,e),r=h(t,n.name,e);if(o===s&&!r)return console.error(`--${n.name} is required when --${i} is ${s}`),!1}if(n.required&&!h(t,n.name,e))return console.error(`--${n.name} is required`),!1}return!0}function h(e,t,n){if(n){let s=n.find(o=>o.name===t);if(s&&s.alias){let o=s.alias.charAt(0).toUpperCase()+s.alias.slice(1);if(e[o]!==void 0)return e[o]}}let i=[t,t.replace(/-/g,""),t.replace(/-/g,"").toLowerCase(),t.charAt(0).toUpperCase(),_(t)];for(let s of i)if(e[s]!==void 0)return e[s]}function _(e){return e.replace(/-([a-z])/g,(t,n)=>n.toUpperCase())}async function H(e,t){let n=t?[`./lib/${e}/${t}.js`,`./lib/${e}/${t}/index.js`]:[`./lib/${e}.js`,`./lib/${e}/index.js`];for(let s of n){let o=await import(s).catch(()=>null);if(o)return{module:o,error:null}}return{module:null,error:`Command not found: ${t?`${e} ${t}`:e}`}}async function $(e,t,n=[],i={},s){if(s){let
|
|
12
|
-
`);console.log(
|
|
11
|
+
Use "${l.name} <command> help" for more information about a command.`)}function m(e,t=[]){t.forEach(n=>{if(n.type==="positional"){let i=n.required?`<${n.name}>`:`[${n.name}]`;e.argument(i,n.description)}else{let s=n.alias&&n.alias.length===1?`-${n.alias}, --${n.name}`:`--${n.name}`;n.type==="flag"||(n.type==="boolean"?s+=" [value]":n.options?s+=" <value>":s+=n.required||n["required-when"]?" <value>":" [value]"),e.option(s,n.description,n.default)}})}function g(e,t){for(let n of e){if(n["required-when"]){let[i,s]=n["required-when"].split("="),o=h(t,i,e),r=h(t,n.name,e);if(o===s&&!r)return console.error(`--${n.name} is required when --${i} is ${s}`),!1}if(n.required&&!h(t,n.name,e))return console.error(`--${n.name} is required`),!1}return!0}function h(e,t,n){if(n){let s=n.find(o=>o.name===t);if(s&&s.alias){let o=s.alias.charAt(0).toUpperCase()+s.alias.slice(1);if(e[o]!==void 0)return e[o]}}let i=[t,t.replace(/-/g,""),t.replace(/-/g,"").toLowerCase(),t.charAt(0).toUpperCase(),_(t)];for(let s of i)if(e[s]!==void 0)return e[s]}function _(e){return e.replace(/-([a-z])/g,(t,n)=>n.toUpperCase())}async function H(e,t){let n=t?[`./lib/${e}/${t}.js`,`./lib/${e}/${t}/index.js`]:[`./lib/${e}.js`,`./lib/${e}/index.js`];for(let s of n){let o=await import(s).catch(()=>null);if(o)return{module:o,error:null}}return{module:null,error:`Command not found: ${t?`${e} ${t}`:e}`}}async function $(e,t,n=[],i={},s){if(s){let x=s.replace(/\\n/g,`
|
|
12
|
+
`);console.log(x)}let{module:o,error:r}=await H(e,t);(r||!o)&&(console.error(r),process.exit(1));let a=t||e,d=o.default||o[a];typeof d!="function"&&(console.error(`Command not implemented: ${a}`),process.exit(1)),await d({...i,_positional:n})}var f=new E;f.name(l.name).description(l.description).version(l.version);function c(e,t,n){let i;"optsWithGlobals"in n&&typeof n.optsWithGlobals=="function"?i=n.optsWithGlobals():"opts"in n&&typeof n.opts=="function"?i=n.opts():i=n;let s={...i};return e.filter(r=>r.type==="positional").forEach((r,a)=>{t[a]!==void 0&&(r.multiple?s[r.name]=t[a].split(",").map(d=>d.trim()):s[r.name]=t[a])}),e.forEach(r=>{r.multiple&&r.type!=="positional"&&s[r.name]&&typeof s[r.name]=="string"&&(s[r.name]=s[r.name].split(",").map(a=>a.trim()))}),s}l.commands.forEach(e=>{let t=f.command(e.name).description(e.description);if(e.alias&&t.alias(e.alias),e.operations&&e.operations.length>0)if(e.operations.forEach(n=>{let i=t.command(n.name).description(n.description);n.alias&&(Array.isArray(n.alias)?n.alias:[n.alias]).forEach(o=>i.alias(o)),m(i,n.arguments),i.action(async(...s)=>{let o=s.pop(),r=s;n.arguments&&!g(n.arguments,c(n.arguments,r,o))||await $(e.name,n.name,r,c(n.arguments||[],r,o),n.message)}),i.command("help").description("Show help for this operation").action(()=>{U(e,n)})}),e.default){let n=e.operations?.find(i=>i.name===e.default);if(n){m(t,e.arguments),m(t,n.arguments);let i=[...e.arguments||[],...n.arguments||[]];t.action(async(...s)=>{let o=s.pop(),r=s;i.length>0&&!g(i,c(i,r,o))||await $(e.name,n.name,r,c(i,r,o),e.message||n.message)})}}else t.action(()=>{w(e)});else m(t,e.arguments),t.action(async(...n)=>{let i=n.pop(),s=n;e.arguments&&!g(e.arguments,c(e.arguments,s,i))||await $(e.name,void 0,s,c(e.arguments||[],s,i),e.message)});t.command("help").description("Show help for this command").action(()=>{w(e)})});f.command("help").description("Show general help").action(()=>{v()});f.action(()=>{v()});f.parse();
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
function f(n,e,t){for(let i of e)if(n[i]!==void 0)return n[i];return t}import ye from"enquirer";import{readFileSync as ee,existsSync as ne}from"fs";import{join as D,dirname as te}from"path";import{fileURLToPath as ie}from"url";import*as R from"yaml";var oe=ie(import.meta.url),se=te(oe),x=null;function re(){let n=se;for(let e=0;e<5;e++){let t=D(n,"specs.yaml");if(ne(t))return t;n=D(n,"..")}throw new Error("Could not find specs.yaml")}function ae(){if(!x){let n=re(),e=ee(n,"utf8");x=R.parse(e)}return x}function A(n,e){let i=ae().commands.find(o=>o.name===n);return i?e&&i.operations?i.operations.find(o=>o.name===e)||null:i:null}function m(n,e,t){let i=A(n,t);return!i||!i.arguments?null:i.arguments.find(o=>o.name===e)||null}function h(n){return n.options?Array.isArray(n.options)&&typeof n.options[0]=="string"?n.options.map(e=>({name:e,message:e.charAt(0).toUpperCase()+e.slice(1),value:e})):Array.isArray(n.options)&&typeof n.options[0]=="object"?n.options.map(e=>({name:e.value,message:e.description?`${e.name} - ${e.description}`:e.name,value:e.value})):null:null}import{createBucket as Ce}from"@tigrisdata/storage";import{S3Client as Le}from"@aws-sdk/client-s3";import{homedir as ce}from"os";import{join as K}from"path";import{readFileSync as de,writeFileSync as le,existsSync as L,mkdirSync as ge}from"fs";import{chmod as ue}from"fs/promises";var v=K(ce(),".tigris"),C=K(v,"config.json");function fe(){L(v)||ge(v,{recursive:!0,mode:448})}function g(){if(L(C))try{let n=de(C,"utf8");return JSON.parse(n)}catch{return{}}return{}}async function T(n){fe(),le(C,JSON.stringify(n,null,2),{mode:384});try{await ue(C,384)}catch{}}async function I(n){let e=g();e.tokens=n,await T(e)}async function y(){return g().tokens||null}async function _(){let n=g();delete n.tokens,await T(n)}async function $(n){let e=g();e.organizations=n,await T(e)}function F(){return g().organizations||[]}function b(){return g().selectedOrganization||null}function j(){let n=g();return n.temporaryCredentials||n.credentials||null}async function q(n){let e=g();e.loginMethod=n,await T(e)}function U(){return g().loginMethod||null}import S from"axios";import pe from"open";function w(){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.
|
|
1
|
+
function f(n,e,t){for(let i of e)if(n[i]!==void 0)return n[i];return t}import ye from"enquirer";import{readFileSync as ee,existsSync as ne}from"fs";import{join as D,dirname as te}from"path";import{fileURLToPath as ie}from"url";import*as R from"yaml";var oe=ie(import.meta.url),se=te(oe),x=null;function re(){let n=se;for(let e=0;e<5;e++){let t=D(n,"specs.yaml");if(ne(t))return t;n=D(n,"..")}throw new Error("Could not find specs.yaml")}function ae(){if(!x){let n=re(),e=ee(n,"utf8");x=R.parse(e)}return x}function A(n,e){let i=ae().commands.find(o=>o.name===n);return i?e&&i.operations?i.operations.find(o=>o.name===e)||null:i:null}function m(n,e,t){let i=A(n,t);return!i||!i.arguments?null:i.arguments.find(o=>o.name===e)||null}function h(n){return n.options?Array.isArray(n.options)&&typeof n.options[0]=="string"?n.options.map(e=>({name:e,message:e.charAt(0).toUpperCase()+e.slice(1),value:e})):Array.isArray(n.options)&&typeof n.options[0]=="object"?n.options.map(e=>({name:e.value,message:e.description?`${e.name} - ${e.description}`:e.name,value:e.value})):null:null}import{createBucket as Ce}from"@tigrisdata/storage";import{S3Client as Le}from"@aws-sdk/client-s3";import{homedir as ce}from"os";import{join as K}from"path";import{readFileSync as de,writeFileSync as le,existsSync as L,mkdirSync as ge}from"fs";import{chmod as ue}from"fs/promises";var v=K(ce(),".tigris"),C=K(v,"config.json");function fe(){L(v)||ge(v,{recursive:!0,mode:448})}function g(){if(L(C))try{let n=de(C,"utf8");return JSON.parse(n)}catch{return{}}return{}}async function T(n){fe(),le(C,JSON.stringify(n,null,2),{mode:384});try{await ue(C,384)}catch{}}async function I(n){let e=g();e.tokens=n,await T(e)}async function y(){return g().tokens||null}async function _(){let n=g();delete n.tokens,await T(n)}async function $(n){let e=g();e.organizations=n,await T(e)}function F(){return g().organizations||[]}function b(){return g().selectedOrganization||null}function j(){let n=g();return n.temporaryCredentials||n.credentials||null}async function q(n){let e=g();e.loginMethod=n,await T(e)}function U(){return g().loginMethod||null}import S from"axios";import pe from"open";function w(){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_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var P=class{config;baseUrl;constructor(){this.config=w(),this.baseUrl=`https://${this.config.domain}`}async login(e){let i=(await S.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 pe(i.verification_uri_complete)}catch{}e?.onWaiting?.();let o=await this.pollForToken(i.device_code,i.interval||5);await I(o),q("oauth"),await this.extractAndStoreOrganizations(o.idToken)}async pollForToken(e,t){let o=0;for(;o<60;){o++;try{let c=(await S.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(S.isAxiosError(s)&&s.response){let c=s.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(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 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 y(),!t)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let o=(await S.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,s={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 I(s),s}catch{throw await _(),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 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"),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 _()}async isAuthenticated(){return await y()!==null}sleep(e){return new Promise(t=>setTimeout(t,e))}},M=null;function B(){return M||(M=new P),M}var H=V(),me=w();async function he(){return U()}async function J(){if(await he()==="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=me.domain;return{sessionToken:i,accessKeyId:"",secretAccessKey:"",endpoint:s,organizationId:b()??void 0,iamEndpoint:c,authDomain:r}}let e=j();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint};throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}var Y={success:"\u2714",failure:"\u2716",hint:"\u2192"};function W(){return process.stdout.isTTY===!0}function O(n){let e=A(n.command,n.operation);if(e)return e.messages}function E(n,e){let t=n;return t=t.replace(/\\n/g,`
|
|
2
2
|
`),e&&(t=t.replace(/\{\{(\w+)\}\}/g,(i,o)=>{let s=e[o];return s!==void 0?String(s):`{{${o}}}`})),t}function Q(n,e){if(!W())return;let t=O(n);t?.onStart&&console.log(E(t.onStart,e))}function X(n,e){if(!W())return;let t=O(n);t?.onSuccess&&console.log(`${Y.success} ${E(t.onSuccess,e)}`)}function N(n,e,t){let i=O(n);i?.onFailure&&console.error(`${Y.failure} ${E(i.onFailure,t)}`),e&&console.error(` ${e}`)}function Z(n,e){return{command:n,operation:e}}var{prompt:Te}=ye,k=Z("buckets","create");async function we(n){Q(k);let e=!f(n,["name"]),t=f(n,["name"]),i=e?void 0:f(n,["access","a","A"]),o=e?void 0:f(n,["enable-snapshots","s","S"]),s=e?void 0:f(n,["default-tier","t","T"]),c=e?void 0:f(n,["consistency","c","C"]),r=e?void 0:f(n,["region","r","R"]),u=[];if((!t||e)&&u.push({type:"input",name:"name",message:"Bucket name:",required:!0}),!i||e){let a=m("buckets","access","create"),l=h(a),d=l?.findIndex(p=>p.value===a?.default);u.push({type:"select",name:"access",message:"Access level:",choices:l||[],initial:d!==void 0&&d>=0?d:0})}if(!s||e){let a=m("buckets","default-tier","create"),l=h(a),d=l?.findIndex(p=>p.value===a?.default);u.push({type:"select",name:"defaultTier",message:"Default storage tier:",choices:l||[],initial:d!==void 0&&d>=0?d:0})}if(!c||e){let a=m("buckets","consistency","create"),l=h(a),d=l?.findIndex(p=>p.value===a?.default);u.push({type:"select",name:"consistency",message:"Consistency level:",choices:l||[],initial:d!==void 0&&d>=0?d:0})}if(!r||e){let a=m("buckets","region","create"),l=h(a),d=l?.findIndex(p=>p.value===a?.default);u.push({type:"select",name:"region",message:"Region:",choices:l||[],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){let a=await Te(u);t=t||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}t||(N(k,"Bucket name is required"),process.exit(1));let{error:z}=await Ce(t,{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&&(N(k,z.message),process.exit(1)),X(k,{name:t})}export{we as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
function v(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 B}from"os";import{join as _}from"path";import{readFileSync as H,writeFileSync as J,existsSync as I,mkdirSync as Y}from"fs";import{chmod as W}from"fs/promises";var m=_(B(),".tigris"),
|
|
2
|
-
`),e&&(n=n.replace(/\{\{(\w+)\}\}/g,(o,i)=>{let r=e[i];return r!==void 0?String(r):`{{${i}}}`})),n}function G(t,e){if(!U())return;let n=S(t);n?.onStart&&console.log(x(n.onStart,e))}function V(t,e){if(!U())return;let n=S(t);n?.onSuccess&&console.log(`${j.success} ${x(n.onSuccess,e)}`)}function A(t,e,n){let o=S(t);o?.onFailure&&console.error(`${j.failure} ${x(o.onFailure,n)}`),e&&console.error(` ${e}`)}function q(t,e){return{command:t,operation:e}}var
|
|
1
|
+
function v(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 B}from"os";import{join as _}from"path";import{readFileSync as H,writeFileSync as J,existsSync as I,mkdirSync as Y}from"fs";import{chmod as W}from"fs/promises";var m=_(B(),".tigris"),g=_(m,"config.json");function Q(){I(m)||Y(m,{recursive:!0,mode:448})}function c(){if(I(g))try{let t=H(g,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function l(t){Q(),J(g,JSON.stringify(t,null,2),{mode:384});try{await W(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 y(){let t=c();delete t.tokens,await l(t)}async function M(t){let e=c();e.organizations=t,await l(e)}function P(){return c().organizations||[]}function C(){return c().selectedOrganization||null}function O(){let t=c();return t.temporaryCredentials||t.credentials||null}async function E(t){let e=c();e.loginMethod=t,await l(e)}function b(){return c().loginMethod||null}import f from"axios";import X 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 N=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function z(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var w=class{config;baseUrl;constructor(){this.config=u(),this.baseUrl=`https://${this.config.domain}`}async login(e){let o=(await f.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 h(i),E("oauth"),await this.extractAndStoreOrganizations(i.idToken)}async pollForToken(e,n){let i=0;for(;i<60;){i++;try{let s=(await f.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(f.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 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 i=(await f.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 y(),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],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)[N];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(),P()}async logout(){await y()}async isAuthenticated(){return await d()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},T=null;function D(){return T||(T=new w),T}var R=z(),Z=u();async function ee(){return b()}async function K(){if(await ee()==="oauth"){let o=await D().getAccessToken();if(!C())throw new Error('No organization selected. Please run "tigris orgs select" first.');let r=R.endpoint,s=R.iamEndpoint,a=Z.domain;return{sessionToken:o,accessKeyId:"",secretAccessKey:"",endpoint:r,organizationId:C()??void 0,iamEndpoint:s,authDomain:a}}let e=O();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint};throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}import{removeBucket as de}from"@tigrisdata/storage";import{readFileSync as te,existsSync as ne}from"fs";import{join as L,dirname as oe}from"path";import{fileURLToPath as ie}from"url";import*as $ from"yaml";var re=ie(import.meta.url),se=oe(re),k=null;function ae(){let t=se;for(let e=0;e<5;e++){let n=L(t,"specs.yaml");if(ne(n))return n;t=L(t,"..")}throw new Error("Could not find specs.yaml")}function ce(){if(!k){let t=ae(),e=te(t,"utf8");k=$.parse(e)}return k}function F(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 j={success:"\u2714",failure:"\u2716",hint:"\u2192"};function U(){return process.stdout.isTTY===!0}function S(t){let e=F(t.command,t.operation);if(e)return e.messages}function x(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 G(t,e){if(!U())return;let n=S(t);n?.onStart&&console.log(x(n.onStart,e))}function V(t,e){if(!U())return;let n=S(t);n?.onSuccess&&console.log(`${j.success} ${x(n.onSuccess,e)}`)}function A(t,e,n){let o=S(t);o?.onFailure&&console.error(`${j.failure} ${x(o.onFailure,n)}`),e&&console.error(` ${e}`)}function q(t,e){return{command:t,operation:e}}var p=q("buckets","delete");async function ge(t){G(p);let e=v(t,["name"]);e||(A(p,"Bucket name is required"),process.exit(1));let n=Array.isArray(e)?e:[e],o=await K();for(let i of n){let{error:r}=await de(i,{config:o});r&&(A(p,r.message,{name:i}),process.exit(1)),V(p,{name:i})}}export{ge as default};
|
package/dist/lib/buckets/get.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
function
|
|
1
|
+
function b(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
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
|
|
3
|
+
`)}function E(t){if(t==null)return"";if(t instanceof Date)return P(t);if(typeof t=="string"){let e=new Date(t);if(!isNaN(e.getTime())&&t.includes("T"))return P(e)}return String(t)}function P(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
4
|
`+r);let a="\u2502 "+e.map((c,h)=>c.header.padEnd(o[h])).join(" \u2502 ")+" \u2502";return n.push(a),n.push(i),t.forEach(c=>{let h=e.map((I,M)=>{let O=E(c[I.key]);return I.align==="right"?O.padStart(o[M]):O.padEnd(o[M])});n.push("\u2502 "+h.join(" \u2502 ")+" \u2502")}),n.push(s+`
|
|
5
5
|
`),n.join(`
|
|
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 ue}from"fs/promises";var y=D(ie(),".tigris"),g=D(y,"config.json");function de(){z(y)||ce(y,{recursive:!0,mode:448})}function u(){if(z(g))try{let t=se(g,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function p(t){de(),ae(g,JSON.stringify(t,null,2),{mode:384});try{await ue(g,384)}catch{}}async function T(t){let e=u();e.tokens=t,await p(e)}async function d(){return u().tokens||null}async function C(){let t=u();delete t.tokens,await p(t)}async function R(t){let e=u();e.organizations=t,await p(e)}function j(){return u().organizations||[]}function w(){return u().selectedOrganization||null}function $(){let t=u();return t.temporaryCredentials||t.credentials||null}async function F(t){let e=u();e.loginMethod=t,await p(e)}function K(){return u().loginMethod||null}import f from"axios";import ge from"open";function l(){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 L=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function B(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.
|
|
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){if(!W())return;let n=A(t);n?.onStart&&console.log(v(n.onStart,e))}function Q(t,e){if(!W())return;let n=A(t);n?.onSuccess&&console.log(`${Y.success} ${v(n.onSuccess,e)}`)}function _(t,e,n){let o=A(t);o?.onFailure&&console.error(`${Y.failure} ${v(o.onFailure,n)}`),e&&console.error(` ${e}`)}function Z(t,e){return{command:t,operation:e}}var m=Z("buckets","get");async function Se(t){X(m);let e=
|
|
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 ue}from"fs/promises";var y=D(ie(),".tigris"),g=D(y,"config.json");function de(){z(y)||ce(y,{recursive:!0,mode:448})}function u(){if(z(g))try{let t=se(g,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function p(t){de(),ae(g,JSON.stringify(t,null,2),{mode:384});try{await ue(g,384)}catch{}}async function T(t){let e=u();e.tokens=t,await p(e)}async function d(){return u().tokens||null}async function C(){let t=u();delete t.tokens,await p(t)}async function R(t){let e=u();e.organizations=t,await p(e)}function j(){return u().organizations||[]}function w(){return u().selectedOrganization||null}function $(){let t=u();return t.temporaryCredentials||t.credentials||null}async function F(t){let e=u();e.loginMethod=t,await p(e)}function K(){return u().loginMethod||null}import f from"axios";import ge from"open";function l(){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 L=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function B(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var x=class{config;baseUrl;constructor(){this.config=l(),this.baseUrl=`https://${this.config.domain}`}async login(e){let o=(await f.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 ge(o.verification_uri_complete)}catch{}e?.onWaiting?.();let r=await this.pollForToken(o.device_code,o.interval||5);await T(r),F("oauth"),await this.extractAndStoreOrganizations(r.idToken)}async pollForToken(e,n){let r=0;for(;r<60;){r++;try{let s=(await f.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(f.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 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 r=(await f.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 T(i),i}catch{throw await C(),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],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)[L];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 C()}async isAuthenticated(){return await d()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},k=null;function U(){return k||(k=new x),k}var V=B(),pe=l();async function le(){return K()}async function G(){if(await le()==="oauth"){let o=await U().getAccessToken();if(!w())throw new Error('No organization selected. Please run "tigris orgs select" first.');let i=V.endpoint,s=V.iamEndpoint,a=pe.domain;return{sessionToken:o,accessKeyId:"",secretAccessKey:"",endpoint:i,organizationId:w()??void 0,iamEndpoint:s,authDomain:a}}let e=$();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint};throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}import{getBucketInfo 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 Te=ye(import.meta.url),Ce=he(Te),S=null;function we(){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(!S){let t=we(),e=fe(t,"utf8");S=H.parse(e)}return S}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 Y={success:"\u2714",failure:"\u2716",hint:"\u2192"};function W(){return process.stdout.isTTY===!0}function A(t){let e=J(t.command,t.operation);if(e)return e.messages}function v(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){if(!W())return;let n=A(t);n?.onStart&&console.log(v(n.onStart,e))}function Q(t,e){if(!W())return;let n=A(t);n?.onSuccess&&console.log(`${Y.success} ${v(n.onSuccess,e)}`)}function _(t,e,n){let o=A(t);o?.onFailure&&console.error(`${Y.failure} ${v(o.onFailure,n)}`),e&&console.error(` ${e}`)}function Z(t,e){return{command:t,operation:e}}var m=Z("buckets","get");async function Se(t){X(m);let e=b(t,["name"]);e||(_(m,"Bucket name is required"),process.exit(1));let{data:n,error:o}=await xe(e,{config:await G()});o&&(_(m,o.message),process.exit(1));let r=[{property:"Name",value:e},{property:"Snapshots Enabled",value:n.isSnapshotEnabled?"Yes":"No"},{property:"Has Forks",value:n.hasForks?"Yes":"No"},...n.sourceBucketName?[{property:"Source Bucket",value:n.sourceBucketName}]:[],...n.sourceBucketSnapshot?[{property:"Source Snapshot",value:n.sourceBucketSnapshot}]:[]],i=N(r,"table","bucket","property",[{key:"property",header:"Property"},{key:"value",header:"Value"}]);console.log(i),Q(m)}export{Se as default};
|
package/dist/lib/buckets/list.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
function P(t,e,n){for(let o of e)if(t[o]!==void 0)return t[o];return n}function te(t){return JSON.stringify(t,null,2)}function ne(t,e=" "){return Object.entries(t).map(([n,o])=>`${e}<${n}>${o}</${n}>`).join(`
|
|
2
2
|
`)}function oe(t,e,n){let o=[`<${e}>`];return t.forEach(r=>{o.push(` <${n}>`),o.push(ne(r," ")),o.push(` </${n}>`)}),o.push(`</${e}>`),o.join(`
|
|
3
3
|
`)}function N(t){if(t==null)return"";if(t instanceof Date)return E(t);if(typeof t=="string"){let e=new Date(t);if(!isNaN(e.getTime())&&t.includes("T"))return E(e)}return String(t)}function E(t){return new Intl.DateTimeFormat(void 0,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}).format(t)}function re(t,e){return e.map(n=>{if(n.width)return n.width;let o=n.header.length,r=t.reduce((i,s)=>{let a=N(s[n.key]);return Math.max(i,a.length)},0);return Math.max(o,r)})}function ie(t,e){let n=[],o=re(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,
|
|
4
|
+
`+r);let a="\u2502 "+e.map((c,T)=>c.header.padEnd(o[T])).join(" \u2502 ")+" \u2502";return n.push(a),n.push(i),t.forEach(c=>{let T=e.map((b,M)=>{let O=N(c[b.key]);return b.align==="right"?O.padStart(o[M]):O.padEnd(o[M])});n.push("\u2502 "+T.join(" \u2502 ")+" \u2502")}),n.push(s+`
|
|
5
5
|
`),n.join(`
|
|
6
|
-
`)}function D(t,e,n,o,r){switch(e){case"json":return te(t);case"xml":return oe(t,n,o);default:return ie(t,r)}}import{S3Client as Ke}from"@aws-sdk/client-s3";import{homedir as se}from"os";import{join as z}from"path";import{readFileSync as ae,writeFileSync as ce,existsSync as R,mkdirSync as de}from"fs";import{chmod as ue}from"fs/promises";var w=z(se(),".tigris"),l=z(w,"config.json");function ge(){R(w)||de(w,{recursive:!0,mode:448})}function d(){if(R(l))try{let t=ae(l,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function
|
|
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){if(!I())return;let n=h(t);n?.onStart&&console.log(y(n.onStart,e))}function Q(t,e){if(!I())return;let n=h(t);n?.onSuccess&&console.log(`${Y.success} ${y(n.onSuccess,e)}`)}function
|
|
6
|
+
`)}function D(t,e,n,o,r){switch(e){case"json":return te(t);case"xml":return oe(t,n,o);default:return ie(t,r)}}import{S3Client as Ke}from"@aws-sdk/client-s3";import{homedir as se}from"os";import{join as z}from"path";import{readFileSync as ae,writeFileSync as ce,existsSync as R,mkdirSync as de}from"fs";import{chmod as ue}from"fs/promises";var w=z(se(),".tigris"),l=z(w,"config.json");function ge(){R(w)||de(w,{recursive:!0,mode:448})}function d(){if(R(l))try{let t=ae(l,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function f(t){ge(),ce(l,JSON.stringify(t,null,2),{mode:384});try{await ue(l,384)}catch{}}async function k(t){let e=d();e.tokens=t,await f(e)}async function g(){return d().tokens||null}async function x(){let t=d();delete t.tokens,await f(t)}async function j(t){let e=d();e.organizations=t,await f(e)}function $(){return d().organizations||[]}function S(){return d().selectedOrganization||null}function K(){let t=d();return t.temporaryCredentials||t.credentials||null}async function L(t){let e=d();e.loginMethod=t,await f(e)}function F(){return d().loginMethod||null}import m from"axios";import le from"open";function p(){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 U=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function V(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var _=class{config;baseUrl;constructor(){this.config=p(),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 le(o.verification_uri_complete)}catch{}e?.onWaiting?.();let r=await this.pollForToken(o.device_code,o.interval||5);await k(r),L("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 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 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 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"),i=JSON.parse(o)[U];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;j(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),$()}async logout(){await x()}async isAuthenticated(){return await g()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},A=null;function B(){return A||(A=new _),A}var G=V(),fe=p();async function pe(){return F()}async function q(){if(await pe()==="oauth"){let o=await B().getAccessToken();if(!S())throw new Error('No organization selected. Please run "tigris orgs select" first.');let i=G.endpoint,s=G.iamEndpoint,a=fe.domain;return{sessionToken:o,accessKeyId:"",secretAccessKey:"",endpoint:i,organizationId:S()??void 0,iamEndpoint:s,authDomain:a}}let e=K();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint};throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}import{listBuckets as Se}from"@tigrisdata/storage";import{readFileSync as me,existsSync as he}from"fs";import{join as H,dirname as ye}from"path";import{fileURLToPath as Ce}from"url";import*as J from"yaml";var Te=Ce(import.meta.url),we=ye(Te),v=null;function ke(){let t=we;for(let e=0;e<5;e++){let n=H(t,"specs.yaml");if(he(n))return n;t=H(t,"..")}throw new Error("Could not find specs.yaml")}function xe(){if(!v){let t=ke(),e=me(t,"utf8");v=J.parse(e)}return v}function W(t,e){let o=xe().commands.find(r=>r.name===t);return o?e&&o.operations?o.operations.find(r=>r.name===e)||null:o:null}var Y={success:"\u2714",failure:"\u2716",hint:"\u2192"};function I(){return process.stdout.isTTY===!0}function h(t){let e=W(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){if(!I())return;let n=h(t);n?.onStart&&console.log(y(n.onStart,e))}function Q(t,e){if(!I())return;let n=h(t);n?.onSuccess&&console.log(`${Y.success} ${y(n.onSuccess,e)}`)}function C(t,e,n){let o=h(t);o?.onFailure&&console.error(`${Y.failure} ${y(o.onFailure,n)}`),e&&console.error(` ${e}`)}function Z(t,e){if(!I())return;let n=h(t);n?.onEmpty&&console.log(y(n.onEmpty,e))}function ee(t,e){return{command:t,operation:e}}var u=ee("buckets","list");async function Ae(t){X(u);try{let e=P(t,["format","F"],"table"),{data:n,error:o}=await Se({config:await q()});if(o&&(C(u,o.message),process.exit(1)),!n.buckets||n.buckets.length===0){Z(u);return}let r=n.buckets.map(s=>({name:s.name,created:s.creationDate})),i=D(r,e,"buckets","bucket",[{key:"name",header:"Name"},{key:"created",header:"Created"}]);console.log(i),Q(u,{count:r.length})}catch(e){e instanceof Error?C(u,e.message):C(u,"An unknown error occurred"),process.exit(1)}}export{Ae as default};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function c(n,e,t){for(let i of e)if(n[i]!==void 0)return n[i];return t}function p(n){if(n!==void 0)return typeof n=="boolean"?n:n==="true"}import{S3Client as Me}from"@aws-sdk/client-s3";import{homedir as Z}from"os";import{join as E}from"path";import{readFileSync as ee,writeFileSync as ne,existsSync as D,mkdirSync as te}from"fs";import{chmod as ie}from"fs/promises";var k=E(Z(),".tigris"),m=E(k,"config.json");function oe(){D(k)||te(k,{recursive:!0,mode:448})}function d(){if(D(m))try{let n=ee(m,"utf8");return JSON.parse(n)}catch{return{}}return{}}async function h(n){oe(),ne(m,JSON.stringify(n,null,2),{mode:384});try{await ie(m,384)}catch{}}async function S(n){let e=d();e.tokens=n,await h(e)}async function l(){return d().tokens||null}async function x(){let n=d();delete n.tokens,await h(n)}async function z(n){let e=d();e.organizations=n,await h(e)}function N(){return d().organizations||[]}function u(){return d().selectedOrganization||null}function L(){let n=d();return n.temporaryCredentials||n.credentials||null}async function R(n){let e=d();e.loginMethod=n,await h(e)}function K(){return d().loginMethod||null}import C from"axios";import re from"open";function y(){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 j=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function $(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var v=class{config;baseUrl;constructor(){this.config=y(),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 re(i.verification_uri_complete)}catch{}e?.onWaiting?.();let o=await this.pollForToken(i.device_code,i.interval||5);await S(o),R("oauth"),await this.extractAndStoreOrganizations(o.idToken)}async pollForToken(e,t){let o=0;for(;o<60;){o++;try{let s=(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,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(C.isAxiosError(r)&&r.response){let s=r.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(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 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 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 S(r),r}catch{throw await x(),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"),r=JSON.parse(i)[j];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;z(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),N()}async logout(){await x()}async isAuthenticated(){return await l()!==null}sleep(e){return new Promise(t=>setTimeout(t,e))}},A=null;function F(){return A||(A=new v),A}var U=$(),se=y();async function ae(){return K()}async function B(){if(await ae()==="oauth"){let i=await F().getAccessToken();if(!u())throw new Error('No organization selected. Please run "tigris orgs select" first.');let r=U.endpoint,s=U.iamEndpoint,a=se.domain;return{sessionToken:i,accessKeyId:"",secretAccessKey:"",endpoint:r,organizationId:u()??void 0,iamEndpoint:s,authDomain:a}}let e=L();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint};throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}import{updateBucket as he}from"@tigrisdata/storage";import{readFileSync as ce,existsSync as de}from"fs";import{join as q,dirname as ge}from"path";import{fileURLToPath as le}from"url";import*as G from"yaml";var ue=le(import.meta.url),fe=ge(ue),_=null;function pe(){let n=fe;for(let e=0;e<5;e++){let t=q(n,"specs.yaml");if(de(t))return t;n=q(n,"..")}throw new Error("Could not find specs.yaml")}function me(){if(!_){let n=pe(),e=ce(n,"utf8");_=G.parse(e)}return _}function V(n,e){let i=me().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 J(){return process.stdout.isTTY===!0}function I(n){let e=V(n.command,n.operation);if(e)return e.messages}function O(n,e){let t=n;return t=t.replace(/\\n/g,`
|
|
2
|
+
`),e&&(t=t.replace(/\{\{(\w+)\}\}/g,(i,o)=>{let r=e[o];return r!==void 0?String(r):`{{${o}}}`})),t}function Y(n,e){if(!J())return;let t=I(n);t?.onStart&&console.log(O(t.onStart,e))}function W(n,e){if(!J())return;let t=I(n);t?.onSuccess&&console.log(`${H.success} ${O(t.onSuccess,e)}`)}function T(n,e,t){let i=I(n);i?.onFailure&&console.error(`${H.failure} ${O(i.onFailure,t)}`),e&&console.error(` ${e}`)}function Q(n,e){return{command:n,operation:e}}var f=Q("buckets","set");async function ye(n){Y(f);let e=c(n,["name"]),t=c(n,["access"]),i=c(n,["region"]),o=c(n,["allow-object-acl","allowObjectAcl"]),r=c(n,["disable-directory-listing","disableDirectoryListing"]),s=c(n,["cache-control","cacheControl"]),a=c(n,["custom-domain","customDomain"]),w=c(n,["enable-delete-protection","enableDeleteProtection"]);e||(T(f,"Bucket name is required"),process.exit(1)),t===void 0&&i===void 0&&o===void 0&&r===void 0&&s===void 0&&a===void 0&&w===void 0&&(T(f,"At least one setting is required"),process.exit(1));let b=await B(),g={};t!==void 0&&(g.access=t),i!==void 0&&(g.regions=Array.isArray(i)?i:[i]),o!==void 0&&(g.allowObjectAcl=p(o)),r!==void 0&&(g.disableDirectoryListing=p(r)),s!==void 0&&(g.cacheControl=s),a!==void 0&&(g.customDomain=a),w!==void 0&&(g.enableDeleteProtection=p(w));let P=u(),X={...b,...P&&!b.organizationId?{organizationId:P}:{}},{error:M}=await he(e,{...g,config:X});M&&(T(f,M.message),process.exit(1)),W(f,{name:e})}export{ye as default};
|
package/dist/lib/cp.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{list as z}from"@tigrisdata/storage";function
|
|
1
|
+
import{list as z}from"@tigrisdata/storage";function x(o){let e=o.split("/");return{bucket:e[0],path:e.slice(1).join("/")}}async function I(o,e,i){let{data:t}=await z({prefix:`${e}/`,limit:1,config:{...i,bucket:o}});return!!(t?.items&&t.items.length>0)}async function $(o,e,i){let t=[],n;do{let{data:r,error:s}=await z({prefix:e,paginationToken:n,config:{...i,bucket:o}});if(s)return{items:t,error:s};r?.items&&t.push(...r.items),n=r?.hasMore?r.paginationToken:void 0}while(n);return{items:t}}function P(o,e,i){for(let t of e)if(o[t]!==void 0)return o[t];return i}import{S3Client as Ie}from"@aws-sdk/client-s3";import{homedir as V}from"os";import{join as D}from"path";import{readFileSync as X,writeFileSync as Y,existsSync as R,mkdirSync as Z}from"fs";import{chmod as ee}from"fs/promises";var A=D(V(),".tigris"),k=D(A,"config.json");function te(){R(A)||Z(A,{recursive:!0,mode:448})}function l(){if(R(k))try{let o=X(k,"utf8");return JSON.parse(o)}catch{return{}}return{}}async function y(o){te(),Y(k,JSON.stringify(o,null,2),{mode:384});try{await ee(k,384)}catch{}}async function S(o){let e=l();e.tokens=o,await y(e)}async function m(){return l().tokens||null}async function _(){let o=l();delete o.tokens,await y(o)}async function F(o){let e=l();e.organizations=o,await y(e)}function K(){return l().organizations||[]}function b(){return l().selectedOrganization||null}function L(){let o=l();return o.temporaryCredentials||o.credentials||null}async function j(o){let e=l();e.loginMethod=o,await y(e)}function U(){return l().loginMethod||null}import T from"axios";import ne from"open";function w(){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 q=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function G(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var O=class{config;baseUrl;constructor(){this.config=w(),this.baseUrl=`https://${this.config.domain}`}async login(e){let t=(await T.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?.(t.user_code,t.verification_uri),await this.sleep(2e3);try{await ne(t.verification_uri_complete)}catch{}e?.onWaiting?.();let n=await this.pollForToken(t.device_code,t.interval||5);await S(n),j("oauth"),await this.extractAndStoreOrganizations(n.idToken)}async pollForToken(e,i){let n=0;for(;n<60;){n++;try{let s=(await T.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(T.isAxiosError(r)&&r.response){let s=r.response.data?.error;if(s==="authorization_pending"){await this.sleep(i*1e3);continue}if(s==="slow_down"){i+=5,await this.sleep(i*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 m();if(!e)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');let i=300*1e3;return Date.now()+i>=e.expiresAt&&(e=await this.refreshAccessToken(e)),e.accessToken}async refreshAccessToken(e){let i=null;if(e?.refreshToken?i=e:i=await m(),!i)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let n=(await T.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,grant_type:"refresh_token",refresh_token:i.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,r={accessToken:n.access_token,refreshToken:n.refresh_token||i.refreshToken,idToken:n.id_token||i.idToken,expiresAt:Date.now()+(n.expires_in||3600)*1e3};return await S(r),r}catch{throw await _(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await m();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let i=e.idToken.split(".")[1],t=Buffer.from(i,"base64").toString("utf8");return JSON.parse(t)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let i=e.split(".")[1],t=Buffer.from(i,"base64").toString("utf8"),r=JSON.parse(t)[q];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;F(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),K()}async logout(){await _()}async isAuthenticated(){return await m()!==null}sleep(e){return new Promise(i=>setTimeout(i,e))}},v=null;function W(){return v||(v=new O),v}var H=G(),oe=w();async function ie(){return U()}async function J(){if(await ie()==="oauth"){let t=await W().getAccessToken();if(!b())throw new Error('No organization selected. Please run "tigris orgs select" first.');let r=H.endpoint,s=H.iamEndpoint,a=oe.domain;return{sessionToken:t,accessKeyId:"",secretAccessKey:"",endpoint:r,organizationId:b()??void 0,iamEndpoint:s,authDomain:a}}let e=L();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint};throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}import{get as re,put as B,list as se}from"@tigrisdata/storage";async function ae(o){let e=P(o,["src"]),i=P(o,["dest"]);(!e||!i)&&(console.error("both src and dest arguments are required"),process.exit(1));let t=x(e),n=x(i);t.bucket||(console.error("Invalid source path"),process.exit(1)),n.bucket||(console.error("Invalid destination path"),process.exit(1)),t.path||(console.error("Cannot copy a bucket. Provide a path within the bucket."),process.exit(1));let r=await J(),s=e.includes("*"),a=e.endsWith("/");if(!s&&!a&&t.path&&(a=await I(t.bucket,t.path,r)),s||a){let c=s?t.path.replace("*",""):t.path.endsWith("/")?t.path:`${t.path}/`,d=n.path?`${n.path.replace(/\/$/,"")}/`:"";t.bucket===n.bucket&&c===d&&(console.error("Source and destination are the same"),process.exit(1));let{items:h,error:C}=await $(t.bucket,c||void 0,r);C&&(console.error(C.message),process.exit(1));let Q=h.filter(g=>g.name!==c),p=0;for(let g of Q){let f=c?g.name.slice(c.length):g.name,u=n.path?`${n.path.replace(/\/$/,"")}/${f}`:f,M=await E(r,t.bucket,g.name,n.bucket,u);M.error?console.error(`Failed to copy ${g.name}: ${M.error}`):(console.log(`Copied ${g.name} -> ${n.bucket}/${u}`),p++)}let N=!1;if(n.path&&c){let{data:g}=await se({prefix:c,limit:1,config:{...r,bucket:t.bucket}});if(g?.items?.some(f=>f.name===c)){let f=`${n.path.replace(/\/$/,"")}/`,u=await E(r,t.bucket,c,n.bucket,f);u.error?console.error(`Failed to copy folder marker: ${u.error}`):N=!0}}if(p===0&&N&&(p=1),p===0){console.log("No objects to copy");return}console.log(`Copied ${p} object(s)`)}else{t.path||(console.error("Source object key is required"),process.exit(1));let c=t.path.split("/").pop(),d;n.path?i.endsWith("/")?d=`${n.path}${c}`:await I(n.bucket,n.path,r)?d=`${n.path}/${c}`:d=n.path:d=c,t.bucket===n.bucket&&t.path===d&&(console.error("Source and destination are the same"),process.exit(1));let h=await E(r,t.bucket,t.path,n.bucket,d);h.error&&(console.error(h.error),process.exit(1)),console.log(`Copied ${e} -> ${n.bucket}/${d}`)}process.exit(0)}async function E(o,e,i,t,n){if(i.endsWith("/")){let{error:c}=await B(n,"",{config:{...o,bucket:t}});return c?{error:c.message}:{}}let{data:r,error:s}=await re(i,"stream",{config:{...o,bucket:e}});if(s)return{error:s.message};let{error:a}=await B(n,r,{config:{...o,bucket:t}});return a?{error:a.message}:{}}export{ae as default};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function v(t,e,n){for(let o of e)if(t[o]!==void 0)return t[o];return n}import{S3Client as ve}from"@aws-sdk/client-s3";import{homedir as q}from"os";import{join as _}from"path";import{readFileSync as H,writeFileSync as J,existsSync as I,mkdirSync as Y}from"fs";import{chmod as W}from"fs/promises";var y=_(q(),".tigris"),u=_(y,"config.json");function Q(){I(y)||Y(y,{recursive:!0,mode:448})}function c(){if(I(u))try{let t=H(u,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function f(t){Q(),J(u,JSON.stringify(t,null,2),{mode:384});try{await W(u,384)}catch{}}async function C(t){let e=c();e.tokens=t,await f(e)}async function d(){return c().tokens||null}async function T(){let t=c();delete t.tokens,await f(t)}async function M(t){let e=c();e.organizations=t,await f(e)}function O(){return c().organizations||[]}function g(){return c().selectedOrganization||null}function P(){let t=c();return t.temporaryCredentials||t.credentials||null}async function b(t){let e=c();e.loginMethod=t,await f(e)}function E(){return c().loginMethod||null}import m from"axios";import X from"open";function p(){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 N=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function z(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var w=class{config;baseUrl;constructor(){this.config=p(),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 X(o.verification_uri_complete)}catch{}e?.onWaiting?.();let i=await this.pollForToken(o.device_code,o.interval||5);await C(i),b("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 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 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 T(),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],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)[N];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(),O()}async logout(){await T()}async isAuthenticated(){return await d()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},k=null;function D(){return k||(k=new w),k}var R=z(),Z=p();async function ee(){return E()}async function $(){if(await ee()==="oauth"){let o=await D().getAccessToken();if(!g())throw new Error('No organization selected. Please run "tigris orgs select" first.');let r=R.endpoint,s=R.iamEndpoint,a=Z.domain;return{sessionToken:o,accessKeyId:"",secretAccessKey:"",endpoint:r,organizationId:g()??void 0,iamEndpoint:s,authDomain:a}}let e=P();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint};throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}import{listBuckets as de,getBucketInfo as ge}from"@tigrisdata/storage";import{readFileSync as te,existsSync as ne}from"fs";import{join as K,dirname as oe}from"path";import{fileURLToPath as ie}from"url";import*as L from"yaml";var re=ie(import.meta.url),se=oe(re),S=null;function ae(){let t=se;for(let e=0;e<5;e++){let n=K(t,"specs.yaml");if(ne(n))return n;t=K(t,"..")}throw new Error("Could not find specs.yaml")}function ce(){if(!S){let t=ae(),e=te(t,"utf8");S=L.parse(e)}return S}function F(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 j={success:"\u2714",failure:"\u2716",hint:"\u2192"};function U(){return process.stdout.isTTY===!0}function x(t){let e=F(t.command,t.operation);if(e)return e.messages}function A(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 B(t,e){if(!U())return;let n=x(t);n?.onStart&&console.log(A(n.onStart,e))}function G(t,e){if(!U())return;let n=x(t);n?.onSuccess&&console.log(`${j.success} ${A(n.onSuccess,e)}`)}function h(t,e,n){let o=x(t);o?.onFailure&&console.error(`${j.failure} ${A(o.onFailure,n)}`),e&&console.error(` ${e}`)}function V(t,e){return{command:t,operation:e}}var l=V("credentials","test");async function le(t){B(l);let e=v(t,["bucket","b"]),n=await $();!n.accessKeyId&&!n.sessionToken&&(h(l,'No credentials found. Run "tigris configure" or "tigris login" first.'),process.exit(1));let o=g(),i={...n,...o&&!n.organizationId?{organizationId:o}:{}};if(e){let{data:r,error:s}=await ge(e,{config:i});s&&(h(l,`Current credentials don't have access to bucket "${e}"`),process.exit(1)),console.log(` Bucket: ${e}`),console.log(" Access verified."),r.sourceBucketName&&console.log(` Fork of: ${r.sourceBucketName}`)}else{let{data:r,error:s}=await de({config:i});s&&(h(l,"Current credentials don't have sufficient access"),process.exit(1)),console.log(` Access verified. Found ${r.buckets.length} bucket(s).`)}G(l)}export{le as default};
|
package/dist/lib/forks/create.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
function
|
|
2
|
-
`),e&&(n=n.replace(/\{\{(\w+)\}\}/g,(o,i)=>{let r=e[i];return r!==void 0?String(r):`{{${i}}}`})),n}function
|
|
1
|
+
function u(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 B}from"os";import{join as _}from"path";import{readFileSync as H,writeFileSync as J,existsSync as I,mkdirSync as Y}from"fs";import{chmod as W}from"fs/promises";var y=_(B(),".tigris"),l=_(y,"config.json");function Q(){I(y)||Y(y,{recursive:!0,mode:448})}function c(){if(I(l))try{let t=H(l,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function f(t){Q(),J(l,JSON.stringify(t,null,2),{mode:384});try{await W(l,384)}catch{}}async function C(t){let e=c();e.tokens=t,await f(e)}async function d(){return c().tokens||null}async function T(){let t=c();delete t.tokens,await f(t)}async function M(t){let e=c();e.organizations=t,await f(e)}function P(){return c().organizations||[]}function w(){return c().selectedOrganization||null}function O(){let t=c();return t.temporaryCredentials||t.credentials||null}async function E(t){let e=c();e.loginMethod=t,await f(e)}function b(){return c().loginMethod||null}import m from"axios";import X from"open";function p(){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 N=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function z(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var S=class{config;baseUrl;constructor(){this.config=p(),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 X(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 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 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 T(),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],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)[N];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(),P()}async logout(){await T()}async isAuthenticated(){return await d()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},k=null;function D(){return k||(k=new S),k}var R=z(),Z=p();async function ee(){return b()}async function K(){if(await ee()==="oauth"){let o=await D().getAccessToken();if(!w())throw new Error('No organization selected. Please run "tigris orgs select" first.');let r=R.endpoint,s=R.iamEndpoint,a=Z.domain;return{sessionToken:o,accessKeyId:"",secretAccessKey:"",endpoint:r,organizationId:w()??void 0,iamEndpoint:s,authDomain:a}}let e=O();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint};throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}import{createBucket as de}from"@tigrisdata/storage";import{readFileSync as te,existsSync as ne}from"fs";import{join as L,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),x=null;function ae(){let t=se;for(let e=0;e<5;e++){let n=L(t,"specs.yaml");if(ne(n))return n;t=L(t,"..")}throw new Error("Could not find specs.yaml")}function ce(){if(!x){let t=ae(),e=te(t,"utf8");x=F.parse(e)}return x}function $(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 j={success:"\u2714",failure:"\u2716",hint:"\u2192"};function U(){return process.stdout.isTTY===!0}function A(t){let e=$(t.command,t.operation);if(e)return e.messages}function v(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 q(t,e){if(!U())return;let n=A(t);n?.onStart&&console.log(v(n.onStart,e))}function G(t,e){if(!U())return;let n=A(t);n?.onSuccess&&console.log(`${j.success} ${v(n.onSuccess,e)}`)}function h(t,e,n){let o=A(t);o?.onFailure&&console.error(`${j.failure} ${v(o.onFailure,n)}`),e&&console.error(` ${e}`)}function V(t,e){return{command:t,operation:e}}var g=V("forks","create");async function ge(t){q(g);let e=u(t,["name"]),n=u(t,["fork-name","forkName"]),o=u(t,["snapshot","s","S"]);e||(h(g,"Source bucket name is required"),process.exit(1)),n||(h(g,"Fork name is required"),process.exit(1));let{error:i}=await de(n,{sourceBucketName:e,sourceBucketSnapshot:o,config:await K()});i&&(h(g,i.message),process.exit(1)),G(g,{name:e,forkName:n})}export{ge as default};
|
package/dist/lib/forks/list.js
CHANGED
|
@@ -3,5 +3,5 @@ function x(t,e,n){for(let o of e)if(t[o]!==void 0)return t[o];return n}function
|
|
|
3
3
|
`)}function D(t){if(t==null)return"";if(t instanceof Date)return N(t);if(typeof t=="string"){let e=new Date(t);if(!isNaN(e.getTime())&&t.includes("T"))return N(e)}return String(t)}function N(t){return new Intl.DateTimeFormat(void 0,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}).format(t)}function ie(t,e){return e.map(n=>{if(n.width)return n.width;let o=n.header.length,r=t.reduce((i,a)=>{let s=D(a[n.key]);return Math.max(i,s.length)},0);return Math.max(o,r)})}function se(t,e){let n=[],o=ie(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",a="\u2514"+o.map(c=>"\u2500".repeat(c+2)).join("\u2534")+"\u2518";n.push(`
|
|
4
4
|
`+r);let s="\u2502 "+e.map((c,f)=>c.header.padEnd(o[f])).join(" \u2502 ")+" \u2502";return n.push(s),n.push(i),t.forEach(c=>{let f=e.map((u,p)=>{let E=D(c[u.key]);return u.align==="right"?E.padStart(o[p]):E.padEnd(o[p])});n.push("\u2502 "+f.join(" \u2502 ")+" \u2502")}),n.push(a+`
|
|
5
5
|
`),n.join(`
|
|
6
|
-
`)}function z(t,e,n,o,r){switch(e){case"json":return ne(t);case"xml":return re(t,n,o);default:return se(t,r)}}import{S3Client as Ke}from"@aws-sdk/client-s3";import{homedir as ae}from"os";import{join as R}from"path";import{readFileSync as ce,writeFileSync as de,existsSync as j,mkdirSync as ue}from"fs";import{chmod as ge}from"fs/promises";var S=R(ae(),".tigris"),m=R(S,"config.json");function fe(){j(S)||ue(S,{recursive:!0,mode:448})}function d(){if(j(m))try{let t=ce(m,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function h(t){fe(),de(m,JSON.stringify(t,null,2),{mode:384});try{await ge(m,384)}catch{}}async function A(t){let e=d();e.tokens=t,await h(e)}async function l(){return d().tokens||null}async function _(){let t=d();delete t.tokens,await h(t)}async function $(t){let e=d();e.organizations=t,await h(e)}function F(){return d().organizations||[]}function
|
|
7
|
-
`),e&&(n=n.replace(/\{\{(\w+)\}\}/g,(o,r)=>{let i=e[r];return i!==void 0?String(i):`{{${r}}}`})),n}function Q(t,e){if(!
|
|
6
|
+
`)}function z(t,e,n,o,r){switch(e){case"json":return ne(t);case"xml":return re(t,n,o);default:return se(t,r)}}import{S3Client as Ke}from"@aws-sdk/client-s3";import{homedir as ae}from"os";import{join as R}from"path";import{readFileSync as ce,writeFileSync as de,existsSync as j,mkdirSync as ue}from"fs";import{chmod as ge}from"fs/promises";var S=R(ae(),".tigris"),m=R(S,"config.json");function fe(){j(S)||ue(S,{recursive:!0,mode:448})}function d(){if(j(m))try{let t=ce(m,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function h(t){fe(),de(m,JSON.stringify(t,null,2),{mode:384});try{await ge(m,384)}catch{}}async function A(t){let e=d();e.tokens=t,await h(e)}async function l(){return d().tokens||null}async function _(){let t=d();delete t.tokens,await h(t)}async function $(t){let e=d();e.organizations=t,await h(e)}function F(){return d().organizations||[]}function I(){return d().selectedOrganization||null}function K(){let t=d();return t.temporaryCredentials||t.credentials||null}async function L(t){let e=d();e.loginMethod=t,await h(e)}function U(){return d().loginMethod||null}import C from"axios";import le from"open";function y(){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 B=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function V(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var M=class{config;baseUrl;constructor(){this.config=y(),this.baseUrl=`https://${this.config.domain}`}async login(e){let o=(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?.(o.user_code,o.verification_uri),await this.sleep(2e3);try{await le(o.verification_uri_complete)}catch{}e?.onWaiting?.();let r=await this.pollForToken(o.device_code,o.interval||5);await A(r),L("oauth"),await this.extractAndStoreOrganizations(r.idToken)}async pollForToken(e,n){let r=0;for(;r<60;){r++;try{let a=(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()+(a.expires_in||3600)*1e3;return{accessToken:a.access_token,refreshToken:a.refresh_token,idToken:a.id_token,expiresAt:s}}catch(i){if(C.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 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 r=(await C.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 A(i),i}catch{throw await _(),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"),i=JSON.parse(o)[B];if(!i)return;let a=i?.ns?.map(s=>typeof s=="object"&&s!==null?{id:s.id,name:s.name,displayName:s.name}:{id:s,name:s,displayName:s})||[];if(a.length===0)return;$(a)}catch{}}async getOrganizations(){return await this.getAccessToken(),F()}async logout(){await _()}async isAuthenticated(){return await l()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},v=null;function G(){return v||(v=new M),v}var q=V(),pe=y();async function me(){return U()}async function H(){if(await me()==="oauth"){let o=await G().getAccessToken();if(!I())throw new Error('No organization selected. Please run "tigris orgs select" first.');let i=q.endpoint,a=q.iamEndpoint,s=pe.domain;return{sessionToken:o,accessKeyId:"",secretAccessKey:"",endpoint:i,organizationId:I()??void 0,iamEndpoint:a,authDomain:s}}let e=K();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint};throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}import{listBuckets as Ae,getBucketInfo as te}from"@tigrisdata/storage";import{readFileSync as he,existsSync as ye}from"fs";import{join as J,dirname as Ce}from"path";import{fileURLToPath as Te}from"url";import*as W from"yaml";var we=Te(import.meta.url),ke=Ce(we),O=null;function xe(){let t=ke;for(let e=0;e<5;e++){let n=J(t,"specs.yaml");if(ye(n))return n;t=J(t,"..")}throw new Error("Could not find specs.yaml")}function Se(){if(!O){let t=xe(),e=he(t,"utf8");O=W.parse(e)}return O}function Y(t,e){let o=Se().commands.find(r=>r.name===t);return o?e&&o.operations?o.operations.find(r=>r.name===e)||null:o:null}var X={success:"\u2714",failure:"\u2716",hint:"\u2192"};function b(){return process.stdout.isTTY===!0}function T(t){let e=Y(t.command,t.operation);if(e)return e.messages}function w(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 Q(t,e){if(!b())return;let n=T(t);n?.onStart&&console.log(w(n.onStart,e))}function Z(t,e){if(!b())return;let n=T(t);n?.onSuccess&&console.log(`${X.success} ${w(n.onSuccess,e)}`)}function k(t,e,n){let o=T(t);o?.onFailure&&console.error(`${X.failure} ${w(o.onFailure,n)}`),e&&console.error(` ${e}`)}function P(t,e){if(!b())return;let n=T(t);n?.onEmpty&&console.log(w(n.onEmpty,e))}function ee(t,e){return{command:t,operation:e}}var g=ee("forks","list");async function _e(t){Q(g);let e=x(t,["name"]),n=x(t,["format","f","F"],"table");e||(k(g,"Source bucket name is required"),process.exit(1));let o=await H(),{data:r,error:i}=await te(e,{config:o});if(i&&(k(g,i.message),process.exit(1)),!r.hasForks){P(g);return}let{data:a,error:s}=await Ae({config:o});s&&(k(g,s.message),process.exit(1));let c=[];for(let u of a.buckets){if(u.name===e)continue;let{data:p}=await te(u.name,{config:o});p?.sourceBucketName===e&&c.push({name:u.name,created:u.creationDate})}if(c.length===0){P(g);return}let f=z(c,n,"forks","fork",[{key:"name",header:"Name"},{key:"created",header:"Created"}]);console.log(f),Z(g,{count:c.length})}export{_e as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import q from"enquirer";import{homedir as I}from"os";import{join as p}from"path";import{readFileSync as z,writeFileSync as b,existsSync as m,mkdirSync as K}from"fs";import{chmod as F}from"fs/promises";var a=p(I(),".tigris"),i=p(a,"config.json");function $(){m(a)||K(a,{recursive:!0,mode:448})}function c(){if(m(i))try{let e=z(i,"utf8");return JSON.parse(e)}catch{return{}}return{}}async function y(e){$(),b(i,JSON.stringify(e,null,2),{mode:384});try{await F(i,384)}catch{}}function C(){return c().credentials||null}async function S(e){let n=c();n.temporaryCredentials=e,await y(n)}async function x(e){let n=c();n.loginMethod=e,await y(n)}import{readFileSync as D,existsSync as _}from"fs";import{join as v,dirname as V}from"path";import{fileURLToPath as j}from"url";import*as h from"yaml";var E=j(import.meta.url),L=V(E),l=null;function N(){let e=L;for(let n=0;n<5;n++){let t=v(e,"specs.yaml");if(_(t))return t;e=v(e,"..")}throw new Error("Could not find specs.yaml")}function R(){if(!l){let e=N(),n=D(e,"utf8");l=h.parse(n)}return l}function M(e,n){let s=R().commands.find(r=>r.name===e);return s?n&&s.operations?s.operations.find(r=>r.name===n)||null:s:null}var A={success:"\u2714",failure:"\u2716",hint:"\u2192"};function O(){return process.stdout.isTTY===!0}function g(e){let n=M(e.command,e.operation);if(n)return n.messages}function f(e,n){let t=e;return t=t.replace(/\\n/g,`
|
|
2
|
-
`),n&&(t=t.replace(/\{\{(\w+)\}\}/g,(s,r)=>{let o=n[r];return o!==void 0?String(o):`{{${r}}}`})),t}function w(e,n){if(!O())return;let t=g(e);t?.onStart&&console.log(f(t.onStart,n))}function T(e,n){if(!O())return;let t=g(e);t?.onSuccess&&console.log(`${A.success} ${f(t.onSuccess,n)}`)}function P(e,n,t){let s=g(e);s?.onFailure&&console.error(`${A.failure} ${f(s.onFailure,t)}`),n&&console.error(` ${n}`)}function k(e,n){return{command:e,operation:n}}var{prompt:G}=q,u=k("login","credentials");async function Y(e){w(u);let n=e["access-key"]||e.accessKey||e.key||e.Key||e.accesskey,t=e["access-secret"]||e.accessSecret||e.secret||e.Secret||e.accesssecret;if(!n||!t){let o=[];n||o.push({type:"input",name:"accessKey",message:"Access Key ID:",required:!0}),t||o.push({type:"password",name:"accessSecret",message:"Secret Access Key:",required:!0});let d=await G(o);n=n||d.accessKey,t=t||d.accessSecret}(!n||!t)&&(P(u,"Access key and secret are required"),process.exit(1));let
|
|
2
|
+
`),n&&(t=t.replace(/\{\{(\w+)\}\}/g,(s,r)=>{let o=n[r];return o!==void 0?String(o):`{{${r}}}`})),t}function w(e,n){if(!O())return;let t=g(e);t?.onStart&&console.log(f(t.onStart,n))}function T(e,n){if(!O())return;let t=g(e);t?.onSuccess&&console.log(`${A.success} ${f(t.onSuccess,n)}`)}function P(e,n,t){let s=g(e);s?.onFailure&&console.error(`${A.failure} ${f(s.onFailure,t)}`),n&&console.error(` ${n}`)}function k(e,n){return{command:e,operation:n}}var{prompt:G}=q,u=k("login","credentials");async function Y(e){w(u);let n=e["access-key"]||e.accessKey||e.key||e.Key||e.accesskey,t=e["access-secret"]||e.accessSecret||e.secret||e.Secret||e.accesssecret;if(!n||!t){let o=[];n||o.push({type:"input",name:"accessKey",message:"Access Key ID:",required:!0}),t||o.push({type:"password",name:"accessSecret",message:"Secret Access Key:",required:!0});let d=await G(o);n=n||d.accessKey,t=t||d.accessSecret}(!n||!t)&&(P(u,"Access key and secret are required"),process.exit(1));let s=C(),r=process.env.TIGRIS_STORAGE_ENDPOINT||s?.endpoint||"https://t3.storage.dev";await S({accessKeyId:n,secretAccessKey:t,endpoint:r}),await x("credentials"),T(u)}export{Y as default};
|
package/dist/lib/login/oauth.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import m from"axios";import B from"open";function A(){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 _=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";import{homedir as G}from"os";import{join as I}from"path";import{readFileSync as V,writeFileSync as H,existsSync as O,mkdirSync as Y}from"fs";import{chmod as J}from"fs/promises";var C=I(G(),".tigris"),u=I(C,"config.json");function W(){O(C)||Y(C,{recursive:!0,mode:448})}function c(){if(O(u))try{let t=V(u,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function g(t){W(),H(u,JSON.stringify(t,null,2),{mode:384});try{await J(u,384)}catch{}}async function y(t){let e=c();e.tokens=t,await g(e)}async function p(){return c().tokens||null}async function T(){let t=c();delete t.tokens,await g(t)}async function P(t){let e=c();e.organizations=t,await g(e)}function M(){return c().organizations||[]}async function E(t){let e=c();e.selectedOrganization=t,await g(e)}async function b(t){let e=c();e.loginMethod=t,await g(e)}var
|
|
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 A(){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 _=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";import{homedir as G}from"os";import{join as I}from"path";import{readFileSync as V,writeFileSync as H,existsSync as O,mkdirSync as Y}from"fs";import{chmod as J}from"fs/promises";var C=I(G(),".tigris"),u=I(C,"config.json");function W(){O(C)||Y(C,{recursive:!0,mode:448})}function c(){if(O(u))try{let t=V(u,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function g(t){W(),H(u,JSON.stringify(t,null,2),{mode:384});try{await J(u,384)}catch{}}async function y(t){let e=c();e.tokens=t,await g(e)}async function p(){return c().tokens||null}async function T(){let t=c();delete t.tokens,await g(t)}async function P(t){let e=c();e.organizations=t,await g(e)}function M(){return c().organizations||[]}async function E(t){let e=c();e.selectedOrganization=t,await g(e)}async function b(t){let e=c();e.loginMethod=t,await g(e)}var k=class{config;baseUrl;constructor(){this.config=A(),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 y(i),b("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 y(r),r}catch{throw await T(),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)[_];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;P(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),M()}async logout(){await T()}async isAuthenticated(){return await p()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},w=null;function z(){return w||(w=new k),w}import{readFileSync as q,existsSync as K}from"fs";import{join as N,dirname as Q}from"path";import{fileURLToPath as X}from"url";import*as D from"yaml";var Z=X(import.meta.url),ee=Q(Z),S=null;function ne(){let t=ee;for(let e=0;e<5;e++){let n=N(t,"specs.yaml");if(K(n))return n;t=N(t,"..")}throw new Error("Could not find specs.yaml")}function te(){if(!S){let t=ne(),e=q(t,"utf8");S=D.parse(e)}return S}function $(t,e){let o=te().commands.find(i=>i.name===t);return o?e&&o.operations?o.operations.find(i=>i.name===e)||null:o:null}var x={success:"\u2714",failure:"\u2716",hint:"\u2192"};function h(){return process.stdout.isTTY===!0}function d(t){let e=$(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){if(!h())return;let n=d(t);n?.onStart&&console.log(f(n.onStart,e))}function v(t,e){if(!h())return;let n=d(t);n?.onSuccess&&console.log(`${x.success} ${f(n.onSuccess,e)}`)}function F(t,e,n){let o=d(t);o?.onFailure&&console.error(`${x.failure} ${f(o.onFailure,n)}`),e&&console.error(` ${e}`)}function j(t,e){if(!h())return;let n=d(t);n?.onAlreadyDone&&console.log(f(n.onAlreadyDone,e))}function L(t,e){if(!h())return;let n=d(t);n?.hint&&console.log(`${x.hint} ${f(n.hint,e)}`)}function U(t,e){return{command:t,operation:e}}var l=U("login","oauth");async function oe(){R(l);try{let t=z();if(await t.isAuthenticated()){j(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
5
|
Waiting for authentication...`)});let n=await t.getOrganizations();if(n.length>0){let o=n[0];await E(o.id),v(l,{org:o.displayName||o.name}),n.length>1&&L(l,{count:n.length})}else v(l,{org:"none"})}catch{F(l),process.exit(1)}}var ve=oe;export{ve as default,oe as oauth};
|