@tigrisdata/cli 2.1.0 → 2.2.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/README.md +381 -1
- 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 +11 -8
- package/dist/index.js +11 -8
- package/dist/lib/buckets/create.js +2 -2
- package/dist/lib/buckets/delete.js +2 -0
- package/dist/lib/buckets/get.js +7 -0
- package/dist/lib/buckets/list.js +6 -6
- package/dist/lib/configure/index.js +2 -2
- package/dist/lib/cp.js +1 -1
- package/dist/lib/forks/create.js +2 -0
- package/dist/lib/forks/list.js +7 -0
- package/dist/lib/login/credentials.js +2 -2
- package/dist/lib/login/oauth.js +5 -0
- package/dist/lib/login/select.js +5 -5
- package/dist/lib/logout.js +2 -2
- package/dist/lib/ls.js +6 -1
- package/dist/lib/mk.js +1 -1
- package/dist/lib/mv.js +1 -1
- package/dist/lib/objects/delete.js +2 -0
- package/dist/lib/objects/get.js +2 -0
- package/dist/lib/objects/list.js +7 -0
- package/dist/lib/objects/put.js +7 -0
- package/dist/lib/organizations/create.js +5 -0
- package/dist/lib/organizations/list.js +10 -0
- package/dist/lib/organizations/select.js +9 -0
- package/dist/lib/rm.js +1 -1
- package/dist/lib/snapshots/list.js +7 -0
- package/dist/lib/snapshots/take.js +2 -0
- package/dist/lib/touch.js +1 -0
- package/dist/lib/whoami.js +3 -3
- package/dist/specs.yaml +260 -259
- package/dist/utils/messages.js +2 -2
- package/dist/utils/path.js +1 -1
- package/package.json +13 -4
- package/dist/lib/login/ui.js +0 -5
- package/dist/lib/orgs/create.js +0 -2
- package/dist/lib/orgs/list.js +0 -7
- package/dist/lib/orgs/select.js +0 -6
- /package/dist/lib/{stat.js → _stat.js} +0 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function v(t,e,n){for(let o of e)if(t[o]!==void 0)return t[o];return n}import{S3Client as Ae}from"@aws-sdk/client-s3";import{homedir as B}from"os";import{join as _}from"path";import{readFileSync as H,writeFileSync as J,existsSync as I,mkdirSync as Y}from"fs";import{chmod as W}from"fs/promises";var m=_(B(),".tigris"),d=_(m,"config.json");function Q(){I(m)||Y(m,{recursive:!0,mode:448})}function c(){if(I(d))try{let t=H(d,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function l(t){Q(),J(d,JSON.stringify(t,null,2),{mode:384});try{await W(d,384)}catch{}}async function h(t){let e=c();e.tokens=t,await l(e)}async function g(){return c().tokens||null}async function y(){let t=c();delete t.tokens,await l(t)}async function M(t){let e=c();e.organizations=t,await l(e)}function P(){return c().organizations||[]}function C(){return c().selectedOrganization||null}function O(){let t=c();return t.temporaryCredentials||t.credentials||null}async function E(t){let e=c();e.loginMethod=t,await l(e)}function b(){return c().loginMethod||null}import p from"axios";import X from"open";function u(){return{domain:process.env.AUTH0_DOMAIN||"auth.tigris.dev",clientId:process.env.AUTH0_CLIENT_ID||"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",audience:process.env.AUTH0_AUDIENCE||"https://tigris-os-api"}}var N=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function z(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_STORAGE_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var w=class{config;baseUrl;constructor(){this.config=u(),this.baseUrl=`https://${this.config.domain}`}async login(e){let o=(await p.post(`${this.baseUrl}/oauth/device/code`,{client_id:this.config.clientId,audience:this.config.audience,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data;e?.onDeviceCode?.(o.user_code,o.verification_uri),await this.sleep(2e3);try{await X(o.verification_uri_complete)}catch{}e?.onWaiting?.();let i=await this.pollForToken(o.device_code,o.interval||5);await h(i),E("oauth"),await this.extractAndStoreOrganizations(i.idToken)}async pollForToken(e,n){let i=0;for(;i<60;){i++;try{let s=(await p.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,device_code:e,grant_type:"urn:ietf:params:oauth:grant-type:device_code"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,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(p.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 p.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,grant_type:"refresh_token",refresh_token:n.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,r={accessToken:i.access_token,refreshToken:i.refresh_token||n.refreshToken,idToken:i.id_token||n.idToken,expiresAt:Date.now()+(i.expires_in||3600)*1e3};return await h(r),r}catch{throw await y(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await 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)[N];if(!r)return;let s=r?.ns?.map(a=>typeof a=="object"&&a!==null?{id:a.id,name:a.name,displayName:a.name}:{id:a,name:a,displayName:a})||[];if(s.length===0)return;M(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),P()}async logout(){await y()}async isAuthenticated(){return await g()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},T=null;function D(){return T||(T=new w),T}var R=z(),Z=u();async function ee(){return b()}async function K(){if(await ee()==="oauth"){let o=await D().getAccessToken();if(!C())throw new Error('No organization selected. Please run "tigris orgs select" first.');let r=R.endpoint,s=R.iamEndpoint,a=Z.domain;return{sessionToken:o,accessKeyId:"",secretAccessKey:"",endpoint:r,organizationId:C()??void 0,iamEndpoint:s,authDomain:a}}let e=O();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint};throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}import{removeBucket as ge}from"@tigrisdata/storage";import{readFileSync as te,existsSync as ne}from"fs";import{join as L,dirname as oe}from"path";import{fileURLToPath as ie}from"url";import*as $ from"yaml";var re=ie(import.meta.url),se=oe(re),k=null;function ae(){let t=se;for(let e=0;e<5;e++){let n=L(t,"specs.yaml");if(ne(n))return n;t=L(t,"..")}throw new Error("Could not find specs.yaml")}function ce(){if(!k){let t=ae(),e=te(t,"utf8");k=$.parse(e)}return k}function F(t,e){let o=ce().commands.find(i=>i.name===t);return o?e&&o.operations?o.operations.find(i=>i.name===e)||null:o:null}var j={success:"\u2714",failure:"\u2716",hint:"\u2192"};function U(){return process.stdout.isTTY===!0}function S(t){let e=F(t.command,t.operation);if(e)return e.messages}function x(t,e){let n=t;return n=n.replace(/\\n/g,`
|
|
2
|
+
`),e&&(n=n.replace(/\{\{(\w+)\}\}/g,(o,i)=>{let r=e[i];return r!==void 0?String(r):`{{${i}}}`})),n}function G(t,e){if(!U())return;let n=S(t);n?.onStart&&console.log(x(n.onStart,e))}function V(t,e){if(!U())return;let n=S(t);n?.onSuccess&&console.log(`${j.success} ${x(n.onSuccess,e)}`)}function A(t,e,n){let o=S(t);o?.onFailure&&console.error(`${j.failure} ${x(o.onFailure,n)}`),e&&console.error(` ${e}`)}function q(t,e){return{command:t,operation:e}}var f=q("buckets","delete");async function de(t){G(f);let e=v(t,["name"]);e||(A(f,"Bucket name is required"),process.exit(1));let n=Array.isArray(e)?e:[e],o=await K();for(let i of n){let{error:r}=await ge(i,{config:o});r&&(A(f,r.message,{name:i}),process.exit(1)),V(f,{name:i})}}export{de as default};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
function P(t,e,n){for(let o of e)if(t[o]!==void 0)return t[o];return n}function ee(t){return JSON.stringify(t,null,2)}function te(t,e=" "){return Object.entries(t).map(([n,o])=>`${e}<${n}>${o}</${n}>`).join(`
|
|
2
|
+
`)}function ne(t,e,n){let o=[`<${e}>`];return t.forEach(r=>{o.push(` <${n}>`),o.push(te(r," ")),o.push(` </${n}>`)}),o.push(`</${e}>`),o.join(`
|
|
3
|
+
`)}function E(t){if(t==null)return"";if(t instanceof Date)return b(t);if(typeof t=="string"){let e=new Date(t);if(!isNaN(e.getTime())&&t.includes("T"))return b(e)}return String(t)}function b(t){return new Intl.DateTimeFormat(void 0,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}).format(t)}function oe(t,e){return e.map(n=>{if(n.width)return n.width;let o=n.header.length,r=t.reduce((i,s)=>{let a=E(s[n.key]);return Math.max(i,a.length)},0);return Math.max(o,r)})}function re(t,e){let n=[],o=oe(t,e),r="\u250C"+o.map(c=>"\u2500".repeat(c+2)).join("\u252C")+"\u2510",i="\u251C"+o.map(c=>"\u2500".repeat(c+2)).join("\u253C")+"\u2524",s="\u2514"+o.map(c=>"\u2500".repeat(c+2)).join("\u2534")+"\u2518";n.push(`
|
|
4
|
+
`+r);let a="\u2502 "+e.map((c,h)=>c.header.padEnd(o[h])).join(" \u2502 ")+" \u2502";return n.push(a),n.push(i),t.forEach(c=>{let h=e.map((I,M)=>{let O=E(c[I.key]);return I.align==="right"?O.padStart(o[M]):O.padEnd(o[M])});n.push("\u2502 "+h.join(" \u2502 ")+" \u2502")}),n.push(s+`
|
|
5
|
+
`),n.join(`
|
|
6
|
+
`)}function N(t,e,n,o,r){switch(e){case"json":return ee(t);case"xml":return ne(t,n,o);default:return re(t,r)}}import{S3Client as $e}from"@aws-sdk/client-s3";import{homedir as ie}from"os";import{join as D}from"path";import{readFileSync as se,writeFileSync as ae,existsSync as z,mkdirSync as ce}from"fs";import{chmod as ue}from"fs/promises";var y=D(ie(),".tigris"),g=D(y,"config.json");function de(){z(y)||ce(y,{recursive:!0,mode:448})}function u(){if(z(g))try{let t=se(g,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function p(t){de(),ae(g,JSON.stringify(t,null,2),{mode:384});try{await ue(g,384)}catch{}}async function T(t){let e=u();e.tokens=t,await p(e)}async function d(){return u().tokens||null}async function C(){let t=u();delete t.tokens,await p(t)}async function R(t){let e=u();e.organizations=t,await p(e)}function j(){return u().organizations||[]}function w(){return u().selectedOrganization||null}function $(){let t=u();return t.temporaryCredentials||t.credentials||null}async function F(t){let e=u();e.loginMethod=t,await p(e)}function K(){return u().loginMethod||null}import f from"axios";import ge from"open";function l(){return{domain:process.env.AUTH0_DOMAIN||"auth.tigris.dev",clientId:process.env.AUTH0_CLIENT_ID||"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",audience:process.env.AUTH0_AUDIENCE||"https://tigris-os-api"}}var L=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function B(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_STORAGE_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var x=class{config;baseUrl;constructor(){this.config=l(),this.baseUrl=`https://${this.config.domain}`}async login(e){let o=(await f.post(`${this.baseUrl}/oauth/device/code`,{client_id:this.config.clientId,audience:this.config.audience,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data;e?.onDeviceCode?.(o.user_code,o.verification_uri),await this.sleep(2e3);try{await ge(o.verification_uri_complete)}catch{}e?.onWaiting?.();let r=await this.pollForToken(o.device_code,o.interval||5);await T(r),F("oauth"),await this.extractAndStoreOrganizations(r.idToken)}async pollForToken(e,n){let r=0;for(;r<60;){r++;try{let s=(await f.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,device_code:e,grant_type:"urn:ietf:params:oauth:grant-type:device_code"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,a=Date.now()+(s.expires_in||3600)*1e3;return{accessToken:s.access_token,refreshToken:s.refresh_token,idToken:s.id_token,expiresAt:a}}catch(i){if(f.isAxiosError(i)&&i.response){let s=i.response.data?.error;if(s==="authorization_pending"){await this.sleep(n*1e3);continue}if(s==="slow_down"){n+=5,await this.sleep(n*1e3);continue}throw new Error(i.response.data?.error_description||"Authentication failed")}throw i}}throw new Error("Authentication timed out. Please try again.")}async getAccessToken(){let e=await d();if(!e)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');let n=300*1e3;return Date.now()+n>=e.expiresAt&&(e=await this.refreshAccessToken(e)),e.accessToken}async refreshAccessToken(e){let n=null;if(e?.refreshToken?n=e:n=await d(),!n)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let r=(await f.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,grant_type:"refresh_token",refresh_token:n.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,i={accessToken:r.access_token,refreshToken:r.refresh_token||n.refreshToken,idToken:r.id_token||n.idToken,expiresAt:Date.now()+(r.expires_in||3600)*1e3};return await T(i),i}catch{throw await C(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await d();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let n=e.idToken.split(".")[1],o=Buffer.from(n,"base64").toString("utf8");return JSON.parse(o)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let n=e.split(".")[1],o=Buffer.from(n,"base64").toString("utf8"),i=JSON.parse(o)[L];if(!i)return;let s=i?.ns?.map(a=>typeof a=="object"&&a!==null?{id:a.id,name:a.name,displayName:a.name}:{id:a,name:a,displayName:a})||[];if(s.length===0)return;R(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),j()}async logout(){await C()}async isAuthenticated(){return await d()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},k=null;function U(){return k||(k=new x),k}var V=B(),pe=l();async function le(){return K()}async function G(){if(await le()==="oauth"){let o=await U().getAccessToken();if(!w())throw new Error('No organization selected. Please run "tigris orgs select" first.');let i=V.endpoint,s=V.iamEndpoint,a=pe.domain;return{sessionToken:o,accessKeyId:"",secretAccessKey:"",endpoint:i,organizationId:w()??void 0,iamEndpoint:s,authDomain:a}}let e=$();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint};throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}import{getBucketInfo as xe}from"@tigrisdata/storage";import{readFileSync as fe,existsSync as me}from"fs";import{join as q,dirname as he}from"path";import{fileURLToPath as ye}from"url";import*as H from"yaml";var Te=ye(import.meta.url),Ce=he(Te),S=null;function we(){let t=Ce;for(let e=0;e<5;e++){let n=q(t,"specs.yaml");if(me(n))return n;t=q(t,"..")}throw new Error("Could not find specs.yaml")}function ke(){if(!S){let t=we(),e=fe(t,"utf8");S=H.parse(e)}return S}function J(t,e){let o=ke().commands.find(r=>r.name===t);return o?e&&o.operations?o.operations.find(r=>r.name===e)||null:o:null}var Y={success:"\u2714",failure:"\u2716",hint:"\u2192"};function W(){return process.stdout.isTTY===!0}function A(t){let e=J(t.command,t.operation);if(e)return e.messages}function v(t,e){let n=t;return n=n.replace(/\\n/g,`
|
|
7
|
+
`),e&&(n=n.replace(/\{\{(\w+)\}\}/g,(o,r)=>{let i=e[r];return i!==void 0?String(i):`{{${r}}}`})),n}function X(t,e){if(!W())return;let n=A(t);n?.onStart&&console.log(v(n.onStart,e))}function Q(t,e){if(!W())return;let n=A(t);n?.onSuccess&&console.log(`${Y.success} ${v(n.onSuccess,e)}`)}function _(t,e,n){let o=A(t);o?.onFailure&&console.error(`${Y.failure} ${v(o.onFailure,n)}`),e&&console.error(` ${e}`)}function Z(t,e){return{command:t,operation:e}}var m=Z("buckets","get");async function Se(t){X(m);let e=P(t,["name"]);e||(_(m,"Bucket name is required"),process.exit(1));let{data:n,error:o}=await xe(e,{config:await G()});o&&(_(m,o.message),process.exit(1));let r=[{property:"Name",value:e},{property:"Snapshots Enabled",value:n.isSnapshotEnabled?"Yes":"No"},{property:"Has Forks",value:n.hasForks?"Yes":"No"},...n.sourceBucketName?[{property:"Source Bucket",value:n.sourceBucketName}]:[],...n.sourceBucketSnapshot?[{property:"Source Snapshot",value:n.sourceBucketSnapshot}]:[]],i=N(r,"table","bucket","property",[{key:"property",header:"Property"},{key:"value",header:"Value"}]);console.log(i),Q(m)}export{Se as default};
|
package/dist/lib/buckets/list.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
function P(t,e,n){for(let o of e)if(t[o]!==void 0)return t[o];return n}function
|
|
2
|
-
`)}function
|
|
3
|
-
`)}function
|
|
4
|
-
`+r);let a="\u2502 "+e.map((c,
|
|
1
|
+
function P(t,e,n){for(let o of e)if(t[o]!==void 0)return t[o];return n}function te(t){return JSON.stringify(t,null,2)}function ne(t,e=" "){return Object.entries(t).map(([n,o])=>`${e}<${n}>${o}</${n}>`).join(`
|
|
2
|
+
`)}function oe(t,e,n){let o=[`<${e}>`];return t.forEach(r=>{o.push(` <${n}>`),o.push(ne(r," ")),o.push(` </${n}>`)}),o.push(`</${e}>`),o.join(`
|
|
3
|
+
`)}function N(t){if(t==null)return"";if(t instanceof Date)return E(t);if(typeof t=="string"){let e=new Date(t);if(!isNaN(e.getTime())&&t.includes("T"))return E(e)}return String(t)}function E(t){return new Intl.DateTimeFormat(void 0,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}).format(t)}function re(t,e){return e.map(n=>{if(n.width)return n.width;let o=n.header.length,r=t.reduce((i,s)=>{let a=N(s[n.key]);return Math.max(i,a.length)},0);return Math.max(o,r)})}function ie(t,e){let n=[],o=re(t,e),r="\u250C"+o.map(c=>"\u2500".repeat(c+2)).join("\u252C")+"\u2510",i="\u251C"+o.map(c=>"\u2500".repeat(c+2)).join("\u253C")+"\u2524",s="\u2514"+o.map(c=>"\u2500".repeat(c+2)).join("\u2534")+"\u2518";n.push(`
|
|
4
|
+
`+r);let a="\u2502 "+e.map((c,C)=>c.header.padEnd(o[C])).join(" \u2502 ")+" \u2502";return n.push(a),n.push(i),t.forEach(c=>{let C=e.map((M,O)=>{let b=N(c[M.key]);return M.align==="right"?b.padStart(o[O]):b.padEnd(o[O])});n.push("\u2502 "+C.join(" \u2502 ")+" \u2502")}),n.push(s+`
|
|
5
5
|
`),n.join(`
|
|
6
|
-
`)}function
|
|
7
|
-
`),e&&(n=n.replace(/\{\{(\w+)\}\}/g,(o,r)=>{let i=e[r];return i!==void 0?String(i):`{{${r}}}`})),n}function
|
|
6
|
+
`)}function D(t,e,n,o,r){switch(e){case"json":return te(t);case"xml":return oe(t,n,o);default:return ie(t,r)}}import{S3Client as Ke}from"@aws-sdk/client-s3";import{homedir as se}from"os";import{join as z}from"path";import{readFileSync as ae,writeFileSync as ce,existsSync as R,mkdirSync as de}from"fs";import{chmod as ue}from"fs/promises";var w=z(se(),".tigris"),l=z(w,"config.json");function ge(){R(w)||de(w,{recursive:!0,mode:448})}function d(){if(R(l))try{let t=ae(l,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function p(t){ge(),ce(l,JSON.stringify(t,null,2),{mode:384});try{await ue(l,384)}catch{}}async function k(t){let e=d();e.tokens=t,await p(e)}async function g(){return d().tokens||null}async function x(){let t=d();delete t.tokens,await p(t)}async function j(t){let e=d();e.organizations=t,await p(e)}function $(){return d().organizations||[]}function S(){return d().selectedOrganization||null}function K(){let t=d();return t.temporaryCredentials||t.credentials||null}async function L(t){let e=d();e.loginMethod=t,await p(e)}function F(){return d().loginMethod||null}import m from"axios";import le from"open";function f(){return{domain:process.env.AUTH0_DOMAIN||"auth.tigris.dev",clientId:process.env.AUTH0_CLIENT_ID||"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",audience:process.env.AUTH0_AUDIENCE||"https://tigris-os-api"}}var U=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function V(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_STORAGE_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var _=class{config;baseUrl;constructor(){this.config=f(),this.baseUrl=`https://${this.config.domain}`}async login(e){let o=(await m.post(`${this.baseUrl}/oauth/device/code`,{client_id:this.config.clientId,audience:this.config.audience,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data;e?.onDeviceCode?.(o.user_code,o.verification_uri),await this.sleep(2e3);try{await le(o.verification_uri_complete)}catch{}e?.onWaiting?.();let r=await this.pollForToken(o.device_code,o.interval||5);await k(r),L("oauth"),await this.extractAndStoreOrganizations(r.idToken)}async pollForToken(e,n){let r=0;for(;r<60;){r++;try{let s=(await m.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,device_code:e,grant_type:"urn:ietf:params:oauth:grant-type:device_code"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,a=Date.now()+(s.expires_in||3600)*1e3;return{accessToken:s.access_token,refreshToken:s.refresh_token,idToken:s.id_token,expiresAt:a}}catch(i){if(m.isAxiosError(i)&&i.response){let s=i.response.data?.error;if(s==="authorization_pending"){await this.sleep(n*1e3);continue}if(s==="slow_down"){n+=5,await this.sleep(n*1e3);continue}throw new Error(i.response.data?.error_description||"Authentication failed")}throw i}}throw new Error("Authentication timed out. Please try again.")}async getAccessToken(){let e=await g();if(!e)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');let n=300*1e3;return Date.now()+n>=e.expiresAt&&(e=await this.refreshAccessToken(e)),e.accessToken}async refreshAccessToken(e){let n=null;if(e?.refreshToken?n=e:n=await g(),!n)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let r=(await m.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,grant_type:"refresh_token",refresh_token:n.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,i={accessToken:r.access_token,refreshToken:r.refresh_token||n.refreshToken,idToken:r.id_token||n.idToken,expiresAt:Date.now()+(r.expires_in||3600)*1e3};return await k(i),i}catch{throw await x(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await g();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let n=e.idToken.split(".")[1],o=Buffer.from(n,"base64").toString("utf8");return JSON.parse(o)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let n=e.split(".")[1],o=Buffer.from(n,"base64").toString("utf8"),i=JSON.parse(o)[U];if(!i)return;let s=i?.ns?.map(a=>typeof a=="object"&&a!==null?{id:a.id,name:a.name,displayName:a.name}:{id:a,name:a,displayName:a})||[];if(s.length===0)return;j(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),$()}async logout(){await x()}async isAuthenticated(){return await g()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},A=null;function G(){return A||(A=new _),A}var B=V(),pe=f();async function fe(){return F()}async function q(){if(await fe()==="oauth"){let o=await G().getAccessToken();if(!S())throw new Error('No organization selected. Please run "tigris orgs select" first.');let i=B.endpoint,s=B.iamEndpoint,a=pe.domain;return{sessionToken:o,accessKeyId:"",secretAccessKey:"",endpoint:i,organizationId:S()??void 0,iamEndpoint:s,authDomain:a}}let e=K();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint};throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}import{listBuckets as Se}from"@tigrisdata/storage";import{readFileSync as me,existsSync as he}from"fs";import{join as H,dirname as ye}from"path";import{fileURLToPath as Te}from"url";import*as J from"yaml";var Ce=Te(import.meta.url),we=ye(Ce),v=null;function ke(){let t=we;for(let e=0;e<5;e++){let n=H(t,"specs.yaml");if(he(n))return n;t=H(t,"..")}throw new Error("Could not find specs.yaml")}function xe(){if(!v){let t=ke(),e=me(t,"utf8");v=J.parse(e)}return v}function W(t,e){let o=xe().commands.find(r=>r.name===t);return o?e&&o.operations?o.operations.find(r=>r.name===e)||null:o:null}var Y={success:"\u2714",failure:"\u2716",hint:"\u2192"};function I(){return process.stdout.isTTY===!0}function h(t){let e=W(t.command,t.operation);if(e)return e.messages}function y(t,e){let n=t;return n=n.replace(/\\n/g,`
|
|
7
|
+
`),e&&(n=n.replace(/\{\{(\w+)\}\}/g,(o,r)=>{let i=e[r];return i!==void 0?String(i):`{{${r}}}`})),n}function X(t,e){if(!I())return;let n=h(t);n?.onStart&&console.log(y(n.onStart,e))}function Q(t,e){if(!I())return;let n=h(t);n?.onSuccess&&console.log(`${Y.success} ${y(n.onSuccess,e)}`)}function T(t,e,n){let o=h(t);o?.onFailure&&console.error(`${Y.failure} ${y(o.onFailure,n)}`),e&&console.error(` ${e}`)}function Z(t,e){if(!I())return;let n=h(t);n?.onEmpty&&console.log(y(n.onEmpty,e))}function ee(t,e){return{command:t,operation:e}}var u=ee("buckets","list");async function Ae(t){X(u);try{let e=P(t,["format","F"],"table"),{data:n,error:o}=await Se({config:await q()});if(o&&(T(u,o.message),process.exit(1)),!n.buckets||n.buckets.length===0){Z(u);return}let r=n.buckets.map(s=>({name:s.name,created:s.creationDate})),i=D(r,e,"buckets","bucket",[{key:"name",header:"Name"},{key:"created",header:"Created"}]);console.log(i),Q(u,{count:r.length})}catch(e){e instanceof Error?T(u,e.message):T(u,"An unknown error occurred"),process.exit(1)}}export{Ae as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
`),n&&(t=t.replace(/\{\{(\w+)\}\}/g,(s,r)=>{let
|
|
1
|
+
import q from"enquirer";import{homedir as P}from"os";import{join as d}from"path";import{readFileSync as k,writeFileSync as I,existsSync as p,mkdirSync as z}from"fs";import{chmod as b}from"fs/promises";var c=d(P(),".tigris"),o=d(c,"config.json");function K(){p(c)||z(c,{recursive:!0,mode:448})}function m(){if(p(o))try{let e=k(o,"utf8");return JSON.parse(e)}catch{return{}}return{}}async function y(e){K(),I(o,JSON.stringify(e,null,2),{mode:384});try{await b(o,384)}catch{}}async function C(e){let n=m();n.credentials=e,await y(n)}async function S(e){let n=m();n.loginMethod=e,await y(n)}import{readFileSync as F,existsSync as E}from"fs";import{join as x,dirname as $}from"path";import{fileURLToPath as D}from"url";import*as h from"yaml";var _=D(import.meta.url),V=$(_),l=null;function j(){let e=V;for(let n=0;n<5;n++){let t=x(e,"specs.yaml");if(E(t))return t;e=x(e,"..")}throw new Error("Could not find specs.yaml")}function L(){if(!l){let e=j(),n=F(e,"utf8");l=h.parse(n)}return l}function v(e,n){let s=L().commands.find(r=>r.name===e);return s?n&&s.operations?s.operations.find(r=>r.name===n)||null:s:null}var M={success:"\u2714",failure:"\u2716",hint:"\u2192"};function A(){return process.stdout.isTTY===!0}function g(e){let n=v(e.command,e.operation);if(n)return n.messages}function f(e,n){let t=e;return t=t.replace(/\\n/g,`
|
|
2
|
+
`),n&&(t=t.replace(/\{\{(\w+)\}\}/g,(s,r)=>{let i=n[r];return i!==void 0?String(i):`{{${r}}}`})),t}function O(e,n){if(!A())return;let t=g(e);t?.onStart&&console.log(f(t.onStart,n))}function T(e,n){if(!A())return;let t=g(e);t?.onSuccess&&console.log(`${M.success} ${f(t.onSuccess,n)}`)}function u(e,n,t){let s=g(e);s?.onFailure&&console.error(`${M.failure} ${f(s.onFailure,t)}`),n&&console.error(` ${n}`)}function w(e,n){return{command:e,operation:n}}var{prompt:N}=q,a=w("configure");async function R(e){O(a);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,s=e.endpoint||e.e||e.E||e.Endpoint;if(!n||!t||!s){let r=[];n||r.push({type:"input",name:"accessKey",message:"Tigris Access Key ID:",required:!0}),t||r.push({type:"password",name:"accessSecret",message:"Tigris Secret Access Key:",required:!0}),s||r.push({type:"input",name:"endpoint",message:"Tigris Endpoint:",required:!0,initial:process.env.TIGRIS_STORAGE_ENDPOINT??"https://t3.storage.dev"});let i=await N(r);n=n||i.accessKey,t=t||i.accessSecret,s=s||i.endpoint}(!n||!t||!s)&&(u(a,"All credentials are required"),process.exit(1));try{await C({accessKeyId:n,secretAccessKey:t,endpoint:s}),await S("credentials"),T(a)}catch{u(a,"Failed to save credentials"),process.exit(1)}}export{R as default};
|
package/dist/lib/cp.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
async function t(e){let s=e.
|
|
1
|
+
import{list as z}from"@tigrisdata/storage";function C(n){let e=n.split("/");return{bucket:e[0],path:e.slice(1).join("/")}}async function x(n,e,i){let{data:t}=await z({prefix:`${e}/`,limit:1,config:{...i,bucket:n}});return!!(t?.items&&t.items.length>0)}async function M(n,e,i){let t=[],o;do{let{data:r,error:s}=await z({prefix:e,paginationToken:o,config:{...i,bucket:n}});if(s)return{items:t,error:s};r?.items&&t.push(...r.items),o=r?.hasMore?r.paginationToken:void 0}while(o);return{items:t}}function I(n,e,i){for(let t of e)if(n[t]!==void 0)return n[t];return i}import{S3Client as Ce}from"@aws-sdk/client-s3";import{homedir as B}from"os";import{join as $}from"path";import{readFileSync as Q,writeFileSync as V,existsSync as D,mkdirSync as X}from"fs";import{chmod as Y}from"fs/promises";var P=$(B(),".tigris"),k=$(P,"config.json");function Z(){D(P)||X(P,{recursive:!0,mode:448})}function g(){if(D(k))try{let n=Q(k,"utf8");return JSON.parse(n)}catch{return{}}return{}}async function w(n){Z(),V(k,JSON.stringify(n,null,2),{mode:384});try{await Y(k,384)}catch{}}async function A(n){let e=g();e.tokens=n,await w(e)}async function m(){return g().tokens||null}async function v(){let n=g();delete n.tokens,await w(n)}async function R(n){let e=g();e.organizations=n,await w(e)}function F(){return g().organizations||[]}function _(){return g().selectedOrganization||null}function K(){let n=g();return n.temporaryCredentials||n.credentials||null}async function L(n){let e=g();e.loginMethod=n,await w(e)}function j(){return g().loginMethod||null}import T from"axios";import ee from"open";function y(){return{domain:process.env.AUTH0_DOMAIN||"auth.tigris.dev",clientId:process.env.AUTH0_CLIENT_ID||"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",audience:process.env.AUTH0_AUDIENCE||"https://tigris-os-api"}}var G=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function U(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_STORAGE_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var b=class{config;baseUrl;constructor(){this.config=y(),this.baseUrl=`https://${this.config.domain}`}async login(e){let t=(await T.post(`${this.baseUrl}/oauth/device/code`,{client_id:this.config.clientId,audience:this.config.audience,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data;e?.onDeviceCode?.(t.user_code,t.verification_uri),await this.sleep(2e3);try{await ee(t.verification_uri_complete)}catch{}e?.onWaiting?.();let o=await this.pollForToken(t.device_code,t.interval||5);await A(o),L("oauth"),await this.extractAndStoreOrganizations(o.idToken)}async pollForToken(e,i){let o=0;for(;o<60;){o++;try{let s=(await T.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,device_code:e,grant_type:"urn:ietf:params:oauth:grant-type:device_code"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,a=Date.now()+(s.expires_in||3600)*1e3;return{accessToken:s.access_token,refreshToken:s.refresh_token,idToken:s.id_token,expiresAt:a}}catch(r){if(T.isAxiosError(r)&&r.response){let s=r.response.data?.error;if(s==="authorization_pending"){await this.sleep(i*1e3);continue}if(s==="slow_down"){i+=5,await this.sleep(i*1e3);continue}throw new Error(r.response.data?.error_description||"Authentication failed")}throw r}}throw new Error("Authentication timed out. Please try again.")}async getAccessToken(){let e=await m();if(!e)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');let i=300*1e3;return Date.now()+i>=e.expiresAt&&(e=await this.refreshAccessToken(e)),e.accessToken}async refreshAccessToken(e){let i=null;if(e?.refreshToken?i=e:i=await m(),!i)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let o=(await T.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,grant_type:"refresh_token",refresh_token:i.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,r={accessToken:o.access_token,refreshToken:o.refresh_token||i.refreshToken,idToken:o.id_token||i.idToken,expiresAt:Date.now()+(o.expires_in||3600)*1e3};return await A(r),r}catch{throw await v(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await m();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let i=e.idToken.split(".")[1],t=Buffer.from(i,"base64").toString("utf8");return JSON.parse(t)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let i=e.split(".")[1],t=Buffer.from(i,"base64").toString("utf8"),r=JSON.parse(t)[G];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;R(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),F()}async logout(){await v()}async isAuthenticated(){return await m()!==null}sleep(e){return new Promise(i=>setTimeout(i,e))}},S=null;function q(){return S||(S=new b),S}var W=U(),te=y();async function ne(){return j()}async function H(){if(await ne()==="oauth"){let t=await q().getAccessToken();if(!_())throw new Error('No organization selected. Please run "tigris orgs select" first.');let r=W.endpoint,s=W.iamEndpoint,a=te.domain;return{sessionToken:t,accessKeyId:"",secretAccessKey:"",endpoint:r,organizationId:_()??void 0,iamEndpoint:s,authDomain:a}}let e=K();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint};throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}import{get as oe,put as J,list as ie}from"@tigrisdata/storage";async function re(n){let e=I(n,["src"]),i=I(n,["dest"]);(!e||!i)&&(console.error("both src and dest arguments are required"),process.exit(1));let t=C(e),o=C(i);t.bucket||(console.error("Invalid source path"),process.exit(1)),o.bucket||(console.error("Invalid destination path"),process.exit(1)),t.path||(console.error("Cannot copy a bucket. Provide a path within the bucket."),process.exit(1));let r=await H(),s=e.includes("*"),a=e.endsWith("/");if(!s&&!a&&t.path&&(a=await x(t.bucket,t.path,r)),s||a){let c=s?t.path.replace("*",""):t.path.endsWith("/")?t.path:`${t.path}/`,{items:l,error:f}=await M(t.bucket,c||void 0,r);f&&(console.error(f.message),process.exit(1));let E=l.filter(d=>d.name!==c),h=0;for(let d of E){let p=c?d.name.slice(c.length):d.name,u=o.path?`${o.path.replace(/\/$/,"")}/${p}`:p,N=await O(r,t.bucket,d.name,o.bucket,u);N.error?console.error(`Failed to copy ${d.name}: ${N.error}`):(console.log(`Copied ${d.name} -> ${o.bucket}/${u}`),h++)}if(o.path&&c){let{data:d}=await ie({prefix:c,limit:1,config:{...r,bucket:t.bucket}});if(d?.items?.some(p=>p.name===c)){let p=`${o.path.replace(/\/$/,"")}/`,u=await O(r,t.bucket,c,o.bucket,p);u.error?console.error(`Failed to copy folder marker: ${u.error}`):h++}}if(h===0){console.log("No objects to copy");return}console.log(`Copied ${h} object(s)`)}else{t.path||(console.error("Source object key is required"),process.exit(1));let c=t.path.split("/").pop(),l;o.path?i.endsWith("/")?l=`${o.path}${c}`:await x(o.bucket,o.path,r)?l=`${o.path}/${c}`:l=o.path:l=c;let f=await O(r,t.bucket,t.path,o.bucket,l);f.error&&(console.error(f.error),process.exit(1)),console.log(`Copied ${e} -> ${o.bucket}/${l}`)}}async function O(n,e,i,t,o){if(i.endsWith("/")){let{error:c}=await J(o,"",{config:{...n,bucket:t}});return c?{error:c.message}:{}}let{data:r,error:s}=await oe(i,"stream",{config:{...n,bucket:e}});if(s)return{error:s.message};let{error:a}=await J(o,r,{config:{...n,bucket:t}});return a?{error:a.message}:{}}export{re as default};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function l(t,e,n){for(let o of e)if(t[o]!==void 0)return t[o];return n}import{S3Client as Ae}from"@aws-sdk/client-s3";import{homedir as B}from"os";import{join as _}from"path";import{readFileSync as H,writeFileSync as J,existsSync as I,mkdirSync as Y}from"fs";import{chmod as W}from"fs/promises";var y=_(B(),".tigris"),u=_(y,"config.json");function Q(){I(y)||Y(y,{recursive:!0,mode:448})}function c(){if(I(u))try{let t=H(u,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function f(t){Q(),J(u,JSON.stringify(t,null,2),{mode:384});try{await W(u,384)}catch{}}async function C(t){let e=c();e.tokens=t,await f(e)}async function g(){return c().tokens||null}async function T(){let t=c();delete t.tokens,await f(t)}async function M(t){let e=c();e.organizations=t,await f(e)}function P(){return c().organizations||[]}function w(){return c().selectedOrganization||null}function O(){let t=c();return t.temporaryCredentials||t.credentials||null}async function E(t){let e=c();e.loginMethod=t,await f(e)}function N(){return c().loginMethod||null}import m from"axios";import X from"open";function p(){return{domain:process.env.AUTH0_DOMAIN||"auth.tigris.dev",clientId:process.env.AUTH0_CLIENT_ID||"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",audience:process.env.AUTH0_AUDIENCE||"https://tigris-os-api"}}var b=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function z(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_STORAGE_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var S=class{config;baseUrl;constructor(){this.config=p(),this.baseUrl=`https://${this.config.domain}`}async login(e){let o=(await m.post(`${this.baseUrl}/oauth/device/code`,{client_id:this.config.clientId,audience:this.config.audience,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data;e?.onDeviceCode?.(o.user_code,o.verification_uri),await this.sleep(2e3);try{await X(o.verification_uri_complete)}catch{}e?.onWaiting?.();let i=await this.pollForToken(o.device_code,o.interval||5);await C(i),E("oauth"),await this.extractAndStoreOrganizations(i.idToken)}async pollForToken(e,n){let i=0;for(;i<60;){i++;try{let s=(await m.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,device_code:e,grant_type:"urn:ietf:params:oauth:grant-type:device_code"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,a=Date.now()+(s.expires_in||3600)*1e3;return{accessToken:s.access_token,refreshToken:s.refresh_token,idToken:s.id_token,expiresAt:a}}catch(r){if(m.isAxiosError(r)&&r.response){let s=r.response.data?.error;if(s==="authorization_pending"){await this.sleep(n*1e3);continue}if(s==="slow_down"){n+=5,await this.sleep(n*1e3);continue}throw new Error(r.response.data?.error_description||"Authentication failed")}throw r}}throw new Error("Authentication timed out. Please try again.")}async getAccessToken(){let e=await 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 C(r),r}catch{throw await T(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await g();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let n=e.idToken.split(".")[1],o=Buffer.from(n,"base64").toString("utf8");return JSON.parse(o)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let n=e.split(".")[1],o=Buffer.from(n,"base64").toString("utf8"),r=JSON.parse(o)[b];if(!r)return;let s=r?.ns?.map(a=>typeof a=="object"&&a!==null?{id:a.id,name:a.name,displayName:a.name}:{id:a,name:a,displayName:a})||[];if(s.length===0)return;M(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),P()}async logout(){await T()}async isAuthenticated(){return await g()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},k=null;function D(){return k||(k=new S),k}var R=z(),Z=p();async function ee(){return N()}async function K(){if(await ee()==="oauth"){let o=await D().getAccessToken();if(!w())throw new Error('No organization selected. Please run "tigris orgs select" first.');let r=R.endpoint,s=R.iamEndpoint,a=Z.domain;return{sessionToken:o,accessKeyId:"",secretAccessKey:"",endpoint:r,organizationId:w()??void 0,iamEndpoint:s,authDomain:a}}let e=O();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint};throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}import{createBucket as ge}from"@tigrisdata/storage";import{readFileSync as te,existsSync as ne}from"fs";import{join as L,dirname as oe}from"path";import{fileURLToPath as ie}from"url";import*as F from"yaml";var re=ie(import.meta.url),se=oe(re),x=null;function ae(){let t=se;for(let e=0;e<5;e++){let n=L(t,"specs.yaml");if(ne(n))return n;t=L(t,"..")}throw new Error("Could not find specs.yaml")}function ce(){if(!x){let t=ae(),e=te(t,"utf8");x=F.parse(e)}return x}function $(t,e){let o=ce().commands.find(i=>i.name===t);return o?e&&o.operations?o.operations.find(i=>i.name===e)||null:o:null}var j={success:"\u2714",failure:"\u2716",hint:"\u2192"};function U(){return process.stdout.isTTY===!0}function A(t){let e=$(t.command,t.operation);if(e)return e.messages}function v(t,e){let n=t;return n=n.replace(/\\n/g,`
|
|
2
|
+
`),e&&(n=n.replace(/\{\{(\w+)\}\}/g,(o,i)=>{let r=e[i];return r!==void 0?String(r):`{{${i}}}`})),n}function G(t,e){if(!U())return;let n=A(t);n?.onStart&&console.log(v(n.onStart,e))}function q(t,e){if(!U())return;let n=A(t);n?.onSuccess&&console.log(`${j.success} ${v(n.onSuccess,e)}`)}function h(t,e,n){let o=A(t);o?.onFailure&&console.error(`${j.failure} ${v(o.onFailure,n)}`),e&&console.error(` ${e}`)}function V(t,e){return{command:t,operation:e}}var d=V("forks","create");async function de(t){G(d);let e=l(t,["name"]),n=l(t,["fork-name","forkName"]),o=l(t,["snapshot","s","S"]);e||(h(d,"Source bucket name is required"),process.exit(1)),n||(h(d,"Fork name is required"),process.exit(1));let{error:i}=await ge(n,{sourceBucketName:e,sourceBucketSnapshot:o,config:await K()});i&&(h(d,i.message),process.exit(1)),q(d,{name:e,forkName:n})}export{de as default};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
function x(t,e,n){for(let o of e)if(t[o]!==void 0)return t[o];return n}function ne(t){return JSON.stringify(t,null,2)}function oe(t,e=" "){return Object.entries(t).map(([n,o])=>`${e}<${n}>${o}</${n}>`).join(`
|
|
2
|
+
`)}function re(t,e,n){let o=[`<${e}>`];return t.forEach(r=>{o.push(` <${n}>`),o.push(oe(r," ")),o.push(` </${n}>`)}),o.push(`</${e}>`),o.join(`
|
|
3
|
+
`)}function D(t){if(t==null)return"";if(t instanceof Date)return N(t);if(typeof t=="string"){let e=new Date(t);if(!isNaN(e.getTime())&&t.includes("T"))return N(e)}return String(t)}function N(t){return new Intl.DateTimeFormat(void 0,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}).format(t)}function ie(t,e){return e.map(n=>{if(n.width)return n.width;let o=n.header.length,r=t.reduce((i,a)=>{let s=D(a[n.key]);return Math.max(i,s.length)},0);return Math.max(o,r)})}function se(t,e){let n=[],o=ie(t,e),r="\u250C"+o.map(c=>"\u2500".repeat(c+2)).join("\u252C")+"\u2510",i="\u251C"+o.map(c=>"\u2500".repeat(c+2)).join("\u253C")+"\u2524",a="\u2514"+o.map(c=>"\u2500".repeat(c+2)).join("\u2534")+"\u2518";n.push(`
|
|
4
|
+
`+r);let s="\u2502 "+e.map((c,f)=>c.header.padEnd(o[f])).join(" \u2502 ")+" \u2502";return n.push(s),n.push(i),t.forEach(c=>{let f=e.map((u,p)=>{let E=D(c[u.key]);return u.align==="right"?E.padStart(o[p]):E.padEnd(o[p])});n.push("\u2502 "+f.join(" \u2502 ")+" \u2502")}),n.push(a+`
|
|
5
|
+
`),n.join(`
|
|
6
|
+
`)}function z(t,e,n,o,r){switch(e){case"json":return ne(t);case"xml":return re(t,n,o);default:return se(t,r)}}import{S3Client as Ke}from"@aws-sdk/client-s3";import{homedir as ae}from"os";import{join as R}from"path";import{readFileSync as ce,writeFileSync as de,existsSync as j,mkdirSync as ue}from"fs";import{chmod as ge}from"fs/promises";var S=R(ae(),".tigris"),m=R(S,"config.json");function fe(){j(S)||ue(S,{recursive:!0,mode:448})}function d(){if(j(m))try{let t=ce(m,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function h(t){fe(),de(m,JSON.stringify(t,null,2),{mode:384});try{await ge(m,384)}catch{}}async function A(t){let e=d();e.tokens=t,await h(e)}async function l(){return d().tokens||null}async function _(){let t=d();delete t.tokens,await h(t)}async function $(t){let e=d();e.organizations=t,await h(e)}function F(){return d().organizations||[]}function v(){return d().selectedOrganization||null}function K(){let t=d();return t.temporaryCredentials||t.credentials||null}async function L(t){let e=d();e.loginMethod=t,await h(e)}function U(){return d().loginMethod||null}import T from"axios";import le from"open";function y(){return{domain:process.env.AUTH0_DOMAIN||"auth.tigris.dev",clientId:process.env.AUTH0_CLIENT_ID||"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",audience:process.env.AUTH0_AUDIENCE||"https://tigris-os-api"}}var V=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function B(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_STORAGE_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var M=class{config;baseUrl;constructor(){this.config=y(),this.baseUrl=`https://${this.config.domain}`}async login(e){let o=(await T.post(`${this.baseUrl}/oauth/device/code`,{client_id:this.config.clientId,audience:this.config.audience,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data;e?.onDeviceCode?.(o.user_code,o.verification_uri),await this.sleep(2e3);try{await le(o.verification_uri_complete)}catch{}e?.onWaiting?.();let r=await this.pollForToken(o.device_code,o.interval||5);await A(r),L("oauth"),await this.extractAndStoreOrganizations(r.idToken)}async pollForToken(e,n){let r=0;for(;r<60;){r++;try{let a=(await T.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,device_code:e,grant_type:"urn:ietf:params:oauth:grant-type:device_code"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,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(T.isAxiosError(i)&&i.response){let a=i.response.data?.error;if(a==="authorization_pending"){await this.sleep(n*1e3);continue}if(a==="slow_down"){n+=5,await this.sleep(n*1e3);continue}throw new Error(i.response.data?.error_description||"Authentication failed")}throw i}}throw new Error("Authentication timed out. Please try again.")}async getAccessToken(){let e=await l();if(!e)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');let n=300*1e3;return Date.now()+n>=e.expiresAt&&(e=await this.refreshAccessToken(e)),e.accessToken}async refreshAccessToken(e){let n=null;if(e?.refreshToken?n=e:n=await l(),!n)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let r=(await T.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,grant_type:"refresh_token",refresh_token:n.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,i={accessToken:r.access_token,refreshToken:r.refresh_token||n.refreshToken,idToken:r.id_token||n.idToken,expiresAt:Date.now()+(r.expires_in||3600)*1e3};return await A(i),i}catch{throw await _(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await l();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let n=e.idToken.split(".")[1],o=Buffer.from(n,"base64").toString("utf8");return JSON.parse(o)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let n=e.split(".")[1],o=Buffer.from(n,"base64").toString("utf8"),i=JSON.parse(o)[V];if(!i)return;let a=i?.ns?.map(s=>typeof s=="object"&&s!==null?{id:s.id,name:s.name,displayName:s.name}:{id:s,name:s,displayName:s})||[];if(a.length===0)return;$(a)}catch{}}async getOrganizations(){return await this.getAccessToken(),F()}async logout(){await _()}async isAuthenticated(){return await l()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},I=null;function G(){return I||(I=new M),I}var q=B(),pe=y();async function me(){return U()}async function H(){if(await me()==="oauth"){let o=await G().getAccessToken();if(!v())throw new Error('No organization selected. Please run "tigris orgs select" first.');let i=q.endpoint,a=q.iamEndpoint,s=pe.domain;return{sessionToken:o,accessKeyId:"",secretAccessKey:"",endpoint:i,organizationId:v()??void 0,iamEndpoint:a,authDomain:s}}let e=K();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint};throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}import{listBuckets as Ae,getBucketInfo as te}from"@tigrisdata/storage";import{readFileSync as he,existsSync as ye}from"fs";import{join as J,dirname as Te}from"path";import{fileURLToPath as Ce}from"url";import*as W from"yaml";var we=Ce(import.meta.url),ke=Te(we),O=null;function xe(){let t=ke;for(let e=0;e<5;e++){let n=J(t,"specs.yaml");if(ye(n))return n;t=J(t,"..")}throw new Error("Could not find specs.yaml")}function Se(){if(!O){let t=xe(),e=he(t,"utf8");O=W.parse(e)}return O}function Y(t,e){let o=Se().commands.find(r=>r.name===t);return o?e&&o.operations?o.operations.find(r=>r.name===e)||null:o:null}var X={success:"\u2714",failure:"\u2716",hint:"\u2192"};function P(){return process.stdout.isTTY===!0}function C(t){let e=Y(t.command,t.operation);if(e)return e.messages}function w(t,e){let n=t;return n=n.replace(/\\n/g,`
|
|
7
|
+
`),e&&(n=n.replace(/\{\{(\w+)\}\}/g,(o,r)=>{let i=e[r];return i!==void 0?String(i):`{{${r}}}`})),n}function Q(t,e){if(!P())return;let n=C(t);n?.onStart&&console.log(w(n.onStart,e))}function Z(t,e){if(!P())return;let n=C(t);n?.onSuccess&&console.log(`${X.success} ${w(n.onSuccess,e)}`)}function k(t,e,n){let o=C(t);o?.onFailure&&console.error(`${X.failure} ${w(o.onFailure,n)}`),e&&console.error(` ${e}`)}function b(t,e){if(!P())return;let n=C(t);n?.onEmpty&&console.log(w(n.onEmpty,e))}function ee(t,e){return{command:t,operation:e}}var g=ee("forks","list");async function _e(t){Q(g);let e=x(t,["name"]),n=x(t,["format","f","F"],"table");e||(k(g,"Source bucket name is required"),process.exit(1));let o=await H(),{data:r,error:i}=await te(e,{config:o});if(i&&(k(g,i.message),process.exit(1)),!r.hasForks){b(g);return}let{data:a,error:s}=await Ae({config:o});s&&(k(g,s.message),process.exit(1));let c=[];for(let u of a.buckets){if(u.name===e)continue;let{data:p}=await te(u.name,{config:o});p?.sourceBucketName===e&&c.push({name:u.name,created:u.creationDate})}if(c.length===0){b(g);return}let f=z(c,n,"forks","fork",[{key:"name",header:"Name"},{key:"created",header:"Created"}]);console.log(f),Z(g,{count:c.length})}export{_e as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
`),n&&(
|
|
1
|
+
import q from"enquirer";import{homedir as I}from"os";import{join as p}from"path";import{readFileSync as z,writeFileSync as b,existsSync as m,mkdirSync as K}from"fs";import{chmod as F}from"fs/promises";var a=p(I(),".tigris"),i=p(a,"config.json");function $(){m(a)||K(a,{recursive:!0,mode:448})}function c(){if(m(i))try{let e=z(i,"utf8");return JSON.parse(e)}catch{return{}}return{}}async function y(e){$(),b(i,JSON.stringify(e,null,2),{mode:384});try{await F(i,384)}catch{}}function C(){return c().credentials||null}async function S(e){let n=c();n.temporaryCredentials=e,await y(n)}async function x(e){let n=c();n.loginMethod=e,await y(n)}import{readFileSync as D,existsSync as _}from"fs";import{join as v,dirname as V}from"path";import{fileURLToPath as j}from"url";import*as h from"yaml";var E=j(import.meta.url),L=V(E),l=null;function N(){let e=L;for(let n=0;n<5;n++){let t=v(e,"specs.yaml");if(_(t))return t;e=v(e,"..")}throw new Error("Could not find specs.yaml")}function R(){if(!l){let e=N(),n=D(e,"utf8");l=h.parse(n)}return l}function M(e,n){let s=R().commands.find(r=>r.name===e);return s?n&&s.operations?s.operations.find(r=>r.name===n)||null:s:null}var A={success:"\u2714",failure:"\u2716",hint:"\u2192"};function O(){return process.stdout.isTTY===!0}function g(e){let n=M(e.command,e.operation);if(n)return n.messages}function f(e,n){let t=e;return t=t.replace(/\\n/g,`
|
|
2
|
+
`),n&&(t=t.replace(/\{\{(\w+)\}\}/g,(s,r)=>{let o=n[r];return o!==void 0?String(o):`{{${r}}}`})),t}function w(e,n){if(!O())return;let t=g(e);t?.onStart&&console.log(f(t.onStart,n))}function T(e,n){if(!O())return;let t=g(e);t?.onSuccess&&console.log(`${A.success} ${f(t.onSuccess,n)}`)}function P(e,n,t){let s=g(e);s?.onFailure&&console.error(`${A.failure} ${f(s.onFailure,t)}`),n&&console.error(` ${n}`)}function k(e,n){return{command:e,operation:n}}var{prompt:G}=q,u=k("login","credentials");async function Y(e){w(u);let n=e["access-key"]||e.accessKey||e.key||e.Key||e.accesskey,t=e["access-secret"]||e.accessSecret||e.secret||e.Secret||e.accesssecret;if(!n||!t){let o=[];n||o.push({type:"input",name:"accessKey",message:"Access Key ID:",required:!0}),t||o.push({type:"password",name:"accessSecret",message:"Secret Access Key:",required:!0});let d=await G(o);n=n||d.accessKey,t=t||d.accessSecret}(!n||!t)&&(P(u,"Access key and secret are required"),process.exit(1));let r=C()?.endpoint||process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev";await S({accessKeyId:n,secretAccessKey:t,endpoint:r}),await x("credentials"),T(u)}export{Y as default};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import m from"axios";import B from"open";function A(){return{domain:process.env.AUTH0_DOMAIN||"auth.tigris.dev",clientId:process.env.AUTH0_CLIENT_ID||"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",audience:process.env.AUTH0_AUDIENCE||"https://tigris-os-api"}}var _=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";import{homedir as G}from"os";import{join as I}from"path";import{readFileSync as V,writeFileSync as H,existsSync as O,mkdirSync as Y}from"fs";import{chmod as J}from"fs/promises";var C=I(G(),".tigris"),u=I(C,"config.json");function W(){O(C)||Y(C,{recursive:!0,mode:448})}function c(){if(O(u))try{let t=V(u,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function g(t){W(),H(u,JSON.stringify(t,null,2),{mode:384});try{await J(u,384)}catch{}}async function y(t){let e=c();e.tokens=t,await g(e)}async function p(){return c().tokens||null}async function T(){let t=c();delete t.tokens,await g(t)}async function P(t){let e=c();e.organizations=t,await g(e)}function M(){return c().organizations||[]}async function E(t){let e=c();e.selectedOrganization=t,await g(e)}async function b(t){let e=c();e.loginMethod=t,await g(e)}var S=class{config;baseUrl;constructor(){this.config=A(),this.baseUrl=`https://${this.config.domain}`}async login(e){let o=(await m.post(`${this.baseUrl}/oauth/device/code`,{client_id:this.config.clientId,audience:this.config.audience,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data;e?.onDeviceCode?.(o.user_code,o.verification_uri),await this.sleep(2e3);try{await B(o.verification_uri_complete)}catch{}e?.onWaiting?.();let i=await this.pollForToken(o.device_code,o.interval||5);await y(i),b("oauth"),await this.extractAndStoreOrganizations(i.idToken)}async pollForToken(e,n){let i=0;for(;i<60;){i++;try{let s=(await m.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,device_code:e,grant_type:"urn:ietf:params:oauth:grant-type:device_code"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,a=Date.now()+(s.expires_in||3600)*1e3;return{accessToken:s.access_token,refreshToken:s.refresh_token,idToken:s.id_token,expiresAt:a}}catch(r){if(m.isAxiosError(r)&&r.response){let s=r.response.data?.error;if(s==="authorization_pending"){await this.sleep(n*1e3);continue}if(s==="slow_down"){n+=5,await this.sleep(n*1e3);continue}throw new Error(r.response.data?.error_description||"Authentication failed")}throw r}}throw new Error("Authentication timed out. Please try again.")}async getAccessToken(){let e=await p();if(!e)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');let n=300*1e3;return Date.now()+n>=e.expiresAt&&(e=await this.refreshAccessToken(e)),e.accessToken}async refreshAccessToken(e){let n=null;if(e?.refreshToken?n=e:n=await p(),!n)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let i=(await m.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,grant_type:"refresh_token",refresh_token:n.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,r={accessToken:i.access_token,refreshToken:i.refresh_token||n.refreshToken,idToken:i.id_token||n.idToken,expiresAt:Date.now()+(i.expires_in||3600)*1e3};return await y(r),r}catch{throw await T(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await p();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let n=e.idToken.split(".")[1],o=Buffer.from(n,"base64").toString("utf8");return JSON.parse(o)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let n=e.split(".")[1],o=Buffer.from(n,"base64").toString("utf8"),r=JSON.parse(o)[_];if(!r)return;let s=r?.ns?.map(a=>typeof a=="object"&&a!==null?{id:a.id,name:a.name,displayName:a.name}:{id:a,name:a,displayName:a})||[];if(s.length===0)return;P(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),M()}async logout(){await T()}async isAuthenticated(){return await p()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},w=null;function z(){return w||(w=new S),w}import{readFileSync as q,existsSync as K}from"fs";import{join as N,dirname as Q}from"path";import{fileURLToPath as X}from"url";import*as D from"yaml";var Z=X(import.meta.url),ee=Q(Z),k=null;function ne(){let t=ee;for(let e=0;e<5;e++){let n=N(t,"specs.yaml");if(K(n))return n;t=N(t,"..")}throw new Error("Could not find specs.yaml")}function te(){if(!k){let t=ne(),e=q(t,"utf8");k=D.parse(e)}return k}function R(t,e){let o=te().commands.find(i=>i.name===t);return o?e&&o.operations?o.operations.find(i=>i.name===e)||null:o:null}var x={success:"\u2714",failure:"\u2716",hint:"\u2192"};function h(){return process.stdout.isTTY===!0}function d(t){let e=R(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 $(t,e){if(!h())return;let n=d(t);n?.onStart&&console.log(f(n.onStart,e))}function v(t,e){if(!h())return;let n=d(t);n?.onSuccess&&console.log(`${x.success} ${f(n.onSuccess,e)}`)}function F(t,e,n){let o=d(t);o?.onFailure&&console.error(`${x.failure} ${f(o.onFailure,n)}`),e&&console.error(` ${e}`)}function j(t,e){if(!h())return;let n=d(t);n?.onAlreadyDone&&console.log(f(n.onAlreadyDone,e))}function L(t,e){if(!h())return;let n=d(t);n?.hint&&console.log(`${x.hint} ${f(n.hint,e)}`)}function U(t,e){return{command:t,operation:e}}var l=U("login","oauth");async function oe(){$(l);try{let t=z();if(await t.isAuthenticated()){j(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 E(o.id),v(l,{org:o.displayName||o.name}),n.length>1&&L(l,{count:n.length})}else v(l,{org:"none"})}catch{F(l),process.exit(1)}}var ve=oe;export{ve as default,oe as oauth};
|
package/dist/lib/login/select.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
`),
|
|
3
|
-
Your confirmation code: ${
|
|
4
|
-
`),console.log(`If browser doesn't open, visit: ${
|
|
5
|
-
Waiting for authentication...`)});let n=await
|
|
1
|
+
import de from"enquirer";import y from"axios";import Z from"open";function E(){return{domain:process.env.AUTH0_DOMAIN||"auth.tigris.dev",clientId:process.env.AUTH0_CLIENT_ID||"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",audience:process.env.AUTH0_AUDIENCE||"https://tigris-os-api"}}var b=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";import{homedir as Y}from"os";import{join as N}from"path";import{readFileSync as J,writeFileSync as W,existsSync as D,mkdirSync as B}from"fs";import{chmod as Q}from"fs/promises";var A=N(Y(),".tigris"),m=N(A,"config.json");function X(){D(A)||B(A,{recursive:!0,mode:448})}function c(){if(D(m))try{let t=J(m,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function l(t){X(),W(m,JSON.stringify(t,null,2),{mode:384});try{await Q(m,384)}catch{}}async function x(t){let e=c();e.tokens=t,await l(e)}async function g(){return c().tokens||null}async function v(){let t=c();delete t.tokens,await l(t)}async function z(t){let e=c();e.organizations=t,await l(e)}function R(){return c().organizations||[]}async function K(t){let e=c();e.selectedOrganization=t,await l(e)}function $(){return c().credentials||null}async function F(t){let e=c();e.temporaryCredentials=t,await l(e)}async function h(t){let e=c();e.loginMethod=t,await l(e)}var I=class{config;baseUrl;constructor(){this.config=E(),this.baseUrl=`https://${this.config.domain}`}async login(e){let r=(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?.(r.user_code,r.verification_uri),await this.sleep(2e3);try{await Z(r.verification_uri_complete)}catch{}e?.onWaiting?.();let i=await this.pollForToken(r.device_code,r.interval||5);await x(i),h("oauth"),await this.extractAndStoreOrganizations(i.idToken)}async pollForToken(e,n){let i=0;for(;i<60;){i++;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(o){if(y.isAxiosError(o)&&o.response){let s=o.response.data?.error;if(s==="authorization_pending"){await this.sleep(n*1e3);continue}if(s==="slow_down"){n+=5,await this.sleep(n*1e3);continue}throw new Error(o.response.data?.error_description||"Authentication failed")}throw o}}throw new Error("Authentication timed out. Please try again.")}async getAccessToken(){let e=await 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 y.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,grant_type:"refresh_token",refresh_token:n.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,o={accessToken: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 x(o),o}catch{throw await v(),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],r=Buffer.from(n,"base64").toString("utf8");return JSON.parse(r)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let n=e.split(".")[1],r=Buffer.from(n,"base64").toString("utf8"),o=JSON.parse(r)[b];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;z(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),R()}async logout(){await v()}async isAuthenticated(){return await g()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},_=null;function L(){return _||(_=new I),_}import{readFileSync as ee,existsSync as te}from"fs";import{join as j,dirname as ne}from"path";import{fileURLToPath as re}from"url";import*as G from"yaml";var ie=re(import.meta.url),oe=ne(ie),O=null;function se(){let t=oe;for(let e=0;e<5;e++){let n=j(t,"specs.yaml");if(te(n))return n;t=j(t,"..")}throw new Error("Could not find specs.yaml")}function ae(){if(!O){let t=se(),e=ee(t,"utf8");O=G.parse(e)}return O}function U(t,e){let r=ae().commands.find(i=>i.name===t);return r?e&&r.operations?r.operations.find(i=>i.name===e)||null:r:null}var P={success:"\u2714",failure:"\u2716",hint:"\u2192"};function C(){return process.stdout.isTTY===!0}function u(t){let e=U(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,(r,i)=>{let o=e[i];return o!==void 0?String(o):`{{${i}}}`})),n}function S(t,e){if(!C())return;let n=u(t);n?.onStart&&console.log(f(n.onStart,e))}function p(t,e){if(!C())return;let n=u(t);n?.onSuccess&&console.log(`${P.success} ${f(n.onSuccess,e)}`)}function T(t,e,n){let r=u(t);r?.onFailure&&console.error(`${P.failure} ${f(r.onFailure,n)}`),e&&console.error(` ${e}`)}function q(t,e){if(!C())return;let n=u(t);n?.onAlreadyDone&&console.log(f(n.onAlreadyDone,e))}function V(t,e){if(!C())return;let n=u(t);n?.hint&&console.log(`${P.hint} ${f(n.hint,e)}`)}function w(t,e){return{command:t,operation:e}}var d=w("login","oauth");async function H(){S(d);try{let t=L();if(await t.isAuthenticated()){q(d);return}await t.login({onDeviceCode:(r,i)=>{console.log(`
|
|
3
|
+
Your confirmation code: ${r}
|
|
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 r=n[0];await K(r.id),p(d,{org:r.displayName||r.name}),n.length>1&&V(d,{count:n.length})}else p(d,{org:"none"})}catch{T(d),process.exit(1)}}import ce from"enquirer";var{prompt:le}=ce,M=w("login","credentials");async function k(t){S(M);let e=t["access-key"]||t.accessKey||t.key||t.Key||t.accesskey,n=t["access-secret"]||t.accessSecret||t.secret||t.Secret||t.accesssecret;if(!e||!n){let o=[];e||o.push({type:"input",name:"accessKey",message:"Access Key ID:",required:!0}),n||o.push({type:"password",name:"accessSecret",message:"Secret Access Key:",required:!0});let s=await le(o);e=e||s.accessKey,n=n||s.accessSecret}(!e||!n)&&(T(M,"Access key and secret are required"),process.exit(1));let i=$()?.endpoint||process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev";await F({accessKeyId:e,secretAccessKey:n,endpoint:i}),await h("credentials"),p(M)}var{prompt:ge}=de;async function ue(t){let e=t["access-key"]||t.accessKey||t.key||t.Key||t.accesskey,n=t["access-secret"]||t.accessSecret||t.secret||t.Secret||t.accesssecret;if(e||n){await k(t);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 H():await k(t)}export{ue as default};
|
package/dist/lib/logout.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{homedir as
|
|
2
|
-
`),n&&(t=t.replace(/\{\{(\w+)\}\}/g,(o,i)=>{let
|
|
1
|
+
import{homedir as A}from"os";import{join as p}from"path";import{readFileSync as P,writeFileSync as w,existsSync as d,mkdirSync as T}from"fs";import{chmod as z}from"fs/promises";var a=p(A(),".tigris"),r=p(a,"config.json");function b(){d(a)||T(a,{recursive:!0,mode:448})}function k(){if(d(r))try{let e=P(r,"utf8");return JSON.parse(e)}catch{return{}}return{}}async function F(e){b(),w(r,JSON.stringify(e,null,2),{mode:384});try{await z(r,384)}catch{}}async function m(){let n=k().credentials;await F({credentials:n})}import{readFileSync as I,existsSync as $}from"fs";import{join as C,dirname as D}from"path";import{fileURLToPath as V}from"url";import*as y from"yaml";var j=V(import.meta.url),_=D(j),c=null;function E(){let e=_;for(let n=0;n<5;n++){let t=C(e,"specs.yaml");if($(t))return t;e=C(e,"..")}throw new Error("Could not find specs.yaml")}function L(){if(!c){let e=E(),n=I(e,"utf8");c=y.parse(n)}return c}function S(e,n){let o=L().commands.find(i=>i.name===e);return o?n&&o.operations?o.operations.find(i=>i.name===n)||null:o:null}var x={success:"\u2714",failure:"\u2716",hint:"\u2192"};function v(){return process.stdout.isTTY===!0}function l(e){let n=S(e.command,e.operation);if(n)return n.messages}function g(e,n){let t=e;return t=t.replace(/\\n/g,`
|
|
2
|
+
`),n&&(t=t.replace(/\{\{(\w+)\}\}/g,(o,i)=>{let u=n[i];return u!==void 0?String(u):`{{${i}}}`})),t}function M(e,n){if(!v())return;let t=l(e);t?.onStart&&console.log(g(t.onStart,n))}function h(e,n){if(!v())return;let t=l(e);t?.onSuccess&&console.log(`${x.success} ${g(t.onSuccess,n)}`)}function f(e,n,t){let o=l(e);o?.onFailure&&console.error(`${x.failure} ${g(o.onFailure,t)}`),n&&console.error(` ${n}`)}function O(e,n){return{command:e,operation:n}}var s=O("logout");async function N(){M(s);try{await m(),h(s)}catch(e){e instanceof Error?f(s,e.message):f(s),process.exit(1)}}export{N as default};
|
package/dist/lib/ls.js
CHANGED
|
@@ -1 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
import{list as ge}from"@tigrisdata/storage";function b(t){let e=t.split("/");return{bucket:e[0],path:e.slice(1).join("/")}}function M(t,e,n){for(let i of e)if(t[i]!==void 0)return t[i];return n}function W(t){return JSON.stringify(t,null,2)}function q(t,e=" "){return Object.entries(t).map(([n,i])=>`${e}<${n}>${i}</${n}>`).join(`
|
|
2
|
+
`)}function J(t,e,n){let i=[`<${e}>`];return t.forEach(o=>{i.push(` <${n}>`),i.push(q(o," ")),i.push(` </${n}>`)}),i.push(`</${e}>`),i.join(`
|
|
3
|
+
`)}function N(t){if(t==null)return"";if(t instanceof Date)return E(t);if(typeof t=="string"){let e=new Date(t);if(!isNaN(e.getTime())&&t.includes("T"))return E(e)}return String(t)}function E(t){return new Intl.DateTimeFormat(void 0,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}).format(t)}function H(t,e){return e.map(n=>{if(n.width)return n.width;let i=n.header.length,o=t.reduce((r,a)=>{let s=N(a[n.key]);return Math.max(r,s.length)},0);return Math.max(i,o)})}function V(t,e){let n=[],i=H(t,e),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 "+e.map((d,p)=>d.header.padEnd(i[p])).join(" \u2502 ")+" \u2502";return n.push(s),n.push(r),t.forEach(d=>{let p=e.map((c,g)=>{let u=N(d[c.key]);return c.align==="right"?u.padStart(i[g]):u.padEnd(i[g])});n.push("\u2502 "+p.join(" \u2502 ")+" \u2502")}),n.push(a+`
|
|
5
|
+
`),n.join(`
|
|
6
|
+
`)}function C(t,e,n,i,o){switch(e){case"json":return W(t);case"xml":return J(t,n,i);default:return V(t,o)}}import{S3Client as Pe}from"@aws-sdk/client-s3";import{homedir as X}from"os";import{join as z}from"path";import{readFileSync as Q,writeFileSync as Y,existsSync as D,mkdirSync as Z}from"fs";import{chmod as ee}from"fs/promises";var x=z(X(),".tigris"),h=z(x,"config.json");function te(){D(x)||Z(x,{recursive:!0,mode:448})}function f(){if(D(h))try{let t=Q(h,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function T(t){te(),Y(h,JSON.stringify(t,null,2),{mode:384});try{await ee(h,384)}catch{}}async function I(t){let e=f();e.tokens=t,await T(e)}async function m(){return f().tokens||null}async function S(){let t=f();delete t.tokens,await T(t)}async function j(t){let e=f();e.organizations=t,await T(e)}function R(){return f().organizations||[]}function A(){return f().selectedOrganization||null}function K(){let t=f();return t.temporaryCredentials||t.credentials||null}async function L(t){let e=f();e.loginMethod=t,await T(e)}function $(){return f().loginMethod||null}import w from"axios";import ne from"open";function k(){return{domain:process.env.AUTH0_DOMAIN||"auth.tigris.dev",clientId:process.env.AUTH0_CLIENT_ID||"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",audience:process.env.AUTH0_AUDIENCE||"https://tigris-os-api"}}var B=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function F(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_STORAGE_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var _=class{config;baseUrl;constructor(){this.config=k(),this.baseUrl=`https://${this.config.domain}`}async login(e){let i=(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?.(i.user_code,i.verification_uri),await this.sleep(2e3);try{await ne(i.verification_uri_complete)}catch{}e?.onWaiting?.();let o=await this.pollForToken(i.device_code,i.interval||5);await I(o),L("oauth"),await this.extractAndStoreOrganizations(o.idToken)}async pollForToken(e,n){let o=0;for(;o<60;){o++;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(r){if(w.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 e=await m();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 m(),!n)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let o=(await w.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 I(r),r}catch{throw await S(),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 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)[B];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;j(a)}catch{}}async getOrganizations(){return await this.getAccessToken(),R()}async logout(){await S()}async isAuthenticated(){return await m()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},P=null;function G(){return P||(P=new _),P}var U=F(),ie=k();async function oe(){return $()}async function v(){if(await oe()==="oauth"){let i=await G().getAccessToken();if(!A())throw new Error('No organization selected. Please run "tigris orgs select" first.');let r=U.endpoint,a=U.iamEndpoint,s=ie.domain;return{sessionToken:i,accessKeyId:"",secretAccessKey:"",endpoint:r,organizationId:A()??void 0,iamEndpoint:a,authDomain:s}}let e=K();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint};throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}import{list as re,listBuckets as se}from"@tigrisdata/storage";async function ae(t){let e=M(t,["path"]);if(!e){let c=await v(),{data:g,error:u}=await se({config:c});u&&(console.error(u.message),process.exit(1));let l=(g.buckets||[]).map(O=>({name:O.name,created:O.creationDate})),y=C(l,"table","buckets","bucket",[{key:"name",header:"Name"},{key:"created",header:"Created"}]);console.log(y);return}let{bucket:n,path:i}=b(e);n||(console.error("Invalid path"),process.exit(1));let o=await v(),r=i?i.endsWith("/")?i:`${i}/`:void 0,{data:a,error:s}=await re({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,u=g.indexOf("/"),l=u===-1?g:g.slice(0,u+1),y=l.endsWith("/");return{key:l,size:y?"-":ce(c.size),modified:c.lastModified}}).filter((c,g,u)=>c.key!==""&&u.findIndex(l=>l.key===c.key)===g),p=C(d,"table","objects","object",[{key:"key",header:"Key"},{key:"size",header:"Size"},{key:"modified",header:"Modified"}]);console.log(p)}function ce(t){if(t===0)return"0 B";let e=["B","KB","MB","GB","TB"],n=Math.floor(Math.log(t)/Math.log(1024));return`${(t/Math.pow(1024,n)).toFixed(n>0?1:0)} ${e[n]}`}export{ae as default};
|
package/dist/lib/mk.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
async function e(t){t.
|
|
1
|
+
import{list as J}from"@tigrisdata/storage";function k(n){let e=n.split("/");return{bucket:e[0],path:e.slice(1).join("/")}}function C(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{homedir as b}from"os";import{join as x}from"path";import{readFileSync as D,writeFileSync as R,existsSync as I,mkdirSync as K}from"fs";import{chmod as L}from"fs/promises";var p=x(b(),".tigris"),g=x(p,"config.json");function j(){I(p)||K(p,{recursive:!0,mode:448})}function c(){if(I(g))try{let n=D(g,"utf8");return JSON.parse(n)}catch{return{}}return{}}async function l(n){j(),R(g,JSON.stringify(n,null,2),{mode:384});try{await L(g,384)}catch{}}async function m(n){let e=c();e.tokens=n,await l(e)}async function d(){return c().tokens||null}async function h(){let n=c();delete n.tokens,await l(n)}async function P(n){let e=c();e.organizations=n,await l(e)}function A(){return c().organizations||[]}function T(){return c().selectedOrganization||null}function _(){let n=c();return n.temporaryCredentials||n.credentials||null}async function S(n){let e=c();e.loginMethod=n,await l(e)}function v(){return c().loginMethod||null}import u from"axios";import F from"open";function f(){return{domain:process.env.AUTH0_DOMAIN||"auth.tigris.dev",clientId:process.env.AUTH0_CLIENT_ID||"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",audience:process.env.AUTH0_AUDIENCE||"https://tigris-os-api"}}var O=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function E(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_STORAGE_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var y=class{config;baseUrl;constructor(){this.config=f(),this.baseUrl=`https://${this.config.domain}`}async login(e){let i=(await u.post(`${this.baseUrl}/oauth/device/code`,{client_id:this.config.clientId,audience:this.config.audience,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data;e?.onDeviceCode?.(i.user_code,i.verification_uri),await this.sleep(2e3);try{await F(i.verification_uri_complete)}catch{}e?.onWaiting?.();let r=await this.pollForToken(i.device_code,i.interval||5);await m(r),S("oauth"),await this.extractAndStoreOrganizations(r.idToken)}async pollForToken(e,t){let r=0;for(;r<60;){r++;try{let s=(await u.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,device_code:e,grant_type:"urn:ietf:params:oauth:grant-type:device_code"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,a=Date.now()+(s.expires_in||3600)*1e3;return{accessToken:s.access_token,refreshToken:s.refresh_token,idToken:s.id_token,expiresAt:a}}catch(o){if(u.isAxiosError(o)&&o.response){let s=o.response.data?.error;if(s==="authorization_pending"){await this.sleep(t*1e3);continue}if(s==="slow_down"){t+=5,await this.sleep(t*1e3);continue}throw new Error(o.response.data?.error_description||"Authentication failed")}throw o}}throw new Error("Authentication timed out. Please try again.")}async getAccessToken(){let e=await d();if(!e)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');let t=300*1e3;return Date.now()+t>=e.expiresAt&&(e=await this.refreshAccessToken(e)),e.accessToken}async refreshAccessToken(e){let t=null;if(e?.refreshToken?t=e:t=await d(),!t)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let r=(await u.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 m(o),o}catch{throw await h(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await d();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let t=e.idToken.split(".")[1],i=Buffer.from(t,"base64").toString("utf8");return JSON.parse(i)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let t=e.split(".")[1],i=Buffer.from(t,"base64").toString("utf8"),o=JSON.parse(i)[O];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;P(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),A()}async logout(){await h()}async isAuthenticated(){return await d()!==null}sleep(e){return new Promise(t=>setTimeout(t,e))}},w=null;function N(){return w||(w=new y),w}var z=E(),G=f();async function U(){return v()}async function M(){if(await U()==="oauth"){let i=await N().getAccessToken();if(!T())throw new Error('No organization selected. Please run "tigris orgs select" first.');let o=z.endpoint,s=z.iamEndpoint,a=G.domain;return{sessionToken:i,accessKeyId:"",secretAccessKey:"",endpoint:o,organizationId:T()??void 0,iamEndpoint:s,authDomain:a}}let e=_();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint};throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}import{createBucket as $,put as q}from"@tigrisdata/storage";async function B(n){let e=C(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 M();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`)}else{let{error:o}=await $(t,{config:r});o&&(console.error(o.message),process.exit(1)),console.log(`Bucket '${t}' created`)}}export{B as default};
|
package/dist/lib/mv.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
async function t(e){let s=e.
|
|
1
|
+
import*as Y from"readline";import{list as D}from"@tigrisdata/storage";function I(t){let e=t.split("/");return{bucket:e[0],path:e.slice(1).join("/")}}async function P(t,e,n){let{data:i}=await D({prefix:`${e}/`,limit:1,config:{...n,bucket:t}});return!!(i?.items&&i.items.length>0)}async function R(t,e,n){let i=[],o;do{let{data:r,error:s}=await D({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 w(t,e,n){for(let i of e)if(t[i]!==void 0)return t[i];return n}import{S3Client as _e}from"@aws-sdk/client-s3";import{homedir as te}from"os";import{join as F}from"path";import{readFileSync as oe,writeFileSync as ne,existsSync as L,mkdirSync as re}from"fs";import{chmod as ie}from"fs/promises";var A=F(te(),".tigris"),y=F(A,"config.json");function se(){L(A)||re(A,{recursive:!0,mode:448})}function g(){if(L(y))try{let t=oe(y,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function T(t){se(),ne(y,JSON.stringify(t,null,2),{mode:384});try{await ie(y,384)}catch{}}async function b(t){let e=g();e.tokens=t,await T(e)}async function h(){return g().tokens||null}async function _(){let t=g();delete t.tokens,await T(t)}async function j(t){let e=g();e.organizations=t,await T(e)}function K(){return g().organizations||[]}function S(){return g().selectedOrganization||null}function q(){let t=g();return t.temporaryCredentials||t.credentials||null}async function G(t){let e=g();e.loginMethod=t,await T(e)}function U(){return g().loginMethod||null}import v from"axios";import ae 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 W=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function H(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_STORAGE_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var O=class{config;baseUrl;constructor(){this.config=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 ae(i.verification_uri_complete)}catch{}e?.onWaiting?.();let o=await this.pollForToken(i.device_code,i.interval||5);await b(o),G("oauth"),await this.extractAndStoreOrganizations(o.idToken)}async pollForToken(e,n){let o=0;for(;o<60;){o++;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(r){if(v.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 v.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 b(r),r}catch{throw await _(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await h();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let 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)[W];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(),K()}async logout(){await _()}async isAuthenticated(){return await h()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},E=null;function J(){return E||(E=new O),E}var Q=H(),ce=C();async function de(){return U()}async function B(){if(await de()==="oauth"){let i=await J().getAccessToken();if(!S())throw new Error('No organization selected. Please run "tigris orgs select" first.');let r=Q.endpoint,s=Q.iamEndpoint,a=ce.domain;return{sessionToken:i,accessKeyId:"",secretAccessKey:"",endpoint:r,organizationId:S()??void 0,iamEndpoint:s,authDomain:a}}let e=q();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 le,put as V,remove as N,list as ge}from"@tigrisdata/storage";async function X(t){let e=Y.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 fe(t){let e=w(t,["src"]),n=w(t,["dest"]),i=w(t,["force","f","F"]);(!e||!n)&&(console.error("both src and dest arguments are required"),process.exit(1));let o=I(e),r=I(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 B(),a=e.includes("*"),f=e.endsWith("/");if(!a&&!f&&o.path&&(f=await P(o.bucket,o.path,s)),a||f){let c=a?o.path.replace("*",""):o.path.endsWith("/")?o.path:`${o.path}/`,{items:l,error:u}=await R(o.bucket,c||void 0,s);u&&(console.error(u.message),process.exit(1));let p=l.filter(d=>d.name!==c),{data:Z}=await ge({prefix:c,limit:1,config:{...s,bucket:o.bucket}}),x=c?Z?.items?.some(d=>d.name===c):!1;if(p.length===0&&!x){console.log("No objects to move");return}let ee=p.length+(x?1:0);if(!i&&!await X(`Are you sure you want to move ${ee} object(s)?`)){console.log("Aborted");return}let k=0;for(let d of p){let m=c?d.name.slice(c.length):d.name,$=r.path?`${r.path.replace(/\/$/,"")}/${m}`:m,z=await M(s,o.bucket,d.name,r.bucket,$);z.error?console.error(`Failed to move ${d.name}: ${z.error}`):(console.log(`Moved ${d.name} -> ${r.bucket}/${$}`),k++)}if(x)if(r.path){let d=`${r.path.replace(/\/$/,"")}/`,m=await M(s,o.bucket,c,r.bucket,d);m.error?console.error(`Failed to move folder marker: ${m.error}`):k++}else{let{error:d}=await N(c,{config:{...s,bucket:o.bucket}});d?console.error(`Failed to remove source folder marker: ${d.message}`):k++}console.log(`Moved ${k} 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 P(r.bucket,r.path,s)?l=`${r.path}/${c}`:l=r.path:l=c,!i&&!await X(`Are you sure you want to move '${o.bucket}/${o.path}'?`)){console.log("Aborted");return}let u=await M(s,o.bucket,o.path,r.bucket,l);u.error&&(console.error(u.error),process.exit(1)),console.log(`Moved ${e} -> ${r.bucket}/${l}`)}}async function M(t,e,n,i,o){if(n.endsWith("/")){let{error:c}=await V(o,"",{config:{...t,bucket:i}});if(c)return{error:c.message};let{error:l}=await N(n,{config:{...t,bucket:e}});return l?{error:`Copied but failed to delete source: ${l.message}`}:{}}let{data:r,error:s}=await le(n,"stream",{config:{...t,bucket:e}});if(s)return{error:s.message};let{error:a}=await V(o,r,{config:{...t,bucket:i}});if(a)return{error:a.message};let{error:f}=await N(n,{config:{...t,bucket:e}});return f?{error:`Copied but failed to delete source: ${f.message}`}:{}}export{fe as default};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function h(t,e,n){for(let o of e)if(t[o]!==void 0)return t[o];return n}import{S3Client as Ae}from"@aws-sdk/client-s3";import{homedir as H}from"os";import{join as _}from"path";import{readFileSync as B,writeFileSync as J,existsSync as I,mkdirSync as Y}from"fs";import{chmod as W}from"fs/promises";var y=_(H(),".tigris"),l=_(y,"config.json");function Q(){I(y)||Y(y,{recursive:!0,mode:448})}function c(){if(I(l))try{let t=B(l,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function u(t){Q(),J(l,JSON.stringify(t,null,2),{mode:384});try{await W(l,384)}catch{}}async function C(t){let e=c();e.tokens=t,await u(e)}async function g(){return c().tokens||null}async function T(){let t=c();delete t.tokens,await u(t)}async function M(t){let e=c();e.organizations=t,await u(e)}function O(){return c().organizations||[]}function w(){return c().selectedOrganization||null}function P(){let t=c();return t.temporaryCredentials||t.credentials||null}async function E(t){let e=c();e.loginMethod=t,await u(e)}function b(){return c().loginMethod||null}import p from"axios";import X from"open";function f(){return{domain:process.env.AUTH0_DOMAIN||"auth.tigris.dev",clientId:process.env.AUTH0_CLIENT_ID||"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",audience:process.env.AUTH0_AUDIENCE||"https://tigris-os-api"}}var N=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function z(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_STORAGE_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var S=class{config;baseUrl;constructor(){this.config=f(),this.baseUrl=`https://${this.config.domain}`}async login(e){let o=(await p.post(`${this.baseUrl}/oauth/device/code`,{client_id:this.config.clientId,audience:this.config.audience,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data;e?.onDeviceCode?.(o.user_code,o.verification_uri),await this.sleep(2e3);try{await X(o.verification_uri_complete)}catch{}e?.onWaiting?.();let i=await this.pollForToken(o.device_code,o.interval||5);await C(i),E("oauth"),await this.extractAndStoreOrganizations(i.idToken)}async pollForToken(e,n){let i=0;for(;i<60;){i++;try{let s=(await p.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,device_code:e,grant_type:"urn:ietf:params:oauth:grant-type:device_code"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,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(p.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 p.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,grant_type:"refresh_token",refresh_token:n.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,r={accessToken:i.access_token,refreshToken:i.refresh_token||n.refreshToken,idToken:i.id_token||n.idToken,expiresAt:Date.now()+(i.expires_in||3600)*1e3};return await C(r),r}catch{throw await T(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await 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)[N];if(!r)return;let s=r?.ns?.map(a=>typeof a=="object"&&a!==null?{id:a.id,name:a.name,displayName:a.name}:{id:a,name:a,displayName:a})||[];if(s.length===0)return;M(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),O()}async logout(){await T()}async isAuthenticated(){return await g()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},k=null;function D(){return k||(k=new S),k}var R=z(),Z=f();async function ee(){return b()}async function L(){if(await ee()==="oauth"){let o=await D().getAccessToken();if(!w())throw new Error('No organization selected. Please run "tigris orgs select" first.');let r=R.endpoint,s=R.iamEndpoint,a=Z.domain;return{sessionToken:o,accessKeyId:"",secretAccessKey:"",endpoint:r,organizationId:w()??void 0,iamEndpoint:s,authDomain:a}}let e=P();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint};throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}import{remove as ge}from"@tigrisdata/storage";import{readFileSync as te,existsSync as ne}from"fs";import{join as K,dirname as oe}from"path";import{fileURLToPath as ie}from"url";import*as j from"yaml";var re=ie(import.meta.url),se=oe(re),x=null;function ae(){let t=se;for(let e=0;e<5;e++){let n=K(t,"specs.yaml");if(ne(n))return n;t=K(t,"..")}throw new Error("Could not find specs.yaml")}function ce(){if(!x){let t=ae(),e=te(t,"utf8");x=j.parse(e)}return x}function $(t,e){let o=ce().commands.find(i=>i.name===t);return o?e&&o.operations?o.operations.find(i=>i.name===e)||null:o:null}var F={success:"\u2714",failure:"\u2716",hint:"\u2192"};function U(){return process.stdout.isTTY===!0}function A(t){let e=$(t.command,t.operation);if(e)return e.messages}function v(t,e){let n=t;return n=n.replace(/\\n/g,`
|
|
2
|
+
`),e&&(n=n.replace(/\{\{(\w+)\}\}/g,(o,i)=>{let r=e[i];return r!==void 0?String(r):`{{${i}}}`})),n}function G(t,e){if(!U())return;let n=A(t);n?.onStart&&console.log(v(n.onStart,e))}function q(t,e){if(!U())return;let n=A(t);n?.onSuccess&&console.log(`${F.success} ${v(n.onSuccess,e)}`)}function m(t,e,n){let o=A(t);o?.onFailure&&console.error(`${F.failure} ${v(o.onFailure,n)}`),e&&console.error(` ${e}`)}function V(t,e){return{command:t,operation:e}}var d=V("objects","delete");async function de(t){G(d);let e=h(t,["bucket"]),n=h(t,["key"]);e||(m(d,"Bucket name is required"),process.exit(1)),n||(m(d,"Object key is required"),process.exit(1));let o=await L(),i=Array.isArray(n)?n:[n];for(let r of i){let{error:s}=await ge(r,{config:{...o,bucket:e}});s&&(m(d,s.message,{key:r}),process.exit(1)),q(d,{key:r})}}export{de as default};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{createWriteStream as ue,writeFileSync as me}from"fs";import{Readable as W}from"stream";import{pipeline as B}from"stream/promises";import{extname as he}from"path";function l(t,e,n){for(let o of e)if(t[o]!==void 0)return t[o];return n}import{S3Client as Ne}from"@aws-sdk/client-s3";import{homedir as X}from"os";import{join as O}from"path";import{readFileSync as Q,writeFileSync as Z,existsSync as M,mkdirSync as ee}from"fs";import{chmod as te}from"fs/promises";var T=O(X(),".tigris"),m=O(T,"config.json");function ne(){M(T)||ee(T,{recursive:!0,mode:448})}function c(){if(M(m))try{let t=Q(m,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function h(t){ne(),Z(m,JSON.stringify(t,null,2),{mode:384});try{await te(m,384)}catch{}}async function w(t){let e=c();e.tokens=t,await h(e)}async function p(){return c().tokens||null}async function k(){let t=c();delete t.tokens,await h(t)}async function P(t){let e=c();e.organizations=t,await h(e)}function b(){return c().organizations||[]}function x(){return c().selectedOrganization||null}function E(){let t=c();return t.temporaryCredentials||t.credentials||null}async function N(t){let e=c();e.loginMethod=t,await h(e)}function z(){return c().loginMethod||null}import C from"axios";import oe from"open";function y(){return{domain:process.env.AUTH0_DOMAIN||"auth.tigris.dev",clientId:process.env.AUTH0_CLIENT_ID||"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",audience:process.env.AUTH0_AUDIENCE||"https://tigris-os-api"}}var j=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function D(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_STORAGE_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var A=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 oe(o.verification_uri_complete)}catch{}e?.onWaiting?.();let i=await this.pollForToken(o.device_code,o.interval||5);await w(i),N("oauth"),await this.extractAndStoreOrganizations(i.idToken)}async pollForToken(e,n){let i=0;for(;i<60;){i++;try{let a=(await C.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,device_code:e,grant_type:"urn:ietf:params:oauth:grant-type:device_code"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,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(C.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 p();if(!e)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');let n=300*1e3;return Date.now()+n>=e.expiresAt&&(e=await this.refreshAccessToken(e)),e.accessToken}async refreshAccessToken(e){let n=null;if(e?.refreshToken?n=e:n=await p(),!n)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let i=(await C.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,grant_type:"refresh_token",refresh_token:n.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,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 w(s),s}catch{throw await k(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await p();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let n=e.idToken.split(".")[1],o=Buffer.from(n,"base64").toString("utf8");return JSON.parse(o)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let n=e.split(".")[1],o=Buffer.from(n,"base64").toString("utf8"),s=JSON.parse(o)[j];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;P(a)}catch{}}async getOrganizations(){return await this.getAccessToken(),b()}async logout(){await k()}async isAuthenticated(){return await p()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},S=null;function R(){return S||(S=new A),S}var L=D(),ie=y();async function se(){return z()}async function K(){if(await se()==="oauth"){let o=await R().getAccessToken();if(!x())throw new Error('No organization selected. Please run "tigris orgs select" first.');let s=L.endpoint,a=L.iamEndpoint,r=ie.domain;return{sessionToken:o,accessKeyId:"",secretAccessKey:"",endpoint:s,organizationId:x()??void 0,iamEndpoint:a,authDomain:r}}let e=E();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint};throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}import{get as J}from"@tigrisdata/storage";import{readFileSync as re,existsSync as ae}from"fs";import{join as F,dirname as ce}from"path";import{fileURLToPath as ge}from"url";import*as $ from"yaml";var de=ge(import.meta.url),le=ce(de),v=null;function pe(){let t=le;for(let e=0;e<5;e++){let n=F(t,"specs.yaml");if(ae(n))return n;t=F(t,"..")}throw new Error("Could not find specs.yaml")}function fe(){if(!v){let t=pe(),e=re(t,"utf8");v=$.parse(e)}return v}function q(t,e){let o=fe().commands.find(i=>i.name===t);return o?e&&o.operations?o.operations.find(i=>i.name===e)||null:o:null}var U={success:"\u2714",failure:"\u2716",hint:"\u2192"};function G(){return process.stdout.isTTY===!0}function _(t){let e=q(t.command,t.operation);if(e)return e.messages}function I(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 V(t,e){if(!G())return;let n=_(t);n?.onStart&&console.log(I(n.onStart,e))}function f(t,e){if(!G())return;let n=_(t);n?.onSuccess&&console.log(`${U.success} ${I(n.onSuccess,e)}`)}function u(t,e,n){let o=_(t);o?.onFailure&&console.error(`${U.failure} ${I(o.onFailure,n)}`),e&&console.error(` ${e}`)}function H(t,e){return{command:t,operation:e}}var g=H("objects","get"),ye=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 Ce(t,e){let o=he(e||t).toLowerCase();return ye.has(o)?"string":"stream"}async function Te(t){V(g);let e=l(t,["bucket"]),n=l(t,["key"]),o=l(t,["output","o","O"]),i=l(t,["mode","m","M"]);e||(u(g,"Bucket name is required"),process.exit(1)),n||(u(g,"Object key is required"),process.exit(1));let s=await K();if((i||Ce(n,o))==="stream"){let{data:r,error:d}=await J(n,"stream",{config:{...s,bucket:e}});if(d&&(u(g,d.message),process.exit(1)),o){let Y=ue(o);await B(W.fromWeb(r),Y),f(g,{key:n,output:o})}else await B(W.fromWeb(r),process.stdout),f(g)}else{let{data:r,error:d}=await J(n,"string",{config:{...s,bucket:e}});d&&(u(g,d.message),process.exit(1)),o?(me(o,r),f(g,{key:n,output:o})):(console.log(r),f(g))}}export{Te as default};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
function f(t,e,n){for(let o of e)if(t[o]!==void 0)return t[o];return n}function te(t){return JSON.stringify(t,null,2)}function ne(t,e=" "){return Object.entries(t).map(([n,o])=>`${e}<${n}>${o}</${n}>`).join(`
|
|
2
|
+
`)}function oe(t,e,n){let o=[`<${e}>`];return t.forEach(i=>{o.push(` <${n}>`),o.push(ne(i," ")),o.push(` </${n}>`)}),o.push(`</${e}>`),o.join(`
|
|
3
|
+
`)}function z(t){if(t==null)return"";if(t instanceof Date)return E(t);if(typeof t=="string"){let e=new Date(t);if(!isNaN(e.getTime())&&t.includes("T"))return E(e)}return String(t)}function E(t){return new Intl.DateTimeFormat(void 0,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}).format(t)}function ie(t,e){return e.map(n=>{if(n.width)return n.width;let o=n.header.length,i=t.reduce((r,s)=>{let a=z(s[n.key]);return Math.max(r,a.length)},0);return Math.max(o,i)})}function re(t,e){let n=[],o=ie(t,e),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";n.push(`
|
|
4
|
+
`+i);let a="\u2502 "+e.map((c,g)=>c.header.padEnd(o[g])).join(" \u2502 ")+" \u2502";return n.push(a),n.push(r),t.forEach(c=>{let g=e.map((O,b)=>{let P=z(c[O.key]);return O.align==="right"?P.padStart(o[b]):P.padEnd(o[b])});n.push("\u2502 "+g.join(" \u2502 ")+" \u2502")}),n.push(s+`
|
|
5
|
+
`),n.join(`
|
|
6
|
+
`)}function N(t,e,n,o,i){switch(e){case"json":return te(t);case"xml":return oe(t,n,o);default:return re(t,i)}}import{S3Client as Fe}from"@aws-sdk/client-s3";import{homedir as se}from"os";import{join as D}from"path";import{readFileSync as ae,writeFileSync as ce,existsSync as j,mkdirSync as de}from"fs";import{chmod as ge}from"fs/promises";var w=D(se(),".tigris"),p=D(w,"config.json");function ue(){j(w)||de(w,{recursive:!0,mode:448})}function d(){if(j(p))try{let t=ae(p,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function m(t){ue(),ce(p,JSON.stringify(t,null,2),{mode:384});try{await ge(p,384)}catch{}}async function k(t){let e=d();e.tokens=t,await m(e)}async function u(){return d().tokens||null}async function x(){let t=d();delete t.tokens,await m(t)}async function R(t){let e=d();e.organizations=t,await m(e)}function $(){return d().organizations||[]}function S(){return d().selectedOrganization||null}function K(){let t=d();return t.temporaryCredentials||t.credentials||null}async function F(t){let e=d();e.loginMethod=t,await m(e)}function L(){return d().loginMethod||null}import y from"axios";import le from"open";function h(){return{domain:process.env.AUTH0_DOMAIN||"auth.tigris.dev",clientId:process.env.AUTH0_CLIENT_ID||"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",audience:process.env.AUTH0_AUDIENCE||"https://tigris-os-api"}}var B=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function U(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_STORAGE_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var _=class{config;baseUrl;constructor(){this.config=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 le(o.verification_uri_complete)}catch{}e?.onWaiting?.();let i=await this.pollForToken(o.device_code,o.interval||5);await k(i),F("oauth"),await this.extractAndStoreOrganizations(i.idToken)}async pollForToken(e,n){let i=0;for(;i<60;){i++;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(r){if(y.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 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 y.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 k(r),r}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"),r=JSON.parse(o)[B];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;R(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),$()}async logout(){await x()}async isAuthenticated(){return await u()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},A=null;function G(){return A||(A=new _),A}var V=U(),fe=h();async function pe(){return L()}async function q(){if(await pe()==="oauth"){let o=await G().getAccessToken();if(!S())throw new Error('No organization selected. Please run "tigris orgs select" first.');let r=V.endpoint,s=V.iamEndpoint,a=fe.domain;return{sessionToken:o,accessKeyId:"",secretAccessKey:"",endpoint:r,organizationId:S()??void 0,iamEndpoint:s,authDomain:a}}let e=K();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint};throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}import{list as Se}from"@tigrisdata/storage";import{readFileSync as me,existsSync as he}from"fs";import{join as H,dirname as ye}from"path";import{fileURLToPath as Te}from"url";import*as J from"yaml";var Ce=Te(import.meta.url),we=ye(Ce),v=null;function ke(){let t=we;for(let e=0;e<5;e++){let n=H(t,"specs.yaml");if(he(n))return n;t=H(t,"..")}throw new Error("Could not find specs.yaml")}function xe(){if(!v){let t=ke(),e=me(t,"utf8");v=J.parse(e)}return v}function W(t,e){let o=xe().commands.find(i=>i.name===t);return o?e&&o.operations?o.operations.find(i=>i.name===e)||null:o:null}var Y={success:"\u2714",failure:"\u2716",hint:"\u2192"};function M(){return process.stdout.isTTY===!0}function T(t){let e=W(t.command,t.operation);if(e)return e.messages}function C(t,e){let n=t;return n=n.replace(/\\n/g,`
|
|
7
|
+
`),e&&(n=n.replace(/\{\{(\w+)\}\}/g,(o,i)=>{let r=e[i];return r!==void 0?String(r):`{{${i}}}`})),n}function X(t,e){if(!M())return;let n=T(t);n?.onStart&&console.log(C(n.onStart,e))}function Q(t,e){if(!M())return;let n=T(t);n?.onSuccess&&console.log(`${Y.success} ${C(n.onSuccess,e)}`)}function I(t,e,n){let o=T(t);o?.onFailure&&console.error(`${Y.failure} ${C(o.onFailure,n)}`),e&&console.error(` ${e}`)}function Z(t,e){if(!M())return;let n=T(t);n?.onEmpty&&console.log(C(n.onEmpty,e))}function ee(t,e){return{command:t,operation:e}}var l=ee("objects","list");async function Ae(t){X(l);let e=f(t,["bucket"]),n=f(t,["prefix","p","P"]),o=f(t,["format","f","F"],"table");e||(I(l,"Bucket name is required"),process.exit(1));let i=await q(),{data:r,error:s}=await Se({prefix:n||void 0,config:{...i,bucket:e}});if(s&&(I(l,s.message),process.exit(1)),!r.items||r.items.length===0){Z(l);return}let a=r.items.map(g=>({key:g.name,size:_e(g.size),modified:g.lastModified})),c=N(a,o,"objects","object",[{key:"key",header:"Key"},{key:"size",header:"Size"},{key:"modified",header:"Modified"}]);console.log(c),Q(l,{count:a.length})}function _e(t){if(t===0)return"0 B";let e=["B","KB","MB","GB","TB"],n=Math.floor(Math.log(t)/Math.log(1024));return`${(t/Math.pow(1024,n)).toFixed(n>0?1:0)} ${e[n]}`}export{Ae as default};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import{readFileSync as xe,statSync as Se}from"fs";function g(t,e,n){for(let o of e)if(t[o]!==void 0)return t[o];return n}function ee(t){return JSON.stringify(t,null,2)}function te(t,e=" "){return Object.entries(t).map(([n,o])=>`${e}<${n}>${o}</${n}>`).join(`
|
|
2
|
+
`)}function ne(t,e,n){let o=[`<${e}>`];return t.forEach(i=>{o.push(` <${n}>`),o.push(te(i," ")),o.push(` </${n}>`)}),o.push(`</${e}>`),o.join(`
|
|
3
|
+
`)}function E(t){if(t==null)return"";if(t instanceof Date)return P(t);if(typeof t=="string"){let e=new Date(t);if(!isNaN(e.getTime())&&t.includes("T"))return P(e)}return String(t)}function P(t){return new Intl.DateTimeFormat(void 0,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}).format(t)}function oe(t,e){return e.map(n=>{if(n.width)return n.width;let o=n.header.length,i=t.reduce((r,s)=>{let a=E(s[n.key]);return Math.max(r,a.length)},0);return Math.max(o,i)})}function ie(t,e){let n=[],o=oe(t,e),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";n.push(`
|
|
4
|
+
`+i);let a="\u2502 "+e.map((c,u)=>c.header.padEnd(o[u])).join(" \u2502 ")+" \u2502";return n.push(a),n.push(r),t.forEach(c=>{let u=e.map((f,h)=>{let y=E(c[f.key]);return f.align==="right"?y.padStart(o[h]):y.padEnd(o[h])});n.push("\u2502 "+u.join(" \u2502 ")+" \u2502")}),n.push(s+`
|
|
5
|
+
`),n.join(`
|
|
6
|
+
`)}function z(t,e,n,o,i){switch(e){case"json":return ee(t);case"xml":return ne(t,n,o);default:return ie(t,i)}}import{S3Client as Le}from"@aws-sdk/client-s3";import{homedir as re}from"os";import{join as N}from"path";import{readFileSync as se,writeFileSync as ae,existsSync as D,mkdirSync as ce}from"fs";import{chmod as de}from"fs/promises";var x=N(re(),".tigris"),T=N(x,"config.json");function ue(){D(x)||ce(x,{recursive:!0,mode:448})}function d(){if(D(T))try{let t=se(T,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function C(t){ue(),ae(T,JSON.stringify(t,null,2),{mode:384});try{await de(T,384)}catch{}}async function S(t){let e=d();e.tokens=t,await C(e)}async function m(){return d().tokens||null}async function A(){let t=d();delete t.tokens,await C(t)}async function j(t){let e=d();e.organizations=t,await C(e)}function R(){return d().organizations||[]}function _(){return d().selectedOrganization||null}function $(){let t=d();return t.temporaryCredentials||t.credentials||null}async function F(t){let e=d();e.loginMethod=t,await C(e)}function K(){return d().loginMethod||null}import k from"axios";import ge from"open";function w(){return{domain:process.env.AUTH0_DOMAIN||"auth.tigris.dev",clientId:process.env.AUTH0_CLIENT_ID||"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",audience:process.env.AUTH0_AUDIENCE||"https://tigris-os-api"}}var L=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function B(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_STORAGE_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var M=class{config;baseUrl;constructor(){this.config=w(),this.baseUrl=`https://${this.config.domain}`}async login(e){let o=(await k.post(`${this.baseUrl}/oauth/device/code`,{client_id:this.config.clientId,audience:this.config.audience,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data;e?.onDeviceCode?.(o.user_code,o.verification_uri),await this.sleep(2e3);try{await ge(o.verification_uri_complete)}catch{}e?.onWaiting?.();let i=await this.pollForToken(o.device_code,o.interval||5);await S(i),F("oauth"),await this.extractAndStoreOrganizations(i.idToken)}async pollForToken(e,n){let i=0;for(;i<60;){i++;try{let s=(await k.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,device_code:e,grant_type:"urn:ietf:params:oauth:grant-type:device_code"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,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(k.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 m();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 m(),!n)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let i=(await k.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,grant_type:"refresh_token",refresh_token:n.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,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 S(r),r}catch{throw await A(),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 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)[L];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(),R()}async logout(){await A()}async isAuthenticated(){return await m()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},v=null;function U(){return v||(v=new M),v}var G=B(),pe=w();async function le(){return K()}async function V(){if(await le()==="oauth"){let o=await U().getAccessToken();if(!_())throw new Error('No organization selected. Please run "tigris orgs select" first.');let r=G.endpoint,s=G.iamEndpoint,a=pe.domain;return{sessionToken:o,accessKeyId:"",secretAccessKey:"",endpoint:r,organizationId:_()??void 0,iamEndpoint:s,authDomain:a}}let e=$();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint};throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}import{put as Ae}from"@tigrisdata/storage";import{readFileSync as fe,existsSync as me}from"fs";import{join as q,dirname as he}from"path";import{fileURLToPath as ye}from"url";import*as H from"yaml";var Te=ye(import.meta.url),Ce=he(Te),I=null;function we(){let t=Ce;for(let e=0;e<5;e++){let n=q(t,"specs.yaml");if(me(n))return n;t=q(t,"..")}throw new Error("Could not find specs.yaml")}function ke(){if(!I){let t=we(),e=fe(t,"utf8");I=H.parse(e)}return I}function J(t,e){let o=ke().commands.find(i=>i.name===t);return o?e&&o.operations?o.operations.find(i=>i.name===e)||null:o:null}var W={success:"\u2714",failure:"\u2716",hint:"\u2192"};function Y(){return process.stdout.isTTY===!0}function O(t){let e=J(t.command,t.operation);if(e)return e.messages}function b(t,e){let n=t;return n=n.replace(/\\n/g,`
|
|
7
|
+
`),e&&(n=n.replace(/\{\{(\w+)\}\}/g,(o,i)=>{let r=e[i];return r!==void 0?String(r):`{{${i}}}`})),n}function X(t,e){if(!Y())return;let n=O(t);n?.onStart&&console.log(b(n.onStart,e))}function Q(t,e){if(!Y())return;let n=O(t);n?.onSuccess&&console.log(`${W.success} ${b(n.onSuccess,e)}`)}function l(t,e,n){let o=O(t);o?.onFailure&&console.error(`${W.failure} ${b(o.onFailure,n)}`),e&&console.error(` ${e}`)}function Z(t,e){return{command:t,operation:e}}var p=Z("objects","put");async function _e(t){X(p);let e=g(t,["bucket"]),n=g(t,["key"]),o=g(t,["file"]),i=g(t,["access","a","A"],"private"),r=g(t,["content-type","contentType","t","T"]),s=g(t,["format","f","F"],"table");e||(l(p,"Bucket name is required"),process.exit(1)),n||(l(p,"Object key is required"),process.exit(1)),o||(l(p,"File path is required"),process.exit(1));try{Se(o)}catch{l(p,`File not found: ${o}`),process.exit(1)}let a=await V(),c=xe(o),{data:u,error:f}=await Ae(n,c,{access:i==="public"?"public":"private",contentType:r,config:{...a,bucket:e}});f&&(l(p,f.message),process.exit(1));let h=[{path:u.path,size:ve(u.size),contentType:u.contentType||"-",modified:u.modified}],y=z(h,s,"objects","object",[{key:"path",header:"Path"},{key:"size",header:"Size"},{key:"contentType",header:"Content-Type"},{key:"modified",header:"Modified"}]);console.log(y),Q(p,{key:n,bucket:e})}function ve(t){if(t===0)return"0 B";let e=["B","KB","MB","GB","TB"],n=Math.floor(Math.log(t)/Math.log(1024));return`${(t/Math.pow(1024,n)).toFixed(n>0?1:0)} ${e[n]}`}export{_e as default};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import{createOrganization as le}from"@tigrisdata/storage";function P(n,e,t){for(let o of e)if(n[o]!==void 0)return n[o];return t}import{S3Client as _e}from"@aws-sdk/client-s3";import{homedir as J}from"os";import{join as E}from"path";import{readFileSync as B,writeFileSync as W,existsSync as z,mkdirSync as Q}from"fs";import{chmod as X}from"fs/promises";var w=E(J(),".tigris"),l=E(w,"config.json");function Z(){z(w)||Q(w,{recursive:!0,mode:448})}function c(){if(z(l))try{let n=B(l,"utf8");return JSON.parse(n)}catch{return{}}return{}}async function u(n){Z(),W(l,JSON.stringify(n,null,2),{mode:384});try{await X(l,384)}catch{}}async function k(n){let e=c();e.tokens=n,await u(e)}async function g(){return c().tokens||null}async function S(){let n=c();delete n.tokens,await u(n)}async function b(n){let e=c();e.organizations=n,await u(e)}function N(){return c().organizations||[]}function x(){return c().selectedOrganization||null}function f(){let n=c();return n.temporaryCredentials||n.credentials||null}async function D(n){let e=c();e.loginMethod=n,await u(e)}function p(){return c().loginMethod||null}import h from"axios";import ee from"open";function m(){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 R=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function L(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_STORAGE_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var v=class{config;baseUrl;constructor(){this.config=m(),this.baseUrl=`https://${this.config.domain}`}async login(e){let o=(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?.(o.user_code,o.verification_uri),await this.sleep(2e3);try{await ee(o.verification_uri_complete)}catch{}e?.onWaiting?.();let i=await this.pollForToken(o.device_code,o.interval||5);await k(i),D("oauth"),await this.extractAndStoreOrganizations(i.idToken)}async pollForToken(e,t){let i=0;for(;i<60;){i++;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(r){if(h.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 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,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 S(),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)[R];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;b(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),N()}async logout(){await S()}async isAuthenticated(){return await g()!==null}sleep(e){return new Promise(t=>setTimeout(t,e))}},A=null;function y(){return A||(A=new v),A}var K=L(),te=m();async function ne(){return p()}async function $(){if(await ne()==="oauth"){let o=await y().getAccessToken();if(!x())throw new Error('No organization selected. Please run "tigris orgs select" first.');let r=K.endpoint,s=K.iamEndpoint,a=te.domain;return{sessionToken:o,accessKeyId:"",secretAccessKey:"",endpoint:r,organizationId:x()??void 0,iamEndpoint:s,authDomain:a}}let e=f();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{readFileSync as oe,existsSync as ie}from"fs";import{join as F,dirname as re}from"path";import{fileURLToPath as se}from"url";import*as j from"yaml";var ae=se(import.meta.url),ce=re(ae),_=null;function ge(){let n=ce;for(let e=0;e<5;e++){let t=F(n,"specs.yaml");if(ie(t))return t;n=F(n,"..")}throw new Error("Could not find specs.yaml")}function de(){if(!_){let n=ge(),e=oe(n,"utf8");_=j.parse(e)}return _}function U(n,e){let o=de().commands.find(i=>i.name===n);return o?e&&o.operations?o.operations.find(i=>i.name===e)||null:o:null}var I={success:"\u2714",failure:"\u2716",hint:"\u2192"};function M(){return process.stdout.isTTY===!0}function C(n){let e=U(n.command,n.operation);if(e)return e.messages}function T(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 G(n,e){if(!M())return;let t=C(n);t?.onStart&&console.log(T(t.onStart,e))}function V(n,e){if(!M())return;let t=C(n);t?.onSuccess&&console.log(`${I.success} ${T(t.onSuccess,e)}`)}function O(n,e,t){let o=C(n);o?.onFailure&&console.error(`${I.failure} ${T(o.onFailure,t)}`),e&&console.error(` ${e}`)}function q(n,e){if(!M())return;let t=C(n);t?.hint&&console.log(`${I.hint} ${T(t.hint,e)}`)}function H(n,e){return{command:n,operation:e}}var d=H("orgs","create");async function ue(n){if(G(d),p()!=="oauth"){f()?console.log(`You are using access key credentials, which belong to a single organization.
|
|
3
|
+
Organization creation is only available with OAuth login.
|
|
4
|
+
|
|
5
|
+
Run "tigris login" to login with your Tigris account.`):console.log('Not authenticated. Please run "tigris login" to login with your Tigris account.');return}let t=P(n,["name","N"]);t||(O(d,"Organization name is required"),process.exit(1));let o=await $(),{data:i,error:r}=await le(t,{config:o});r&&(O(d,r.message),process.exit(1));let s=y(),a=await s.refreshAccessToken();a.idToken&&await s.extractAndStoreOrganizations(a.idToken);let Y=i.id;V(d,{name:t,id:Y}),q(d,{name:t})}export{ue as default};
|