@tigrisdata/cli 2.6.0 → 2.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -13
- 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/chunk-4LGKN5DA.js +1 -0
- package/dist/chunk-6U4U4JM6.js +1 -0
- package/dist/chunk-A3TXP5Y2.js +2 -0
- package/dist/chunk-D63SZLT5.js +1 -0
- package/dist/chunk-DJIPPZGR.js +4 -0
- package/dist/chunk-ESJWTUFN.js +1 -0
- package/dist/chunk-HE7E7ZMA.js +1 -0
- package/dist/chunk-HGIJOGCZ.js +6 -0
- package/dist/chunk-JRALYIRA.js +1 -0
- package/dist/chunk-JVB3Y42V.js +1 -0
- package/dist/chunk-LCWHZUZZ.js +1 -0
- package/dist/chunk-QZXBLNMQ.js +1 -0
- package/dist/chunk-TPUZYSCZ.js +12 -0
- package/dist/chunk-TUJTXB5G.js +8 -0
- package/dist/cli.js +1 -12
- package/dist/constants.js +1 -1
- package/dist/index.js +1 -12
- package/dist/lib/_stat.js +1 -1
- package/dist/lib/access-keys/assign.js +2 -3
- package/dist/lib/access-keys/create.js +2 -3
- package/dist/lib/access-keys/delete.js +2 -3
- package/dist/lib/access-keys/get.js +2 -3
- package/dist/lib/access-keys/list.js +2 -8
- package/dist/lib/buckets/create.js +1 -2
- package/dist/lib/buckets/delete.js +1 -2
- package/dist/lib/buckets/get.js +1 -7
- package/dist/lib/buckets/list.js +1 -7
- package/dist/lib/buckets/set.js +1 -2
- package/dist/lib/configure/index.js +1 -2
- package/dist/lib/cp.js +1 -1
- package/dist/lib/credentials/test.js +1 -2
- package/dist/lib/forks/create.js +1 -2
- package/dist/lib/forks/list.js +1 -7
- package/dist/lib/login/credentials.js +1 -2
- package/dist/lib/login/oauth.js +1 -5
- package/dist/lib/login/select.js +1 -5
- package/dist/lib/logout.js +1 -2
- package/dist/lib/ls.js +1 -6
- package/dist/lib/mk.js +1 -1
- package/dist/lib/mv.js +1 -1
- package/dist/lib/objects/delete.js +1 -2
- package/dist/lib/objects/get.js +1 -2
- package/dist/lib/objects/list.js +1 -7
- package/dist/lib/objects/put.js +1 -7
- package/dist/lib/organizations/create.js +2 -3
- package/dist/lib/organizations/list.js +2 -8
- package/dist/lib/organizations/select.js +4 -5
- package/dist/lib/rm.js +1 -1
- package/dist/lib/snapshots/list.js +1 -7
- package/dist/lib/snapshots/take.js +1 -2
- package/dist/lib/touch.js +1 -1
- package/dist/lib/whoami.js +2 -3
- package/dist/specs.yaml +49 -28
- package/dist/utils/format.js +1 -6
- package/dist/utils/messages.js +1 -2
- package/dist/utils/options.js +1 -1
- package/dist/utils/path.js +1 -1
- package/dist/utils/specs.js +1 -1
- package/dist/utils/update-check.js +1 -0
- package/package.json +3 -2
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
`),e&&(t=t.replace(/\{\{(\w+)\}\}/g,(i,s)=>{let o=e[s];return o!==void 0?String(o):`{{${s}}}`})),t}function ie(n,e){if(!te())return;let t=L(n);t?.onStart&&console.log(z(t.onStart,e))}function se(n,e){if(!te())return;let t=L(n);t?.onSuccess&&console.log(`${ne.success} ${z(t.onSuccess,e)}`)}function G(n,e,t){let i=L(n);i?.onFailure&&console.error(`${ne.failure} ${z(i.onFailure,t)}`),e&&console.error(` ${e}`)}function oe(n,e){return{command:n,operation:e}}var{prompt:ve}=we,v=oe("buckets","create");async function xe(n){ie(v);let e=!f(n,["name"]),t=f(n,["name"]),i=e?void 0:f(n,["access","a","A"]),s=e?void 0:f(n,["enable-snapshots","s","S"]),o=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=h("buckets","access","create"),l=y(a),d=l?.findIndex(m=>m.value===a?.default);u.push({type:"select",name:"access",message:"Access level:",choices:l||[],initial:d!==void 0&&d>=0?d:0})}if(!o||e){let a=h("buckets","default-tier","create"),l=y(a),d=l?.findIndex(m=>m.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=h("buckets","consistency","create"),l=y(a),d=l?.findIndex(m=>m.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=h("buckets","region","create"),l=y(a),d=l?.findIndex(m=>m.value===a?.default);u.push({type:"select",name:"region",message:"Region:",choices:l||[],initial:d!==void 0&&d>=0?d:0})}if((s===void 0||e)&&u.push({type:"confirm",name:"enableSnapshots",message:"Enable snapshots?",initial:!0}),u.length>0){let a=await ve(u);t=t||a.name,i=i||a.access,s=s!==void 0?s:a.enableSnapshots,o=o||a.defaultTier,c=c||a.consistency,r=r!==void 0?r:a.region}t||(G(v,"Bucket name is required"),process.exit(1));let{error:F}=await Ee(t,{defaultTier:o??"STANDARD",consistency:c==="strict"?"strict":"default",enableSnapshot:s===!0,region:r!=="global"&&r!==void 0?r.split(","):void 0,config:await ee()});F&&(G(v,F.message),process.exit(1)),se(v,{name:t})}export{xe as default};
|
|
1
|
+
import{a as x,b as k,c as b,g as A}from"../../chunk-A3TXP5Y2.js";import{c as d,d as f}from"../../chunk-4LGKN5DA.js";import{a as c}from"../../chunk-JRALYIRA.js";import{b as S}from"../../chunk-ESJWTUFN.js";import"../../chunk-QZXBLNMQ.js";import"../../chunk-6U4U4JM6.js";import"../../chunk-JVB3Y42V.js";import"../../chunk-D63SZLT5.js";import I from"enquirer";import{createBucket as v}from"@tigrisdata/storage";var{prompt:T}=I,p=A("buckets","create");async function C(a){x(p);let t=!c(a,["name"]),u=c(a,["name"]),h=t?void 0:c(a,["access","a","A"]),l=t?void 0:c(a,["enable-snapshots","s","S"]),g=t?void 0:c(a,["default-tier","t","T"]),m=t?void 0:c(a,["consistency","c","C"]),r=t?void 0:c(a,["region","r","R"]),i=[];if((!u||t)&&i.push({type:"input",name:"name",message:"Bucket name:",required:!0}),!h||t){let e=d("buckets","access","create"),s=f(e),n=s?.findIndex(o=>o.value===e?.default);i.push({type:"select",name:"access",message:"Access level:",choices:s||[],initial:n!==void 0&&n>=0?n:0})}if(!g||t){let e=d("buckets","default-tier","create"),s=f(e),n=s?.findIndex(o=>o.value===e?.default);i.push({type:"select",name:"defaultTier",message:"Default storage tier:",choices:s||[],initial:n!==void 0&&n>=0?n:0})}if(!m||t){let e=d("buckets","consistency","create"),s=f(e),n=s?.findIndex(o=>o.value===e?.default);i.push({type:"select",name:"consistency",message:"Consistency level:",choices:s||[],initial:n!==void 0&&n>=0?n:0})}if(!r||t){let e=d("buckets","region","create"),s=f(e),n=s?.findIndex(o=>o.value===e?.default);i.push({type:"select",name:"region",message:"Region:",choices:s||[],initial:n!==void 0&&n>=0?n:0})}if((l===void 0||t)&&i.push({type:"confirm",name:"enableSnapshots",message:"Enable snapshots?",initial:!0}),i.length>0){let e=await T(i);u=u||e.name,h=h||e.access,l=l!==void 0?l:e.enableSnapshots,g=g||e.defaultTier,m=m||e.consistency,r=r!==void 0?r:e.region}u||(b(p,"Bucket name is required"),process.exit(1));let{error:y}=await v(u,{defaultTier:g??"STANDARD",consistency:m==="strict"?"strict":"default",enableSnapshot:l===!0,region:r!=="global"&&r!==void 0?r.split(","):void 0,config:await S()});y&&(b(p,y.message),process.exit(1)),k(p,{name:u})}export{C as default};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
`),e&&(t=t.replace(/\{\{(\w+)\}\}/g,(o,i)=>{let r=e[i];return r!==void 0?String(r):`{{${i}}}`})),t}function H(n,e){if(!B())return;let t=x(n);t?.onStart&&console.log(O(t.onStart,e))}function J(n,e){if(!B())return;let t=x(n);t?.onSuccess&&console.log(`${q.success} ${O(t.onSuccess,e)}`)}function P(n,e,t){let o=x(n);o?.onFailure&&console.error(`${q.failure} ${O(o.onFailure,t)}`),e&&console.error(` ${e}`)}function Q(n,e){return{command:n,operation:e}}var h=Q("buckets","delete");async function ye(n){H(h);let e=N(n,["name"]);e||(P(h,"Bucket name is required"),process.exit(1));let t=Array.isArray(e)?e:[e],o=await j();for(let i of t){let{error:r}=await Ce(i,{config:o});r&&(P(h,r.message,{name:i}),process.exit(1)),J(h,{name:i})}}export{ye as default};
|
|
1
|
+
import{a as c,b as a,c as o,g as m}from"../../chunk-A3TXP5Y2.js";import"../../chunk-4LGKN5DA.js";import{a as i}from"../../chunk-JRALYIRA.js";import{b as s}from"../../chunk-ESJWTUFN.js";import"../../chunk-QZXBLNMQ.js";import"../../chunk-6U4U4JM6.js";import"../../chunk-JVB3Y42V.js";import"../../chunk-D63SZLT5.js";import{removeBucket as g}from"@tigrisdata/storage";var e=m("buckets","delete");async function k(f){c(e);let t=i(f,["name"]);t||(o(e,"Bucket name is required"),process.exit(1));let p=Array.isArray(t)?t:[t],u=await s();for(let r of p){let{error:n}=await g(r,{config:u});n&&(o(e,n.message,{name:r}),process.exit(1)),a(e,{name:r})}}export{k as default};
|
package/dist/lib/buckets/get.js
CHANGED
|
@@ -1,7 +1 @@
|
|
|
1
|
-
|
|
2
|
-
`)}function ce(n,e,t){let o=[`<${e}>`];return n.forEach(r=>{o.push(` <${t}>`),o.push(ae(r," ")),o.push(` </${t}>`)}),o.push(`</${e}>`),o.join(`
|
|
3
|
-
`)}function z(n){if(n==null)return"";if(n instanceof Date)return L(n);if(typeof n=="string"){let e=new Date(n);if(!isNaN(e.getTime())&&n.includes("T"))return L(e)}return String(n)}function L(n){return new Intl.DateTimeFormat(void 0,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}).format(n)}function de(n,e){return e.map(t=>{if(t.width)return t.width;let o=t.header.length,r=n.reduce((i,s)=>{let a=z(s[t.key]);return Math.max(i,a.length)},0);return Math.max(o,r)})}function ue(n,e){let t=[],o=de(n,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";t.push(`
|
|
4
|
-
`+r);let a="\u2502 "+e.map((c,S)=>c.header.padEnd(o[S])).join(" \u2502 ")+" \u2502";return t.push(a),t.push(i),n.forEach(c=>{let S=e.map((M,R)=>{let b=z(c[M.key]);return M.align==="right"?b.padStart(o[R]):b.padEnd(o[R])});t.push("\u2502 "+S.join(" \u2502 ")+" \u2502")}),t.push(s+`
|
|
5
|
-
`),t.join(`
|
|
6
|
-
`)}function F(n,e,t,o,r){switch(e){case"json":return se(n);case"xml":return ce(n,t,o);default:return ue(n,r)}}import{S3Client as Je}from"@aws-sdk/client-s3";import{fromIni as Te}from"@aws-sdk/credential-providers";import{homedir as G}from"os";import{join as p}from"path";import{readFileSync as pe,writeFileSync as le,existsSync as g,mkdirSync as ge}from"fs";import{loadSharedConfigFiles as fe}from"@smithy/shared-ini-file-loader";import{chmod as me}from"fs/promises";var u="https://t3.storage.dev",w="https://iam.storageapi.dev";var A=p(G(),".tigris"),f=p(A,"config.json");function he(){g(A)||ge(A,{recursive:!0,mode:448})}function d(){if(g(f))try{let n=pe(f,"utf8");return JSON.parse(n)}catch{return{}}return{}}async function m(n){he(),le(f,JSON.stringify(n,null,2),{mode:384});try{await me(f,384)}catch{}}async function _(n){let e=d();e.tokens=n,await m(e)}async function l(){return d().tokens||null}async function I(){let n=d();delete n.tokens,await m(n)}async function j(n){let e=d();e.organizations=n,await m(e)}function $(){return d().organizations||[]}function k(){return d().selectedOrganization||null}function U(){if(process.env.TIGRIS_STORAGE_ACCESS_KEY_ID||process.env.TIGRIS_STORAGE_SECRET_ACCESS_KEY){let o=process.env.TIGRIS_STORAGE_ACCESS_KEY_ID,r=process.env.TIGRIS_STORAGE_SECRET_ACCESS_KEY;if(!o||!r)return null;let i=process.env.TIGRIS_STORAGE_ENDPOINT||u;return{accessKeyId:o,secretAccessKey:r,endpoint:i}}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||u;return{accessKeyId:n,secretAccessKey:e,endpoint:t}}function B(){if(!process.env.AWS_PROFILE)return!1;let n=p(G(),".aws");return g(p(n,"credentials"))||g(p(n,"config"))}async function W(n){try{let{configFile:e}=await fe(),t=e[n];return t?{endpoint:t.endpoint_url_s3||t.endpoint_url,iamEndpoint:t.endpoint_url_iam,region:t.region}:{}}catch{return{}}}function x(){let n=d();return n.temporaryCredentials||n.credentials||null}async function V(n){let e=d();e.loginMethod=n,await m(e)}function Y(){return d().loginMethod||null}import y from"axios";import ye from"open";function h(){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 H=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function J(){return process.env.TIGRIS_STORAGE_ENDPOINT||process.env.TIGRIS_IAM_ENDPOINT?{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||u,iamEndpoint:process.env.TIGRIS_IAM_ENDPOINT||w}:{endpoint:process.env.AWS_ENDPOINT_URL_S3||u,iamEndpoint:process.env.AWS_ENDPOINT_URL_IAM||w}}var v=class{config;baseUrl;constructor(){this.config=h(),this.baseUrl=`https://${this.config.domain}`}async login(e){let o=(await y.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 ye(o.verification_uri_complete)}catch{}e?.onWaiting?.();let r=await this.pollForToken(o.device_code,o.interval||5);await _(r),V("oauth"),await this.extractAndStoreOrganizations(r.idToken)}async pollForToken(e,t){let r=0;for(;r<60;){r++;try{let s=(await y.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(y.isAxiosError(i)&&i.response){let s=i.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(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 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 y.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,i={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 _(i),i}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],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"),i=JSON.parse(o)[H];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 I()}async isAuthenticated(){return await l()!==null}sleep(e){return new Promise(t=>setTimeout(t,e))}},E=null;function q(){return E||(E=new v),E}var T=J(),Ce=h();async function Se(){return Y()}async function X(){if(B()){let o=process.env.AWS_PROFILE||"default",r=await W(o),i=await Te({profile:o})();return{accessKeyId:i.accessKeyId,secretAccessKey:i.secretAccessKey,endpoint:r.endpoint||T.endpoint||u,iamEndpoint:r.iamEndpoint||T.iamEndpoint}}let n=await Se();if(n==="oauth"){let r=await q().getAccessToken();if(!k())throw new Error('No organization selected. Please run "tigris orgs select" first.');return{sessionToken:r,accessKeyId:"",secretAccessKey:"",endpoint:T.endpoint,organizationId:k()??void 0,iamEndpoint:T.iamEndpoint,authDomain:Ce.domain}}if(n==="credentials"){let o=x();if(o)return{accessKeyId:o.accessKeyId,secretAccessKey:o.secretAccessKey,endpoint:o.endpoint}}let e=U();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint};let t=x();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{getBucketInfo as Oe}from"@tigrisdata/storage";import{readFileSync as we,existsSync as Ae}from"fs";import{join as Q,dirname as _e}from"path";import{fileURLToPath as Ie}from"url";import*as Z from"yaml";var ke=Ie(import.meta.url),xe=_e(ke),O=null;function Ee(){let n=xe;for(let e=0;e<5;e++){let t=Q(n,"specs.yaml");if(Ae(t))return t;n=Q(n,"..")}throw new Error("Could not find specs.yaml")}function ve(){if(!O){let n=Ee(),e=we(n,"utf8");O=Z.parse(e)}return O}function ee(n,e){let o=ve().commands.find(r=>r.name===n);return o?e&&o.operations?o.operations.find(r=>r.name===e)||null:o:null}var ne={success:"\u2714",failure:"\u2716",hint:"\u2192"};function te(){return process.stdout.isTTY===!0}function P(n){let e=ee(n.command,n.operation);if(e)return e.messages}function N(n,e){let t=n;return t=t.replace(/\\n/g,`
|
|
7
|
-
`),e&&(t=t.replace(/\{\{(\w+)\}\}/g,(o,r)=>{let i=e[r];return i!==void 0?String(i):`{{${r}}}`})),t}function oe(n,e){if(!te())return;let t=P(n);t?.onStart&&console.log(N(t.onStart,e))}function re(n,e){if(!te())return;let t=P(n);t?.onSuccess&&console.log(`${ne.success} ${N(t.onSuccess,e)}`)}function D(n,e,t){let o=P(n);o?.onFailure&&console.error(`${ne.failure} ${N(o.onFailure,t)}`),e&&console.error(` ${e}`)}function ie(n,e){return{command:n,operation:e}}var C=ie("buckets","get");async function Pe(n){oe(C);let e=K(n,["name"]);e||(D(C,"Bucket name is required"),process.exit(1));let{data:t,error:o}=await Oe(e,{config:await X()});o&&(D(C,o.message),process.exit(1));let r=[{property:"Name",value:e},{property:"Snapshots Enabled",value:t.isSnapshotEnabled?"Yes":"No"},{property:"Has Forks",value:t.hasForks?"Yes":"No"},...t.sourceBucketName?[{property:"Source Bucket",value:t.sourceBucketName}]:[],...t.sourceBucketSnapshot?[{property:"Source Snapshot",value:t.sourceBucketSnapshot}]:[]],i=F(r,"table","bucket","property",[{key:"property",header:"Property"},{key:"value",header:"Value"}]);console.log(i),re(C)}export{Pe as default};
|
|
1
|
+
import{a as u,b as c,c as r,g as i}from"../../chunk-A3TXP5Y2.js";import"../../chunk-4LGKN5DA.js";import{f as n}from"../../chunk-HGIJOGCZ.js";import{a as s}from"../../chunk-JRALYIRA.js";import{b as p}from"../../chunk-ESJWTUFN.js";import"../../chunk-QZXBLNMQ.js";import"../../chunk-6U4U4JM6.js";import"../../chunk-JVB3Y42V.js";import"../../chunk-D63SZLT5.js";import{getBucketInfo as l}from"@tigrisdata/storage";var t=i("buckets","get");async function g(m){u(t);let o=s(m,["name"]);o||(r(t,"Bucket name is required"),process.exit(1));let{data:e,error:a}=await l(o,{config:await p()});a&&(r(t,a.message),process.exit(1));let f=[{property:"Name",value:o},{property:"Snapshots Enabled",value:e.isSnapshotEnabled?"Yes":"No"},{property:"Has Forks",value:e.hasForks?"Yes":"No"},...e.sourceBucketName?[{property:"Source Bucket",value:e.sourceBucketName}]:[],...e.sourceBucketSnapshot?[{property:"Source Snapshot",value:e.sourceBucketSnapshot}]:[]],k=n(f,"table","bucket","property",[{key:"property",header:"Property"},{key:"value",header:"Value"}]);console.log(k),c(t)}export{g as default};
|
package/dist/lib/buckets/list.js
CHANGED
|
@@ -1,7 +1 @@
|
|
|
1
|
-
|
|
2
|
-
`)}function de(n,e,t){let o=[`<${e}>`];return n.forEach(r=>{o.push(` <${t}>`),o.push(ce(r," ")),o.push(` </${t}>`)}),o.push(`</${e}>`),o.join(`
|
|
3
|
-
`)}function F(n){if(n==null)return"";if(n instanceof Date)return z(n);if(typeof n=="string"){let e=new Date(n);if(!isNaN(e.getTime())&&n.includes("T"))return z(e)}return String(n)}function z(n){return new Intl.DateTimeFormat(void 0,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}).format(n)}function ue(n,e){return e.map(t=>{if(t.width)return t.width;let o=t.header.length,r=n.reduce((i,s)=>{let a=F(s[t.key]);return Math.max(i,a.length)},0);return Math.max(o,r)})}function pe(n,e){let t=[],o=ue(n,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";t.push(`
|
|
4
|
-
`+r);let a="\u2502 "+e.map((c,_)=>c.header.padEnd(o[_])).join(" \u2502 ")+" \u2502";return t.push(a),t.push(i),n.forEach(c=>{let _=e.map((R,b)=>{let K=F(c[R.key]);return R.align==="right"?K.padStart(o[b]):K.padEnd(o[b])});t.push("\u2502 "+_.join(" \u2502 ")+" \u2502")}),t.push(s+`
|
|
5
|
-
`),t.join(`
|
|
6
|
-
`)}function G(n,e,t,o,r){switch(e){case"json":return ae(n);case"xml":return de(n,t,o);default:return pe(n,r)}}import{S3Client as qe}from"@aws-sdk/client-s3";import{fromIni as ye}from"@aws-sdk/credential-providers";import{homedir as j}from"os";import{join as g}from"path";import{readFileSync as ge,writeFileSync as le,existsSync as f,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 k=g(j(),".tigris"),m=g(k,"config.json");function Te(){f(k)||fe(k,{recursive:!0,mode:448})}function d(){if(f(m))try{let n=ge(m,"utf8");return JSON.parse(n)}catch{return{}}return{}}async function h(n){Te(),le(m,JSON.stringify(n,null,2),{mode:384});try{await he(m,384)}catch{}}async function x(n){let e=d();e.tokens=n,await h(e)}async function l(){return d().tokens||null}async function E(){let n=d();delete n.tokens,await h(n)}async function $(n){let e=d();e.organizations=n,await h(e)}function U(){return d().organizations||[]}function v(){return d().selectedOrganization||null}function W(){if(process.env.TIGRIS_STORAGE_ACCESS_KEY_ID||process.env.TIGRIS_STORAGE_SECRET_ACCESS_KEY){let o=process.env.TIGRIS_STORAGE_ACCESS_KEY_ID,r=process.env.TIGRIS_STORAGE_SECRET_ACCESS_KEY;if(!o||!r)return null;let i=process.env.TIGRIS_STORAGE_ENDPOINT||u;return{accessKeyId:o,secretAccessKey:r,endpoint:i}}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||u;return{accessKeyId:n,secretAccessKey:e,endpoint:t}}function V(){if(!process.env.AWS_PROFILE)return!1;let n=g(j(),".aws");return f(g(n,"credentials"))||f(g(n,"config"))}async function Y(n){try{let{configFile:e}=await me(),t=e[n];return t?{endpoint:t.endpoint_url_s3||t.endpoint_url,iamEndpoint:t.endpoint_url_iam,region:t.region}:{}}catch{return{}}}function O(){let n=d();return n.temporaryCredentials||n.credentials||null}async function B(n){let e=d();e.loginMethod=n,await h(e)}function J(){return d().loginMethod||null}import C from"axios";import Ce from"open";function T(){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 H=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function q(){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 N=class{config;baseUrl;constructor(){this.config=T(),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 Ce(o.verification_uri_complete)}catch{}e?.onWaiting?.();let r=await this.pollForToken(o.device_code,o.interval||5);await x(r),B("oauth"),await this.extractAndStoreOrganizations(r.idToken)}async pollForToken(e,t){let r=0;for(;r<60;){r++;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(i){if(C.isAxiosError(i)&&i.response){let s=i.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(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 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 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,i={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 x(i),i}catch{throw await E(),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],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"),i=JSON.parse(o)[H];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;$(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),U()}async logout(){await E()}async isAuthenticated(){return await l()!==null}sleep(e){return new Promise(t=>setTimeout(t,e))}},P=null;function X(){return P||(P=new N),P}var y=q(),Se=T();async function we(){return J()}async function Q(){if(V()){let o=process.env.AWS_PROFILE||"default",r=await Y(o),i=await ye({profile:o})();return{accessKeyId:i.accessKeyId,secretAccessKey:i.secretAccessKey,endpoint:r.endpoint||y.endpoint||u,iamEndpoint:r.iamEndpoint||y.iamEndpoint}}let n=await we();if(n==="oauth"){let r=await X().getAccessToken();if(!v())throw new Error('No organization selected. Please run "tigris orgs select" first.');return{sessionToken:r,accessKeyId:"",secretAccessKey:"",endpoint:y.endpoint,organizationId:v()??void 0,iamEndpoint:y.iamEndpoint,authDomain:Se.domain}}if(n==="credentials"){let o=O();if(o)return{accessKeyId:o.accessKeyId,secretAccessKey:o.secretAccessKey,endpoint:o.endpoint}}let e=W();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.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{listBuckets 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 ke}from"url";import*as ee from"yaml";var xe=ke(import.meta.url),Ee=Ie(xe),D=null;function ve(){let n=Ee;for(let e=0;e<5;e++){let t=Z(n,"specs.yaml");if(_e(t))return t;n=Z(n,"..")}throw new Error("Could not find specs.yaml")}function Oe(){if(!D){let n=ve(),e=Ae(n,"utf8");D=ee.parse(e)}return D}function ne(n,e){let o=Oe().commands.find(r=>r.name===n);return o?e&&o.operations?o.operations.find(r=>r.name===e)||null:o:null}var te={success:"\u2714",failure:"\u2716",hint:"\u2192"};function M(){return process.stdout.isTTY===!0}function S(n){let e=ne(n.command,n.operation);if(e)return e.messages}function w(n,e){let t=n;return t=t.replace(/\\n/g,`
|
|
7
|
-
`),e&&(t=t.replace(/\{\{(\w+)\}\}/g,(o,r)=>{let i=e[r];return i!==void 0?String(i):`{{${r}}}`})),t}function oe(n,e){if(!M())return;let t=S(n);t?.onStart&&console.log(w(t.onStart,e))}function re(n,e){if(!M())return;let t=S(n);t?.onSuccess&&console.log(`${te.success} ${w(t.onSuccess,e)}`)}function A(n,e,t){let o=S(n);o?.onFailure&&console.error(`${te.failure} ${w(o.onFailure,t)}`),e&&console.error(` ${e}`)}function ie(n,e){if(!M())return;let t=S(n);t?.onEmpty&&console.log(w(t.onEmpty,e))}function se(n,e){return{command:n,operation:e}}var p=se("buckets","list");async function Ne(n){oe(p);try{let e=L(n,["format","F"],"table"),{data:t,error:o}=await Pe({config:await Q()});if(o&&(A(p,o.message),process.exit(1)),!t.buckets||t.buckets.length===0){ie(p);return}let r=t.buckets.map(s=>({name:s.name,created:s.creationDate})),i=G(r,e,"buckets","bucket",[{key:"name",header:"Name"},{key:"created",header:"Created"}]);console.log(i),re(p,{count:r.length})}catch(e){e instanceof Error?A(p,e.message):A(p,"An unknown error occurred"),process.exit(1)}}export{Ne as default};
|
|
1
|
+
import{a as u,b as p,c as r,d as f,g}from"../../chunk-A3TXP5Y2.js";import"../../chunk-4LGKN5DA.js";import{f as m}from"../../chunk-HGIJOGCZ.js";import{a as c}from"../../chunk-JRALYIRA.js";import{b as i}from"../../chunk-ESJWTUFN.js";import"../../chunk-QZXBLNMQ.js";import"../../chunk-6U4U4JM6.js";import"../../chunk-JVB3Y42V.js";import"../../chunk-D63SZLT5.js";import{listBuckets as d}from"@tigrisdata/storage";var t=g("buckets","list");async function b(k){u(t);try{let e=c(k,["format","F"],"table"),{data:o,error:n}=await d({config:await i()});if(n&&(r(t,n.message),process.exit(1)),!o.buckets||o.buckets.length===0){f(t);return}let s=o.buckets.map(a=>({name:a.name,created:a.creationDate})),l=m(s,e,"buckets","bucket",[{key:"name",header:"Name"},{key:"created",header:"Created"}]);console.log(l),p(t,{count:s.length})}catch(e){e instanceof Error?r(t,e.message):r(t,"An unknown error occurred"),process.exit(1)}}export{b as default};
|
package/dist/lib/buckets/set.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
`),n&&(t=t.replace(/\{\{(\w+)\}\}/g,(i,o)=>{let s=n[o];return s!==void 0?String(s):`{{${o}}}`})),t}function ne(e,n){if(!ee())return;let t=b(e);t?.onStart&&console.log(M(t.onStart,n))}function te(e,n){if(!ee())return;let t=b(e);t?.onSuccess&&console.log(`${Z.success} ${M(t.onSuccess,n)}`)}function w(e,n,t){let i=b(e);i?.onFailure&&console.error(`${Z.failure} ${M(i.onFailure,t)}`),n&&console.error(` ${n}`)}function ie(e,n){return{command:e,operation:n}}var m=ie("buckets","set");async function Ie(e){ne(m);let n=c(e,["name"]),t=c(e,["access"]),i=c(e,["region"]),o=c(e,["allow-object-acl","allowObjectAcl"]),s=c(e,["disable-directory-listing","disableDirectoryListing"]),r=c(e,["cache-control","cacheControl"]),a=c(e,["custom-domain","customDomain"]),I=c(e,["enable-delete-protection","enableDeleteProtection"]);n||(w(m,"Bucket name is required"),process.exit(1)),t===void 0&&i===void 0&&o===void 0&&s===void 0&&r===void 0&&a===void 0&&I===void 0&&(w(m,"At least one setting is required"),process.exit(1));let K=await H(),l={};t!==void 0&&(l.access=t),i!==void 0&&(l.regions=Array.isArray(i)?i:[i]),o!==void 0&&(l.allowObjectAcl=C(o)),s!==void 0&&(l.disableDirectoryListing=C(s)),r!==void 0&&(l.cacheControl=r),a!==void 0&&(l.customDomain=a),I!==void 0&&(l.enableDeleteProtection=C(I));let R=u(),oe={...K,...R&&!K.organizationId?{organizationId:R}:{}},{error:L}=await we(n,{...l,config:oe});L&&(w(m,L.message),process.exit(1)),te(m,{name:n})}export{Ie as default};
|
|
1
|
+
import{a as y,b as w,c as r,g as k}from"../../chunk-A3TXP5Y2.js";import"../../chunk-4LGKN5DA.js";import{a as e,b as c}from"../../chunk-JRALYIRA.js";import{b as O}from"../../chunk-ESJWTUFN.js";import"../../chunk-QZXBLNMQ.js";import"../../chunk-6U4U4JM6.js";import{g as D}from"../../chunk-JVB3Y42V.js";import"../../chunk-D63SZLT5.js";import{updateBucket as x}from"@tigrisdata/storage";var o=k("buckets","set");async function B(n){y(o);let s=e(n,["name"]),a=e(n,["access"]),i=e(n,["region"]),d=e(n,["allow-object-acl","allowObjectAcl"]),l=e(n,["disable-directory-listing","disableDirectoryListing"]),f=e(n,["cache-control","cacheControl"]),u=e(n,["custom-domain","customDomain"]),g=e(n,["enable-delete-protection","enableDeleteProtection"]);s||(r(o,"Bucket name is required"),process.exit(1)),a===void 0&&i===void 0&&d===void 0&&l===void 0&&f===void 0&&u===void 0&&g===void 0&&(r(o,"At least one setting is required"),process.exit(1));let m=await O(),t={};a!==void 0&&(t.access=a),i!==void 0&&(t.regions=Array.isArray(i)?i:[i]),d!==void 0&&(t.allowObjectAcl=c(d)),l!==void 0&&(t.disableDirectoryListing=c(l)),f!==void 0&&(t.cacheControl=f),u!==void 0&&(t.customDomain=u),g!==void 0&&(t.enableDeleteProtection=c(g));let p=D(),A={...m,...p&&!m.organizationId?{organizationId:p}:{}},{error:b}=await x(s,{...t,config:A});b&&(r(o,b.message),process.exit(1)),w(o,{name:s})}export{B as default};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
`),n&&(t=t.replace(/\{\{(\w+)\}\}/g,(r,s)=>{let o=n[s];return o!==void 0?String(o):`{{${s}}}`})),t}function O(e,n){if(!v())return;let t=f(e);t?.onStart&&console.log(u(t.onStart,n))}function I(e,n){if(!v())return;let t=f(e);t?.onSuccess&&console.log(`${T.success} ${u(t.onSuccess,n)}`)}function p(e,n,t){let r=f(e);r?.onFailure&&console.error(`${T.failure} ${u(r.onFailure,t)}`),n&&console.error(` ${n}`)}function h(e,n){return{command:e,operation:n}}var{prompt:V}=$,c=h("configure");async function j(e){O(c);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,r=e.endpoint||e.e||e.E||e.Endpoint;if(!n||!t||!r){let s=[];n||s.push({type:"input",name:"accessKey",message:"Tigris Access Key ID:",required:!0}),t||s.push({type:"password",name:"accessSecret",message:"Tigris Secret Access Key:",required:!0}),r||s.push({type:"input",name:"endpoint",message:"Tigris Endpoint:",required:!0,initial:a});let o=await V(s);n=n||o.accessKey,t=t||o.accessSecret,r=r||o.endpoint}(!n||!t||!r)&&(p(c,"All credentials are required"),process.exit(1));try{await y({accessKeyId:n,secretAccessKey:t,endpoint:r}),await A("credentials"),I(c)}catch{p(c,"Failed to save credentials"),process.exit(1)}}export{j as default};
|
|
1
|
+
import{a as g,b as p,c as n,g as m}from"../../chunk-A3TXP5Y2.js";import"../../chunk-4LGKN5DA.js";import{n as u,r as y}from"../../chunk-JVB3Y42V.js";import{a as d}from"../../chunk-D63SZLT5.js";import f from"enquirer";var{prompt:l}=f,i=m("configure");async function o(e){g(i);let s=e["access-key"]||e.accessKey||e.key||e.Key||e.accesskey,r=e["access-secret"]||e.accessSecret||e.secret||e.Secret||e.accesssecret,c=e.endpoint||e.e||e.E||e.Endpoint;if(!s||!r||!c){let t=[];s||t.push({type:"input",name:"accessKey",message:"Tigris Access Key ID:",required:!0}),r||t.push({type:"password",name:"accessSecret",message:"Tigris Secret Access Key:",required:!0}),c||t.push({type:"input",name:"endpoint",message:"Tigris Endpoint:",required:!0,initial:d});let a=await l(t);s=s||a.accessKey,r=r||a.accessSecret,c=c||a.endpoint}(!s||!r||!c)&&(n(i,"All credentials are required"),process.exit(1));try{await u({accessKeyId:s,secretAccessKey:r,endpoint:c}),await y("credentials"),p(i)}catch{n(i,"Failed to save credentials"),process.exit(1)}}export{o as default};
|
package/dist/lib/cp.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{a as $}from"../chunk-HGIJOGCZ.js";import{a as v}from"../chunk-JRALYIRA.js";import{b as M}from"../chunk-ESJWTUFN.js";import"../chunk-QZXBLNMQ.js";import"../chunk-6U4U4JM6.js";import{a as D,b as W,d as S,g as R,h as C,i as T}from"../chunk-LCWHZUZZ.js";import"../chunk-JVB3Y42V.js";import"../chunk-D63SZLT5.js";import{createReadStream as Q,createWriteStream as V,statSync as z,readdirSync as N,mkdirSync as X,existsSync as O}from"fs";import{resolve as B,dirname as E,basename as j,join as x,relative as L}from"path";import{homedir as Y}from"os";import{Readable as q}from"stream";import{pipeline as Z}from"stream/promises";import{get as G,put as A,list as _,head as H}from"@tigrisdata/storage";function P(r,e){let t=D(r),a=D(e);return!t&&!a&&(console.error("At least one path must be a remote Tigris path (t3:// or tigris://)"),process.exit(1)),t&&a?"remote-to-remote":t?"remote-to-local":"local-to-remote"}function J(r){return r==="~"||r.startsWith("~/")?B(Y(),r.slice(2)):B(r)}function ee(r){return N(r,{recursive:!0,withFileTypes:!0}).filter(t=>t.isFile()).map(t=>{let a=t.parentPath??t.path;return x(a,t.name)})}function te(r,e){let t=E(r),a=j(r),p=R(a);return O(t)?e?N(t,{recursive:!0,withFileTypes:!0}).filter(o=>o.isFile()&&p.test(o.name)).map(o=>{let n=o.parentPath??o.path;return x(n,o.name)}):N(t,{withFileTypes:!0}).filter(n=>n.isFile()&&p.test(n.name)).map(n=>x(t,n.name)):[]}async function U(r,e,t,a,p=!1){let u;try{u=z(r).size}catch{return{error:`File not found: ${r}`}}let o=Q(r),n=q.toWeb(o),i=u!==void 0&&u>100*1024*1024,{error:l}=await A(t,n,{multipart:i,onUploadProgress:p?({loaded:c})=>{if(u!==void 0&&u>0){let s=Math.round(c/u*100);process.stdout.write(`\rUploading: ${$(c)} / ${$(u)} (${s}%)`)}else process.stdout.write(`\rUploading: ${$(c)}`)}:void 0,config:{...a,bucket:e}});return p&&process.stdout.write("\r"+" ".repeat(60)+"\r"),l?{error:l.message}:{}}async function K(r,e,t,a,p=!1){let u;if(p){let{data:s}=await H(e,{config:{...a,bucket:r}});u=s?.size}let{data:o,error:n}=await G(e,"stream",{config:{...a,bucket:r}});if(n)return{error:n.message};let i=E(t);O(i)||X(i,{recursive:!0});let l=V(t),c=q.fromWeb(o);if(p&&u!==void 0&&u>0){let s=0;c.on("data",h=>{s+=h.length;let m=Math.round(s/u*100);process.stdout.write(`\rDownloading: ${$(s)} / ${$(u)} (${m}%)`)})}return await Z(c,l),p&&process.stdout.write("\r"+" ".repeat(60)+"\r"),{}}async function I(r,e,t,a,p,u=!1){if(t.endsWith("/")){let{error:s}=await A(p,"",{config:{...r,bucket:a}});return s?{error:s.message}:{}}let o;if(u){let{data:s}=await H(t,{config:{...r,bucket:e}});o=s?.size}let{data:n,error:i}=await G(t,"stream",{config:{...r,bucket:e}});if(i)return{error:i.message};let l=o!==void 0&&o>100*1024*1024,{error:c}=await A(p,n,{multipart:l,onUploadProgress:u?({loaded:s})=>{if(o!==void 0&&o>0){let h=Math.round(s/o*100);process.stdout.write(`\rCopying: ${$(s)} / ${$(o)} (${h}%)`)}else process.stdout.write(`\rCopying: ${$(s)}`)}:void 0,config:{...r,bucket:a}});return u&&process.stdout.write("\r"+" ".repeat(60)+"\r"),c?{error:c.message}:{}}async function oe(r,e,t,a){let p=J(r);if(r.includes("*")){let n=te(p,a);if(n.length===0){console.log("No files matching pattern");return}let i=E(p),l=0;for(let c of n){let s=L(i,c),h=e.path?`${e.path.replace(/\/$/,"")}/${s}`:s,m=await U(c,e.bucket,h,t);m.error?console.error(`Failed to upload ${c}: ${m.error}`):(console.log(`Uploaded ${c} -> t3://${e.bucket}/${h}`),l++)}console.log(`Uploaded ${l} file(s)`);return}let o;try{o=z(p)}catch{console.error(`Source not found: ${r}`),process.exit(1)}if(o.isDirectory()){a||(console.error(`${r} is a directory (not copied). Use -r to copy recursively.`),process.exit(1));let n=ee(p);if(n.length===0){console.log("No files to upload");return}let i=r.endsWith("/")?"":j(p),l=0;for(let c of n){let s=L(p,c),m=[e.path?.replace(/\/$/,""),i,s].filter(Boolean).join("/"),b=await U(c,e.bucket,m,t);b.error?console.error(`Failed to upload ${c}: ${b.error}`):(console.log(`Uploaded ${c} -> t3://${e.bucket}/${m}`),l++)}console.log(`Uploaded ${l} file(s)`)}else{let n=j(p),i;e.path?r.endsWith("/")||e.path.endsWith("/")?i=`${e.path.replace(/\/$/,"")}/${n}`:await S(e.bucket,e.path,t)?i=`${e.path}/${n}`:i=e.path:i=n;let l=await U(p,e.bucket,i,t,!0);l.error&&(console.error(l.error),process.exit(1)),console.log(`Uploaded ${r} -> t3://${e.bucket}/${i}`)}}async function re(r,e,t,a,p){let u=r.endsWith("/");!e.path&&!u&&(console.error("Cannot copy a bucket. Provide a path within the bucket."),process.exit(1));let o=J(t),n=e.path.includes("*"),i=e.path.endsWith("/")||!e.path&&u;if(!n&&!i&&(i=await S(e.bucket,e.path,a)),i&&!n&&!p&&(console.error("Source is a remote folder (not copied). Use -r to copy recursively."),process.exit(1)),n||i){let l=n?C(e.path):e.path?e.path.endsWith("/")?e.path:`${e.path}/`:"",c=!n&&e.path&&!e.path.endsWith("/")?e.path.split("/").filter(Boolean).pop()??"":"",{items:s,error:h}=await T(e.bucket,l||void 0,a);h&&(console.error(h.message),process.exit(1));let m=s.filter(d=>!d.name.endsWith("/"));if(n){let d=e.path.split("/").pop(),g=R(d);m=m.filter(w=>{let f=l?w.name.slice(l.length):w.name;return!p&&f.includes("/")?!1:g.test(f.split("/").pop())})}if(m.length===0){console.log("No objects to download");return}let b=0;for(let d of m){let g=l?d.name.slice(l.length):d.name,w=c?x(o,c,g):x(o,g),f=await K(e.bucket,d.name,w,a);f.error?console.error(`Failed to download ${d.name}: ${f.error}`):(console.log(`Downloaded t3://${e.bucket}/${d.name} -> ${w}`),b++)}console.log(`Downloaded ${b} file(s)`)}else{let l=e.path.split("/").pop(),c,s=!1;try{s=z(o).isDirectory()}catch{}s||t.endsWith("/")?c=x(o,l):c=o;let h=await K(e.bucket,e.path,c,a,!0);h.error&&(console.error(h.error),process.exit(1)),console.log(`Downloaded t3://${e.bucket}/${e.path} -> ${c}`)}}async function ie(r,e,t,a,p){let u=r.endsWith("/");!e.path&&!u&&(console.error("Cannot copy a bucket. Provide a path within the bucket."),process.exit(1));let o=r.includes("*"),n=e.path.endsWith("/")||!e.path&&u;if(!o&&!n&&e.path&&(n=await S(e.bucket,e.path,a)),n&&!o&&!p&&(console.error("Source is a remote folder (not copied). Use -r to copy recursively."),process.exit(1)),o||n){let i=o?C(e.path):e.path?e.path.endsWith("/")?e.path:`${e.path}/`:"",l=!o&&e.path&&!e.path.endsWith("/")?e.path.split("/").filter(Boolean).pop()??"":"",s=[t.path?.replace(/\/$/,"")||"",l].filter(Boolean).join("/"),h=s?`${s}/`:"";e.bucket===t.bucket&&i===h&&(console.error("Source and destination are the same"),process.exit(1));let{items:m,error:b}=await T(e.bucket,i||void 0,a);b&&(console.error(b.message),process.exit(1));let d=m.filter(f=>f.name!==i);if(o){let f=e.path.split("/").pop(),y=R(f);d=d.filter(k=>{let F=i?k.name.slice(i.length):k.name;return!p&&F.includes("/")?!1:y.test(F.split("/").pop())})}let g=0;for(let f of d){let y=i?f.name.slice(i.length):f.name,k=s?`${s}/${y}`:y,F=await I(a,e.bucket,f.name,t.bucket,k);F.error?console.error(`Failed to copy ${f.name}: ${F.error}`):(console.log(`Copied t3://${e.bucket}/${f.name} -> t3://${t.bucket}/${k}`),g++)}let w=!1;if(s&&i){let{data:f}=await _({prefix:i,limit:1,config:{...a,bucket:e.bucket}});if(f?.items?.some(y=>y.name===i)){let y=`${s}/`,k=await I(a,e.bucket,i,t.bucket,y);k.error?console.error(`Failed to copy folder marker: ${k.error}`):w=!0}}if(g===0&&w&&(g=1),g===0){console.log("No objects to copy");return}console.log(`Copied ${g} object(s)`)}else{let i=e.path.split("/").pop(),l;t.path?t.path.endsWith("/")?l=`${t.path}${i}`:await S(t.bucket,t.path,a)?l=`${t.path}/${i}`:l=t.path:l=i,e.bucket===t.bucket&&e.path===l&&(console.error("Source and destination are the same"),process.exit(1));let c=await I(a,e.bucket,e.path,t.bucket,l,!0);c.error&&(console.error(c.error),process.exit(1)),console.log(`Copied t3://${e.bucket}/${e.path} -> t3://${t.bucket}/${l}`)}}async function ne(r){let e=v(r,["src"]),t=v(r,["dest"]);(!e||!t)&&(console.error("Both src and dest arguments are required"),process.exit(1));let a=!!v(r,["recursive","r"]),p=P(e,t),u=await M();switch(p){case"local-to-remote":{let o=W(t);o.bucket||(console.error("Invalid destination path"),process.exit(1)),await oe(e,o,u,a);break}case"remote-to-local":{let o=W(e);o.bucket||(console.error("Invalid source path"),process.exit(1)),await re(e,o,t,u,a);break}case"remote-to-remote":{let o=W(e),n=W(t);o.bucket||(console.error("Invalid source path"),process.exit(1)),n.bucket||(console.error("Invalid destination path"),process.exit(1)),await ie(e,o,n,u,a);break}}process.exit(0)}export{ne as default};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
`),e&&(t=t.replace(/\{\{(\w+)\}\}/g,(o,i)=>{let s=e[i];return s!==void 0?String(s):`{{${i}}}`})),t}function q(n,e){if(!H())return;let t=O(n);t?.onStart&&console.log(P(t.onStart,e))}function J(n,e){if(!H())return;let t=O(n);t?.onSuccess&&console.log(`${V.success} ${P(t.onSuccess,e)}`)}function S(n,e,t){let o=O(n);o?.onFailure&&console.error(`${V.failure} ${P(o.onFailure,t)}`),e&&console.error(` ${e}`)}function Q(n,e){return{command:n,operation:e}}var p=Q("credentials","test");async function ye(n){q(p);let e=N(n,["bucket","b"]),t=await j();!t.accessKeyId&&!t.sessionToken&&(S(p,'No credentials found. Run "tigris configure" or "tigris login" first.'),process.exit(1));let o=f(),i={...t,...o&&!t.organizationId?{organizationId:o}:{}};if(e){let{data:s,error:r}=await he(e,{config:i});r&&(S(p,`Current credentials don't have access to bucket "${e}"`),process.exit(1)),console.log(` Bucket: ${e}`),console.log(" Access verified."),s.sourceBucketName&&console.log(` Fork of: ${s.sourceBucketName}`)}else{let{data:s,error:r}=await Ce({config:i});r&&(S(p,"Current credentials don't have sufficient access"),process.exit(1)),console.log(` Access verified. Found ${s.buckets.length} bucket(s).`)}J(p)}export{ye as default};
|
|
1
|
+
import{a as u,b as l,c as n,g as d}from"../../chunk-A3TXP5Y2.js";import"../../chunk-4LGKN5DA.js";import{a}from"../../chunk-JRALYIRA.js";import{b as g}from"../../chunk-ESJWTUFN.js";import"../../chunk-QZXBLNMQ.js";import"../../chunk-6U4U4JM6.js";import{g as f}from"../../chunk-JVB3Y42V.js";import"../../chunk-D63SZLT5.js";import{listBuckets as m,getBucketInfo as p}from"@tigrisdata/storage";var e=d("credentials","test");async function b(k){u(e);let t=a(k,["bucket","b"]),o=await g();!o.accessKeyId&&!o.sessionToken&&(n(e,'No credentials found. Run "tigris configure" or "tigris login" first.'),process.exit(1));let c=f(),r={...o,...c&&!o.organizationId?{organizationId:c}:{}};if(t){let{data:i,error:s}=await p(t,{config:r});s&&(n(e,`Current credentials don't have access to bucket "${t}"`),process.exit(1)),console.log(` Bucket: ${t}`),console.log(" Access verified."),i.sourceBucketName&&console.log(` Fork of: ${i.sourceBucketName}`)}else{let{data:i,error:s}=await m({config:r});s&&(n(e,"Current credentials don't have sufficient access"),process.exit(1)),console.log(` Access verified. Found ${i.buckets.length} bucket(s).`)}l(e)}export{b as default};
|
package/dist/lib/forks/create.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
`),e&&(t=t.replace(/\{\{(\w+)\}\}/g,(o,i)=>{let r=e[i];return r!==void 0?String(r):`{{${i}}}`})),t}function H(n,e){if(!B())return;let t=P(n);t?.onStart&&console.log(N(t.onStart,e))}function J(n,e){if(!B())return;let t=P(n);t?.onSuccess&&console.log(`${q.success} ${N(t.onSuccess,e)}`)}function S(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 g=Q("forks","create");async function he(n){H(g);let e=f(n,["name"]),t=f(n,["fork-name","forkName"]),o=f(n,["snapshot","s","S"]);e||(S(g,"Source bucket name is required"),process.exit(1)),t||(S(g,"Fork name is required"),process.exit(1));let{error:i}=await Ce(t,{sourceBucketName:e,sourceBucketSnapshot:o,config:await j()});i&&(S(g,i.message),process.exit(1)),J(g,{name:e,forkName:t})}export{he as default};
|
|
1
|
+
import{a,b as m,c as t,g as f}from"../../chunk-A3TXP5Y2.js";import"../../chunk-4LGKN5DA.js";import{a as r}from"../../chunk-JRALYIRA.js";import{b as c}from"../../chunk-ESJWTUFN.js";import"../../chunk-QZXBLNMQ.js";import"../../chunk-6U4U4JM6.js";import"../../chunk-JVB3Y42V.js";import"../../chunk-D63SZLT5.js";import{createBucket as p}from"@tigrisdata/storage";var e=f("forks","create");async function g(o){a(e);let s=r(o,["name"]),n=r(o,["fork-name","forkName"]),u=r(o,["snapshot","s","S"]);s||(t(e,"Source bucket name is required"),process.exit(1)),n||(t(e,"Fork name is required"),process.exit(1));let{error:i}=await p(n,{sourceBucketName:s,sourceBucketSnapshot:u,config:await c()});i&&(t(e,i.message),process.exit(1)),m(e,{name:s,forkName:n})}export{g as default};
|
package/dist/lib/forks/list.js
CHANGED
|
@@ -1,7 +1 @@
|
|
|
1
|
-
|
|
2
|
-
`)}function ue(n,e,t){let o=[`<${e}>`];return n.forEach(r=>{o.push(` <${t}>`),o.push(de(r," ")),o.push(` </${t}>`)}),o.push(`</${e}>`),o.join(`
|
|
3
|
-
`)}function G(n){if(n==null)return"";if(n instanceof Date)return F(n);if(typeof n=="string"){let e=new Date(n);if(!isNaN(e.getTime())&&n.includes("T"))return F(e)}return String(n)}function F(n){return new Intl.DateTimeFormat(void 0,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}).format(n)}function fe(n,e){return e.map(t=>{if(t.width)return t.width;let o=t.header.length,r=n.reduce((i,a)=>{let s=G(a[t.key]);return Math.max(i,s.length)},0);return Math.max(o,r)})}function ge(n,e){let t=[],o=fe(n,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";t.push(`
|
|
4
|
-
`+r);let s="\u2502 "+e.map((c,p)=>c.header.padEnd(o[p])).join(" \u2502 ")+" \u2502";return t.push(s),t.push(i),n.forEach(c=>{let p=e.map((f,h)=>{let z=G(c[f.key]);return f.align==="right"?z.padStart(o[h]):z.padEnd(o[h])});t.push("\u2502 "+p.join(" \u2502 ")+" \u2502")}),t.push(a+`
|
|
5
|
-
`),t.join(`
|
|
6
|
-
`)}function j(n,e,t,o,r){switch(e){case"json":return ce(n);case"xml":return ue(n,t,o);default:return ge(n,r)}}import{S3Client as Xe}from"@aws-sdk/client-s3";import{fromIni as Se}from"@aws-sdk/credential-providers";import{homedir as $}from"os";import{join as l}from"path";import{readFileSync as pe,writeFileSync as le,existsSync as T,mkdirSync as me}from"fs";import{loadSharedConfigFiles as he}from"@smithy/shared-ini-file-loader";import{chmod as Te}from"fs/promises";var u="https://t3.storage.dev",E="https://iam.storageapi.dev";var v=l($(),".tigris"),C=l(v,"config.json");function Ce(){T(v)||me(v,{recursive:!0,mode:448})}function d(){if(T(C))try{let n=pe(C,"utf8");return JSON.parse(n)}catch{return{}}return{}}async function y(n){Ce(),le(C,JSON.stringify(n,null,2),{mode:384});try{await Te(C,384)}catch{}}async function O(n){let e=d();e.tokens=n,await y(e)}async function m(){return d().tokens||null}async function P(){let n=d();delete n.tokens,await y(n)}async function U(n){let e=d();e.organizations=n,await y(e)}function W(){return d().organizations||[]}function N(){return d().selectedOrganization||null}function V(){if(process.env.TIGRIS_STORAGE_ACCESS_KEY_ID||process.env.TIGRIS_STORAGE_SECRET_ACCESS_KEY){let o=process.env.TIGRIS_STORAGE_ACCESS_KEY_ID,r=process.env.TIGRIS_STORAGE_SECRET_ACCESS_KEY;if(!o||!r)return null;let i=process.env.TIGRIS_STORAGE_ENDPOINT||u;return{accessKeyId:o,secretAccessKey:r,endpoint:i}}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||u;return{accessKeyId:n,secretAccessKey:e,endpoint:t}}function B(){if(!process.env.AWS_PROFILE)return!1;let n=l($(),".aws");return T(l(n,"credentials"))||T(l(n,"config"))}async function Y(n){try{let{configFile:e}=await he(),t=e[n];return t?{endpoint:t.endpoint_url_s3||t.endpoint_url,iamEndpoint:t.endpoint_url_iam,region:t.region}:{}}catch{return{}}}function D(){let n=d();return n.temporaryCredentials||n.credentials||null}async function J(n){let e=d();e.loginMethod=n,await y(e)}function q(){return d().loginMethod||null}import w from"axios";import ye from"open";function S(){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 H=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function X(){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=S(),this.baseUrl=`https://${this.config.domain}`}async login(e){let o=(await w.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 ye(o.verification_uri_complete)}catch{}e?.onWaiting?.();let r=await this.pollForToken(o.device_code,o.interval||5);await O(r),J("oauth"),await this.extractAndStoreOrganizations(r.idToken)}async pollForToken(e,t){let r=0;for(;r<60;){r++;try{let a=(await w.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(w.isAxiosError(i)&&i.response){let a=i.response.data?.error;if(a==="authorization_pending"){await this.sleep(t*1e3);continue}if(a==="slow_down"){t+=5,await this.sleep(t*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 m();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 m(),!t)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let r=(await w.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,i={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(i),i}catch{throw await P(),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 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"),i=JSON.parse(o)[H];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;U(a)}catch{}}async getOrganizations(){return await this.getAccessToken(),W()}async logout(){await P()}async isAuthenticated(){return await m()!==null}sleep(e){return new Promise(t=>setTimeout(t,e))}},M=null;function Q(){return M||(M=new R),M}var A=X(),we=S();async function Ae(){return q()}async function Z(){if(B()){let o=process.env.AWS_PROFILE||"default",r=await Y(o),i=await Se({profile:o})();return{accessKeyId:i.accessKeyId,secretAccessKey:i.secretAccessKey,endpoint:r.endpoint||A.endpoint||u,iamEndpoint:r.iamEndpoint||A.iamEndpoint}}let n=await Ae();if(n==="oauth"){let r=await Q().getAccessToken();if(!N())throw new Error('No organization selected. Please run "tigris orgs select" first.');return{sessionToken:r,accessKeyId:"",secretAccessKey:"",endpoint:A.endpoint,organizationId:N()??void 0,iamEndpoint:A.iamEndpoint,authDomain:we.domain}}if(n==="credentials"){let o=D();if(o)return{accessKeyId:o.accessKeyId,secretAccessKey:o.secretAccessKey,endpoint:o.endpoint}}let e=V();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint};let t=D();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{listBuckets as Ne,getBucketInfo as ae}from"@tigrisdata/storage";import{readFileSync as _e,existsSync as Ie}from"fs";import{join as ee,dirname as ke}from"path";import{fileURLToPath as xe}from"url";import*as ne from"yaml";var Ee=xe(import.meta.url),ve=ke(Ee),b=null;function Oe(){let n=ve;for(let e=0;e<5;e++){let t=ee(n,"specs.yaml");if(Ie(t))return t;n=ee(n,"..")}throw new Error("Could not find specs.yaml")}function Pe(){if(!b){let n=Oe(),e=_e(n,"utf8");b=ne.parse(e)}return b}function te(n,e){let o=Pe().commands.find(r=>r.name===n);return o?e&&o.operations?o.operations.find(r=>r.name===e)||null:o:null}var oe={success:"\u2714",failure:"\u2716",hint:"\u2192"};function K(){return process.stdout.isTTY===!0}function _(n){let e=te(n.command,n.operation);if(e)return e.messages}function I(n,e){let t=n;return t=t.replace(/\\n/g,`
|
|
7
|
-
`),e&&(t=t.replace(/\{\{(\w+)\}\}/g,(o,r)=>{let i=e[r];return i!==void 0?String(i):`{{${r}}}`})),t}function re(n,e){if(!K())return;let t=_(n);t?.onStart&&console.log(I(t.onStart,e))}function ie(n,e){if(!K())return;let t=_(n);t?.onSuccess&&console.log(`${oe.success} ${I(t.onSuccess,e)}`)}function k(n,e,t){let o=_(n);o?.onFailure&&console.error(`${oe.failure} ${I(o.onFailure,t)}`),e&&console.error(` ${e}`)}function L(n,e){if(!K())return;let t=_(n);t?.onEmpty&&console.log(I(t.onEmpty,e))}function se(n,e){return{command:n,operation:e}}var g=se("forks","list");async function De(n){re(g);let e=x(n,["name"]),t=x(n,["format","f","F"],"table");e||(k(g,"Source bucket name is required"),process.exit(1));let o=await Z(),{data:r,error:i}=await ae(e,{config:o});if(i&&(k(g,i.message),process.exit(1)),!r.hasForks){L(g);return}let{data:a,error:s}=await Ne({config:o});s&&(k(g,s.message),process.exit(1));let c=[];for(let f of a.buckets){if(f.name===e)continue;let{data:h}=await ae(f.name,{config:o});h?.sourceBucketName===e&&c.push({name:f.name,created:f.creationDate})}if(c.length===0){L(g);return}let p=j(c,t,"forks","fork",[{key:"name",header:"Name"},{key:"created",header:"Created"}]);console.log(p),ie(g,{count:c.length})}export{De as default};
|
|
1
|
+
import{a as g,b as k,c as n,d as i,g as d}from"../../chunk-A3TXP5Y2.js";import"../../chunk-4LGKN5DA.js";import{f as p}from"../../chunk-HGIJOGCZ.js";import{a as s}from"../../chunk-JRALYIRA.js";import{b as u}from"../../chunk-ESJWTUFN.js";import"../../chunk-QZXBLNMQ.js";import"../../chunk-6U4U4JM6.js";import"../../chunk-JVB3Y42V.js";import"../../chunk-D63SZLT5.js";import{listBuckets as S,getBucketInfo as l}from"@tigrisdata/storage";var t=d("forks","list");async function B(c){g(t);let e=s(c,["name"]),h=s(c,["format","f","F"],"table");e||(n(t,"Source bucket name is required"),process.exit(1));let a=await u(),{data:b,error:f}=await l(e,{config:a});if(f&&(n(t,f.message),process.exit(1)),!b.hasForks){i(t);return}let{data:w,error:m}=await S({config:a});m&&(n(t,m.message),process.exit(1));let r=[];for(let o of w.buckets){if(o.name===e)continue;let{data:y}=await l(o.name,{config:a});y?.sourceBucketName===e&&r.push({name:o.name,created:o.creationDate})}if(r.length===0){i(t);return}let x=p(r,h,"forks","fork",[{key:"name",header:"Name"},{key:"created",header:"Created"}]);console.log(x),k(t,{count:r.length})}export{B as default};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
import
|
|
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};
|
|
1
|
+
import{a}from"../../chunk-HE7E7ZMA.js";import"../../chunk-A3TXP5Y2.js";import"../../chunk-4LGKN5DA.js";import"../../chunk-JVB3Y42V.js";import"../../chunk-D63SZLT5.js";export{a as default};
|
package/dist/lib/login/oauth.js
CHANGED
|
@@ -1,5 +1 @@
|
|
|
1
|
-
import
|
|
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
|
-
Your confirmation code: ${o}
|
|
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 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};
|
|
1
|
+
import{a,b}from"../../chunk-DJIPPZGR.js";import"../../chunk-A3TXP5Y2.js";import"../../chunk-4LGKN5DA.js";import"../../chunk-QZXBLNMQ.js";import"../../chunk-6U4U4JM6.js";import"../../chunk-JVB3Y42V.js";import"../../chunk-D63SZLT5.js";export{b as default,a as oauth};
|
package/dist/lib/login/select.js
CHANGED
|
@@ -1,5 +1 @@
|
|
|
1
|
-
import
|
|
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
|
-
Your confirmation code: ${r}
|
|
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};
|
|
1
|
+
import{a as c}from"../../chunk-HE7E7ZMA.js";import{a as s}from"../../chunk-DJIPPZGR.js";import"../../chunk-A3TXP5Y2.js";import"../../chunk-4LGKN5DA.js";import"../../chunk-QZXBLNMQ.js";import"../../chunk-6U4U4JM6.js";import"../../chunk-JVB3Y42V.js";import"../../chunk-D63SZLT5.js";import m from"enquirer";var{prompt:h}=m;async function n(e){let a=e["access-key"]||e.accessKey||e.key||e.Key||e.accesskey,r=e["access-secret"]||e.accessSecret||e.secret||e.Secret||e.accesssecret;if(a||r){await c(e);return}let{method:t}=await h({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)"}]});t==="user"?await s():await c(e)}export{n as default};
|
package/dist/lib/logout.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
import{
|
|
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};
|
|
1
|
+
import{a as i,b as a,c as r,g as s}from"../chunk-A3TXP5Y2.js";import"../chunk-4LGKN5DA.js";import{t as e}from"../chunk-JVB3Y42V.js";import"../chunk-D63SZLT5.js";var t=s("logout");async function c(){i(t);try{await e(),a(t)}catch(o){o instanceof Error?r(t,o.message):r(t),process.exit(1)}}export{c as default};
|
package/dist/lib/ls.js
CHANGED
|
@@ -1,6 +1 @@
|
|
|
1
|
-
import{list as
|
|
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
|
-
`),n.join(`
|
|
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};
|
|
1
|
+
import{a as k,f as c}from"../chunk-HGIJOGCZ.js";import{a as u}from"../chunk-JRALYIRA.js";import{b as i}from"../chunk-ESJWTUFN.js";import"../chunk-QZXBLNMQ.js";import"../chunk-6U4U4JM6.js";import{f as p}from"../chunk-LCWHZUZZ.js";import"../chunk-JVB3Y42V.js";import"../chunk-D63SZLT5.js";import{list as w,listBuckets as z}from"@tigrisdata/storage";async function S(g){let d=u(g,["path"]);if(!d){let e=await i(),{data:t,error:o}=await z({config:e});o&&(console.error(o.message),process.exit(1));let s=(t.buckets||[]).map(l=>({name:l.name,created:l.creationDate})),a=c(s,"table","buckets","bucket",[{key:"name",header:"Name"},{key:"created",header:"Created"}]);console.log(a);return}let{bucket:f,path:r}=p(d);f||(console.error("Invalid path"),process.exit(1));let h=await i(),n=r?r.endsWith("/")?r:`${r}/`:void 0,{data:y,error:m}=await w({prefix:n,config:{...h,bucket:f}});m&&(console.error(m.message),process.exit(1));let b=(y.items||[]).map(e=>{let t=n?e.name.slice(n.length):e.name,o=t.indexOf("/"),s=o===-1?t:t.slice(0,o+1),a=s.endsWith("/");return{key:s,size:a?"-":k(e.size),modified:e.lastModified}}).filter((e,t,o)=>e.key!==""&&o.findIndex(s=>s.key===e.key)===t),x=c(b,"table","objects","object",[{key:"key",header:"Key"},{key:"size",header:"Size"},{key:"modified",header:"Modified"}]);console.log(x)}export{S as default};
|