@tigrisdata/cli 2.4.0 → 2.6.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/auth/storage.js +1 -1
- package/dist/cli.js +5 -5
- package/dist/constants.js +1 -0
- package/dist/index.js +5 -5
- package/dist/lib/access-keys/assign.js +3 -3
- package/dist/lib/access-keys/create.js +3 -3
- package/dist/lib/access-keys/delete.js +3 -3
- package/dist/lib/access-keys/get.js +3 -3
- package/dist/lib/access-keys/list.js +8 -8
- package/dist/lib/buckets/create.js +2 -2
- package/dist/lib/buckets/delete.js +2 -2
- package/dist/lib/buckets/get.js +7 -7
- package/dist/lib/buckets/list.js +7 -7
- package/dist/lib/buckets/set.js +2 -2
- package/dist/lib/configure/index.js +2 -2
- package/dist/lib/cp.js +1 -1
- package/dist/lib/credentials/test.js +2 -2
- package/dist/lib/forks/create.js +2 -2
- package/dist/lib/forks/list.js +7 -7
- package/dist/lib/login/credentials.js +2 -2
- package/dist/lib/login/oauth.js +3 -3
- package/dist/lib/login/select.js +4 -4
- package/dist/lib/logout.js +2 -2
- package/dist/lib/ls.js +5 -5
- 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 +7 -7
- package/dist/lib/objects/put.js +6 -6
- 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 +6 -6
- 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 +131 -81
- package/package.json +4 -2
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
`),n&&(t=t.replace(/\{\{(\w+)\}\}/g,(s,r)=>{let o=n[r];return o!==void 0?String(o):`{{${r}}}`})),t}function
|
|
1
|
+
import j from"enquirer";import{homedir as w}from"os";import{join as m}from"path";import{readFileSync as D,writeFileSync as K,existsSync as C,mkdirSync as R}from"fs";import{loadSharedConfigFiles as X}from"@smithy/shared-ini-file-loader";import{chmod as F}from"fs/promises";var c="https://t3.storage.dev";var a=m(w(),".tigris"),i=m(a,"config.json");function k(){C(a)||R(a,{recursive:!0,mode:448})}function l(){if(C(i))try{let e=D(i,"utf8");return JSON.parse(e)}catch{return{}}return{}}async function S(e){k(),K(i,JSON.stringify(e,null,2),{mode:384});try{await F(i,384)}catch{}}function y(){return l().credentials||null}async function A(e){let n=l();n.temporaryCredentials=e,await S(n)}async function x(e){let n=l();n.loginMethod=e,await S(n)}import{readFileSync as N,existsSync as G}from"fs";import{join as _,dirname as z}from"path";import{fileURLToPath as b}from"url";import*as E from"yaml";var L=b(import.meta.url),Y=z(L),f=null;function $(){let e=Y;for(let n=0;n<5;n++){let t=_(e,"specs.yaml");if(G(t))return t;e=_(e,"..")}throw new Error("Could not find specs.yaml")}function V(){if(!f){let e=$(),n=N(e,"utf8");f=E.parse(n)}return f}function T(e,n){let s=V().commands.find(r=>r.name===e);return s?n&&s.operations?s.operations.find(r=>r.name===n)||null:s:null}var v={success:"\u2714",failure:"\u2716",hint:"\u2192"};function O(){return process.stdout.isTTY===!0}function g(e){let n=T(e.command,e.operation);if(n)return n.messages}function u(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 I(e,n){if(!O())return;let t=g(e);t?.onStart&&console.log(u(t.onStart,n))}function h(e,n){if(!O())return;let t=g(e);t?.onSuccess&&console.log(`${v.success} ${u(t.onSuccess,n)}`)}function M(e,n,t){let s=g(e);s?.onFailure&&console.error(`${v.failure} ${u(s.onFailure,t)}`),n&&console.error(` ${n}`)}function P(e,n){return{command:e,operation:n}}var{prompt:U}=j,p=P("login","credentials");async function q(e){I(p);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 U(o);n=n||d.accessKey,t=t||d.accessSecret}(!n||!t)&&(M(p,"Access key and secret are required"),process.exit(1));let r=y()?.endpoint||c;await A({accessKeyId:n,secretAccessKey:t,endpoint:r}),await x("credentials"),h(p)}export{q as default};
|
package/dist/lib/login/oauth.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import m from"axios";import B from"open";function
|
|
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 w(){let t=process.env.TIGRIS_ENV==="development",e=process.env.AUTH0_DOMAIN||t?"auth-dev.tigris.dev":"auth.tigris.dev",n=process.env.AUTH0_CLIENT_ID||t?"JdJVYIyw0O1uHi5L5OJH903qaWBgd3gF":"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",o=process.env.AUTH0_AUDIENCE||t?"https://tigris-api-dev":"https://tigris-os-api";return{domain:e,clientId:n,audience:o}}var E=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";import{homedir as Y}from"os";import{join as x}from"path";import{readFileSync as j,writeFileSync as W,existsSync as k,mkdirSync as V}from"fs";import{loadSharedConfigFiles as fe}from"@smithy/shared-ini-file-loader";import{chmod as H}from"fs/promises";var C=x(Y(),".tigris"),u=x(C,"config.json");function J(){k(C)||V(C,{recursive:!0,mode:448})}function c(){if(k(u))try{let t=j(u,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function p(t){J(),W(u,JSON.stringify(t,null,2),{mode:384});try{await H(u,384)}catch{}}async function T(t){let e=c();e.tokens=t,await p(e)}async function g(){return c().tokens||null}async function _(){let t=c();delete t.tokens,await p(t)}async function O(t){let e=c();e.organizations=t,await p(e)}function P(){return c().organizations||[]}async function N(t){let e=c();e.selectedOrganization=t,await p(e)}async function D(t){let e=c();e.loginMethod=t,await p(e)}var A=class{config;baseUrl;constructor(){this.config=w(),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 T(i),D("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 g();if(!e)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');let n=300*1e3;return Date.now()+n>=e.expiresAt&&(e=await this.refreshAccessToken(e)),e.accessToken}async refreshAccessToken(e){let n=null;if(e?.refreshToken?n=e:n=await g(),!n)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let i=(await 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 T(r),r}catch{throw await _(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await g();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let n=e.idToken.split(".")[1],o=Buffer.from(n,"base64").toString("utf8");return JSON.parse(o)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let n=e.split(".")[1],o=Buffer.from(n,"base64").toString("utf8"),r=JSON.parse(o)[E];if(!r)return;let s=r?.ns?.map(a=>typeof a=="object"&&a!==null?{id:a.id,name:a.name,displayName:a.name}:{id:a,name:a,displayName:a})||[];if(s.length===0)return;O(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),P()}async logout(){await _()}async isAuthenticated(){return await g()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},S=null;function M(){return S||(S=new A),S}import{readFileSync as q,existsSync as Q}from"fs";import{join as R,dirname as X}from"path";import{fileURLToPath as Z}from"url";import*as b from"yaml";var ee=Z(import.meta.url),ne=X(ee),y=null;function te(){let t=ne;for(let e=0;e<5;e++){let n=R(t,"specs.yaml");if(Q(n))return n;t=R(t,"..")}throw new Error("Could not find specs.yaml")}function oe(){if(!y){let t=te(),e=q(t,"utf8");y=b.parse(e)}return y}function z(t,e){let o=oe().commands.find(i=>i.name===t);return o?e&&o.operations?o.operations.find(i=>i.name===e)||null:o:null}var v={success:"\u2714",failure:"\u2716",hint:"\u2192"};function h(){return process.stdout.isTTY===!0}function d(t){let e=z(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 G(t,e){if(!h())return;let n=d(t);n?.onStart&&console.log(f(n.onStart,e))}function I(t,e){if(!h())return;let n=d(t);n?.onSuccess&&console.log(`${v.success} ${f(n.onSuccess,e)}`)}function F(t,e,n){let o=d(t);o?.onFailure&&console.error(`${v.failure} ${f(o.onFailure,n)}`),e&&console.error(` ${e}`)}function L(t,e){if(!h())return;let n=d(t);n?.onAlreadyDone&&console.log(f(n.onAlreadyDone,e))}function U(t,e){if(!h())return;let n=d(t);n?.hint&&console.log(`${v.hint} ${f(n.hint,e)}`)}function $(t,e){return{command:t,operation:e}}var l=$("login","oauth");async function ie(){G(l);try{let t=M();if(await t.isAuthenticated()){L(l);return}await t.login({onDeviceCode:(o,i)=>{console.log(`
|
|
3
3
|
Your confirmation code: ${o}
|
|
4
4
|
`),console.log(`If browser doesn't open, visit: ${i}`)},onWaiting:()=>console.log(`
|
|
5
|
-
Waiting for authentication...`)});let n=await t.getOrganizations();if(n.length>0){let o=n[0];await
|
|
5
|
+
Waiting for authentication...`)});let n=await t.getOrganizations();if(n.length>0){let o=n[0];await N(o.id),I(l,{org:o.displayName||o.name}),n.length>1&&U(l,{count:n.length})}else I(l,{org:"none"})}catch{F(l),process.exit(1)}}var Ne=ie;export{Ne as default,ie as oauth};
|
package/dist/lib/login/select.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
`),
|
|
1
|
+
import pe from"enquirer";import C from"axios";import ee from"open";var m="https://t3.storage.dev";function D(){let e=process.env.TIGRIS_ENV==="development",n=process.env.AUTH0_DOMAIN||e?"auth-dev.tigris.dev":"auth.tigris.dev",t=process.env.AUTH0_CLIENT_ID||e?"JdJVYIyw0O1uHi5L5OJH903qaWBgd3gF":"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",r=process.env.AUTH0_AUDIENCE||e?"https://tigris-api-dev":"https://tigris-os-api";return{domain:n,clientId:t,audience:r}}var M=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";import{homedir as H}from"os";import{join as R}from"path";import{readFileSync as J,writeFileSync as B,existsSync as b,mkdirSync as Q}from"fs";import{loadSharedConfigFiles as Ae}from"@smithy/shared-ini-file-loader";import{chmod as X}from"fs/promises";var I=R(H(),".tigris"),h=R(I,"config.json");function Z(){b(I)||Q(I,{recursive:!0,mode:448})}function c(){if(b(h))try{let e=J(h,"utf8");return JSON.parse(e)}catch{return{}}return{}}async function l(e){Z(),B(h,JSON.stringify(e,null,2),{mode:384});try{await X(h,384)}catch{}}async function v(e){let n=c();n.tokens=e,await l(n)}async function p(){return c().tokens||null}async function E(){let e=c();delete e.tokens,await l(e)}async function G(e){let n=c();n.organizations=e,await l(n)}function K(){return c().organizations||[]}async function z(e){let n=c();n.selectedOrganization=e,await l(n)}function F(){return c().credentials||null}async function L(e){let n=c();n.temporaryCredentials=e,await l(n)}async function S(e){let n=c();n.loginMethod=e,await l(n)}var x=class{config;baseUrl;constructor(){this.config=D(),this.baseUrl=`https://${this.config.domain}`}async login(n){let r=(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;n?.onDeviceCode?.(r.user_code,r.verification_uri),await this.sleep(2e3);try{await ee(r.verification_uri_complete)}catch{}n?.onWaiting?.();let o=await this.pollForToken(r.device_code,r.interval||5);await v(o),S("oauth"),await this.extractAndStoreOrganizations(o.idToken)}async pollForToken(n,t){let o=0;for(;o<60;){o++;try{let i=(await C.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,device_code:n,grant_type:"urn:ietf:params:oauth:grant-type:device_code"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,a=Date.now()+(i.expires_in||3600)*1e3;return{accessToken:i.access_token,refreshToken:i.refresh_token,idToken:i.id_token,expiresAt:a}}catch(s){if(C.isAxiosError(s)&&s.response){let i=s.response.data?.error;if(i==="authorization_pending"){await this.sleep(t*1e3);continue}if(i==="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 n=await p();if(!n)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');let t=300*1e3;return Date.now()+t>=n.expiresAt&&(n=await this.refreshAccessToken(n)),n.accessToken}async refreshAccessToken(n){let t=null;if(n?.refreshToken?t=n:t=await p(),!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,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 v(s),s}catch{throw await E(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let n=await p();if(!n||!n.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let t=n.idToken.split(".")[1],r=Buffer.from(t,"base64").toString("utf8");return JSON.parse(r)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(n){if(n)try{let t=n.split(".")[1],r=Buffer.from(t,"base64").toString("utf8"),s=JSON.parse(r)[M];if(!s)return;let i=s?.ns?.map(a=>typeof a=="object"&&a!==null?{id:a.id,name:a.name,displayName:a.name}:{id:a,name:a,displayName:a})||[];if(i.length===0)return;G(i)}catch{}}async getOrganizations(){return await this.getAccessToken(),K()}async logout(){await E()}async isAuthenticated(){return await p()!==null}sleep(n){return new Promise(t=>setTimeout(t,n))}},k=null;function U(){return k||(k=new x),k}import{readFileSync as ne,existsSync as te}from"fs";import{join as $,dirname as re}from"path";import{fileURLToPath as oe}from"url";import*as Y from"yaml";var se=oe(import.meta.url),ie=re(se),O=null;function ae(){let e=ie;for(let n=0;n<5;n++){let t=$(e,"specs.yaml");if(te(t))return t;e=$(e,"..")}throw new Error("Could not find specs.yaml")}function ce(){if(!O){let e=ae(),n=ne(e,"utf8");O=Y.parse(n)}return O}function j(e,n){let r=ce().commands.find(o=>o.name===e);return r?n&&r.operations?r.operations.find(o=>o.name===n)||null:r:null}var P={success:"\u2714",failure:"\u2716",hint:"\u2192"};function y(){return process.stdout.isTTY===!0}function g(e){let n=j(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,(r,o)=>{let s=n[o];return s!==void 0?String(s):`{{${o}}}`})),t}function T(e,n){if(!y())return;let t=g(e);t?.onStart&&console.log(f(t.onStart,n))}function u(e,n){if(!y())return;let t=g(e);t?.onSuccess&&console.log(`${P.success} ${f(t.onSuccess,n)}`)}function _(e,n,t){let r=g(e);r?.onFailure&&console.error(`${P.failure} ${f(r.onFailure,t)}`),n&&console.error(` ${n}`)}function W(e,n){if(!y())return;let t=g(e);t?.onAlreadyDone&&console.log(f(t.onAlreadyDone,n))}function V(e,n){if(!y())return;let t=g(e);t?.hint&&console.log(`${P.hint} ${f(t.hint,n)}`)}function A(e,n){return{command:e,operation:n}}var d=A("login","oauth");async function q(){T(d);try{let e=U();if(await e.isAuthenticated()){W(d);return}await e.login({onDeviceCode:(r,o)=>{console.log(`
|
|
3
3
|
Your confirmation code: ${r}
|
|
4
|
-
`),console.log(`If browser doesn't open, visit: ${
|
|
5
|
-
Waiting for authentication...`)});let
|
|
4
|
+
`),console.log(`If browser doesn't open, visit: ${o}`)},onWaiting:()=>console.log(`
|
|
5
|
+
Waiting for authentication...`)});let t=await e.getOrganizations();if(t.length>0){let r=t[0];await z(r.id),u(d,{org:r.displayName||r.name}),t.length>1&&V(d,{count:t.length})}else u(d,{org:"none"})}catch{_(d),process.exit(1)}}import le from"enquirer";var{prompt:de}=le,N=A("login","credentials");async function w(e){T(N);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 s=[];n||s.push({type:"input",name:"accessKey",message:"Access Key ID:",required:!0}),t||s.push({type:"password",name:"accessSecret",message:"Secret Access Key:",required:!0});let i=await de(s);n=n||i.accessKey,t=t||i.accessSecret}(!n||!t)&&(_(N,"Access key and secret are required"),process.exit(1));let o=F()?.endpoint||m;await L({accessKeyId:n,secretAccessKey:t,endpoint:o}),await S("credentials"),u(N)}var{prompt:ge}=pe;async function fe(e){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){await w(e);return}let{method:r}=await ge({type:"select",name:"method",message:"Choose login method:",choices:[{name:"user",message:"As a user (OAuth2 flow)"},{name:"machine",message:"As a machine (Access Key & Secret)"}]});r==="user"?await q():await w(e)}export{fe as default};
|
package/dist/lib/logout.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{homedir as
|
|
2
|
-
`),n&&(t=t.replace(/\{\{(\w+)\}\}/g,(o,
|
|
1
|
+
import{homedir as v}from"os";import{join as u}from"path";import{readFileSync as O,writeFileSync as I,existsSync as d,mkdirSync as h}from"fs";import{loadSharedConfigFiles as J}from"@smithy/shared-ini-file-loader";import{chmod as P}from"fs/promises";var a=u(v(),".tigris"),i=u(a,"config.json");function M(){d(a)||h(a,{recursive:!0,mode:448})}function w(){if(d(i))try{let e=O(i,"utf8");return JSON.parse(e)}catch{return{}}return{}}async function D(e){M(),I(i,JSON.stringify(e,null,2),{mode:384});try{await P(i,384)}catch{}}async function m(){let n=w().credentials;await D({credentials:n})}import{readFileSync as R,existsSync as F}from"fs";import{join as C,dirname as z}from"path";import{fileURLToPath as G}from"url";import*as S from"yaml";var N=G(import.meta.url),b=z(N),c=null;function K(){let e=b;for(let n=0;n<5;n++){let t=C(e,"specs.yaml");if(F(t))return t;e=C(e,"..")}throw new Error("Could not find specs.yaml")}function k(){if(!c){let e=K(),n=R(e,"utf8");c=S.parse(n)}return c}function y(e,n){let o=k().commands.find(r=>r.name===e);return o?n&&o.operations?o.operations.find(r=>r.name===n)||null:o:null}var x={success:"\u2714",failure:"\u2716",hint:"\u2192"};function A(){return process.stdout.isTTY===!0}function l(e){let n=y(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,(o,r)=>{let p=n[r];return p!==void 0?String(p):`{{${r}}}`})),t}function _(e,n){if(!A())return;let t=l(e);t?.onStart&&console.log(f(t.onStart,n))}function E(e,n){if(!A())return;let t=l(e);t?.onSuccess&&console.log(`${x.success} ${f(t.onSuccess,n)}`)}function g(e,n,t){let o=l(e);o?.onFailure&&console.error(`${x.failure} ${f(o.onFailure,t)}`),n&&console.error(` ${n}`)}function T(e,n){return{command:e,operation:n}}var s=T("logout");async function L(){_(s);try{await m(),E(s)}catch(e){e instanceof Error?g(s,e.message):g(s),process.exit(1)}}export{L as default};
|
package/dist/lib/ls.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{list as
|
|
2
|
-
`)}function
|
|
3
|
-
`)}function
|
|
4
|
-
`+o);let s="\u2502 "+
|
|
1
|
+
import{list as Te}from"@tigrisdata/storage";function M(e){let t=e.split("/");return{bucket:t[0],path:t.slice(1).join("/")}}function z(e,t,n){for(let i of t)if(e[i]!==void 0)return e[i];return n}function X(e){return JSON.stringify(e,null,2)}function Q(e,t=" "){return Object.entries(e).map(([n,i])=>`${t}<${n}>${i}</${n}>`).join(`
|
|
2
|
+
`)}function Z(e,t,n){let i=[`<${t}>`];return e.forEach(o=>{i.push(` <${n}>`),i.push(Q(o," ")),i.push(` </${n}>`)}),i.push(`</${t}>`),i.join(`
|
|
3
|
+
`)}function G(e){if(e==null)return"";if(e instanceof Date)return L(e);if(typeof e=="string"){let t=new Date(e);if(!isNaN(t.getTime())&&e.includes("T"))return L(t)}return String(e)}function L(e){return new Intl.DateTimeFormat(void 0,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}).format(e)}function ee(e,t){return t.map(n=>{if(n.width)return n.width;let i=n.header.length,o=e.reduce((r,a)=>{let s=G(a[n.key]);return Math.max(r,s.length)},0);return Math.max(i,o)})}function te(e,t){let n=[],i=ee(e,t),o="\u250C"+i.map(d=>"\u2500".repeat(d+2)).join("\u252C")+"\u2510",r="\u251C"+i.map(d=>"\u2500".repeat(d+2)).join("\u253C")+"\u2524",a="\u2514"+i.map(d=>"\u2500".repeat(d+2)).join("\u2534")+"\u2518";n.push(`
|
|
4
|
+
`+o);let s="\u2502 "+t.map((d,m)=>d.header.padEnd(i[m])).join(" \u2502 ")+" \u2502";return n.push(s),n.push(r),e.forEach(d=>{let m=t.map((c,g)=>{let f=G(d[c.key]);return c.align==="right"?f.padStart(i[g]):f.padEnd(i[g])});n.push("\u2502 "+m.join(" \u2502 ")+" \u2502")}),n.push(a+`
|
|
5
5
|
`),n.join(`
|
|
6
|
-
`)}function
|
|
6
|
+
`)}function S(e,t,n,i,o){switch(t){case"json":return X(e);case"xml":return Z(e,n,i);default:return te(e,o)}}import{S3Client as ze}from"@aws-sdk/client-s3";import{fromIni as de}from"@aws-sdk/credential-providers";import{homedir as j}from"os";import{join as h}from"path";import{readFileSync as ne,writeFileSync as ie,existsSync as y,mkdirSync as oe}from"fs";import{loadSharedConfigFiles as re}from"@smithy/shared-ini-file-loader";import{chmod as se}from"fs/promises";var u="https://t3.storage.dev",E="https://iam.storageapi.dev";var x=h(j(),".tigris"),C=h(x,"config.json");function ae(){y(x)||oe(x,{recursive:!0,mode:448})}function l(){if(y(C))try{let e=ne(C,"utf8");return JSON.parse(e)}catch{return{}}return{}}async function w(e){ae(),ie(C,JSON.stringify(e,null,2),{mode:384});try{await se(C,384)}catch{}}async function P(e){let t=l();t.tokens=e,await w(t)}async function T(){return l().tokens||null}async function O(){let e=l();delete e.tokens,await w(e)}async function F(e){let t=l();t.organizations=e,await w(t)}function U(){return l().organizations||[]}function v(){return l().selectedOrganization||null}function W(){if(process.env.TIGRIS_STORAGE_ACCESS_KEY_ID||process.env.TIGRIS_STORAGE_SECRET_ACCESS_KEY){let i=process.env.TIGRIS_STORAGE_ACCESS_KEY_ID,o=process.env.TIGRIS_STORAGE_SECRET_ACCESS_KEY;if(!i||!o)return null;let r=process.env.TIGRIS_STORAGE_ENDPOINT||u;return{accessKeyId:i,secretAccessKey:o,endpoint:r}}let e=process.env.AWS_ACCESS_KEY_ID,t=process.env.AWS_SECRET_ACCESS_KEY;if(!e||!t)return null;let n=process.env.AWS_ENDPOINT_URL_S3||u;return{accessKeyId:e,secretAccessKey:t,endpoint:n}}function $(){if(!process.env.AWS_PROFILE)return!1;let e=h(j(),".aws");return y(h(e,"credentials"))||y(h(e,"config"))}async function B(e){try{let{configFile:t}=await re(),n=t[e];return n?{endpoint:n.endpoint_url_s3||n.endpoint_url,iamEndpoint:n.endpoint_url_iam,region:n.region}:{}}catch{return{}}}function N(){let e=l();return e.temporaryCredentials||e.credentials||null}async function J(e){let t=l();t.loginMethod=e,await w(t)}function q(){return l().loginMethod||null}import _ from"axios";import ce from"open";function I(){let e=process.env.TIGRIS_ENV==="development",t=process.env.AUTH0_DOMAIN||e?"auth-dev.tigris.dev":"auth.tigris.dev",n=process.env.AUTH0_CLIENT_ID||e?"JdJVYIyw0O1uHi5L5OJH903qaWBgd3gF":"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",i=process.env.AUTH0_AUDIENCE||e?"https://tigris-api-dev":"https://tigris-os-api";return{domain:t,clientId:n,audience:i}}var H=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function Y(){return process.env.TIGRIS_STORAGE_ENDPOINT||process.env.TIGRIS_IAM_ENDPOINT?{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||u,iamEndpoint:process.env.TIGRIS_IAM_ENDPOINT||E}:{endpoint:process.env.AWS_ENDPOINT_URL_S3||u,iamEndpoint:process.env.AWS_ENDPOINT_URL_IAM||E}}var R=class{config;baseUrl;constructor(){this.config=I(),this.baseUrl=`https://${this.config.domain}`}async login(t){let i=(await _.post(`${this.baseUrl}/oauth/device/code`,{client_id:this.config.clientId,audience:this.config.audience,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data;t?.onDeviceCode?.(i.user_code,i.verification_uri),await this.sleep(2e3);try{await ce(i.verification_uri_complete)}catch{}t?.onWaiting?.();let o=await this.pollForToken(i.device_code,i.interval||5);await P(o),J("oauth"),await this.extractAndStoreOrganizations(o.idToken)}async pollForToken(t,n){let o=0;for(;o<60;){o++;try{let a=(await _.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,device_code:t,grant_type:"urn:ietf:params:oauth:grant-type:device_code"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,s=Date.now()+(a.expires_in||3600)*1e3;return{accessToken:a.access_token,refreshToken:a.refresh_token,idToken:a.id_token,expiresAt:s}}catch(r){if(_.isAxiosError(r)&&r.response){let a=r.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(r.response.data?.error_description||"Authentication failed")}throw r}}throw new Error("Authentication timed out. Please try again.")}async getAccessToken(){let t=await T();if(!t)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');let n=300*1e3;return Date.now()+n>=t.expiresAt&&(t=await this.refreshAccessToken(t)),t.accessToken}async refreshAccessToken(t){let n=null;if(t?.refreshToken?n=t:n=await T(),!n)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let o=(await _.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:o.access_token,refreshToken:o.refresh_token||n.refreshToken,idToken:o.id_token||n.idToken,expiresAt:Date.now()+(o.expires_in||3600)*1e3};return await P(r),r}catch{throw await O(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let t=await T();if(!t||!t.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let n=t.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(t){if(t)try{let n=t.split(".")[1],i=Buffer.from(n,"base64").toString("utf8"),r=JSON.parse(i)[H];if(!r)return;let a=r?.ns?.map(s=>typeof s=="object"&&s!==null?{id:s.id,name:s.name,displayName:s.name}:{id:s,name:s,displayName:s})||[];if(a.length===0)return;F(a)}catch{}}async getOrganizations(){return await this.getAccessToken(),U()}async logout(){await O()}async isAuthenticated(){return await T()!==null}sleep(t){return new Promise(n=>setTimeout(n,t))}},D=null;function V(){return D||(D=new R),D}var k=Y(),ge=I();async function fe(){return q()}async function K(){if($()){let i=process.env.AWS_PROFILE||"default",o=await B(i),r=await de({profile:i})();return{accessKeyId:r.accessKeyId,secretAccessKey:r.secretAccessKey,endpoint:o.endpoint||k.endpoint||u,iamEndpoint:o.iamEndpoint||k.iamEndpoint}}let e=await fe();if(e==="oauth"){let o=await V().getAccessToken();if(!v())throw new Error('No organization selected. Please run "tigris orgs select" first.');return{sessionToken:o,accessKeyId:"",secretAccessKey:"",endpoint:k.endpoint,organizationId:v()??void 0,iamEndpoint:k.iamEndpoint,authDomain:ge.domain}}if(e==="credentials"){let i=N();if(i)return{accessKeyId:i.accessKeyId,secretAccessKey:i.secretAccessKey,endpoint:i.endpoint}}let t=W();if(t)return{accessKeyId:t.accessKeyId,secretAccessKey:t.secretAccessKey,endpoint:t.endpoint};let n=N();if(n)return{accessKeyId:n.accessKeyId,secretAccessKey:n.secretAccessKey,endpoint:n.endpoint};throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}import{list as le,listBuckets as ue}from"@tigrisdata/storage";async function pe(e){let t=z(e,["path"]);if(!t){let c=await K(),{data:g,error:f}=await ue({config:c});f&&(console.error(f.message),process.exit(1));let p=(g.buckets||[]).map(b=>({name:b.name,created:b.creationDate})),A=S(p,"table","buckets","bucket",[{key:"name",header:"Name"},{key:"created",header:"Created"}]);console.log(A);return}let{bucket:n,path:i}=M(t);n||(console.error("Invalid path"),process.exit(1));let o=await K(),r=i?i.endsWith("/")?i:`${i}/`:void 0,{data:a,error:s}=await le({prefix:r,config:{...o,bucket:n}});s&&(console.error(s.message),process.exit(1));let d=(a.items||[]).map(c=>{let g=r?c.name.slice(r.length):c.name,f=g.indexOf("/"),p=f===-1?g:g.slice(0,f+1),A=p.endsWith("/");return{key:p,size:A?"-":me(c.size),modified:c.lastModified}}).filter((c,g,f)=>c.key!==""&&f.findIndex(p=>p.key===c.key)===g),m=S(d,"table","objects","object",[{key:"key",header:"Key"},{key:"size",header:"Size"},{key:"modified",header:"Modified"}]);console.log(m)}function me(e){if(e===0)return"0 B";let t=["B","KB","MB","GB","TB"],n=Math.floor(Math.log(e)/Math.log(1024));return`${(e/Math.pow(1024,n)).toFixed(n>0?1:0)} ${t[n]}`}export{pe as default};
|
package/dist/lib/mk.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{list as
|
|
1
|
+
import{list as ee}from"@tigrisdata/storage";function k(n){let e=n.split("/");return{bucket:e[0],path:e.slice(1).join("/")}}function P(n,e,t){for(let i of e)if(n[i]!==void 0)return n[i];return t}import{S3Client as Ce}from"@aws-sdk/client-s3";import{fromIni as H}from"@aws-sdk/credential-providers";import{homedir as v}from"os";import{join as g}from"path";import{readFileSync as F,writeFileSync as U,existsSync as f,mkdirSync as W}from"fs";import{loadSharedConfigFiles as j}from"@smithy/shared-ini-file-loader";import{chmod as $}from"fs/promises";var d="https://t3.storage.dev",y="https://iam.storageapi.dev";var C=g(v(),".tigris"),p=g(C,"config.json");function q(){f(C)||W(C,{recursive:!0,mode:448})}function c(){if(f(p))try{let n=F(p,"utf8");return JSON.parse(n)}catch{return{}}return{}}async function u(n){q(),U(p,JSON.stringify(n,null,2),{mode:384});try{await $(p,384)}catch{}}async function _(n){let e=c();e.tokens=n,await u(e)}async function l(){return c().tokens||null}async function I(){let n=c();delete n.tokens,await u(n)}async function x(n){let e=c();e.organizations=n,await u(e)}function O(){return c().organizations||[]}function w(){return c().selectedOrganization||null}function N(){if(process.env.TIGRIS_STORAGE_ACCESS_KEY_ID||process.env.TIGRIS_STORAGE_SECRET_ACCESS_KEY){let i=process.env.TIGRIS_STORAGE_ACCESS_KEY_ID,r=process.env.TIGRIS_STORAGE_SECRET_ACCESS_KEY;if(!i||!r)return null;let o=process.env.TIGRIS_STORAGE_ENDPOINT||d;return{accessKeyId:i,secretAccessKey:r,endpoint:o}}let n=process.env.AWS_ACCESS_KEY_ID,e=process.env.AWS_SECRET_ACCESS_KEY;if(!n||!e)return null;let t=process.env.AWS_ENDPOINT_URL_S3||d;return{accessKeyId:n,secretAccessKey:e,endpoint:t}}function K(){if(!process.env.AWS_PROFILE)return!1;let n=g(v(),".aws");return f(g(n,"credentials"))||f(g(n,"config"))}async function D(n){try{let{configFile:e}=await j(),t=e[n];return t?{endpoint:t.endpoint_url_s3||t.endpoint_url,iamEndpoint:t.endpoint_url_iam,region:t.region}:{}}catch{return{}}}function A(){let n=c();return n.temporaryCredentials||n.credentials||null}async function R(n){let e=c();e.loginMethod=n,await u(e)}function M(){return c().loginMethod||null}import h from"axios";import B from"open";function m(){let n=process.env.TIGRIS_ENV==="development",e=process.env.AUTH0_DOMAIN||n?"auth-dev.tigris.dev":"auth.tigris.dev",t=process.env.AUTH0_CLIENT_ID||n?"JdJVYIyw0O1uHi5L5OJH903qaWBgd3gF":"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",i=process.env.AUTH0_AUDIENCE||n?"https://tigris-api-dev":"https://tigris-os-api";return{domain:e,clientId:t,audience:i}}var z=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function L(){return process.env.TIGRIS_STORAGE_ENDPOINT||process.env.TIGRIS_IAM_ENDPOINT?{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||d,iamEndpoint:process.env.TIGRIS_IAM_ENDPOINT||y}:{endpoint:process.env.AWS_ENDPOINT_URL_S3||d,iamEndpoint:process.env.AWS_ENDPOINT_URL_IAM||y}}var E=class{config;baseUrl;constructor(){this.config=m(),this.baseUrl=`https://${this.config.domain}`}async login(e){let i=(await h.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 B(i.verification_uri_complete)}catch{}e?.onWaiting?.();let r=await this.pollForToken(i.device_code,i.interval||5);await _(r),R("oauth"),await this.extractAndStoreOrganizations(r.idToken)}async pollForToken(e,t){let r=0;for(;r<60;){r++;try{let s=(await h.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(h.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 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 r=(await h.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 _(o),o}catch{throw await I(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await l();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let t=e.idToken.split(".")[1],i=Buffer.from(t,"base64").toString("utf8");return JSON.parse(i)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let t=e.split(".")[1],i=Buffer.from(t,"base64").toString("utf8"),o=JSON.parse(i)[z];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;x(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),O()}async logout(){await I()}async isAuthenticated(){return await l()!==null}sleep(e){return new Promise(t=>setTimeout(t,e))}},S=null;function b(){return S||(S=new E),S}var T=L(),J=m();async function Y(){return M()}async function G(){if(K()){let i=process.env.AWS_PROFILE||"default",r=await D(i),o=await H({profile:i})();return{accessKeyId:o.accessKeyId,secretAccessKey:o.secretAccessKey,endpoint:r.endpoint||T.endpoint||d,iamEndpoint:r.iamEndpoint||T.iamEndpoint}}let n=await Y();if(n==="oauth"){let r=await b().getAccessToken();if(!w())throw new Error('No organization selected. Please run "tigris orgs select" first.');return{sessionToken:r,accessKeyId:"",secretAccessKey:"",endpoint:T.endpoint,organizationId:w()??void 0,iamEndpoint:T.iamEndpoint,authDomain:J.domain}}if(n==="credentials"){let i=A();if(i)return{accessKeyId:i.accessKeyId,secretAccessKey:i.secretAccessKey,endpoint:i.endpoint}}let e=N();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint};let t=A();if(t)return{accessKeyId:t.accessKeyId,secretAccessKey:t.secretAccessKey,endpoint:t.endpoint};throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}import{createBucket as V,put as Q}from"@tigrisdata/storage";async function X(n){let e=P(n,["path"]);e||(console.error("path argument is required"),process.exit(1));let{bucket:t,path:i}=k(e);t||(console.error("Invalid path"),process.exit(1));let r=await G();if(i){let o=i.endsWith("/")?i:`${i}/`,{error:s}=await Q(o,"",{config:{...r,bucket:t}});s&&(console.error(s.message),process.exit(1)),console.log(`Folder '${t}/${o}' created`),process.exit(0)}else{let{error:o}=await V(t,{config:r});o&&(console.error(o.message),process.exit(1)),console.log(`Bucket '${t}' created`),process.exit(0)}}export{X as default};
|
package/dist/lib/mv.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import*as ee from"readline";import{list as R}from"@tigrisdata/storage";function I(o){let e=o.split("/");return{bucket:e[0],path:e.slice(1).join("/")}}async function A(o,e,r){let{data:i}=await R({prefix:`${e}/`,limit:1,config:{...r,bucket:o}});return!!(i?.items&&i.items.length>0)}async function L(o,e,r){let i=[],t;do{let{data:n,error:s}=await R({prefix:e,paginationToken:t,config:{...r,bucket:o}});if(s)return{items:i,error:s};n?.items&&i.push(...n.items),t=n?.hasMore?n.paginationToken:void 0}while(t);return{items:i}}function w(o,e,r){for(let i of e)if(o[i]!==void 0)return o[i];return r}import{S3Client as Ee}from"@aws-sdk/client-s3";import{homedir as ne}from"os";import{join as j}from"path";import{readFileSync as re,writeFileSync as ie,existsSync as K,mkdirSync as se}from"fs";import{chmod as ae}from"fs/promises";var S=j(ne(),".tigris"),y=j(S,"config.json");function ce(){K(S)||se(S,{recursive:!0,mode:448})}function g(){if(K(y))try{let o=re(y,"utf8");return JSON.parse(o)}catch{return{}}return{}}async function T(o){ce(),ie(y,JSON.stringify(o,null,2),{mode:384});try{await ae(y,384)}catch{}}async function _(o){let e=g();e.tokens=o,await T(e)}async function p(){return g().tokens||null}async function E(){let o=g();delete o.tokens,await T(o)}async function q(o){let e=g();e.organizations=o,await T(e)}function U(){return g().organizations||[]}function O(){return g().selectedOrganization||null}function G(){let o=g();return o.temporaryCredentials||o.credentials||null}async function W(o){let e=g();e.loginMethod=o,await T(e)}function H(){return g().loginMethod||null}import v from"axios";import de from"open";function C(){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 B(){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=C(),this.baseUrl=`https://${this.config.domain}`}async login(e){let i=(await v.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 de(i.verification_uri_complete)}catch{}e?.onWaiting?.();let t=await this.pollForToken(i.device_code,i.interval||5);await _(t),W("oauth"),await this.extractAndStoreOrganizations(t.idToken)}async pollForToken(e,r){let t=0;for(;t<60;){t++;try{let s=(await v.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(n){if(v.isAxiosError(n)&&n.response){let s=n.response.data?.error;if(s==="authorization_pending"){await this.sleep(r*1e3);continue}if(s==="slow_down"){r+=5,await this.sleep(r*1e3);continue}throw new Error(n.response.data?.error_description||"Authentication failed")}throw n}}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 r=300*1e3;return Date.now()+r>=e.expiresAt&&(e=await this.refreshAccessToken(e)),e.accessToken}async refreshAccessToken(e){let r=null;if(e?.refreshToken?r=e:r=await p(),!r)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let t=(await v.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,grant_type:"refresh_token",refresh_token:r.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,n={accessToken:t.access_token,refreshToken:t.refresh_token||r.refreshToken,idToken:t.id_token||r.idToken,expiresAt:Date.now()+(t.expires_in||3600)*1e3};return await _(n),n}catch{throw await E(),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 r=e.idToken.split(".")[1],i=Buffer.from(r,"base64").toString("utf8");return JSON.parse(i)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let r=e.split(".")[1],i=Buffer.from(r,"base64").toString("utf8"),n=JSON.parse(i)[J];if(!n)return;let s=n?.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;q(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),U()}async logout(){await E()}async isAuthenticated(){return await p()!==null}sleep(e){return new Promise(r=>setTimeout(r,e))}},M=null;function Q(){return M||(M=new $),M}var V=B(),le=C();async function ge(){return H()}async function X(){if(await ge()==="oauth"){let i=await Q().getAccessToken();if(!O())throw new Error('No organization selected. Please run "tigris orgs select" first.');let n=V.endpoint,s=V.iamEndpoint,a=le.domain;return{sessionToken:i,accessKeyId:"",secretAccessKey:"",endpoint:n,organizationId:O()??void 0,iamEndpoint:s,authDomain:a}}let e=G();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 fe,put as Y,remove as z,list as ue}from"@tigrisdata/storage";async function Z(o){let e=ee.createInterface({input:process.stdin,output:process.stdout});return new Promise(r=>{e.question(`${o} (y/N): `,i=>{e.close(),r(i.toLowerCase()==="y")})})}async function pe(o){let e=w(o,["src"]),r=w(o,["dest"]),i=w(o,["force","f","F"]);(!e||!r)&&(console.error("both src and dest arguments are required"),process.exit(1));let t=I(e),n=I(r);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 move a bucket. Provide a path within the bucket."),process.exit(1));let s=await X(),a=e.includes("*"),f=e.endsWith("/");if(!a&&!f&&t.path&&(f=await A(t.bucket,t.path,s)),a||f){let c=a?t.path.replace("*",""):t.path.endsWith("/")?t.path:`${t.path}/`,l=n.path?`${n.path.replace(/\/$/,"")}/`:"";t.bucket===n.bucket&&c===l&&(console.error("Source and destination are the same"),process.exit(1));let{items:m,error:h}=await L(t.bucket,c||void 0,s);h&&(console.error(h.message),process.exit(1));let x=m.filter(d=>d.name!==c),{data:te}=await ue({prefix:c,limit:1,config:{...s,bucket:t.bucket}}),b=c?te?.items?.some(d=>d.name===c):!1;if(x.length===0&&!b){console.log("No objects to move");return}let oe=x.length+(b?1:0);if(!i&&!await Z(`Are you sure you want to move ${oe} object(s)?`)){console.log("Aborted");return}let k=0;for(let d of x){let u=c?d.name.slice(c.length):d.name,D=n.path?`${n.path.replace(/\/$/,"")}/${u}`:u,F=await N(s,t.bucket,d.name,n.bucket,D);F.error?console.error(`Failed to move ${d.name}: ${F.error}`):(console.log(`Moved ${d.name} -> ${n.bucket}/${D}`),k++)}let P=!1;if(b)if(n.path){let d=`${n.path.replace(/\/$/,"")}/`,u=await N(s,t.bucket,c,n.bucket,d);u.error?console.error(`Failed to move folder marker: ${u.error}`):P=!0}else{let{error:d}=await z(c,{config:{...s,bucket:t.bucket}});d?console.error(`Failed to remove source folder marker: ${d.message}`):P=!0}k===0&&P&&(k=1),console.log(`Moved ${k} object(s)`)}else{t.path||(console.error("Source object key is required"),process.exit(1));let c=t.path.split("/").pop(),l;if(n.path?r.endsWith("/")?l=`${n.path}${c}`:await A(n.bucket,n.path,s)?l=`${n.path}/${c}`:l=n.path:l=c,t.bucket===n.bucket&&t.path===l&&(console.error("Source and destination are the same"),process.exit(1)),!i&&!await Z(`Are you sure you want to move '${t.bucket}/${t.path}'?`)){console.log("Aborted");return}let m=await N(s,t.bucket,t.path,n.bucket,l);m.error&&(console.error(m.error),process.exit(1)),console.log(`Moved ${e} -> ${n.bucket}/${l}`)}process.exit(0)}async function N(o,e,r,i,t){if(r.endsWith("/")){let{error:c}=await Y(t,"",{config:{...o,bucket:i}});if(c)return{error:c.message};let{error:l}=await z(r,{config:{...o,bucket:e}});return l?{error:`Copied but failed to delete source: ${l.message}`}:{}}let{data:n,error:s}=await fe(r,"stream",{config:{...o,bucket:e}});if(s)return{error:s.message};let{error:a}=await Y(t,n,{config:{...o,bucket:i}});if(a)return{error:a.message};let{error:f}=await z(r,{config:{...o,bucket:e}});return f?{error:`Copied but failed to delete source: ${f.message}`}:{}}export{pe as default};
|
|
1
|
+
import*as se from"readline";import{list as j}from"@tigrisdata/storage";function b(t){let e=t.split("/");return{bucket:e[0],path:e.slice(1).join("/")}}async function O(t,e,n){let{data:i}=await j({prefix:`${e}/`,limit:1,config:{...n,bucket:t}});return!!(i?.items&&i.items.length>0)}async function q(t,e,n){let i=[],o;do{let{data:r,error:s}=await j({prefix:e,paginationToken:o,config:{...n,bucket:t}});if(s)return{items:i,error:s};r?.items&&i.push(...r.items),o=r?.hasMore?r.paginationToken:void 0}while(o);return{items:i}}function C(t,e,n){for(let i of e)if(t[i]!==void 0)return t[i];return n}import{S3Client as Ge}from"@aws-sdk/client-s3";import{fromIni as he}from"@aws-sdk/credential-providers";import{homedir as H}from"os";import{join as m}from"path";import{readFileSync as de,writeFileSync as le,existsSync as k,mkdirSync as fe}from"fs";import{loadSharedConfigFiles as ge}from"@smithy/shared-ini-file-loader";import{chmod as pe}from"fs/promises";var g="https://t3.storage.dev",N="https://iam.storageapi.dev";var R=m(H(),".tigris"),I=m(R,"config.json");function ue(){k(R)||fe(R,{recursive:!0,mode:448})}function f(){if(k(I))try{let t=de(I,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function A(t){ue(),le(I,JSON.stringify(t,null,2),{mode:384});try{await pe(I,384)}catch{}}async function D(t){let e=f();e.tokens=t,await A(e)}async function h(){return f().tokens||null}async function K(){let t=f();delete t.tokens,await A(t)}async function J(t){let e=f();e.organizations=t,await A(e)}function Y(){return f().organizations||[]}function M(){return f().selectedOrganization||null}function B(){if(process.env.TIGRIS_STORAGE_ACCESS_KEY_ID||process.env.TIGRIS_STORAGE_SECRET_ACCESS_KEY){let i=process.env.TIGRIS_STORAGE_ACCESS_KEY_ID,o=process.env.TIGRIS_STORAGE_SECRET_ACCESS_KEY;if(!i||!o)return null;let r=process.env.TIGRIS_STORAGE_ENDPOINT||g;return{accessKeyId:i,secretAccessKey:o,endpoint:r}}let t=process.env.AWS_ACCESS_KEY_ID,e=process.env.AWS_SECRET_ACCESS_KEY;if(!t||!e)return null;let n=process.env.AWS_ENDPOINT_URL_S3||g;return{accessKeyId:t,secretAccessKey:e,endpoint:n}}function V(){if(!process.env.AWS_PROFILE)return!1;let t=m(H(),".aws");return k(m(t,"credentials"))||k(m(t,"config"))}async function Q(t){try{let{configFile:e}=await ge(),n=e[t];return n?{endpoint:n.endpoint_url_s3||n.endpoint_url,iamEndpoint:n.endpoint_url_iam,region:n.region}:{}}catch{return{}}}function $(){let t=f();return t.temporaryCredentials||t.credentials||null}async function X(t){let e=f();e.loginMethod=t,await A(e)}function Z(){return f().loginMethod||null}import S from"axios";import me from"open";function _(){let t=process.env.TIGRIS_ENV==="development",e=process.env.AUTH0_DOMAIN||t?"auth-dev.tigris.dev":"auth.tigris.dev",n=process.env.AUTH0_CLIENT_ID||t?"JdJVYIyw0O1uHi5L5OJH903qaWBgd3gF":"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",i=process.env.AUTH0_AUDIENCE||t?"https://tigris-api-dev":"https://tigris-os-api";return{domain:e,clientId:n,audience:i}}var ee=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function te(){return process.env.TIGRIS_STORAGE_ENDPOINT||process.env.TIGRIS_IAM_ENDPOINT?{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||g,iamEndpoint:process.env.TIGRIS_IAM_ENDPOINT||N}:{endpoint:process.env.AWS_ENDPOINT_URL_S3||g,iamEndpoint:process.env.AWS_ENDPOINT_URL_IAM||N}}var L=class{config;baseUrl;constructor(){this.config=_(),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 me(i.verification_uri_complete)}catch{}e?.onWaiting?.();let o=await this.pollForToken(i.device_code,i.interval||5);await D(o),X("oauth"),await this.extractAndStoreOrganizations(o.idToken)}async pollForToken(e,n){let o=0;for(;o<60;){o++;try{let s=(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,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(S.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 h();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 h(),!n)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:n.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||n.refreshToken,idToken:o.id_token||n.idToken,expiresAt:Date.now()+(o.expires_in||3600)*1e3};return await D(r),r}catch{throw await K(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await h();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let 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"),r=JSON.parse(i)[ee];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;J(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),Y()}async logout(){await K()}async isAuthenticated(){return await h()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},F=null;function ne(){return F||(F=new L),F}var v=te(),Te=_();async function ye(){return Z()}async function oe(){if(V()){let i=process.env.AWS_PROFILE||"default",o=await Q(i),r=await he({profile:i})();return{accessKeyId:r.accessKeyId,secretAccessKey:r.secretAccessKey,endpoint:o.endpoint||v.endpoint||g,iamEndpoint:o.iamEndpoint||v.iamEndpoint}}let t=await ye();if(t==="oauth"){let o=await ne().getAccessToken();if(!M())throw new Error('No organization selected. Please run "tigris orgs select" first.');return{sessionToken:o,accessKeyId:"",secretAccessKey:"",endpoint:v.endpoint,organizationId:M()??void 0,iamEndpoint:v.iamEndpoint,authDomain:Te.domain}}if(t==="credentials"){let i=$();if(i)return{accessKeyId:i.accessKeyId,secretAccessKey:i.secretAccessKey,endpoint:i.endpoint}}let e=B();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint};let n=$();if(n)return{accessKeyId:n.accessKeyId,secretAccessKey:n.secretAccessKey,endpoint:n.endpoint};throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}import{get as we,put as re,remove as G,list as Ce}from"@tigrisdata/storage";async function ie(t){let e=se.createInterface({input:process.stdin,output:process.stdout});return new Promise(n=>{e.question(`${t} (y/N): `,i=>{e.close(),n(i.toLowerCase()==="y")})})}async function ke(t){let e=C(t,["src"]),n=C(t,["dest"]),i=C(t,["force","f","F"]);(!e||!n)&&(console.error("both src and dest arguments are required"),process.exit(1));let o=b(e),r=b(n);o.bucket||(console.error("Invalid source path"),process.exit(1)),r.bucket||(console.error("Invalid destination path"),process.exit(1)),o.path||(console.error("Cannot move a bucket. Provide a path within the bucket."),process.exit(1));let s=await oe(),a=e.includes("*"),p=e.endsWith("/");if(!a&&!p&&o.path&&(p=await O(o.bucket,o.path,s)),a||p){let c=a?o.path.replace("*",""):o.path.endsWith("/")?o.path:`${o.path}/`,l=r.path?`${r.path.replace(/\/$/,"")}/`:"";o.bucket===r.bucket&&c===l&&(console.error("Source and destination are the same"),process.exit(1));let{items:T,error:y}=await q(o.bucket,c||void 0,s);y&&(console.error(y.message),process.exit(1));let E=T.filter(d=>d.name!==c),{data:ae}=await Ce({prefix:c,limit:1,config:{...s,bucket:o.bucket}}),P=c?ae?.items?.some(d=>d.name===c):!1;if(E.length===0&&!P){console.log("No objects to move");return}let ce=E.length+(P?1:0);if(!i&&!await ie(`Are you sure you want to move ${ce} object(s)?`)){console.log("Aborted");return}let w=0;for(let d of E){let u=c?d.name.slice(c.length):d.name,U=r.path?`${r.path.replace(/\/$/,"")}/${u}`:u,W=await z(s,o.bucket,d.name,r.bucket,U);W.error?console.error(`Failed to move ${d.name}: ${W.error}`):(console.log(`Moved ${d.name} -> ${r.bucket}/${U}`),w++)}let x=!1;if(P)if(r.path){let d=`${r.path.replace(/\/$/,"")}/`,u=await z(s,o.bucket,c,r.bucket,d);u.error?console.error(`Failed to move folder marker: ${u.error}`):x=!0}else{let{error:d}=await G(c,{config:{...s,bucket:o.bucket}});d?console.error(`Failed to remove source folder marker: ${d.message}`):x=!0}w===0&&x&&(w=1),console.log(`Moved ${w} object(s)`)}else{o.path||(console.error("Source object key is required"),process.exit(1));let c=o.path.split("/").pop(),l;if(r.path?n.endsWith("/")?l=`${r.path}${c}`:await O(r.bucket,r.path,s)?l=`${r.path}/${c}`:l=r.path:l=c,o.bucket===r.bucket&&o.path===l&&(console.error("Source and destination are the same"),process.exit(1)),!i&&!await ie(`Are you sure you want to move '${o.bucket}/${o.path}'?`)){console.log("Aborted");return}let T=await z(s,o.bucket,o.path,r.bucket,l);T.error&&(console.error(T.error),process.exit(1)),console.log(`Moved ${e} -> ${r.bucket}/${l}`)}process.exit(0)}async function z(t,e,n,i,o){if(n.endsWith("/")){let{error:c}=await re(o,"",{config:{...t,bucket:i}});if(c)return{error:c.message};let{error:l}=await G(n,{config:{...t,bucket:e}});return l?{error:`Copied but failed to delete source: ${l.message}`}:{}}let{data:r,error:s}=await we(n,"stream",{config:{...t,bucket:e}});if(s)return{error:s.message};let{error:a}=await re(o,r,{config:{...t,bucket:i}});if(a)return{error:a.message};let{error:p}=await G(n,{config:{...t,bucket:e}});return p?{error:`Copied but failed to delete source: ${p.message}`}:{}}export{ke as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
function
|
|
2
|
-
`),e&&(
|
|
1
|
+
function S(n,e,t){for(let o of e)if(n[o]!==void 0)return n[o];return t}import{S3Client as Re}from"@aws-sdk/client-s3";import{fromIni as re}from"@aws-sdk/credential-providers";import{homedir as M}from"os";import{join as l}from"path";import{readFileSync as X,writeFileSync as Z,existsSync as f,mkdirSync as ee}from"fs";import{loadSharedConfigFiles as ne}from"@smithy/shared-ini-file-loader";import{chmod as te}from"fs/promises";var d="https://t3.storage.dev",A="https://iam.storageapi.dev";var _=l(M(),".tigris"),u=l(_,"config.json");function oe(){f(_)||ee(_,{recursive:!0,mode:448})}function c(){if(f(u))try{let n=X(u,"utf8");return JSON.parse(n)}catch{return{}}return{}}async function m(n){oe(),Z(u,JSON.stringify(n,null,2),{mode:384});try{await te(u,384)}catch{}}async function w(n){let e=c();e.tokens=n,await m(e)}async function g(){return c().tokens||null}async function I(){let n=c();delete n.tokens,await m(n)}async function D(n){let e=c();e.organizations=n,await m(e)}function K(){return c().organizations||[]}function E(){return c().selectedOrganization||null}function R(){if(process.env.TIGRIS_STORAGE_ACCESS_KEY_ID||process.env.TIGRIS_STORAGE_SECRET_ACCESS_KEY){let o=process.env.TIGRIS_STORAGE_ACCESS_KEY_ID,i=process.env.TIGRIS_STORAGE_SECRET_ACCESS_KEY;if(!o||!i)return null;let r=process.env.TIGRIS_STORAGE_ENDPOINT||d;return{accessKeyId:o,secretAccessKey:i,endpoint:r}}let n=process.env.AWS_ACCESS_KEY_ID,e=process.env.AWS_SECRET_ACCESS_KEY;if(!n||!e)return null;let t=process.env.AWS_ENDPOINT_URL_S3||d;return{accessKeyId:n,secretAccessKey:e,endpoint:t}}function b(){if(!process.env.AWS_PROFILE)return!1;let n=l(M(),".aws");return f(l(n,"credentials"))||f(l(n,"config"))}async function L(n){try{let{configFile:e}=await ne(),t=e[n];return t?{endpoint:t.endpoint_url_s3||t.endpoint_url,iamEndpoint:t.endpoint_url_iam,region:t.region}:{}}catch{return{}}}function k(){let n=c();return n.temporaryCredentials||n.credentials||null}async function z(n){let e=c();e.loginMethod=n,await m(e)}function G(){return c().loginMethod||null}import C from"axios";import ie from"open";function y(){let n=process.env.TIGRIS_ENV==="development",e=process.env.AUTH0_DOMAIN||n?"auth-dev.tigris.dev":"auth.tigris.dev",t=process.env.AUTH0_CLIENT_ID||n?"JdJVYIyw0O1uHi5L5OJH903qaWBgd3gF":"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",o=process.env.AUTH0_AUDIENCE||n?"https://tigris-api-dev":"https://tigris-os-api";return{domain:e,clientId:t,audience:o}}var F=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function U(){return process.env.TIGRIS_STORAGE_ENDPOINT||process.env.TIGRIS_IAM_ENDPOINT?{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||d,iamEndpoint:process.env.TIGRIS_IAM_ENDPOINT||A}:{endpoint:process.env.AWS_ENDPOINT_URL_S3||d,iamEndpoint:process.env.AWS_ENDPOINT_URL_IAM||A}}var x=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 ie(o.verification_uri_complete)}catch{}e?.onWaiting?.();let i=await this.pollForToken(o.device_code,o.interval||5);await w(i),z("oauth"),await this.extractAndStoreOrganizations(i.idToken)}async pollForToken(e,t){let i=0;for(;i<60;){i++;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 g();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 g(),!t)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let i=(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:i.access_token,refreshToken:i.refresh_token||t.refreshToken,idToken:i.id_token||t.idToken,expiresAt:Date.now()+(i.expires_in||3600)*1e3};return await w(r),r}catch{throw await I(),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 t=e.idToken.split(".")[1],o=Buffer.from(t,"base64").toString("utf8");return JSON.parse(o)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let t=e.split(".")[1],o=Buffer.from(t,"base64").toString("utf8"),r=JSON.parse(o)[F];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;D(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),K()}async logout(){await I()}async isAuthenticated(){return await g()!==null}sleep(e){return new Promise(t=>setTimeout(t,e))}},v=null;function j(){return v||(v=new x),v}var h=U(),se=y();async function ae(){return G()}async function $(){if(b()){let o=process.env.AWS_PROFILE||"default",i=await L(o),r=await re({profile:o})();return{accessKeyId:r.accessKeyId,secretAccessKey:r.secretAccessKey,endpoint:i.endpoint||h.endpoint||d,iamEndpoint:i.iamEndpoint||h.iamEndpoint}}let n=await ae();if(n==="oauth"){let i=await j().getAccessToken();if(!E())throw new Error('No organization selected. Please run "tigris orgs select" first.');return{sessionToken:i,accessKeyId:"",secretAccessKey:"",endpoint:h.endpoint,organizationId:E()??void 0,iamEndpoint:h.iamEndpoint,authDomain:se.domain}}if(n==="credentials"){let o=k();if(o)return{accessKeyId:o.accessKeyId,secretAccessKey:o.secretAccessKey,endpoint:o.endpoint}}let e=R();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint};let t=k();if(t)return{accessKeyId:t.accessKeyId,secretAccessKey:t.secretAccessKey,endpoint:t.endpoint};throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}import{remove as ye}from"@tigrisdata/storage";import{readFileSync as ce,existsSync as de}from"fs";import{join as W,dirname as le}from"path";import{fileURLToPath as ge}from"url";import*as Y from"yaml";var pe=ge(import.meta.url),fe=le(pe),O=null;function ue(){let n=fe;for(let e=0;e<5;e++){let t=W(n,"specs.yaml");if(de(t))return t;n=W(n,"..")}throw new Error("Could not find specs.yaml")}function me(){if(!O){let n=ue(),e=ce(n,"utf8");O=Y.parse(e)}return O}function V(n,e){let o=me().commands.find(i=>i.name===n);return o?e&&o.operations?o.operations.find(i=>i.name===e)||null:o:null}var q={success:"\u2714",failure:"\u2716",hint:"\u2192"};function H(){return process.stdout.isTTY===!0}function P(n){let e=V(n.command,n.operation);if(e)return e.messages}function N(n,e){let t=n;return t=t.replace(/\\n/g,`
|
|
2
|
+
`),e&&(t=t.replace(/\{\{(\w+)\}\}/g,(o,i)=>{let r=e[i];return r!==void 0?String(r):`{{${i}}}`})),t}function J(n,e){if(!H())return;let t=P(n);t?.onStart&&console.log(N(t.onStart,e))}function B(n,e){if(!H())return;let t=P(n);t?.onSuccess&&console.log(`${q.success} ${N(t.onSuccess,e)}`)}function T(n,e,t){let o=P(n);o?.onFailure&&console.error(`${q.failure} ${N(o.onFailure,t)}`),e&&console.error(` ${e}`)}function Q(n,e){return{command:n,operation:e}}var p=Q("objects","delete");async function Ce(n){J(p);let e=S(n,["bucket"]),t=S(n,["key"]);e||(T(p,"Bucket name is required"),process.exit(1)),t||(T(p,"Object key is required"),process.exit(1));let o=await $(),i=Array.isArray(t)?t:[t];for(let r of i){let{error:s}=await ye(r,{config:{...o,bucket:e}});s&&(T(p,s.message,{key:r}),process.exit(1)),B(p,{key:r})}}export{Ce as default};
|
package/dist/lib/objects/get.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createWriteStream as
|
|
2
|
-
`),e&&(n=n.replace(/\{\{(\w+)\}\}/g,(o,i)=>{let
|
|
1
|
+
import{createWriteStream as Ae,writeFileSync as we}from"fs";import{Readable as Z}from"stream";import{pipeline as ee}from"stream/promises";import{extname as _e}from"path";function p(t,e,n){for(let o of e)if(t[o]!==void 0)return t[o];return n}import{S3Client as $e}from"@aws-sdk/client-s3";import{fromIni as le}from"@aws-sdk/credential-providers";import{homedir as b}from"os";import{join as f}from"path";import{readFileSync as oe,writeFileSync as ie,existsSync as y,mkdirSync as se}from"fs";import{loadSharedConfigFiles as re}from"@smithy/shared-ini-file-loader";import{chmod as ae}from"fs/promises";var l="https://t3.storage.dev",_="https://iam.storageapi.dev";var I=f(b(),".tigris"),C=f(I,"config.json");function ce(){y(I)||se(I,{recursive:!0,mode:448})}function c(){if(y(C))try{let t=oe(C,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function T(t){ce(),ie(C,JSON.stringify(t,null,2),{mode:384});try{await ae(C,384)}catch{}}async function E(t){let e=c();e.tokens=t,await T(e)}async function u(){return c().tokens||null}async function x(){let t=c();delete t.tokens,await T(t)}async function D(t){let e=c();e.organizations=t,await T(e)}function K(){return c().organizations||[]}function k(){return c().selectedOrganization||null}function L(){if(process.env.TIGRIS_STORAGE_ACCESS_KEY_ID||process.env.TIGRIS_STORAGE_SECRET_ACCESS_KEY){let o=process.env.TIGRIS_STORAGE_ACCESS_KEY_ID,i=process.env.TIGRIS_STORAGE_SECRET_ACCESS_KEY;if(!o||!i)return null;let s=process.env.TIGRIS_STORAGE_ENDPOINT||l;return{accessKeyId:o,secretAccessKey:i,endpoint:s}}let t=process.env.AWS_ACCESS_KEY_ID,e=process.env.AWS_SECRET_ACCESS_KEY;if(!t||!e)return null;let n=process.env.AWS_ENDPOINT_URL_S3||l;return{accessKeyId:t,secretAccessKey:e,endpoint:n}}function z(){if(!process.env.AWS_PROFILE)return!1;let t=f(b(),".aws");return y(f(t,"credentials"))||y(f(t,"config"))}async function F(t){try{let{configFile:e}=await re(),n=e[t];return n?{endpoint:n.endpoint_url_s3||n.endpoint_url,iamEndpoint:n.endpoint_url_iam,region:n.region}:{}}catch{return{}}}function v(){let t=c();return t.temporaryCredentials||t.credentials||null}async function G(t){let e=c();e.loginMethod=t,await T(e)}function j(){return c().loginMethod||null}import A from"axios";import de from"open";function S(){let t=process.env.TIGRIS_ENV==="development",e=process.env.AUTH0_DOMAIN||t?"auth-dev.tigris.dev":"auth.tigris.dev",n=process.env.AUTH0_CLIENT_ID||t?"JdJVYIyw0O1uHi5L5OJH903qaWBgd3gF":"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",o=process.env.AUTH0_AUDIENCE||t?"https://tigris-api-dev":"https://tigris-os-api";return{domain:e,clientId:n,audience:o}}var U=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function W(){return process.env.TIGRIS_STORAGE_ENDPOINT||process.env.TIGRIS_IAM_ENDPOINT?{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||l,iamEndpoint:process.env.TIGRIS_IAM_ENDPOINT||_}:{endpoint:process.env.AWS_ENDPOINT_URL_S3||l,iamEndpoint:process.env.AWS_ENDPOINT_URL_IAM||_}}var P=class{config;baseUrl;constructor(){this.config=S(),this.baseUrl=`https://${this.config.domain}`}async login(e){let o=(await A.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 de(o.verification_uri_complete)}catch{}e?.onWaiting?.();let i=await this.pollForToken(o.device_code,o.interval||5);await E(i),G("oauth"),await this.extractAndStoreOrganizations(i.idToken)}async pollForToken(e,n){let i=0;for(;i<60;){i++;try{let a=(await A.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,device_code:e,grant_type:"urn:ietf:params:oauth:grant-type:device_code"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,r=Date.now()+(a.expires_in||3600)*1e3;return{accessToken:a.access_token,refreshToken:a.refresh_token,idToken:a.id_token,expiresAt:r}}catch(s){if(A.isAxiosError(s)&&s.response){let a=s.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(s.response.data?.error_description||"Authentication failed")}throw s}}throw new Error("Authentication timed out. Please try again.")}async getAccessToken(){let e=await u();if(!e)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');let n=300*1e3;return Date.now()+n>=e.expiresAt&&(e=await this.refreshAccessToken(e)),e.accessToken}async refreshAccessToken(e){let n=null;if(e?.refreshToken?n=e:n=await u(),!n)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let i=(await A.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,grant_type:"refresh_token",refresh_token:n.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,s={accessToken: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 E(s),s}catch{throw await x(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await u();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let n=e.idToken.split(".")[1],o=Buffer.from(n,"base64").toString("utf8");return JSON.parse(o)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let n=e.split(".")[1],o=Buffer.from(n,"base64").toString("utf8"),s=JSON.parse(o)[U];if(!s)return;let a=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(a.length===0)return;D(a)}catch{}}async getOrganizations(){return await this.getAccessToken(),K()}async logout(){await x()}async isAuthenticated(){return await u()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},O=null;function $(){return O||(O=new P),O}var w=W(),ge=S();async function pe(){return j()}async function q(){if(z()){let o=process.env.AWS_PROFILE||"default",i=await F(o),s=await le({profile:o})();return{accessKeyId:s.accessKeyId,secretAccessKey:s.secretAccessKey,endpoint:i.endpoint||w.endpoint||l,iamEndpoint:i.iamEndpoint||w.iamEndpoint}}let t=await pe();if(t==="oauth"){let i=await $().getAccessToken();if(!k())throw new Error('No organization selected. Please run "tigris orgs select" first.');return{sessionToken:i,accessKeyId:"",secretAccessKey:"",endpoint:w.endpoint,organizationId:k()??void 0,iamEndpoint:w.iamEndpoint,authDomain:ge.domain}}if(t==="credentials"){let o=v();if(o)return{accessKeyId:o.accessKeyId,secretAccessKey:o.secretAccessKey,endpoint:o.endpoint}}let e=L();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint};let n=v();if(n)return{accessKeyId:n.accessKeyId,secretAccessKey:n.secretAccessKey,endpoint:n.endpoint};throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}import{get as te}from"@tigrisdata/storage";import{readFileSync as fe,existsSync as ue}from"fs";import{join as Y,dirname as me}from"path";import{fileURLToPath as he}from"url";import*as V from"yaml";var ye=he(import.meta.url),Ce=me(ye),N=null;function Te(){let t=Ce;for(let e=0;e<5;e++){let n=Y(t,"specs.yaml");if(ue(n))return n;t=Y(t,"..")}throw new Error("Could not find specs.yaml")}function Se(){if(!N){let t=Te(),e=fe(t,"utf8");N=V.parse(e)}return N}function H(t,e){let o=Se().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 B(){return process.stdout.isTTY===!0}function M(t){let e=H(t.command,t.operation);if(e)return e.messages}function R(t,e){let n=t;return n=n.replace(/\\n/g,`
|
|
2
|
+
`),e&&(n=n.replace(/\{\{(\w+)\}\}/g,(o,i)=>{let s=e[i];return s!==void 0?String(s):`{{${i}}}`})),n}function X(t,e){if(!B())return;let n=M(t);n?.onStart&&console.log(R(n.onStart,e))}function m(t,e){if(!B())return;let n=M(t);n?.onSuccess&&console.log(`${J.success} ${R(n.onSuccess,e)}`)}function h(t,e,n){let o=M(t);o?.onFailure&&console.error(`${J.failure} ${R(o.onFailure,n)}`),e&&console.error(` ${e}`)}function Q(t,e){return{command:t,operation:e}}var d=Q("objects","get"),Ie=new Set([".js",".ts",".jsx",".tsx",".mjs",".cjs",".py",".rb",".php",".java",".go",".rs",".c",".cpp",".h",".hpp",".cs",".swift",".kt",".scala",".clj",".ex",".exs",".erl",".sh",".bash",".zsh",".fish",".ps1",".bat",".cmd",".sql",".graphql",".gql",".json",".yaml",".yml",".toml",".ini",".cfg",".conf",".xml",".plist",".env",".properties",".html",".htm",".css",".scss",".sass",".less",".styl",".md",".markdown",".mdx",".rst",".txt",".text",".csv",".tsv",".log",".ejs",".hbs",".pug",".jade",".njk",".twig",".liquid",".svg",".gitignore",".dockerignore",".editorconfig"]);function Ee(t,e){let o=_e(e||t).toLowerCase();return Ie.has(o)?"string":"stream"}async function xe(t){X(d);let e=p(t,["bucket"]),n=p(t,["key"]),o=p(t,["output","o","O"]),i=p(t,["mode","m","M"]);e||(h(d,"Bucket name is required"),process.exit(1)),n||(h(d,"Object key is required"),process.exit(1));let s=await q();if((i||Ee(n,o))==="stream"){let{data:r,error:g}=await te(n,"stream",{config:{...s,bucket:e}});if(g&&(h(d,g.message),process.exit(1)),o){let ne=Ae(o);await ee(Z.fromWeb(r),ne),m(d,{key:n,output:o})}else await ee(Z.fromWeb(r),process.stdout),m(d)}else{let{data:r,error:g}=await te(n,"string",{config:{...s,bucket:e}});g&&(h(d,g.message),process.exit(1)),o?(we(o,r),m(d,{key:n,output:o})):(console.log(r),m(d))}}export{xe as default};
|
package/dist/lib/objects/list.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
function
|
|
2
|
-
`)}function
|
|
3
|
-
`)}function
|
|
4
|
-
`+i);let a="\u2502 "+
|
|
5
|
-
`),
|
|
6
|
-
`)}function
|
|
7
|
-
`),
|
|
1
|
+
function m(e,n,t){for(let o of n)if(e[o]!==void 0)return e[o];return t}function ae(e){return JSON.stringify(e,null,2)}function ce(e,n=" "){return Object.entries(e).map(([t,o])=>`${n}<${t}>${o}</${t}>`).join(`
|
|
2
|
+
`)}function de(e,n,t){let o=[`<${n}>`];return e.forEach(i=>{o.push(` <${t}>`),o.push(ce(i," ")),o.push(` </${t}>`)}),o.push(`</${n}>`),o.join(`
|
|
3
|
+
`)}function F(e){if(e==null)return"";if(e instanceof Date)return L(e);if(typeof e=="string"){let n=new Date(e);if(!isNaN(n.getTime())&&e.includes("T"))return L(n)}return String(e)}function L(e){return new Intl.DateTimeFormat(void 0,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}).format(e)}function ue(e,n){return n.map(t=>{if(t.width)return t.width;let o=t.header.length,i=e.reduce((r,s)=>{let a=F(s[t.key]);return Math.max(r,a.length)},0);return Math.max(o,i)})}function pe(e,n){let t=[],o=ue(e,n),i="\u250C"+o.map(c=>"\u2500".repeat(c+2)).join("\u252C")+"\u2510",r="\u251C"+o.map(c=>"\u2500".repeat(c+2)).join("\u253C")+"\u2524",s="\u2514"+o.map(c=>"\u2500".repeat(c+2)).join("\u2534")+"\u2518";t.push(`
|
|
4
|
+
`+i);let a="\u2502 "+n.map((c,p)=>c.header.padEnd(o[p])).join(" \u2502 ")+" \u2502";return t.push(a),t.push(r),e.forEach(c=>{let p=n.map((b,K)=>{let z=F(c[b.key]);return b.align==="right"?z.padStart(o[K]):z.padEnd(o[K])});t.push("\u2502 "+p.join(" \u2502 ")+" \u2502")}),t.push(s+`
|
|
5
|
+
`),t.join(`
|
|
6
|
+
`)}function j(e,n,t,o,i){switch(n){case"json":return ae(e);case"xml":return de(e,t,o);default:return pe(e,i)}}import{S3Client as Xe}from"@aws-sdk/client-s3";import{fromIni as Ce}from"@aws-sdk/credential-providers";import{homedir as G}from"os";import{join as g}from"path";import{readFileSync as ge,writeFileSync as le,existsSync as h,mkdirSync as fe}from"fs";import{loadSharedConfigFiles as me}from"@smithy/shared-ini-file-loader";import{chmod as he}from"fs/promises";var u="https://t3.storage.dev",I="https://iam.storageapi.dev";var x=g(G(),".tigris"),T=g(x,"config.json");function Te(){h(x)||fe(x,{recursive:!0,mode:448})}function d(){if(h(T))try{let e=ge(T,"utf8");return JSON.parse(e)}catch{return{}}return{}}async function y(e){Te(),le(T,JSON.stringify(e,null,2),{mode:384});try{await he(T,384)}catch{}}async function k(e){let n=d();n.tokens=e,await y(n)}async function l(){return d().tokens||null}async function E(){let e=d();delete e.tokens,await y(e)}async function $(e){let n=d();n.organizations=e,await y(n)}function U(){return d().organizations||[]}function v(){return d().selectedOrganization||null}function B(){if(process.env.TIGRIS_STORAGE_ACCESS_KEY_ID||process.env.TIGRIS_STORAGE_SECRET_ACCESS_KEY){let o=process.env.TIGRIS_STORAGE_ACCESS_KEY_ID,i=process.env.TIGRIS_STORAGE_SECRET_ACCESS_KEY;if(!o||!i)return null;let r=process.env.TIGRIS_STORAGE_ENDPOINT||u;return{accessKeyId:o,secretAccessKey:i,endpoint:r}}let e=process.env.AWS_ACCESS_KEY_ID,n=process.env.AWS_SECRET_ACCESS_KEY;if(!e||!n)return null;let t=process.env.AWS_ENDPOINT_URL_S3||u;return{accessKeyId:e,secretAccessKey:n,endpoint:t}}function W(){if(!process.env.AWS_PROFILE)return!1;let e=g(G(),".aws");return h(g(e,"credentials"))||h(g(e,"config"))}async function V(e){try{let{configFile:n}=await me(),t=n[e];return t?{endpoint:t.endpoint_url_s3||t.endpoint_url,iamEndpoint:t.endpoint_url_iam,region:t.region}:{}}catch{return{}}}function O(){let e=d();return e.temporaryCredentials||e.credentials||null}async function Y(e){let n=d();n.loginMethod=e,await y(n)}function J(){return d().loginMethod||null}import S from"axios";import ye from"open";function C(){let e=process.env.TIGRIS_ENV==="development",n=process.env.AUTH0_DOMAIN||e?"auth-dev.tigris.dev":"auth.tigris.dev",t=process.env.AUTH0_CLIENT_ID||e?"JdJVYIyw0O1uHi5L5OJH903qaWBgd3gF":"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",o=process.env.AUTH0_AUDIENCE||e?"https://tigris-api-dev":"https://tigris-os-api";return{domain:n,clientId:t,audience:o}}var q=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function H(){return process.env.TIGRIS_STORAGE_ENDPOINT||process.env.TIGRIS_IAM_ENDPOINT?{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||u,iamEndpoint:process.env.TIGRIS_IAM_ENDPOINT||I}:{endpoint:process.env.AWS_ENDPOINT_URL_S3||u,iamEndpoint:process.env.AWS_ENDPOINT_URL_IAM||I}}var M=class{config;baseUrl;constructor(){this.config=C(),this.baseUrl=`https://${this.config.domain}`}async login(n){let o=(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;n?.onDeviceCode?.(o.user_code,o.verification_uri),await this.sleep(2e3);try{await ye(o.verification_uri_complete)}catch{}n?.onWaiting?.();let i=await this.pollForToken(o.device_code,o.interval||5);await k(i),Y("oauth"),await this.extractAndStoreOrganizations(i.idToken)}async pollForToken(n,t){let i=0;for(;i<60;){i++;try{let s=(await S.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,device_code:n,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(S.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 n=await l();if(!n)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');let t=300*1e3;return Date.now()+t>=n.expiresAt&&(n=await this.refreshAccessToken(n)),n.accessToken}async refreshAccessToken(n){let t=null;if(n?.refreshToken?t=n:t=await l(),!t)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let i=(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,r={accessToken:i.access_token,refreshToken:i.refresh_token||t.refreshToken,idToken:i.id_token||t.idToken,expiresAt:Date.now()+(i.expires_in||3600)*1e3};return await k(r),r}catch{throw await E(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let n=await l();if(!n||!n.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let t=n.idToken.split(".")[1],o=Buffer.from(t,"base64").toString("utf8");return JSON.parse(o)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(n){if(n)try{let t=n.split(".")[1],o=Buffer.from(t,"base64").toString("utf8"),r=JSON.parse(o)[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;$(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),U()}async logout(){await E()}async isAuthenticated(){return await l()!==null}sleep(n){return new Promise(t=>setTimeout(t,n))}},P=null;function X(){return P||(P=new M),P}var w=H(),Se=C();async function we(){return J()}async function Q(){if(W()){let o=process.env.AWS_PROFILE||"default",i=await V(o),r=await Ce({profile:o})();return{accessKeyId:r.accessKeyId,secretAccessKey:r.secretAccessKey,endpoint:i.endpoint||w.endpoint||u,iamEndpoint:i.iamEndpoint||w.iamEndpoint}}let e=await we();if(e==="oauth"){let i=await X().getAccessToken();if(!v())throw new Error('No organization selected. Please run "tigris orgs select" first.');return{sessionToken:i,accessKeyId:"",secretAccessKey:"",endpoint:w.endpoint,organizationId:v()??void 0,iamEndpoint:w.iamEndpoint,authDomain:Se.domain}}if(e==="credentials"){let o=O();if(o)return{accessKeyId:o.accessKeyId,secretAccessKey:o.secretAccessKey,endpoint:o.endpoint}}let n=B();if(n)return{accessKeyId:n.accessKeyId,secretAccessKey:n.secretAccessKey,endpoint:n.endpoint};let t=O();if(t)return{accessKeyId:t.accessKeyId,secretAccessKey:t.secretAccessKey,endpoint:t.endpoint};throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}import{list as Pe}from"@tigrisdata/storage";import{readFileSync as Ae,existsSync as _e}from"fs";import{join as Z,dirname as Ie}from"path";import{fileURLToPath as xe}from"url";import*as ee from"yaml";var ke=xe(import.meta.url),Ee=Ie(ke),N=null;function ve(){let e=Ee;for(let n=0;n<5;n++){let t=Z(e,"specs.yaml");if(_e(t))return t;e=Z(e,"..")}throw new Error("Could not find specs.yaml")}function Oe(){if(!N){let e=ve(),n=Ae(e,"utf8");N=ee.parse(n)}return N}function ne(e,n){let o=Oe().commands.find(i=>i.name===e);return o?n&&o.operations?o.operations.find(i=>i.name===n)||null:o:null}var te={success:"\u2714",failure:"\u2716",hint:"\u2192"};function D(){return process.stdout.isTTY===!0}function A(e){let n=ne(e.command,e.operation);if(n)return n.messages}function _(e,n){let t=e;return t=t.replace(/\\n/g,`
|
|
7
|
+
`),n&&(t=t.replace(/\{\{(\w+)\}\}/g,(o,i)=>{let r=n[i];return r!==void 0?String(r):`{{${i}}}`})),t}function oe(e,n){if(!D())return;let t=A(e);t?.onStart&&console.log(_(t.onStart,n))}function ie(e,n){if(!D())return;let t=A(e);t?.onSuccess&&console.log(`${te.success} ${_(t.onSuccess,n)}`)}function R(e,n,t){let o=A(e);o?.onFailure&&console.error(`${te.failure} ${_(o.onFailure,t)}`),n&&console.error(` ${n}`)}function re(e,n){if(!D())return;let t=A(e);t?.onEmpty&&console.log(_(t.onEmpty,n))}function se(e,n){return{command:e,operation:n}}var f=se("objects","list");async function Me(e){oe(f);let n=m(e,["bucket"]),t=m(e,["prefix","p","P"]),o=m(e,["format","f","F"],"table");n||(R(f,"Bucket name is required"),process.exit(1));let i=await Q(),{data:r,error:s}=await Pe({prefix:t||void 0,config:{...i,bucket:n}});if(s&&(R(f,s.message),process.exit(1)),!r.items||r.items.length===0){re(f);return}let a=r.items.map(p=>({key:p.name,size:Ne(p.size),modified:p.lastModified})),c=j(a,o,"objects","object",[{key:"key",header:"Key"},{key:"size",header:"Size"},{key:"modified",header:"Modified"}]);console.log(c),ie(f,{count:a.length})}function Ne(e){if(e===0)return"0 B";let n=["B","KB","MB","GB","TB"],t=Math.floor(Math.log(e)/Math.log(1024));return`${(e/Math.pow(1024,t)).toFixed(t>0?1:0)} ${n[t]}`}export{Me as default};
|