@tigrisdata/cli 2.2.0 → 2.4.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.
Files changed (41) hide show
  1. package/README.md +86 -0
  2. package/dist/auth/client.js +1 -1
  3. package/dist/auth/config.js +1 -1
  4. package/dist/auth/s3-client.js +1 -1
  5. package/dist/cli.js +2 -2
  6. package/dist/index.js +4 -4
  7. package/dist/lib/access-keys/assign.js +3 -0
  8. package/dist/lib/access-keys/create.js +3 -0
  9. package/dist/lib/access-keys/delete.js +3 -0
  10. package/dist/lib/access-keys/get.js +3 -0
  11. package/dist/lib/access-keys/list.js +8 -0
  12. package/dist/lib/buckets/create.js +1 -1
  13. package/dist/lib/buckets/delete.js +2 -2
  14. package/dist/lib/buckets/get.js +4 -4
  15. package/dist/lib/buckets/list.js +3 -3
  16. package/dist/lib/buckets/set.js +2 -0
  17. package/dist/lib/cp.js +1 -1
  18. package/dist/lib/credentials/test.js +2 -0
  19. package/dist/lib/forks/create.js +2 -2
  20. package/dist/lib/forks/list.js +2 -2
  21. package/dist/lib/login/credentials.js +1 -1
  22. package/dist/lib/login/oauth.js +2 -2
  23. package/dist/lib/login/select.js +3 -3
  24. package/dist/lib/ls.js +1 -1
  25. package/dist/lib/mk.js +1 -1
  26. package/dist/lib/mv.js +1 -1
  27. package/dist/lib/objects/delete.js +2 -2
  28. package/dist/lib/objects/get.js +2 -2
  29. package/dist/lib/objects/list.js +4 -4
  30. package/dist/lib/objects/put.js +3 -3
  31. package/dist/lib/organizations/create.js +3 -3
  32. package/dist/lib/organizations/list.js +7 -7
  33. package/dist/lib/organizations/select.js +5 -5
  34. package/dist/lib/rm.js +1 -1
  35. package/dist/lib/snapshots/list.js +7 -7
  36. package/dist/lib/snapshots/take.js +2 -2
  37. package/dist/lib/touch.js +1 -1
  38. package/dist/lib/whoami.js +3 -3
  39. package/dist/specs.yaml +130 -0
  40. package/dist/utils/options.js +1 -1
  41. package/package.json +3 -2
package/README.md CHANGED
@@ -35,6 +35,8 @@ Run `tigris help` to see all available commands, or `tigris <command> help` for
35
35
  ### Resources
36
36
 
37
37
  - `tigris organizations` - Manage organizations
38
+ - `tigris access-keys` - Manage access keys
39
+ - `tigris credentials` - Manage and test credentials
38
40
  - `tigris buckets` - Manage buckets
39
41
  - `tigris forks` - Manage forks
40
42
  - `tigris snapshots` - Manage snapshots
@@ -236,6 +238,73 @@ tigris organizations create <name>
236
238
  tigris organizations select <name>
237
239
  ```
238
240
 
241
+ ### `access-keys` | `keys`
242
+
243
+ Manage access keys
244
+
245
+ | Command | Description |
246
+ |---------|-------------|
247
+ | `access-keys list` (l) | List all access keys |
248
+ | `access-keys create` (c) | Create a new access key |
249
+ | `access-keys delete` (d) | Delete an access key |
250
+ | `access-keys get` (g) | Get details of an access key |
251
+ | `access-keys assign` (a) | Assign bucket roles to an access key |
252
+
253
+ #### `access-keys list`
254
+
255
+ ```
256
+ tigris access-keys list
257
+ ```
258
+
259
+ #### `access-keys create`
260
+
261
+ ```
262
+ tigris access-keys create <name>
263
+ ```
264
+
265
+ #### `access-keys delete`
266
+
267
+ ```
268
+ tigris access-keys delete <id>
269
+ ```
270
+
271
+ #### `access-keys get`
272
+
273
+ ```
274
+ tigris access-keys get <id>
275
+ ```
276
+
277
+ #### `access-keys assign`
278
+
279
+ ```
280
+ tigris access-keys assign <id> [flags]
281
+ ```
282
+
283
+ | Flag | Description |
284
+ |------|-------------|
285
+ | `-b, --bucket` | Bucket name (can specify multiple) |
286
+ | `-r, --role` | Role to assign (can specify multiple to pair with buckets) |
287
+ | `--admin` | Grant admin access to all buckets in the organization |
288
+ | `--revoke-roles` | Revoke all bucket roles from the access key |
289
+
290
+ ### `credentials` | `creds`
291
+
292
+ Manage and test credentials
293
+
294
+ | Command | Description |
295
+ |---------|-------------|
296
+ | `credentials test` (t) | Test if credentials have access to Tigris (optionally to a specific bucket) |
297
+
298
+ #### `credentials test`
299
+
300
+ ```
301
+ tigris credentials test [flags]
302
+ ```
303
+
304
+ | Flag | Description |
305
+ |------|-------------|
306
+ | `-b, --bucket` | Bucket name to test access against (optional) |
307
+
239
308
  ### Buckets
240
309
 
241
310
  Buckets are containers for objects. You can also create forks and snapshots of buckets.
@@ -250,6 +319,7 @@ Manage buckets
250
319
  | `buckets create` (c) | Create bucket |
251
320
  | `buckets get` (g) | Get bucket details |
252
321
  | `buckets delete` (d) | Delete bucket |
322
+ | `buckets set` (s) | Update bucket settings |
253
323
 
254
324
  ##### `buckets list`
255
325
 
@@ -287,6 +357,22 @@ tigris buckets get <name>
287
357
  tigris buckets delete <name>
288
358
  ```
289
359
 
360
+ ##### `buckets set`
361
+
362
+ ```
363
+ tigris buckets set <name> [flags]
364
+ ```
365
+
366
+ | Flag | Description |
367
+ |------|-------------|
368
+ | `--access` | Bucket access level |
369
+ | `--region` | Allowed regions (can specify multiple) |
370
+ | `--allow-object-acl` | Enable object-level ACL |
371
+ | `--disable-directory-listing` | Disable directory listing |
372
+ | `--cache-control` | Default cache-control header value |
373
+ | `--custom-domain` | Custom domain for the bucket |
374
+ | `--enable-delete-protection` | Enable delete protection |
375
+
290
376
  #### `forks` | `f`
291
377
 
292
378
  Manage forks
@@ -1 +1 @@
1
- import f from"axios";import N from"open";function k(){return{domain:process.env.AUTH0_DOMAIN||"auth.tigris.dev",clientId:process.env.AUTH0_CLIENT_ID||"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",audience:process.env.AUTH0_AUDIENCE||"https://tigris-os-api"}}var w=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";import{homedir as x}from"os";import{join as C}from"path";import{readFileSync as A,writeFileSync as S,existsSync as y,mkdirSync as O}from"fs";import{chmod as P}from"fs/promises";var p=C(x(),".tigris"),g=C(p,"config.json");function E(){y(p)||O(p,{recursive:!0,mode:448})}function c(){if(y(g))try{let t=A(g,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function l(t){E(),S(g,JSON.stringify(t,null,2),{mode:384});try{await P(g,384)}catch{}}async function u(t){let e=c();e.tokens=t,await l(e)}async function d(){return c().tokens||null}async function m(){let t=c();delete t.tokens,await l(t)}async function _(t){let e=c();e.organizations=t,await l(e)}function v(){return c().organizations||[]}async function I(t){let e=c();e.loginMethod=t,await l(e)}var T=class{config;baseUrl;constructor(){this.config=k(),this.baseUrl=`https://${this.config.domain}`}async login(e){let i=(await f.post(`${this.baseUrl}/oauth/device/code`,{client_id:this.config.clientId,audience:this.config.audience,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data;e?.onDeviceCode?.(i.user_code,i.verification_uri),await this.sleep(2e3);try{await N(i.verification_uri_complete)}catch{}e?.onWaiting?.();let r=await this.pollForToken(i.device_code,i.interval||5);await u(r),I("oauth"),await this.extractAndStoreOrganizations(r.idToken)}async pollForToken(e,n){let r=0;for(;r<60;){r++;try{let s=(await f.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,device_code:e,grant_type:"urn:ietf:params:oauth:grant-type:device_code"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,a=Date.now()+(s.expires_in||3600)*1e3;return{accessToken:s.access_token,refreshToken:s.refresh_token,idToken:s.id_token,expiresAt:a}}catch(o){if(f.isAxiosError(o)&&o.response){let s=o.response.data?.error;if(s==="authorization_pending"){await this.sleep(n*1e3);continue}if(s==="slow_down"){n+=5,await this.sleep(n*1e3);continue}throw new Error(o.response.data?.error_description||"Authentication failed")}throw o}}throw new Error("Authentication timed out. Please try again.")}async getAccessToken(){let e=await d();if(!e)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');let n=300*1e3;return Date.now()+n>=e.expiresAt&&(e=await this.refreshAccessToken(e)),e.accessToken}async refreshAccessToken(e){let n=null;if(e?.refreshToken?n=e:n=await d(),!n)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let r=(await f.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,grant_type:"refresh_token",refresh_token:n.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,o={accessToken:r.access_token,refreshToken:r.refresh_token||n.refreshToken,idToken:r.id_token||n.idToken,expiresAt:Date.now()+(r.expires_in||3600)*1e3};return await u(o),o}catch{throw await m(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await d();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let n=e.idToken.split(".")[1],i=Buffer.from(n,"base64").toString("utf8");return JSON.parse(i)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let n=e.split(".")[1],i=Buffer.from(n,"base64").toString("utf8"),o=JSON.parse(i)[w];if(!o)return;let s=o?.ns?.map(a=>typeof a=="object"&&a!==null?{id:a.id,name:a.name,displayName:a.name}:{id:a,name:a,displayName:a})||[];if(s.length===0)return;_(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),v()}async logout(){await m()}async isAuthenticated(){return await d()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},h=null;function J(){return h||(h=new T),h}export{T as TigrisAuthClient,J as getAuthClient};
1
+ import f from"axios";import N from"open";function k(){return{domain:process.env.AUTH0_DOMAIN||"auth.tigris.dev",clientId:process.env.AUTH0_CLIENT_ID||"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",audience:process.env.AUTH0_AUDIENCE||"https://tigris-os-api"}}var w=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";import{homedir as x}from"os";import{join as C}from"path";import{readFileSync as A,writeFileSync as S,existsSync as y,mkdirSync as P}from"fs";import{chmod as O}from"fs/promises";var p=C(x(),".tigris"),g=C(p,"config.json");function E(){y(p)||P(p,{recursive:!0,mode:448})}function c(){if(y(g))try{let t=A(g,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function l(t){E(),S(g,JSON.stringify(t,null,2),{mode:384});try{await O(g,384)}catch{}}async function u(t){let e=c();e.tokens=t,await l(e)}async function d(){return c().tokens||null}async function m(){let t=c();delete t.tokens,await l(t)}async function _(t){let e=c();e.organizations=t,await l(e)}function v(){return c().organizations||[]}async function I(t){let e=c();e.loginMethod=t,await l(e)}var T=class{config;baseUrl;constructor(){this.config=k(),this.baseUrl=`https://${this.config.domain}`}async login(e){let i=(await f.post(`${this.baseUrl}/oauth/device/code`,{client_id:this.config.clientId,audience:this.config.audience,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data;e?.onDeviceCode?.(i.user_code,i.verification_uri),await this.sleep(2e3);try{await N(i.verification_uri_complete)}catch{}e?.onWaiting?.();let r=await this.pollForToken(i.device_code,i.interval||5);await u(r),I("oauth"),await this.extractAndStoreOrganizations(r.idToken)}async pollForToken(e,n){let r=0;for(;r<60;){r++;try{let s=(await f.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,device_code:e,grant_type:"urn:ietf:params:oauth:grant-type:device_code"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,a=Date.now()+(s.expires_in||3600)*1e3;return{accessToken:s.access_token,refreshToken:s.refresh_token,idToken:s.id_token,expiresAt:a}}catch(o){if(f.isAxiosError(o)&&o.response){let s=o.response.data?.error;if(s==="authorization_pending"){await this.sleep(n*1e3);continue}if(s==="slow_down"){n+=5,await this.sleep(n*1e3);continue}throw new Error(o.response.data?.error_description||"Authentication failed")}throw o}}throw new Error("Authentication timed out. Please try again.")}async getAccessToken(){let e=await d();if(!e)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');let n=300*1e3;return Date.now()+n>=e.expiresAt&&(e=await this.refreshAccessToken(e)),e.accessToken}async refreshAccessToken(e){let n=null;if(e?.refreshToken?n=e:n=await d(),!n)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let r=(await f.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,grant_type:"refresh_token",refresh_token:n.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,o={accessToken:r.access_token,refreshToken:r.refresh_token||n.refreshToken,idToken:r.id_token||n.idToken,expiresAt:Date.now()+(r.expires_in||3600)*1e3};return await u(o),o}catch{throw await m(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await d();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let n=e.idToken.split(".")[1],i=Buffer.from(n,"base64").toString("utf8");return JSON.parse(i)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let n=e.split(".")[1],i=Buffer.from(n,"base64").toString("utf8"),o=JSON.parse(i)[w];if(!o)return;let s=o?.ns?.map(a=>typeof a=="object"&&a!==null?{id:a.id,name:a.name,displayName:a.name}:{id:a,name:a,displayName:a})||[];if(s.length===0)return;_(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),v()}async logout(){await m()}async isAuthenticated(){return await d()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},h=null;function J(){return h||(h=new T),h}export{T as TigrisAuthClient,J as getAuthClient};
@@ -1 +1 @@
1
- function i(){return{domain:process.env.AUTH0_DOMAIN||"auth.tigris.dev",clientId:process.env.AUTH0_CLIENT_ID||"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",audience:process.env.AUTH0_AUDIENCE||"https://tigris-os-api"}}var t=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function e(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_STORAGE_IAM_ENDPOINT||"https://iam.storageapi.dev"}}export{t as TIGRIS_CLAIMS_NAMESPACE,i as getAuth0Config,e as getTigrisConfig};
1
+ function i(){return{domain:process.env.AUTH0_DOMAIN||"auth.tigris.dev",clientId:process.env.AUTH0_CLIENT_ID||"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",audience:process.env.AUTH0_AUDIENCE||"https://tigris-os-api"}}var t=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function e(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_IAM_ENDPOINT||"https://iam.storageapi.dev"}}export{t as TIGRIS_CLAIMS_NAMESPACE,i as getAuth0Config,e as getTigrisConfig};
@@ -1 +1 @@
1
- import{S3Client as M}from"@aws-sdk/client-s3";import{homedir as b}from"os";import{join as v}from"path";import{readFileSync as K,writeFileSync as R,existsSync as x,mkdirSync as L}from"fs";import{chmod as G}from"fs/promises";var h=v(b(),".tigris"),g=v(h,"config.json");function U(){x(h)||L(h,{recursive:!0,mode:448})}function c(){if(x(g))try{let n=K(g,"utf8");return JSON.parse(n)}catch{return{}}return{}}async function l(n){U(),R(g,JSON.stringify(n,null,2),{mode:384});try{await G(g,384)}catch{}}async function T(n){let e=c();e.tokens=n,await l(e)}async function d(){return c().tokens||null}async function w(){let n=c();delete n.tokens,await l(n)}async function S(n){let e=c();e.organizations=n,await l(e)}function P(){return c().organizations||[]}function f(){return c().selectedOrganization||null}function u(){let n=c();return n.temporaryCredentials||n.credentials||null}async function O(n){let e=c();e.loginMethod=n,await l(e)}function E(){return c().loginMethod||null}import m from"axios";import F from"open";function p(){return{domain:process.env.AUTH0_DOMAIN||"auth.tigris.dev",clientId:process.env.AUTH0_CLIENT_ID||"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",audience:process.env.AUTH0_AUDIENCE||"https://tigris-os-api"}}var N=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function z(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_STORAGE_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var C=class{config;baseUrl;constructor(){this.config=p(),this.baseUrl=`https://${this.config.domain}`}async login(e){let i=(await m.post(`${this.baseUrl}/oauth/device/code`,{client_id:this.config.clientId,audience:this.config.audience,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data;e?.onDeviceCode?.(i.user_code,i.verification_uri),await this.sleep(2e3);try{await F(i.verification_uri_complete)}catch{}e?.onWaiting?.();let r=await this.pollForToken(i.device_code,i.interval||5);await T(r),O("oauth"),await this.extractAndStoreOrganizations(r.idToken)}async pollForToken(e,t){let r=0;for(;r<60;){r++;try{let s=(await m.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,device_code:e,grant_type:"urn:ietf:params:oauth:grant-type:device_code"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,a=Date.now()+(s.expires_in||3600)*1e3;return{accessToken:s.access_token,refreshToken:s.refresh_token,idToken:s.id_token,expiresAt:a}}catch(o){if(m.isAxiosError(o)&&o.response){let s=o.response.data?.error;if(s==="authorization_pending"){await this.sleep(t*1e3);continue}if(s==="slow_down"){t+=5,await this.sleep(t*1e3);continue}throw new Error(o.response.data?.error_description||"Authentication failed")}throw o}}throw new Error("Authentication timed out. Please try again.")}async getAccessToken(){let e=await d();if(!e)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');let t=300*1e3;return Date.now()+t>=e.expiresAt&&(e=await this.refreshAccessToken(e)),e.accessToken}async refreshAccessToken(e){let t=null;if(e?.refreshToken?t=e:t=await d(),!t)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let r=(await m.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,grant_type:"refresh_token",refresh_token:t.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,o={accessToken:r.access_token,refreshToken:r.refresh_token||t.refreshToken,idToken:r.id_token||t.idToken,expiresAt:Date.now()+(r.expires_in||3600)*1e3};return await T(o),o}catch{throw await w(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await d();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let t=e.idToken.split(".")[1],i=Buffer.from(t,"base64").toString("utf8");return JSON.parse(i)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let t=e.split(".")[1],i=Buffer.from(t,"base64").toString("utf8"),o=JSON.parse(i)[N];if(!o)return;let s=o?.ns?.map(a=>typeof a=="object"&&a!==null?{id:a.id,name:a.name,displayName:a.name}:{id:a,name:a,displayName:a})||[];if(s.length===0)return;S(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),P()}async logout(){await w()}async isAuthenticated(){return await d()!==null}sleep(e){return new Promise(t=>setTimeout(t,e))}},y=null;function k(){return y||(y=new C),y}var _=z(),j=p();async function A(){return E()}async function re(){if(await A()==="oauth"){let i=await k().getAccessToken();if(!f())throw new Error('No organization selected. Please run "tigris orgs select" first.');let o=_.endpoint,s=_.iamEndpoint,a=j.domain;return{sessionToken:i,accessKeyId:"",secretAccessKey:"",endpoint:o,organizationId:f()??void 0,iamEndpoint:s,authDomain:a}}let e=u();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint};throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}async function se(){if(await A()==="oauth"){let i=await k().getAccessToken(),r=f();if(!r)throw new Error('No organization selected. Please run "tigris orgs select" first.');let o=_.endpoint,s=new M({region:"auto",endpoint:o,credentials:{sessionToken:i,accessKeyId:"",secretAccessKey:""}});return s.middlewareStack.add(a=>async I=>{let D=I.request;return D.headers["x-Tigris-Namespace"]=r,await a(I)},{name:"x-Tigris-Namespace-Middleware",step:"build",override:!0}),s}let e=u();if(e)return new M({region:"auto",endpoint:e.endpoint,credentials:{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey}});throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}async function ae(){return await A()!==null?!0:u()!==null}export{A as getLoginMethod,se as getS3Client,re as getStorageConfig,ae as isAuthenticated};
1
+ import{S3Client as M}from"@aws-sdk/client-s3";import{homedir as b}from"os";import{join as v}from"path";import{readFileSync as K,writeFileSync as R,existsSync as x,mkdirSync as L}from"fs";import{chmod as U}from"fs/promises";var h=v(b(),".tigris"),g=v(h,"config.json");function F(){x(h)||L(h,{recursive:!0,mode:448})}function c(){if(x(g))try{let n=K(g,"utf8");return JSON.parse(n)}catch{return{}}return{}}async function l(n){F(),R(g,JSON.stringify(n,null,2),{mode:384});try{await U(g,384)}catch{}}async function T(n){let e=c();e.tokens=n,await l(e)}async function d(){return c().tokens||null}async function w(){let n=c();delete n.tokens,await l(n)}async function S(n){let e=c();e.organizations=n,await l(e)}function P(){return c().organizations||[]}function f(){return c().selectedOrganization||null}function u(){let n=c();return n.temporaryCredentials||n.credentials||null}async function O(n){let e=c();e.loginMethod=n,await l(e)}function E(){return c().loginMethod||null}import m from"axios";import G from"open";function p(){return{domain:process.env.AUTH0_DOMAIN||"auth.tigris.dev",clientId:process.env.AUTH0_CLIENT_ID||"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",audience:process.env.AUTH0_AUDIENCE||"https://tigris-os-api"}}var N=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function z(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var C=class{config;baseUrl;constructor(){this.config=p(),this.baseUrl=`https://${this.config.domain}`}async login(e){let i=(await m.post(`${this.baseUrl}/oauth/device/code`,{client_id:this.config.clientId,audience:this.config.audience,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data;e?.onDeviceCode?.(i.user_code,i.verification_uri),await this.sleep(2e3);try{await G(i.verification_uri_complete)}catch{}e?.onWaiting?.();let r=await this.pollForToken(i.device_code,i.interval||5);await T(r),O("oauth"),await this.extractAndStoreOrganizations(r.idToken)}async pollForToken(e,t){let r=0;for(;r<60;){r++;try{let s=(await m.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,device_code:e,grant_type:"urn:ietf:params:oauth:grant-type:device_code"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,a=Date.now()+(s.expires_in||3600)*1e3;return{accessToken:s.access_token,refreshToken:s.refresh_token,idToken:s.id_token,expiresAt:a}}catch(o){if(m.isAxiosError(o)&&o.response){let s=o.response.data?.error;if(s==="authorization_pending"){await this.sleep(t*1e3);continue}if(s==="slow_down"){t+=5,await this.sleep(t*1e3);continue}throw new Error(o.response.data?.error_description||"Authentication failed")}throw o}}throw new Error("Authentication timed out. Please try again.")}async getAccessToken(){let e=await d();if(!e)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');let t=300*1e3;return Date.now()+t>=e.expiresAt&&(e=await this.refreshAccessToken(e)),e.accessToken}async refreshAccessToken(e){let t=null;if(e?.refreshToken?t=e:t=await d(),!t)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let r=(await m.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,grant_type:"refresh_token",refresh_token:t.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,o={accessToken:r.access_token,refreshToken:r.refresh_token||t.refreshToken,idToken:r.id_token||t.idToken,expiresAt:Date.now()+(r.expires_in||3600)*1e3};return await T(o),o}catch{throw await w(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await d();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let t=e.idToken.split(".")[1],i=Buffer.from(t,"base64").toString("utf8");return JSON.parse(i)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let t=e.split(".")[1],i=Buffer.from(t,"base64").toString("utf8"),o=JSON.parse(i)[N];if(!o)return;let s=o?.ns?.map(a=>typeof a=="object"&&a!==null?{id:a.id,name:a.name,displayName:a.name}:{id:a,name:a,displayName:a})||[];if(s.length===0)return;S(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),P()}async logout(){await w()}async isAuthenticated(){return await d()!==null}sleep(e){return new Promise(t=>setTimeout(t,e))}},y=null;function k(){return y||(y=new C),y}var _=z(),j=p();async function A(){return E()}async function re(){if(await A()==="oauth"){let i=await k().getAccessToken();if(!f())throw new Error('No organization selected. Please run "tigris orgs select" first.');let o=_.endpoint,s=_.iamEndpoint,a=j.domain;return{sessionToken:i,accessKeyId:"",secretAccessKey:"",endpoint:o,organizationId:f()??void 0,iamEndpoint:s,authDomain:a}}let e=u();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint};throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}async function se(){if(await A()==="oauth"){let i=await k().getAccessToken(),r=f();if(!r)throw new Error('No organization selected. Please run "tigris orgs select" first.');let o=_.endpoint,s=new M({region:"auto",endpoint:o,credentials:{sessionToken:i,accessKeyId:"",secretAccessKey:""}});return s.middlewareStack.add(a=>async I=>{let D=I.request;return D.headers["x-Tigris-Namespace"]=r,await a(I)},{name:"x-Tigris-Namespace-Middleware",step:"build",override:!0}),s}let e=u();if(e)return new M({region:"auto",endpoint:e.endpoint,credentials:{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey}});throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}async function ae(){return await A()!==null?!0:u()!==null}export{A as getLoginMethod,se as getS3Client,re as getStorageConfig,ae as isAuthenticated};
package/dist/cli.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{Command as E}from"commander";import{readFileSync as k,existsSync as q}from"fs";import{join as u,dirname as R}from"path";import{fileURLToPath as P}from"url";import*as C from"yaml";var b="2.2.0";process.on("unhandledRejection",e=>{(e===""||e===void 0)&&(console.error(`
2
+ import{Command as E}from"commander";import{readFileSync as k,existsSync as q}from"fs";import{join as u,dirname as R}from"path";import{fileURLToPath as P}from"url";import*as C from"yaml";var b="2.4.0";process.on("unhandledRejection",e=>{(e===""||e===void 0)&&(console.error(`
3
3
  Operation cancelled`),process.exit(1)),console.error(`
4
4
  Error:`,e instanceof Error?e.message:e),process.exit(1)});process.on("uncaughtException",e=>{console.error(`
5
5
  Error:`,e.message),process.exit(1)});var D=P(import.meta.url),p=R(D),V=u(p,"specs.yaml"),M=k(V,"utf8"),l=C.parse(M);function y(e,t){return(t?[u(p,"lib",e,`${t}.js`),u(p,"lib",e,t,"index.js")]:[u(p,"lib",`${e}.js`),u(p,"lib",e,"index.js")]).some(i=>q(i))}function A(e){let t;e.type==="positional"?t=` ${e.name}`:(t=` --${e.name}`,e.alias&&e.alias.length===1&&(t+=`, -${e.alias}`));let n=26,i=t.length>=n?t+" ":t.padEnd(n),s=e.description;return e.options&&(Array.isArray(e.options)&&typeof e.options[0]=="string"?s+=` (options: ${e.options.join(", ")})`:s+=` (options: ${e.options.map(o=>o.value).join(", ")})`),e.default&&(s+=` [default: ${e.default}]`),e.required&&(s+=" [required]"),e["required-when"]&&(s+=` [required when: ${e["required-when"]}]`),e.multiple&&(s+=" [multiple values: comma-separated]"),e.type==="positional"&&(s+=" [positional argument]"),e.examples&&e.examples.length>0&&(s+=` (examples: ${e.examples.join(", ")})`),`${i}${s}`}function w(e){if(console.log(`
@@ -9,5 +9,5 @@ ${l.name} ${e.name} ${t.name} - ${t.description}
9
9
  `),t.arguments&&t.arguments.length>0&&(console.log("Arguments:"),t.arguments.forEach(n=>{console.log(A(n))}),console.log())}function T(e){return y(e.name)?!0:e.operations?e.operations.some(t=>y(e.name,t.name)):!1}function v(){console.log(`Tigris CLI Version: ${b}
10
10
  `),console.log(`Usage: tigris [command] [options]
11
11
  `),console.log("Commands:"),l.commands.filter(T).forEach(t=>{let n=` ${t.name}`;t.alias&&(n+=` (${t.alias})`);let i=n.padEnd(24);console.log(`${i}${t.description}`)}),console.log(`
12
- Use "${l.name} <command> help" for more information about a command.`)}function m(e,t=[]){t.forEach(n=>{if(n.type==="positional"){let i=n.required?`<${n.name}>`:`[${n.name}]`;e.argument(i,n.description)}else{let s=n.alias&&n.alias.length===1?`-${n.alias}, --${n.name}`:`--${n.name}`;n.type==="flag"||(n.options?s+=" <value>":s+=n.required||n["required-when"]?" <value>":" [value]"),e.option(s,n.description,n.default)}})}function g(e,t){for(let n of e){if(n["required-when"]){let[i,s]=n["required-when"].split("="),o=h(t,i,e),r=h(t,n.name,e);if(o===s&&!r)return console.error(`--${n.name} is required when --${i} is ${s}`),!1}if(n.required&&!h(t,n.name,e))return console.error(`--${n.name} is required`),!1}return!0}function h(e,t,n){if(n){let s=n.find(o=>o.name===t);if(s&&s.alias){let o=s.alias.charAt(0).toUpperCase()+s.alias.slice(1);if(e[o]!==void 0)return e[o]}}let i=[t,t.replace(/-/g,""),t.replace(/-/g,"").toLowerCase(),t.charAt(0).toUpperCase(),_(t)];for(let s of i)if(e[s]!==void 0)return e[s]}function _(e){return e.replace(/-([a-z])/g,(t,n)=>n.toUpperCase())}async function H(e,t){let n=t?[`./lib/${e}/${t}.js`,`./lib/${e}/${t}/index.js`]:[`./lib/${e}.js`,`./lib/${e}/index.js`];for(let s of n){let o=await import(s).catch(()=>null);if(o)return{module:o,error:null}}return{module:null,error:`Command not found: ${t?`${e} ${t}`:e}`}}async function $(e,t,n=[],i={},s){if(s){let x=s.replace(/\\n/g,`
12
+ Use "${l.name} <command> help" for more information about a command.`)}function m(e,t=[]){t.forEach(n=>{if(n.type==="positional"){let i=n.required?`<${n.name}>`:`[${n.name}]`;e.argument(i,n.description)}else{let s=n.alias&&n.alias.length===1?`-${n.alias}, --${n.name}`:`--${n.name}`;n.type==="flag"||(n.type==="boolean"?s+=" [value]":n.options?s+=" <value>":s+=n.required||n["required-when"]?" <value>":" [value]"),e.option(s,n.description,n.default)}})}function g(e,t){for(let n of e){if(n["required-when"]){let[i,s]=n["required-when"].split("="),o=h(t,i,e),r=h(t,n.name,e);if(o===s&&!r)return console.error(`--${n.name} is required when --${i} is ${s}`),!1}if(n.required&&!h(t,n.name,e))return console.error(`--${n.name} is required`),!1}return!0}function h(e,t,n){if(n){let s=n.find(o=>o.name===t);if(s&&s.alias){let o=s.alias.charAt(0).toUpperCase()+s.alias.slice(1);if(e[o]!==void 0)return e[o]}}let i=[t,t.replace(/-/g,""),t.replace(/-/g,"").toLowerCase(),t.charAt(0).toUpperCase(),_(t)];for(let s of i)if(e[s]!==void 0)return e[s]}function _(e){return e.replace(/-([a-z])/g,(t,n)=>n.toUpperCase())}async function H(e,t){let n=t?[`./lib/${e}/${t}.js`,`./lib/${e}/${t}/index.js`]:[`./lib/${e}.js`,`./lib/${e}/index.js`];for(let s of n){let o=await import(s).catch(()=>null);if(o)return{module:o,error:null}}return{module:null,error:`Command not found: ${t?`${e} ${t}`:e}`}}async function $(e,t,n=[],i={},s){if(s){let x=s.replace(/\\n/g,`
13
13
  `);console.log(x)}let{module:o,error:r}=await H(e,t);(r||!o)&&(console.error(r),process.exit(1));let a=t||e,d=o.default||o[a];typeof d!="function"&&(console.error(`Command not implemented: ${a}`),process.exit(1)),await d({...i,_positional:n})}var f=new E;f.name(l.name).description(l.description).version(l.version);function c(e,t,n){let i;"optsWithGlobals"in n&&typeof n.optsWithGlobals=="function"?i=n.optsWithGlobals():"opts"in n&&typeof n.opts=="function"?i=n.opts():i=n;let s={...i};return e.filter(r=>r.type==="positional").forEach((r,a)=>{t[a]!==void 0&&(r.multiple?s[r.name]=t[a].split(",").map(d=>d.trim()):s[r.name]=t[a])}),e.forEach(r=>{r.multiple&&r.type!=="positional"&&s[r.name]&&typeof s[r.name]=="string"&&(s[r.name]=s[r.name].split(",").map(a=>a.trim()))}),s}l.commands.forEach(e=>{let t=f.command(e.name).description(e.description);if(e.alias&&t.alias(e.alias),e.operations&&e.operations.length>0)if(e.operations.forEach(n=>{let i=t.command(n.name).description(n.description);n.alias&&(Array.isArray(n.alias)?n.alias:[n.alias]).forEach(o=>i.alias(o)),m(i,n.arguments),i.action(async(...s)=>{let o=s.pop(),r=s;n.arguments&&!g(n.arguments,c(n.arguments,r,o))||await $(e.name,n.name,r,c(n.arguments||[],r,o),n.message)}),i.command("help").description("Show help for this operation").action(()=>{U(e,n)})}),e.default){let n=e.operations?.find(i=>i.name===e.default);if(n){m(t,e.arguments),m(t,n.arguments);let i=[...e.arguments||[],...n.arguments||[]];t.action(async(...s)=>{let o=s.pop(),r=s;i.length>0&&!g(i,c(i,r,o))||await $(e.name,n.name,r,c(i,r,o),e.message||n.message)})}}else t.action(()=>{w(e)});else m(t,e.arguments),t.action(async(...n)=>{let i=n.pop(),s=n;e.arguments&&!g(e.arguments,c(e.arguments,s,i))||await $(e.name,void 0,s,c(e.arguments||[],s,i),e.message)});t.command("help").description("Show help for this command").action(()=>{w(e)})});f.command("help").description("Show general help").action(()=>{v()});f.action(()=>{v()});f.parse();
package/dist/index.js CHANGED
@@ -1,12 +1,12 @@
1
- import{Command as E}from"commander";import{readFileSync as k,existsSync as q}from"fs";import{join as u,dirname as R}from"path";import{fileURLToPath as P}from"url";import*as C from"yaml";var b="2.2.0";process.on("unhandledRejection",e=>{(e===""||e===void 0)&&(console.error(`
1
+ import{Command as E}from"commander";import{readFileSync as k,existsSync as q}from"fs";import{join as u,dirname as R}from"path";import{fileURLToPath as P}from"url";import*as C from"yaml";var b="2.4.0";process.on("unhandledRejection",e=>{(e===""||e===void 0)&&(console.error(`
2
2
  Operation cancelled`),process.exit(1)),console.error(`
3
3
  Error:`,e instanceof Error?e.message:e),process.exit(1)});process.on("uncaughtException",e=>{console.error(`
4
4
  Error:`,e.message),process.exit(1)});var D=P(import.meta.url),p=R(D),V=u(p,"specs.yaml"),M=k(V,"utf8"),l=C.parse(M);function y(e,t){return(t?[u(p,"lib",e,`${t}.js`),u(p,"lib",e,t,"index.js")]:[u(p,"lib",`${e}.js`),u(p,"lib",e,"index.js")]).some(i=>q(i))}function A(e){let t;e.type==="positional"?t=` ${e.name}`:(t=` --${e.name}`,e.alias&&e.alias.length===1&&(t+=`, -${e.alias}`));let n=26,i=t.length>=n?t+" ":t.padEnd(n),s=e.description;return e.options&&(Array.isArray(e.options)&&typeof e.options[0]=="string"?s+=` (options: ${e.options.join(", ")})`:s+=` (options: ${e.options.map(o=>o.value).join(", ")})`),e.default&&(s+=` [default: ${e.default}]`),e.required&&(s+=" [required]"),e["required-when"]&&(s+=` [required when: ${e["required-when"]}]`),e.multiple&&(s+=" [multiple values: comma-separated]"),e.type==="positional"&&(s+=" [positional argument]"),e.examples&&e.examples.length>0&&(s+=` (examples: ${e.examples.join(", ")})`),`${i}${s}`}function w(e){if(console.log(`
5
5
  ${l.name} ${e.name} - ${e.description}
6
6
  `),e.operations&&e.operations.length>0){let t=e.operations.filter(n=>y(e.name,n.name));t.length>0&&(console.log("Operations:"),t.forEach(n=>{let i=` ${n.name}`;if(n.alias){let o=Array.isArray(n.alias)?n.alias:[n.alias];i+=` (${o.join(", ")})`}let s=i.padEnd(24);console.log(`${s}${n.description}`)}),console.log())}e.arguments&&e.arguments.length>0&&(console.log("Arguments:"),e.arguments.forEach(t=>{console.log(A(t))}),console.log()),console.log(`Use "${l.name} ${e.name} <operation> help" for more information about an operation.`)}function U(e,t){console.log(`
7
7
  ${l.name} ${e.name} ${t.name} - ${t.description}
8
- `),t.arguments&&t.arguments.length>0&&(console.log("Arguments:"),t.arguments.forEach(n=>{console.log(A(n))}),console.log())}function T(e){return y(e.name)?!0:e.operations?e.operations.some(t=>y(e.name,t.name)):!1}function x(){console.log(`Tigris CLI Version: ${b}
8
+ `),t.arguments&&t.arguments.length>0&&(console.log("Arguments:"),t.arguments.forEach(n=>{console.log(A(n))}),console.log())}function T(e){return y(e.name)?!0:e.operations?e.operations.some(t=>y(e.name,t.name)):!1}function v(){console.log(`Tigris CLI Version: ${b}
9
9
  `),console.log(`Usage: tigris [command] [options]
10
10
  `),console.log("Commands:"),l.commands.filter(T).forEach(t=>{let n=` ${t.name}`;t.alias&&(n+=` (${t.alias})`);let i=n.padEnd(24);console.log(`${i}${t.description}`)}),console.log(`
11
- Use "${l.name} <command> help" for more information about a command.`)}function m(e,t=[]){t.forEach(n=>{if(n.type==="positional"){let i=n.required?`<${n.name}>`:`[${n.name}]`;e.argument(i,n.description)}else{let s=n.alias&&n.alias.length===1?`-${n.alias}, --${n.name}`:`--${n.name}`;n.type==="flag"||(n.options?s+=" <value>":s+=n.required||n["required-when"]?" <value>":" [value]"),e.option(s,n.description,n.default)}})}function g(e,t){for(let n of e){if(n["required-when"]){let[i,s]=n["required-when"].split("="),o=h(t,i,e),r=h(t,n.name,e);if(o===s&&!r)return console.error(`--${n.name} is required when --${i} is ${s}`),!1}if(n.required&&!h(t,n.name,e))return console.error(`--${n.name} is required`),!1}return!0}function h(e,t,n){if(n){let s=n.find(o=>o.name===t);if(s&&s.alias){let o=s.alias.charAt(0).toUpperCase()+s.alias.slice(1);if(e[o]!==void 0)return e[o]}}let i=[t,t.replace(/-/g,""),t.replace(/-/g,"").toLowerCase(),t.charAt(0).toUpperCase(),_(t)];for(let s of i)if(e[s]!==void 0)return e[s]}function _(e){return e.replace(/-([a-z])/g,(t,n)=>n.toUpperCase())}async function H(e,t){let n=t?[`./lib/${e}/${t}.js`,`./lib/${e}/${t}/index.js`]:[`./lib/${e}.js`,`./lib/${e}/index.js`];for(let s of n){let o=await import(s).catch(()=>null);if(o)return{module:o,error:null}}return{module:null,error:`Command not found: ${t?`${e} ${t}`:e}`}}async function $(e,t,n=[],i={},s){if(s){let v=s.replace(/\\n/g,`
12
- `);console.log(v)}let{module:o,error:r}=await H(e,t);(r||!o)&&(console.error(r),process.exit(1));let a=t||e,d=o.default||o[a];typeof d!="function"&&(console.error(`Command not implemented: ${a}`),process.exit(1)),await d({...i,_positional:n})}var f=new E;f.name(l.name).description(l.description).version(l.version);function c(e,t,n){let i;"optsWithGlobals"in n&&typeof n.optsWithGlobals=="function"?i=n.optsWithGlobals():"opts"in n&&typeof n.opts=="function"?i=n.opts():i=n;let s={...i};return e.filter(r=>r.type==="positional").forEach((r,a)=>{t[a]!==void 0&&(r.multiple?s[r.name]=t[a].split(",").map(d=>d.trim()):s[r.name]=t[a])}),e.forEach(r=>{r.multiple&&r.type!=="positional"&&s[r.name]&&typeof s[r.name]=="string"&&(s[r.name]=s[r.name].split(",").map(a=>a.trim()))}),s}l.commands.forEach(e=>{let t=f.command(e.name).description(e.description);if(e.alias&&t.alias(e.alias),e.operations&&e.operations.length>0)if(e.operations.forEach(n=>{let i=t.command(n.name).description(n.description);n.alias&&(Array.isArray(n.alias)?n.alias:[n.alias]).forEach(o=>i.alias(o)),m(i,n.arguments),i.action(async(...s)=>{let o=s.pop(),r=s;n.arguments&&!g(n.arguments,c(n.arguments,r,o))||await $(e.name,n.name,r,c(n.arguments||[],r,o),n.message)}),i.command("help").description("Show help for this operation").action(()=>{U(e,n)})}),e.default){let n=e.operations?.find(i=>i.name===e.default);if(n){m(t,e.arguments),m(t,n.arguments);let i=[...e.arguments||[],...n.arguments||[]];t.action(async(...s)=>{let o=s.pop(),r=s;i.length>0&&!g(i,c(i,r,o))||await $(e.name,n.name,r,c(i,r,o),e.message||n.message)})}}else t.action(()=>{w(e)});else m(t,e.arguments),t.action(async(...n)=>{let i=n.pop(),s=n;e.arguments&&!g(e.arguments,c(e.arguments,s,i))||await $(e.name,void 0,s,c(e.arguments||[],s,i),e.message)});t.command("help").description("Show help for this command").action(()=>{w(e)})});f.command("help").description("Show general help").action(()=>{x()});f.action(()=>{x()});f.parse();
11
+ Use "${l.name} <command> help" for more information about a command.`)}function m(e,t=[]){t.forEach(n=>{if(n.type==="positional"){let i=n.required?`<${n.name}>`:`[${n.name}]`;e.argument(i,n.description)}else{let s=n.alias&&n.alias.length===1?`-${n.alias}, --${n.name}`:`--${n.name}`;n.type==="flag"||(n.type==="boolean"?s+=" [value]":n.options?s+=" <value>":s+=n.required||n["required-when"]?" <value>":" [value]"),e.option(s,n.description,n.default)}})}function g(e,t){for(let n of e){if(n["required-when"]){let[i,s]=n["required-when"].split("="),o=h(t,i,e),r=h(t,n.name,e);if(o===s&&!r)return console.error(`--${n.name} is required when --${i} is ${s}`),!1}if(n.required&&!h(t,n.name,e))return console.error(`--${n.name} is required`),!1}return!0}function h(e,t,n){if(n){let s=n.find(o=>o.name===t);if(s&&s.alias){let o=s.alias.charAt(0).toUpperCase()+s.alias.slice(1);if(e[o]!==void 0)return e[o]}}let i=[t,t.replace(/-/g,""),t.replace(/-/g,"").toLowerCase(),t.charAt(0).toUpperCase(),_(t)];for(let s of i)if(e[s]!==void 0)return e[s]}function _(e){return e.replace(/-([a-z])/g,(t,n)=>n.toUpperCase())}async function H(e,t){let n=t?[`./lib/${e}/${t}.js`,`./lib/${e}/${t}/index.js`]:[`./lib/${e}.js`,`./lib/${e}/index.js`];for(let s of n){let o=await import(s).catch(()=>null);if(o)return{module:o,error:null}}return{module:null,error:`Command not found: ${t?`${e} ${t}`:e}`}}async function $(e,t,n=[],i={},s){if(s){let x=s.replace(/\\n/g,`
12
+ `);console.log(x)}let{module:o,error:r}=await H(e,t);(r||!o)&&(console.error(r),process.exit(1));let a=t||e,d=o.default||o[a];typeof d!="function"&&(console.error(`Command not implemented: ${a}`),process.exit(1)),await d({...i,_positional:n})}var f=new E;f.name(l.name).description(l.description).version(l.version);function c(e,t,n){let i;"optsWithGlobals"in n&&typeof n.optsWithGlobals=="function"?i=n.optsWithGlobals():"opts"in n&&typeof n.opts=="function"?i=n.opts():i=n;let s={...i};return e.filter(r=>r.type==="positional").forEach((r,a)=>{t[a]!==void 0&&(r.multiple?s[r.name]=t[a].split(",").map(d=>d.trim()):s[r.name]=t[a])}),e.forEach(r=>{r.multiple&&r.type!=="positional"&&s[r.name]&&typeof s[r.name]=="string"&&(s[r.name]=s[r.name].split(",").map(a=>a.trim()))}),s}l.commands.forEach(e=>{let t=f.command(e.name).description(e.description);if(e.alias&&t.alias(e.alias),e.operations&&e.operations.length>0)if(e.operations.forEach(n=>{let i=t.command(n.name).description(n.description);n.alias&&(Array.isArray(n.alias)?n.alias:[n.alias]).forEach(o=>i.alias(o)),m(i,n.arguments),i.action(async(...s)=>{let o=s.pop(),r=s;n.arguments&&!g(n.arguments,c(n.arguments,r,o))||await $(e.name,n.name,r,c(n.arguments||[],r,o),n.message)}),i.command("help").description("Show help for this operation").action(()=>{U(e,n)})}),e.default){let n=e.operations?.find(i=>i.name===e.default);if(n){m(t,e.arguments),m(t,n.arguments);let i=[...e.arguments||[],...n.arguments||[]];t.action(async(...s)=>{let o=s.pop(),r=s;i.length>0&&!g(i,c(i,r,o))||await $(e.name,n.name,r,c(i,r,o),e.message||n.message)})}}else t.action(()=>{w(e)});else m(t,e.arguments),t.action(async(...n)=>{let i=n.pop(),s=n;e.arguments&&!g(e.arguments,c(e.arguments,s,i))||await $(e.name,void 0,s,c(e.arguments||[],s,i),e.message)});t.command("help").description("Show help for this command").action(()=>{w(e)})});f.command("help").description("Show general help").action(()=>{v()});f.action(()=>{v()});f.parse();
@@ -0,0 +1,3 @@
1
+ function u(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 ee}from"os";import{join as N}from"path";import{readFileSync as te,writeFileSync as ne,existsSync as R,mkdirSync as oe}from"fs";import{chmod as ie}from"fs/promises";var k=N(ee(),".tigris"),m=N(k,"config.json");function re(){R(k)||oe(k,{recursive:!0,mode:448})}function g(){if(R(m))try{let t=te(m,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function h(t){re(),ne(m,JSON.stringify(t,null,2),{mode:384});try{await ie(m,384)}catch{}}async function w(t){let e=g();e.tokens=t,await h(e)}async function f(){return g().tokens||null}async function x(){let t=g();delete t.tokens,await h(t)}async function z(t){let e=g();e.organizations=t,await h(e)}function D(){return g().organizations||[]}function A(){return g().selectedOrganization||null}async function $(t){let e=g();e.loginMethod=t,await h(e)}function L(){return g().loginMethod||null}import T from"axios";import se 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 K=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function C(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var v=class{config;baseUrl;constructor(){this.config=y(),this.baseUrl=`https://${this.config.domain}`}async login(e){let 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 se(o.verification_uri_complete)}catch{}e?.onWaiting?.();let i=await this.pollForToken(o.device_code,o.interval||5);await w(i),$("oauth"),await this.extractAndStoreOrganizations(i.idToken)}async pollForToken(e,n){let i=0;for(;i<60;){i++;try{let c=(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()+(c.expires_in||3600)*1e3;return{accessToken:c.access_token,refreshToken:c.refresh_token,idToken:c.id_token,expiresAt:s}}catch(r){if(T.isAxiosError(r)&&r.response){let c=r.response.data?.error;if(c==="authorization_pending"){await this.sleep(n*1e3);continue}if(c==="slow_down"){n+=5,await this.sleep(n*1e3);continue}throw new Error(r.response.data?.error_description||"Authentication failed")}throw r}}throw new Error("Authentication timed out. Please try again.")}async getAccessToken(){let e=await f();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 f(),!n)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let i=(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,r={accessToken:i.access_token,refreshToken:i.refresh_token||n.refreshToken,idToken:i.id_token||n.idToken,expiresAt:Date.now()+(i.expires_in||3600)*1e3};return await w(r),r}catch{throw await x(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await f();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)[K];if(!r)return;let c=r?.ns?.map(s=>typeof s=="object"&&s!==null?{id:s.id,name:s.name,displayName:s.name}:{id:s,name:s,displayName:s})||[];if(c.length===0)return;z(c)}catch{}}async getOrganizations(){return await this.getAccessToken(),D()}async logout(){await x()}async isAuthenticated(){return await f()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},S=null;function _(){return S||(S=new v),S}var $e=C(),Le=y();async function F(){return L()}import{assignBucketRoles as me,revokeAllBucketRoles as he}from"@tigrisdata/iam";import{readFileSync as ae,existsSync as ce}from"fs";import{join as j,dirname as de}from"path";import{fileURLToPath as le}from"url";import*as U from"yaml";var ge=le(import.meta.url),ue=de(ge),I=null;function fe(){let t=ue;for(let e=0;e<5;e++){let n=j(t,"specs.yaml");if(ce(n))return n;t=j(t,"..")}throw new Error("Could not find specs.yaml")}function pe(){if(!I){let t=fe(),e=ae(t,"utf8");I=U.parse(e)}return I}function q(t,e){let o=pe().commands.find(i=>i.name===t);return o?e&&o.operations?o.operations.find(i=>i.name===e)||null:o:null}var V={success:"\u2714",failure:"\u2716",hint:"\u2192"};function G(){return process.stdout.isTTY===!0}function M(t){let e=q(t.command,t.operation);if(e)return e.messages}function O(t,e){let n=t;return n=n.replace(/\\n/g,`
2
+ `),e&&(n=n.replace(/\{\{(\w+)\}\}/g,(o,i)=>{let r=e[i];return r!==void 0?String(r):`{{${i}}}`})),n}function B(t,e){if(!G())return;let n=M(t);n?.onStart&&console.log(O(n.onStart,e))}function b(t,e){if(!G())return;let n=M(t);n?.onSuccess&&console.log(`${V.success} ${O(n.onSuccess,e)}`)}function d(t,e,n){let o=M(t);o?.onFailure&&console.error(`${V.failure} ${O(o.onFailure,n)}`),e&&console.error(` ${e}`)}function H(t,e){return{command:t,operation:e}}var a=H("access-keys","assign"),J=["Editor","ReadOnly","NamespaceAdmin"];function Y(t){return t?Array.isArray(t)?t:[t]:[]}async function ye(t){B(a);let e=u(t,["id"]),n=u(t,["admin"]),o=u(t,["revokeRoles","revoke-roles"]),i=Y(u(t,["bucket","b"])),r=Y(u(t,["role","r"]));e||(d(a,"Access key ID is required"),process.exit(1)),n&&o&&(d(a,"Cannot use --admin and --revoke-roles together"),process.exit(1)),await F()!=="oauth"&&(d(a,`Bucket roles can only be managed when logged in via OAuth.
3
+ Run "tigris login oauth" first.`),process.exit(1));let s=_();await s.isAuthenticated()||(d(a,'Not authenticated. Run "tigris login oauth" first.'),process.exit(1));let W=await s.getAccessToken(),Q=A(),X=C(),P={sessionToken:W,organizationId:Q??void 0,iamEndpoint:X.iamEndpoint};if(o){let{error:l}=await he(e,{config:P});l&&(d(a,l.message),process.exit(1)),b(a);return}let p;if(n)p=[{bucket:"*",role:"NamespaceAdmin"}];else{i.length===0&&(d(a,"At least one bucket name is required (or use --admin or --revoke-roles)"),process.exit(1)),r.length===0&&(d(a,"At least one role is required (or use --admin or --revoke-roles)"),process.exit(1));for(let l of r)J.includes(l)||(d(a,`Invalid role "${l}". Valid roles are: ${J.join(", ")}`),process.exit(1));r.length===1?p=i.map(l=>({bucket:l,role:r[0]})):r.length===i.length?p=i.map((l,Z)=>({bucket:l,role:r[Z]})):(d(a,`Number of roles (${r.length}) must be 1 or match number of buckets (${i.length})`),process.exit(1))}let{error:E}=await me(e,p,{config:P});E&&(d(a,E.message),process.exit(1)),b(a)}export{ye as default};
@@ -0,0 +1,3 @@
1
+ function O(t,e,n){for(let o of e)if(t[o]!==void 0)return t[o];return n}import{S3Client as Se}from"@aws-sdk/client-s3";import{homedir as H}from"os";import{join as P}from"path";import{readFileSync as B,writeFileSync as J,existsSync as E,mkdirSync as Y}from"fs";import{chmod as W}from"fs/promises";var C=P(H(),".tigris"),u=P(C,"config.json");function Q(){E(C)||Y(C,{recursive:!0,mode:448})}function c(){if(E(u))try{let t=B(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 T(t){let e=c();e.tokens=t,await f(e)}async function d(){return c().tokens||null}async function w(){let t=c();delete t.tokens,await f(t)}async function b(t){let e=c();e.organizations=t,await f(e)}function N(){return c().organizations||[]}function k(){return c().selectedOrganization||null}async function z(t){let e=c();e.loginMethod=t,await f(e)}function D(){return c().loginMethod||null}import h 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 R=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function m(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var S=class{config;baseUrl;constructor(){this.config=p(),this.baseUrl=`https://${this.config.domain}`}async login(e){let o=(await 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 X(o.verification_uri_complete)}catch{}e?.onWaiting?.();let i=await this.pollForToken(o.device_code,o.interval||5);await T(i),z("oauth"),await this.extractAndStoreOrganizations(i.idToken)}async pollForToken(e,n){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(n*1e3);continue}if(s==="slow_down"){n+=5,await this.sleep(n*1e3);continue}throw new Error(r.response.data?.error_description||"Authentication failed")}throw r}}throw new Error("Authentication timed out. Please try again.")}async getAccessToken(){let e=await d();if(!e)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');let n=300*1e3;return Date.now()+n>=e.expiresAt&&(e=await this.refreshAccessToken(e)),e.accessToken}async refreshAccessToken(e){let n=null;if(e?.refreshToken?n=e:n=await d(),!n)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let i=(await h.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,grant_type:"refresh_token",refresh_token:n.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,r={accessToken:i.access_token,refreshToken:i.refresh_token||n.refreshToken,idToken:i.id_token||n.idToken,expiresAt:Date.now()+(i.expires_in||3600)*1e3};return await T(r),r}catch{throw await w(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await d();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let n=e.idToken.split(".")[1],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)[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 w()}async isAuthenticated(){return await d()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},A=null;function x(){return A||(A=new S),A}var Ie=m(),Me=p();async function K(){return D()}import{createAccessKey as ae}from"@tigrisdata/iam";import{readFileSync as Z,existsSync as ee}from"fs";import{join as L,dirname as te}from"path";import{fileURLToPath as ne}from"url";import*as $ from"yaml";var oe=ne(import.meta.url),ie=te(oe),v=null;function re(){let t=ie;for(let e=0;e<5;e++){let n=L(t,"specs.yaml");if(ee(n))return n;t=L(t,"..")}throw new Error("Could not find specs.yaml")}function se(){if(!v){let t=re(),e=Z(t,"utf8");v=$.parse(e)}return v}function F(t,e){let o=se().commands.find(i=>i.name===t);return o?e&&o.operations?o.operations.find(i=>i.name===e)||null:o:null}var j={success:"\u2714",failure:"\u2716",hint:"\u2192"};function U(){return process.stdout.isTTY===!0}function _(t){let e=F(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 r=e[i];return r!==void 0?String(r):`{{${i}}}`})),n}function G(t,e){if(!U())return;let n=_(t);n?.onStart&&console.log(I(n.onStart,e))}function V(t,e){if(!U())return;let n=_(t);n?.onSuccess&&console.log(`${j.success} ${I(n.onSuccess,e)}`)}function l(t,e,n){let o=_(t);o?.onFailure&&console.error(`${j.failure} ${I(o.onFailure,n)}`),e&&console.error(` ${e}`)}function q(t,e){return{command:t,operation:e}}var g=q("access-keys","create");async function ce(t){G(g);let e=O(t,["name"]);e||(l(g,"Access key name is required"),process.exit(1)),await K()!=="oauth"&&(l(g,`Access keys can only be created when logged in via OAuth.
3
+ Run "tigris login oauth" first.`),process.exit(1));let o=x();await o.isAuthenticated()||(l(g,'Not authenticated. Run "tigris login oauth" first.'),process.exit(1));let r=await o.getAccessToken(),s=k(),a=m(),{data:y,error:M}=await ae(e,{config:{sessionToken:r,organizationId:s??void 0,iamEndpoint:a.iamEndpoint}});M&&(l(g,M.message),process.exit(1)),console.log(` Name: ${y.name}`),console.log(` Access Key ID: ${y.id}`),console.log(` Secret Access Key: ${y.secret}`),console.log(""),console.log(" Save these credentials securely. The secret will not be shown again."),V(g)}export{ce as default};
@@ -0,0 +1,3 @@
1
+ function M(t,e,n){for(let o of e)if(t[o]!==void 0)return t[o];return n}import{S3Client as xe}from"@aws-sdk/client-s3";import{homedir as q}from"os";import{join as O}from"path";import{readFileSync as H,writeFileSync as B,existsSync as P,mkdirSync as J}from"fs";import{chmod as Y}from"fs/promises";var y=O(q(),".tigris"),u=O(y,"config.json");function W(){P(y)||J(y,{recursive:!0,mode:448})}function c(){if(P(u))try{let t=H(u,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function f(t){W(),B(u,JSON.stringify(t,null,2),{mode:384});try{await Y(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 E(t){let e=c();e.organizations=t,await f(e)}function b(){return c().organizations||[]}function w(){return c().selectedOrganization||null}async function N(t){let e=c();e.loginMethod=t,await f(e)}function z(){return c().loginMethod||null}import h from"axios";import Q 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 D=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function m(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var x=class{config;baseUrl;constructor(){this.config=p(),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 Q(o.verification_uri_complete)}catch{}e?.onWaiting?.();let i=await this.pollForToken(o.device_code,o.interval||5);await C(i),N("oauth"),await this.extractAndStoreOrganizations(i.idToken)}async pollForToken(e,n){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(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 h.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)[D];if(!r)return;let s=r?.ns?.map(a=>typeof a=="object"&&a!==null?{id:a.id,name:a.name,displayName:a.name}:{id:a,name:a,displayName:a})||[];if(s.length===0)return;E(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),b()}async logout(){await T()}async isAuthenticated(){return await g()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},k=null;function A(){return k||(k=new x),k}var _e=m(),Ie=p();async function R(){return z()}import{removeAccessKey as se}from"@tigrisdata/iam";import{readFileSync as X,existsSync as Z}from"fs";import{join as K,dirname as ee}from"path";import{fileURLToPath as te}from"url";import*as L from"yaml";var ne=te(import.meta.url),oe=ee(ne),S=null;function ie(){let t=oe;for(let e=0;e<5;e++){let n=K(t,"specs.yaml");if(Z(n))return n;t=K(t,"..")}throw new Error("Could not find specs.yaml")}function re(){if(!S){let t=ie(),e=X(t,"utf8");S=L.parse(e)}return S}function $(t,e){let o=re().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 j(){return process.stdout.isTTY===!0}function v(t){let e=$(t.command,t.operation);if(e)return e.messages}function _(t,e){let n=t;return n=n.replace(/\\n/g,`
2
+ `),e&&(n=n.replace(/\{\{(\w+)\}\}/g,(o,i)=>{let r=e[i];return r!==void 0?String(r):`{{${i}}}`})),n}function U(t,e){if(!j())return;let n=v(t);n?.onStart&&console.log(_(n.onStart,e))}function G(t,e){if(!j())return;let n=v(t);n?.onSuccess&&console.log(`${F.success} ${_(n.onSuccess,e)}`)}function l(t,e,n){let o=v(t);o?.onFailure&&console.error(`${F.failure} ${_(o.onFailure,n)}`),e&&console.error(` ${e}`)}function V(t,e){return{command:t,operation:e}}var d=V("access-keys","delete");async function ae(t){U(d);let e=M(t,["id"]);e||(l(d,"Access key ID is required"),process.exit(1)),await R()!=="oauth"&&(l(d,`Access keys can only be deleted when logged in via OAuth.
3
+ Run "tigris login oauth" first.`),process.exit(1));let o=A();await o.isAuthenticated()||(l(d,'Not authenticated. Run "tigris login oauth" first.'),process.exit(1));let r=await o.getAccessToken(),s=w(),a=m(),{error:I}=await se(e,{config:{sessionToken:r,organizationId:s??void 0,iamEndpoint:a.iamEndpoint}});I&&(l(d,I.message),process.exit(1)),G(d)}export{ae as default};
@@ -0,0 +1,3 @@
1
+ function P(t,e,n){for(let o of e)if(t[o]!==void 0)return t[o];return n}import{S3Client as Se}from"@aws-sdk/client-s3";import{homedir as B}from"os";import{join as E}from"path";import{readFileSync as J,writeFileSync as Y,existsSync as b,mkdirSync as W}from"fs";import{chmod as Q}from"fs/promises";var C=E(B(),".tigris"),f=E(C,"config.json");function X(){b(C)||W(C,{recursive:!0,mode:448})}function g(){if(b(f))try{let t=J(f,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function p(t){X(),Y(f,JSON.stringify(t,null,2),{mode:384});try{await Q(f,384)}catch{}}async function T(t){let e=g();e.tokens=t,await p(e)}async function l(){return g().tokens||null}async function w(){let t=g();delete t.tokens,await p(t)}async function N(t){let e=g();e.organizations=t,await p(e)}function z(){return g().organizations||[]}function k(){return g().selectedOrganization||null}async function D(t){let e=g();e.loginMethod=t,await p(e)}function R(){return g().loginMethod||null}import y from"axios";import Z 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 $=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function h(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var A=class{config;baseUrl;constructor(){this.config=m(),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 Z(o.verification_uri_complete)}catch{}e?.onWaiting?.();let i=await this.pollForToken(o.device_code,o.interval||5);await T(i),D("oauth"),await this.extractAndStoreOrganizations(i.idToken)}async pollForToken(e,n){let i=0;for(;i<60;){i++;try{let s=(await 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 l();if(!e)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');let n=300*1e3;return Date.now()+n>=e.expiresAt&&(e=await this.refreshAccessToken(e)),e.accessToken}async refreshAccessToken(e){let n=null;if(e?.refreshToken?n=e:n=await l(),!n)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let i=(await 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 T(r),r}catch{throw await w(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await l();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let n=e.idToken.split(".")[1],o=Buffer.from(n,"base64").toString("utf8");return JSON.parse(o)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let n=e.split(".")[1],o=Buffer.from(n,"base64").toString("utf8"),r=JSON.parse(o)[$];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;N(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),z()}async logout(){await w()}async isAuthenticated(){return await l()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},x=null;function S(){return x||(x=new A),x}var Me=h(),Oe=m();async function K(){return R()}import{getAccessKey as ce}from"@tigrisdata/iam";import{readFileSync as ee,existsSync as te}from"fs";import{join as L,dirname as ne}from"path";import{fileURLToPath as oe}from"url";import*as F from"yaml";var ie=oe(import.meta.url),re=ne(ie),v=null;function se(){let t=re;for(let e=0;e<5;e++){let n=L(t,"specs.yaml");if(te(n))return n;t=L(t,"..")}throw new Error("Could not find specs.yaml")}function ae(){if(!v){let t=se(),e=ee(t,"utf8");v=F.parse(e)}return v}function j(t,e){let o=ae().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=j(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 r=e[i];return r!==void 0?String(r):`{{${i}}}`})),n}function V(t,e){if(!G())return;let n=_(t);n?.onStart&&console.log(I(n.onStart,e))}function q(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 d=H("access-keys","get");async function ge(t){V(d);let e=P(t,["id"]);e||(u(d,"Access key ID is required"),process.exit(1)),await K()!=="oauth"&&(u(d,`Access keys can only be retrieved when logged in via OAuth.
3
+ Run "tigris login oauth" first.`),process.exit(1));let o=S();await o.isAuthenticated()||(u(d,'Not authenticated. Run "tigris login oauth" first.'),process.exit(1));let r=await o.getAccessToken(),s=k(),a=h(),{data:c,error:M}=await ce(e,{config:{sessionToken:r,organizationId:s??void 0,iamEndpoint:a.iamEndpoint}});if(M&&(u(d,M.message),process.exit(1)),console.log(` Name: ${c.name}`),console.log(` ID: ${c.id}`),console.log(` Status: ${c.status}`),console.log(` Created: ${c.createdAt}`),console.log(` Organization: ${c.organizationId}`),c.roles&&c.roles.length>0){console.log(" Roles:");for(let O of c.roles)console.log(` - ${O.bucket}: ${O.role}`)}else console.log(" Roles: None");q(d)}export{ge as default};
@@ -0,0 +1,8 @@
1
+ function Q(t){return JSON.stringify(t,null,2)}function Z(t,e=" "){return Object.entries(t).map(([n,i])=>`${e}<${n}>${i}</${n}>`).join(`
2
+ `)}function ee(t,e,n){let i=[`<${e}>`];return t.forEach(o=>{i.push(` <${n}>`),i.push(Z(o," ")),i.push(` </${n}>`)}),i.push(`</${e}>`),i.join(`
3
+ `)}function z(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 te(t,e){return e.map(n=>{if(n.width)return n.width;let i=n.header.length,o=t.reduce((r,s)=>{let a=z(s[n.key]);return Math.max(r,a.length)},0);return Math.max(i,o)})}function ne(t,e){let n=[],i=te(t,e),o="\u250C"+i.map(c=>"\u2500".repeat(c+2)).join("\u252C")+"\u2510",r="\u251C"+i.map(c=>"\u2500".repeat(c+2)).join("\u253C")+"\u2524",s="\u2514"+i.map(c=>"\u2500".repeat(c+2)).join("\u2534")+"\u2518";n.push(`
4
+ `+o);let a="\u2502 "+e.map((c,l)=>c.header.padEnd(i[l])).join(" \u2502 ")+" \u2502";return n.push(a),n.push(r),t.forEach(c=>{let l=e.map((g,b)=>{let E=z(c[g.key]);return g.align==="right"?E.padStart(i[b]):E.padEnd(i[b])});n.push("\u2502 "+l.join(" \u2502 ")+" \u2502")}),n.push(s+`
5
+ `),n.join(`
6
+ `)}function D(t,e,n,i,o){switch(e){case"json":return Q(t);case"xml":return ee(t,n,i);default:return ne(t,o)}}import{S3Client as ze}from"@aws-sdk/client-s3";import{homedir as ie}from"os";import{join as R}from"path";import{readFileSync as oe,writeFileSync as re,existsSync as j,mkdirSync as se}from"fs";import{chmod as ae}from"fs/promises";var x=R(ie(),".tigris"),f=R(x,"config.json");function ce(){j(x)||se(x,{recursive:!0,mode:448})}function d(){if(j(f))try{let t=oe(f,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function m(t){ce(),re(f,JSON.stringify(t,null,2),{mode:384});try{await ae(f,384)}catch{}}async function S(t){let e=d();e.tokens=t,await m(e)}async function p(){return d().tokens||null}async function A(){let t=d();delete t.tokens,await m(t)}async function $(t){let e=d();e.organizations=t,await m(e)}function K(){return d().organizations||[]}function _(){return d().selectedOrganization||null}async function L(t){let e=d();e.loginMethod=t,await m(e)}function F(){return d().loginMethod||null}import C from"axios";import de 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 U=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function y(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var I=class{config;baseUrl;constructor(){this.config=h(),this.baseUrl=`https://${this.config.domain}`}async login(e){let i=(await C.post(`${this.baseUrl}/oauth/device/code`,{client_id:this.config.clientId,audience:this.config.audience,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data;e?.onDeviceCode?.(i.user_code,i.verification_uri),await this.sleep(2e3);try{await de(i.verification_uri_complete)}catch{}e?.onWaiting?.();let o=await this.pollForToken(i.device_code,i.interval||5);await S(o),L("oauth"),await this.extractAndStoreOrganizations(o.idToken)}async pollForToken(e,n){let o=0;for(;o<60;){o++;try{let s=(await C.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,device_code:e,grant_type:"urn:ietf:params:oauth:grant-type:device_code"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,a=Date.now()+(s.expires_in||3600)*1e3;return{accessToken:s.access_token,refreshToken:s.refresh_token,idToken:s.id_token,expiresAt:a}}catch(r){if(C.isAxiosError(r)&&r.response){let s=r.response.data?.error;if(s==="authorization_pending"){await this.sleep(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 o=(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,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 S(r),r}catch{throw await A(),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],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)[U];if(!r)return;let s=r?.ns?.map(a=>typeof a=="object"&&a!==null?{id:a.id,name:a.name,displayName:a.name}:{id:a,name:a,displayName:a})||[];if(s.length===0)return;$(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),K()}async logout(){await A()}async isAuthenticated(){return await p()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},v=null;function M(){return v||(v=new I),v}var $e=y(),Ke=h();async function V(){return F()}import{listAccessKeys as Ce}from"@tigrisdata/iam";import{readFileSync as ge,existsSync as ue}from"fs";import{join as G,dirname as le}from"path";import{fileURLToPath as pe}from"url";import*as q from"yaml";var fe=pe(import.meta.url),me=le(fe),O=null;function he(){let t=me;for(let e=0;e<5;e++){let n=G(t,"specs.yaml");if(ue(n))return n;t=G(t,"..")}throw new Error("Could not find specs.yaml")}function ye(){if(!O){let t=he(),e=ge(t,"utf8");O=q.parse(e)}return O}function B(t,e){let i=ye().commands.find(o=>o.name===t);return i?e&&i.operations?i.operations.find(o=>o.name===e)||null:i:null}var H={success:"\u2714",failure:"\u2716",hint:"\u2192"};function P(){return process.stdout.isTTY===!0}function T(t){let e=B(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,(i,o)=>{let r=e[o];return r!==void 0?String(r):`{{${o}}}`})),n}function J(t,e){if(!P())return;let n=T(t);n?.onStart&&console.log(w(n.onStart,e))}function W(t,e){if(!P())return;let n=T(t);n?.onSuccess&&console.log(`${H.success} ${w(n.onSuccess,e)}`)}function k(t,e,n){let i=T(t);i?.onFailure&&console.error(`${H.failure} ${w(i.onFailure,n)}`),e&&console.error(` ${e}`)}function Y(t,e){if(!P())return;let n=T(t);n?.onEmpty&&console.log(w(n.onEmpty,e))}function X(t,e){return{command:t,operation:e}}var u=X("access-keys","list");async function Te(){J(u),await V()!=="oauth"&&(k(u,`Access keys can only be listed when logged in via OAuth.
8
+ Run "tigris login oauth" first.`),process.exit(1));let e=M();await e.isAuthenticated()||(k(u,'Not authenticated. Run "tigris login oauth" first.'),process.exit(1));let i=await e.getAccessToken(),o=_(),r=y(),{data:s,error:a}=await Ce({config:{sessionToken:i,organizationId:o??void 0,iamEndpoint:r.iamEndpoint}});if(a&&(k(u,a.message),process.exit(1)),!s.accessKeys||s.accessKeys.length===0){Y(u);return}let c=s.accessKeys.map(g=>({name:g.name,id:g.id,status:g.status,created:g.createdAt})),l=D(c,"table","keys","key",[{key:"name",header:"Name"},{key:"id",header:"ID"},{key:"status",header:"Status"},{key:"created",header:"Created"}]);console.log(l),W(u,{count:c.length})}export{Te as default};
@@ -1,2 +1,2 @@
1
- function f(n,e,t){for(let i of e)if(n[i]!==void 0)return n[i];return t}import ye from"enquirer";import{readFileSync as ee,existsSync as ne}from"fs";import{join as D,dirname as te}from"path";import{fileURLToPath as ie}from"url";import*as R from"yaml";var oe=ie(import.meta.url),se=te(oe),x=null;function re(){let n=se;for(let e=0;e<5;e++){let t=D(n,"specs.yaml");if(ne(t))return t;n=D(n,"..")}throw new Error("Could not find specs.yaml")}function ae(){if(!x){let n=re(),e=ee(n,"utf8");x=R.parse(e)}return x}function A(n,e){let i=ae().commands.find(o=>o.name===n);return i?e&&i.operations?i.operations.find(o=>o.name===e)||null:i:null}function m(n,e,t){let i=A(n,t);return!i||!i.arguments?null:i.arguments.find(o=>o.name===e)||null}function h(n){return n.options?Array.isArray(n.options)&&typeof n.options[0]=="string"?n.options.map(e=>({name:e,message:e.charAt(0).toUpperCase()+e.slice(1),value:e})):Array.isArray(n.options)&&typeof n.options[0]=="object"?n.options.map(e=>({name:e.value,message:e.description?`${e.name} - ${e.description}`:e.name,value:e.value})):null:null}import{createBucket as Ce}from"@tigrisdata/storage";import{S3Client as Le}from"@aws-sdk/client-s3";import{homedir as ce}from"os";import{join as K}from"path";import{readFileSync as de,writeFileSync as le,existsSync as L,mkdirSync as ge}from"fs";import{chmod as ue}from"fs/promises";var v=K(ce(),".tigris"),C=K(v,"config.json");function fe(){L(v)||ge(v,{recursive:!0,mode:448})}function g(){if(L(C))try{let n=de(C,"utf8");return JSON.parse(n)}catch{return{}}return{}}async function T(n){fe(),le(C,JSON.stringify(n,null,2),{mode:384});try{await ue(C,384)}catch{}}async function I(n){let e=g();e.tokens=n,await T(e)}async function y(){return g().tokens||null}async function _(){let n=g();delete n.tokens,await T(n)}async function $(n){let e=g();e.organizations=n,await T(e)}function F(){return g().organizations||[]}function b(){return g().selectedOrganization||null}function j(){let n=g();return n.temporaryCredentials||n.credentials||null}async function q(n){let e=g();e.loginMethod=n,await T(e)}function U(){return g().loginMethod||null}import S from"axios";import pe from"open";function w(){return{domain:process.env.AUTH0_DOMAIN||"auth.tigris.dev",clientId:process.env.AUTH0_CLIENT_ID||"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",audience:process.env.AUTH0_AUDIENCE||"https://tigris-os-api"}}var G=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function V(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_STORAGE_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var P=class{config;baseUrl;constructor(){this.config=w(),this.baseUrl=`https://${this.config.domain}`}async login(e){let i=(await S.post(`${this.baseUrl}/oauth/device/code`,{client_id:this.config.clientId,audience:this.config.audience,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data;e?.onDeviceCode?.(i.user_code,i.verification_uri),await this.sleep(2e3);try{await pe(i.verification_uri_complete)}catch{}e?.onWaiting?.();let o=await this.pollForToken(i.device_code,i.interval||5);await I(o),q("oauth"),await this.extractAndStoreOrganizations(o.idToken)}async pollForToken(e,t){let o=0;for(;o<60;){o++;try{let c=(await S.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,device_code:e,grant_type:"urn:ietf:params:oauth:grant-type:device_code"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,r=Date.now()+(c.expires_in||3600)*1e3;return{accessToken:c.access_token,refreshToken:c.refresh_token,idToken:c.id_token,expiresAt:r}}catch(s){if(S.isAxiosError(s)&&s.response){let c=s.response.data?.error;if(c==="authorization_pending"){await this.sleep(t*1e3);continue}if(c==="slow_down"){t+=5,await this.sleep(t*1e3);continue}throw new Error(s.response.data?.error_description||"Authentication failed")}throw s}}throw new Error("Authentication timed out. Please try again.")}async getAccessToken(){let e=await y();if(!e)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');let t=300*1e3;return Date.now()+t>=e.expiresAt&&(e=await this.refreshAccessToken(e)),e.accessToken}async refreshAccessToken(e){let t=null;if(e?.refreshToken?t=e:t=await y(),!t)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let o=(await S.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,grant_type:"refresh_token",refresh_token:t.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,s={accessToken:o.access_token,refreshToken:o.refresh_token||t.refreshToken,idToken:o.id_token||t.idToken,expiresAt:Date.now()+(o.expires_in||3600)*1e3};return await I(s),s}catch{throw await _(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await y();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let t=e.idToken.split(".")[1],i=Buffer.from(t,"base64").toString("utf8");return JSON.parse(i)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let t=e.split(".")[1],i=Buffer.from(t,"base64").toString("utf8"),s=JSON.parse(i)[G];if(!s)return;let c=s?.ns?.map(r=>typeof r=="object"&&r!==null?{id:r.id,name:r.name,displayName:r.name}:{id:r,name:r,displayName:r})||[];if(c.length===0)return;$(c)}catch{}}async getOrganizations(){return await this.getAccessToken(),F()}async logout(){await _()}async isAuthenticated(){return await y()!==null}sleep(e){return new Promise(t=>setTimeout(t,e))}},M=null;function B(){return M||(M=new P),M}var H=V(),me=w();async function he(){return U()}async function J(){if(await he()==="oauth"){let i=await B().getAccessToken();if(!b())throw new Error('No organization selected. Please run "tigris orgs select" first.');let s=H.endpoint,c=H.iamEndpoint,r=me.domain;return{sessionToken:i,accessKeyId:"",secretAccessKey:"",endpoint:s,organizationId:b()??void 0,iamEndpoint:c,authDomain:r}}let e=j();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint};throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}var Y={success:"\u2714",failure:"\u2716",hint:"\u2192"};function W(){return process.stdout.isTTY===!0}function O(n){let e=A(n.command,n.operation);if(e)return e.messages}function E(n,e){let t=n;return t=t.replace(/\\n/g,`
1
+ function f(n,e,t){for(let i of e)if(n[i]!==void 0)return n[i];return t}import ye from"enquirer";import{readFileSync as ee,existsSync as ne}from"fs";import{join as D,dirname as te}from"path";import{fileURLToPath as ie}from"url";import*as R from"yaml";var oe=ie(import.meta.url),se=te(oe),x=null;function re(){let n=se;for(let e=0;e<5;e++){let t=D(n,"specs.yaml");if(ne(t))return t;n=D(n,"..")}throw new Error("Could not find specs.yaml")}function ae(){if(!x){let n=re(),e=ee(n,"utf8");x=R.parse(e)}return x}function A(n,e){let i=ae().commands.find(o=>o.name===n);return i?e&&i.operations?i.operations.find(o=>o.name===e)||null:i:null}function m(n,e,t){let i=A(n,t);return!i||!i.arguments?null:i.arguments.find(o=>o.name===e)||null}function h(n){return n.options?Array.isArray(n.options)&&typeof n.options[0]=="string"?n.options.map(e=>({name:e,message:e.charAt(0).toUpperCase()+e.slice(1),value:e})):Array.isArray(n.options)&&typeof n.options[0]=="object"?n.options.map(e=>({name:e.value,message:e.description?`${e.name} - ${e.description}`:e.name,value:e.value})):null:null}import{createBucket as Ce}from"@tigrisdata/storage";import{S3Client as Le}from"@aws-sdk/client-s3";import{homedir as ce}from"os";import{join as K}from"path";import{readFileSync as de,writeFileSync as le,existsSync as L,mkdirSync as ge}from"fs";import{chmod as ue}from"fs/promises";var v=K(ce(),".tigris"),C=K(v,"config.json");function fe(){L(v)||ge(v,{recursive:!0,mode:448})}function g(){if(L(C))try{let n=de(C,"utf8");return JSON.parse(n)}catch{return{}}return{}}async function T(n){fe(),le(C,JSON.stringify(n,null,2),{mode:384});try{await ue(C,384)}catch{}}async function I(n){let e=g();e.tokens=n,await T(e)}async function y(){return g().tokens||null}async function _(){let n=g();delete n.tokens,await T(n)}async function $(n){let e=g();e.organizations=n,await T(e)}function F(){return g().organizations||[]}function b(){return g().selectedOrganization||null}function j(){let n=g();return n.temporaryCredentials||n.credentials||null}async function q(n){let e=g();e.loginMethod=n,await T(e)}function U(){return g().loginMethod||null}import S from"axios";import pe from"open";function w(){return{domain:process.env.AUTH0_DOMAIN||"auth.tigris.dev",clientId:process.env.AUTH0_CLIENT_ID||"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",audience:process.env.AUTH0_AUDIENCE||"https://tigris-os-api"}}var G=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function V(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var P=class{config;baseUrl;constructor(){this.config=w(),this.baseUrl=`https://${this.config.domain}`}async login(e){let i=(await S.post(`${this.baseUrl}/oauth/device/code`,{client_id:this.config.clientId,audience:this.config.audience,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data;e?.onDeviceCode?.(i.user_code,i.verification_uri),await this.sleep(2e3);try{await pe(i.verification_uri_complete)}catch{}e?.onWaiting?.();let o=await this.pollForToken(i.device_code,i.interval||5);await I(o),q("oauth"),await this.extractAndStoreOrganizations(o.idToken)}async pollForToken(e,t){let o=0;for(;o<60;){o++;try{let c=(await S.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,device_code:e,grant_type:"urn:ietf:params:oauth:grant-type:device_code"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,r=Date.now()+(c.expires_in||3600)*1e3;return{accessToken:c.access_token,refreshToken:c.refresh_token,idToken:c.id_token,expiresAt:r}}catch(s){if(S.isAxiosError(s)&&s.response){let c=s.response.data?.error;if(c==="authorization_pending"){await this.sleep(t*1e3);continue}if(c==="slow_down"){t+=5,await this.sleep(t*1e3);continue}throw new Error(s.response.data?.error_description||"Authentication failed")}throw s}}throw new Error("Authentication timed out. Please try again.")}async getAccessToken(){let e=await y();if(!e)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');let t=300*1e3;return Date.now()+t>=e.expiresAt&&(e=await this.refreshAccessToken(e)),e.accessToken}async refreshAccessToken(e){let t=null;if(e?.refreshToken?t=e:t=await y(),!t)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let o=(await S.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,grant_type:"refresh_token",refresh_token:t.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,s={accessToken:o.access_token,refreshToken:o.refresh_token||t.refreshToken,idToken:o.id_token||t.idToken,expiresAt:Date.now()+(o.expires_in||3600)*1e3};return await I(s),s}catch{throw await _(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await y();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let t=e.idToken.split(".")[1],i=Buffer.from(t,"base64").toString("utf8");return JSON.parse(i)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let t=e.split(".")[1],i=Buffer.from(t,"base64").toString("utf8"),s=JSON.parse(i)[G];if(!s)return;let c=s?.ns?.map(r=>typeof r=="object"&&r!==null?{id:r.id,name:r.name,displayName:r.name}:{id:r,name:r,displayName:r})||[];if(c.length===0)return;$(c)}catch{}}async getOrganizations(){return await this.getAccessToken(),F()}async logout(){await _()}async isAuthenticated(){return await y()!==null}sleep(e){return new Promise(t=>setTimeout(t,e))}},M=null;function B(){return M||(M=new P),M}var H=V(),me=w();async function he(){return U()}async function J(){if(await he()==="oauth"){let i=await B().getAccessToken();if(!b())throw new Error('No organization selected. Please run "tigris orgs select" first.');let s=H.endpoint,c=H.iamEndpoint,r=me.domain;return{sessionToken:i,accessKeyId:"",secretAccessKey:"",endpoint:s,organizationId:b()??void 0,iamEndpoint:c,authDomain:r}}let e=j();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint};throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}var Y={success:"\u2714",failure:"\u2716",hint:"\u2192"};function W(){return process.stdout.isTTY===!0}function O(n){let e=A(n.command,n.operation);if(e)return e.messages}function E(n,e){let t=n;return t=t.replace(/\\n/g,`
2
2
  `),e&&(t=t.replace(/\{\{(\w+)\}\}/g,(i,o)=>{let s=e[o];return s!==void 0?String(s):`{{${o}}}`})),t}function Q(n,e){if(!W())return;let t=O(n);t?.onStart&&console.log(E(t.onStart,e))}function X(n,e){if(!W())return;let t=O(n);t?.onSuccess&&console.log(`${Y.success} ${E(t.onSuccess,e)}`)}function N(n,e,t){let i=O(n);i?.onFailure&&console.error(`${Y.failure} ${E(i.onFailure,t)}`),e&&console.error(` ${e}`)}function Z(n,e){return{command:n,operation:e}}var{prompt:Te}=ye,k=Z("buckets","create");async function we(n){Q(k);let e=!f(n,["name"]),t=f(n,["name"]),i=e?void 0:f(n,["access","a","A"]),o=e?void 0:f(n,["enable-snapshots","s","S"]),s=e?void 0:f(n,["default-tier","t","T"]),c=e?void 0:f(n,["consistency","c","C"]),r=e?void 0:f(n,["region","r","R"]),u=[];if((!t||e)&&u.push({type:"input",name:"name",message:"Bucket name:",required:!0}),!i||e){let a=m("buckets","access","create"),l=h(a),d=l?.findIndex(p=>p.value===a?.default);u.push({type:"select",name:"access",message:"Access level:",choices:l||[],initial:d!==void 0&&d>=0?d:0})}if(!s||e){let a=m("buckets","default-tier","create"),l=h(a),d=l?.findIndex(p=>p.value===a?.default);u.push({type:"select",name:"defaultTier",message:"Default storage tier:",choices:l||[],initial:d!==void 0&&d>=0?d:0})}if(!c||e){let a=m("buckets","consistency","create"),l=h(a),d=l?.findIndex(p=>p.value===a?.default);u.push({type:"select",name:"consistency",message:"Consistency level:",choices:l||[],initial:d!==void 0&&d>=0?d:0})}if(!r||e){let a=m("buckets","region","create"),l=h(a),d=l?.findIndex(p=>p.value===a?.default);u.push({type:"select",name:"region",message:"Region:",choices:l||[],initial:d!==void 0&&d>=0?d:0})}if((o===void 0||e)&&u.push({type:"confirm",name:"enableSnapshots",message:"Enable snapshots?",initial:!0}),u.length>0){let a=await Te(u);t=t||a.name,i=i||a.access,o=o!==void 0?o:a.enableSnapshots,s=s||a.defaultTier,c=c||a.consistency,r=r!==void 0?r:a.region}t||(N(k,"Bucket name is required"),process.exit(1));let{error:z}=await Ce(t,{defaultTier:s??"STANDARD",consistency:c==="strict"?"strict":"default",enableSnapshot:o===!0,region:r!=="global"&&r!==void 0?r.split(","):void 0,config:await J()});z&&(N(k,z.message),process.exit(1)),X(k,{name:t})}export{we as default};
@@ -1,2 +1,2 @@
1
- function v(t,e,n){for(let o of e)if(t[o]!==void 0)return t[o];return n}import{S3Client as Ae}from"@aws-sdk/client-s3";import{homedir as B}from"os";import{join as _}from"path";import{readFileSync as H,writeFileSync as J,existsSync as I,mkdirSync as Y}from"fs";import{chmod as W}from"fs/promises";var m=_(B(),".tigris"),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};
1
+ function v(t,e,n){for(let o of e)if(t[o]!==void 0)return t[o];return n}import{S3Client as Ae}from"@aws-sdk/client-s3";import{homedir as B}from"os";import{join as _}from"path";import{readFileSync as H,writeFileSync as J,existsSync as I,mkdirSync as Y}from"fs";import{chmod as W}from"fs/promises";var m=_(B(),".tigris"),g=_(m,"config.json");function Q(){I(m)||Y(m,{recursive:!0,mode:448})}function c(){if(I(g))try{let t=H(g,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function l(t){Q(),J(g,JSON.stringify(t,null,2),{mode:384});try{await W(g,384)}catch{}}async function h(t){let e=c();e.tokens=t,await l(e)}async function d(){return c().tokens||null}async function y(){let t=c();delete t.tokens,await l(t)}async function M(t){let e=c();e.organizations=t,await l(e)}function P(){return c().organizations||[]}function C(){return c().selectedOrganization||null}function O(){let t=c();return t.temporaryCredentials||t.credentials||null}async function E(t){let e=c();e.loginMethod=t,await l(e)}function b(){return c().loginMethod||null}import f from"axios";import X from"open";function u(){return{domain:process.env.AUTH0_DOMAIN||"auth.tigris.dev",clientId:process.env.AUTH0_CLIENT_ID||"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",audience:process.env.AUTH0_AUDIENCE||"https://tigris-os-api"}}var N=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function z(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var w=class{config;baseUrl;constructor(){this.config=u(),this.baseUrl=`https://${this.config.domain}`}async login(e){let o=(await f.post(`${this.baseUrl}/oauth/device/code`,{client_id:this.config.clientId,audience:this.config.audience,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data;e?.onDeviceCode?.(o.user_code,o.verification_uri),await this.sleep(2e3);try{await X(o.verification_uri_complete)}catch{}e?.onWaiting?.();let i=await this.pollForToken(o.device_code,o.interval||5);await h(i),E("oauth"),await this.extractAndStoreOrganizations(i.idToken)}async pollForToken(e,n){let i=0;for(;i<60;){i++;try{let s=(await f.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,device_code:e,grant_type:"urn:ietf:params:oauth:grant-type:device_code"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,a=Date.now()+(s.expires_in||3600)*1e3;return{accessToken:s.access_token,refreshToken:s.refresh_token,idToken:s.id_token,expiresAt:a}}catch(r){if(f.isAxiosError(r)&&r.response){let s=r.response.data?.error;if(s==="authorization_pending"){await this.sleep(n*1e3);continue}if(s==="slow_down"){n+=5,await this.sleep(n*1e3);continue}throw new Error(r.response.data?.error_description||"Authentication failed")}throw r}}throw new Error("Authentication timed out. Please try again.")}async getAccessToken(){let e=await d();if(!e)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');let n=300*1e3;return Date.now()+n>=e.expiresAt&&(e=await this.refreshAccessToken(e)),e.accessToken}async refreshAccessToken(e){let n=null;if(e?.refreshToken?n=e:n=await d(),!n)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let i=(await f.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,grant_type:"refresh_token",refresh_token:n.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,r={accessToken:i.access_token,refreshToken:i.refresh_token||n.refreshToken,idToken:i.id_token||n.idToken,expiresAt:Date.now()+(i.expires_in||3600)*1e3};return await h(r),r}catch{throw await y(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await d();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let n=e.idToken.split(".")[1],o=Buffer.from(n,"base64").toString("utf8");return JSON.parse(o)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let n=e.split(".")[1],o=Buffer.from(n,"base64").toString("utf8"),r=JSON.parse(o)[N];if(!r)return;let s=r?.ns?.map(a=>typeof a=="object"&&a!==null?{id:a.id,name:a.name,displayName:a.name}:{id:a,name:a,displayName:a})||[];if(s.length===0)return;M(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),P()}async logout(){await y()}async isAuthenticated(){return await d()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},T=null;function D(){return T||(T=new w),T}var R=z(),Z=u();async function ee(){return b()}async function K(){if(await ee()==="oauth"){let o=await D().getAccessToken();if(!C())throw new Error('No organization selected. Please run "tigris orgs select" first.');let r=R.endpoint,s=R.iamEndpoint,a=Z.domain;return{sessionToken:o,accessKeyId:"",secretAccessKey:"",endpoint:r,organizationId:C()??void 0,iamEndpoint:s,authDomain:a}}let e=O();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint};throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}import{removeBucket as de}from"@tigrisdata/storage";import{readFileSync as te,existsSync as ne}from"fs";import{join as L,dirname as oe}from"path";import{fileURLToPath as ie}from"url";import*as $ from"yaml";var re=ie(import.meta.url),se=oe(re),k=null;function ae(){let t=se;for(let e=0;e<5;e++){let n=L(t,"specs.yaml");if(ne(n))return n;t=L(t,"..")}throw new Error("Could not find specs.yaml")}function ce(){if(!k){let t=ae(),e=te(t,"utf8");k=$.parse(e)}return k}function F(t,e){let o=ce().commands.find(i=>i.name===t);return o?e&&o.operations?o.operations.find(i=>i.name===e)||null:o:null}var j={success:"\u2714",failure:"\u2716",hint:"\u2192"};function U(){return process.stdout.isTTY===!0}function S(t){let e=F(t.command,t.operation);if(e)return e.messages}function x(t,e){let n=t;return n=n.replace(/\\n/g,`
2
+ `),e&&(n=n.replace(/\{\{(\w+)\}\}/g,(o,i)=>{let r=e[i];return r!==void 0?String(r):`{{${i}}}`})),n}function G(t,e){if(!U())return;let n=S(t);n?.onStart&&console.log(x(n.onStart,e))}function V(t,e){if(!U())return;let n=S(t);n?.onSuccess&&console.log(`${j.success} ${x(n.onSuccess,e)}`)}function A(t,e,n){let o=S(t);o?.onFailure&&console.error(`${j.failure} ${x(o.onFailure,n)}`),e&&console.error(` ${e}`)}function q(t,e){return{command:t,operation:e}}var p=q("buckets","delete");async function ge(t){G(p);let e=v(t,["name"]);e||(A(p,"Bucket name is required"),process.exit(1));let n=Array.isArray(e)?e:[e],o=await K();for(let i of n){let{error:r}=await de(i,{config:o});r&&(A(p,r.message,{name:i}),process.exit(1)),V(p,{name:i})}}export{ge as default};
@@ -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 ee(t){return JSON.stringify(t,null,2)}function te(t,e=" "){return Object.entries(t).map(([n,o])=>`${e}<${n}>${o}</${n}>`).join(`
1
+ function b(t,e,n){for(let o of e)if(t[o]!==void 0)return t[o];return n}function ee(t){return JSON.stringify(t,null,2)}function te(t,e=" "){return Object.entries(t).map(([n,o])=>`${e}<${n}>${o}</${n}>`).join(`
2
2
  `)}function ne(t,e,n){let o=[`<${e}>`];return t.forEach(r=>{o.push(` <${n}>`),o.push(te(r," ")),o.push(` </${n}>`)}),o.push(`</${e}>`),o.join(`
3
- `)}function E(t){if(t==null)return"";if(t instanceof Date)return 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(`
3
+ `)}function E(t){if(t==null)return"";if(t instanceof Date)return P(t);if(typeof t=="string"){let e=new Date(t);if(!isNaN(e.getTime())&&t.includes("T"))return P(e)}return String(t)}function P(t){return new Intl.DateTimeFormat(void 0,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}).format(t)}function oe(t,e){return e.map(n=>{if(n.width)return n.width;let o=n.header.length,r=t.reduce((i,s)=>{let a=E(s[n.key]);return Math.max(i,a.length)},0);return Math.max(o,r)})}function re(t,e){let n=[],o=oe(t,e),r="\u250C"+o.map(c=>"\u2500".repeat(c+2)).join("\u252C")+"\u2510",i="\u251C"+o.map(c=>"\u2500".repeat(c+2)).join("\u253C")+"\u2524",s="\u2514"+o.map(c=>"\u2500".repeat(c+2)).join("\u2534")+"\u2518";n.push(`
4
4
  `+r);let a="\u2502 "+e.map((c,h)=>c.header.padEnd(o[h])).join(" \u2502 ")+" \u2502";return n.push(a),n.push(i),t.forEach(c=>{let h=e.map((I,M)=>{let O=E(c[I.key]);return I.align==="right"?O.padStart(o[M]):O.padEnd(o[M])});n.push("\u2502 "+h.join(" \u2502 ")+" \u2502")}),n.push(s+`
5
5
  `),n.join(`
6
- `)}function N(t,e,n,o,r){switch(e){case"json":return ee(t);case"xml":return ne(t,n,o);default:return re(t,r)}}import{S3Client as $e}from"@aws-sdk/client-s3";import{homedir as ie}from"os";import{join as D}from"path";import{readFileSync as se,writeFileSync as ae,existsSync as z,mkdirSync as ce}from"fs";import{chmod as ue}from"fs/promises";var y=D(ie(),".tigris"),g=D(y,"config.json");function de(){z(y)||ce(y,{recursive:!0,mode:448})}function u(){if(z(g))try{let t=se(g,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function p(t){de(),ae(g,JSON.stringify(t,null,2),{mode:384});try{await ue(g,384)}catch{}}async function T(t){let e=u();e.tokens=t,await p(e)}async function d(){return u().tokens||null}async function C(){let t=u();delete t.tokens,await p(t)}async function R(t){let e=u();e.organizations=t,await p(e)}function j(){return u().organizations||[]}function w(){return u().selectedOrganization||null}function $(){let t=u();return t.temporaryCredentials||t.credentials||null}async function F(t){let e=u();e.loginMethod=t,await p(e)}function K(){return u().loginMethod||null}import f from"axios";import ge from"open";function l(){return{domain:process.env.AUTH0_DOMAIN||"auth.tigris.dev",clientId:process.env.AUTH0_CLIENT_ID||"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",audience:process.env.AUTH0_AUDIENCE||"https://tigris-os-api"}}var L=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function B(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.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};
6
+ `)}function N(t,e,n,o,r){switch(e){case"json":return ee(t);case"xml":return ne(t,n,o);default:return re(t,r)}}import{S3Client as $e}from"@aws-sdk/client-s3";import{homedir as ie}from"os";import{join as D}from"path";import{readFileSync as se,writeFileSync as ae,existsSync as z,mkdirSync as ce}from"fs";import{chmod as ue}from"fs/promises";var y=D(ie(),".tigris"),g=D(y,"config.json");function de(){z(y)||ce(y,{recursive:!0,mode:448})}function u(){if(z(g))try{let t=se(g,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function p(t){de(),ae(g,JSON.stringify(t,null,2),{mode:384});try{await ue(g,384)}catch{}}async function T(t){let e=u();e.tokens=t,await p(e)}async function d(){return u().tokens||null}async function C(){let t=u();delete t.tokens,await p(t)}async function R(t){let e=u();e.organizations=t,await p(e)}function j(){return u().organizations||[]}function w(){return u().selectedOrganization||null}function $(){let t=u();return t.temporaryCredentials||t.credentials||null}async function F(t){let e=u();e.loginMethod=t,await p(e)}function K(){return u().loginMethod||null}import f from"axios";import ge from"open";function l(){return{domain:process.env.AUTH0_DOMAIN||"auth.tigris.dev",clientId:process.env.AUTH0_CLIENT_ID||"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",audience:process.env.AUTH0_AUDIENCE||"https://tigris-os-api"}}var L=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function B(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var x=class{config;baseUrl;constructor(){this.config=l(),this.baseUrl=`https://${this.config.domain}`}async login(e){let o=(await f.post(`${this.baseUrl}/oauth/device/code`,{client_id:this.config.clientId,audience:this.config.audience,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data;e?.onDeviceCode?.(o.user_code,o.verification_uri),await this.sleep(2e3);try{await ge(o.verification_uri_complete)}catch{}e?.onWaiting?.();let r=await this.pollForToken(o.device_code,o.interval||5);await T(r),F("oauth"),await this.extractAndStoreOrganizations(r.idToken)}async pollForToken(e,n){let r=0;for(;r<60;){r++;try{let s=(await f.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,device_code:e,grant_type:"urn:ietf:params:oauth:grant-type:device_code"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,a=Date.now()+(s.expires_in||3600)*1e3;return{accessToken:s.access_token,refreshToken:s.refresh_token,idToken:s.id_token,expiresAt:a}}catch(i){if(f.isAxiosError(i)&&i.response){let s=i.response.data?.error;if(s==="authorization_pending"){await this.sleep(n*1e3);continue}if(s==="slow_down"){n+=5,await this.sleep(n*1e3);continue}throw new Error(i.response.data?.error_description||"Authentication failed")}throw i}}throw new Error("Authentication timed out. Please try again.")}async getAccessToken(){let e=await d();if(!e)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');let n=300*1e3;return Date.now()+n>=e.expiresAt&&(e=await this.refreshAccessToken(e)),e.accessToken}async refreshAccessToken(e){let n=null;if(e?.refreshToken?n=e:n=await d(),!n)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let r=(await f.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,grant_type:"refresh_token",refresh_token:n.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,i={accessToken:r.access_token,refreshToken:r.refresh_token||n.refreshToken,idToken:r.id_token||n.idToken,expiresAt:Date.now()+(r.expires_in||3600)*1e3};return await T(i),i}catch{throw await C(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await d();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let n=e.idToken.split(".")[1],o=Buffer.from(n,"base64").toString("utf8");return JSON.parse(o)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let n=e.split(".")[1],o=Buffer.from(n,"base64").toString("utf8"),i=JSON.parse(o)[L];if(!i)return;let s=i?.ns?.map(a=>typeof a=="object"&&a!==null?{id:a.id,name:a.name,displayName:a.name}:{id:a,name:a,displayName:a})||[];if(s.length===0)return;R(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),j()}async logout(){await C()}async isAuthenticated(){return await d()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},k=null;function U(){return k||(k=new x),k}var V=B(),pe=l();async function le(){return K()}async function G(){if(await le()==="oauth"){let o=await U().getAccessToken();if(!w())throw new Error('No organization selected. Please run "tigris orgs select" first.');let i=V.endpoint,s=V.iamEndpoint,a=pe.domain;return{sessionToken:o,accessKeyId:"",secretAccessKey:"",endpoint:i,organizationId:w()??void 0,iamEndpoint:s,authDomain:a}}let e=$();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint};throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}import{getBucketInfo as xe}from"@tigrisdata/storage";import{readFileSync as fe,existsSync as me}from"fs";import{join as q,dirname as he}from"path";import{fileURLToPath as ye}from"url";import*as H from"yaml";var Te=ye(import.meta.url),Ce=he(Te),S=null;function we(){let t=Ce;for(let e=0;e<5;e++){let n=q(t,"specs.yaml");if(me(n))return n;t=q(t,"..")}throw new Error("Could not find specs.yaml")}function ke(){if(!S){let t=we(),e=fe(t,"utf8");S=H.parse(e)}return S}function J(t,e){let o=ke().commands.find(r=>r.name===t);return o?e&&o.operations?o.operations.find(r=>r.name===e)||null:o:null}var Y={success:"\u2714",failure:"\u2716",hint:"\u2192"};function W(){return process.stdout.isTTY===!0}function A(t){let e=J(t.command,t.operation);if(e)return e.messages}function v(t,e){let n=t;return n=n.replace(/\\n/g,`
7
+ `),e&&(n=n.replace(/\{\{(\w+)\}\}/g,(o,r)=>{let i=e[r];return i!==void 0?String(i):`{{${r}}}`})),n}function X(t,e){if(!W())return;let n=A(t);n?.onStart&&console.log(v(n.onStart,e))}function Q(t,e){if(!W())return;let n=A(t);n?.onSuccess&&console.log(`${Y.success} ${v(n.onSuccess,e)}`)}function _(t,e,n){let o=A(t);o?.onFailure&&console.error(`${Y.failure} ${v(o.onFailure,n)}`),e&&console.error(` ${e}`)}function Z(t,e){return{command:t,operation:e}}var m=Z("buckets","get");async function Se(t){X(m);let e=b(t,["name"]);e||(_(m,"Bucket name is required"),process.exit(1));let{data:n,error:o}=await xe(e,{config:await G()});o&&(_(m,o.message),process.exit(1));let r=[{property:"Name",value:e},{property:"Snapshots Enabled",value:n.isSnapshotEnabled?"Yes":"No"},{property:"Has Forks",value:n.hasForks?"Yes":"No"},...n.sourceBucketName?[{property:"Source Bucket",value:n.sourceBucketName}]:[],...n.sourceBucketSnapshot?[{property:"Source Snapshot",value:n.sourceBucketSnapshot}]:[]],i=N(r,"table","bucket","property",[{key:"property",header:"Property"},{key:"value",header:"Value"}]);console.log(i),Q(m)}export{Se as default};
@@ -1,7 +1,7 @@
1
1
  function P(t,e,n){for(let o of e)if(t[o]!==void 0)return t[o];return n}function te(t){return JSON.stringify(t,null,2)}function ne(t,e=" "){return Object.entries(t).map(([n,o])=>`${e}<${n}>${o}</${n}>`).join(`
2
2
  `)}function oe(t,e,n){let o=[`<${e}>`];return t.forEach(r=>{o.push(` <${n}>`),o.push(ne(r," ")),o.push(` </${n}>`)}),o.push(`</${e}>`),o.join(`
3
3
  `)}function N(t){if(t==null)return"";if(t instanceof Date)return E(t);if(typeof t=="string"){let e=new Date(t);if(!isNaN(e.getTime())&&t.includes("T"))return E(e)}return String(t)}function E(t){return new Intl.DateTimeFormat(void 0,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}).format(t)}function re(t,e){return e.map(n=>{if(n.width)return n.width;let o=n.header.length,r=t.reduce((i,s)=>{let a=N(s[n.key]);return Math.max(i,a.length)},0);return Math.max(o,r)})}function ie(t,e){let n=[],o=re(t,e),r="\u250C"+o.map(c=>"\u2500".repeat(c+2)).join("\u252C")+"\u2510",i="\u251C"+o.map(c=>"\u2500".repeat(c+2)).join("\u253C")+"\u2524",s="\u2514"+o.map(c=>"\u2500".repeat(c+2)).join("\u2534")+"\u2518";n.push(`
4
- `+r);let a="\u2502 "+e.map((c,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+`
4
+ `+r);let a="\u2502 "+e.map((c,T)=>c.header.padEnd(o[T])).join(" \u2502 ")+" \u2502";return n.push(a),n.push(i),t.forEach(c=>{let T=e.map((b,M)=>{let O=N(c[b.key]);return b.align==="right"?O.padStart(o[M]):O.padEnd(o[M])});n.push("\u2502 "+T.join(" \u2502 ")+" \u2502")}),n.push(s+`
5
5
  `),n.join(`
6
- `)}function D(t,e,n,o,r){switch(e){case"json":return te(t);case"xml":return oe(t,n,o);default:return ie(t,r)}}import{S3Client as Ke}from"@aws-sdk/client-s3";import{homedir as se}from"os";import{join as z}from"path";import{readFileSync as ae,writeFileSync as ce,existsSync as R,mkdirSync as de}from"fs";import{chmod as ue}from"fs/promises";var w=z(se(),".tigris"),l=z(w,"config.json");function ge(){R(w)||de(w,{recursive:!0,mode:448})}function d(){if(R(l))try{let t=ae(l,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function 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};
6
+ `)}function D(t,e,n,o,r){switch(e){case"json":return te(t);case"xml":return oe(t,n,o);default:return ie(t,r)}}import{S3Client as Ke}from"@aws-sdk/client-s3";import{homedir as se}from"os";import{join as z}from"path";import{readFileSync as ae,writeFileSync as ce,existsSync as R,mkdirSync as de}from"fs";import{chmod as ue}from"fs/promises";var w=z(se(),".tigris"),l=z(w,"config.json");function ge(){R(w)||de(w,{recursive:!0,mode:448})}function d(){if(R(l))try{let t=ae(l,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function f(t){ge(),ce(l,JSON.stringify(t,null,2),{mode:384});try{await ue(l,384)}catch{}}async function k(t){let e=d();e.tokens=t,await f(e)}async function g(){return d().tokens||null}async function x(){let t=d();delete t.tokens,await f(t)}async function j(t){let e=d();e.organizations=t,await f(e)}function $(){return d().organizations||[]}function S(){return d().selectedOrganization||null}function K(){let t=d();return t.temporaryCredentials||t.credentials||null}async function L(t){let e=d();e.loginMethod=t,await f(e)}function F(){return d().loginMethod||null}import m from"axios";import le from"open";function p(){return{domain:process.env.AUTH0_DOMAIN||"auth.tigris.dev",clientId:process.env.AUTH0_CLIENT_ID||"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",audience:process.env.AUTH0_AUDIENCE||"https://tigris-os-api"}}var U=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function V(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var _=class{config;baseUrl;constructor(){this.config=p(),this.baseUrl=`https://${this.config.domain}`}async login(e){let o=(await m.post(`${this.baseUrl}/oauth/device/code`,{client_id:this.config.clientId,audience:this.config.audience,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data;e?.onDeviceCode?.(o.user_code,o.verification_uri),await this.sleep(2e3);try{await le(o.verification_uri_complete)}catch{}e?.onWaiting?.();let r=await this.pollForToken(o.device_code,o.interval||5);await k(r),L("oauth"),await this.extractAndStoreOrganizations(r.idToken)}async pollForToken(e,n){let r=0;for(;r<60;){r++;try{let s=(await m.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,device_code:e,grant_type:"urn:ietf:params:oauth:grant-type:device_code"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,a=Date.now()+(s.expires_in||3600)*1e3;return{accessToken:s.access_token,refreshToken:s.refresh_token,idToken:s.id_token,expiresAt:a}}catch(i){if(m.isAxiosError(i)&&i.response){let s=i.response.data?.error;if(s==="authorization_pending"){await this.sleep(n*1e3);continue}if(s==="slow_down"){n+=5,await this.sleep(n*1e3);continue}throw new Error(i.response.data?.error_description||"Authentication failed")}throw i}}throw new Error("Authentication timed out. Please try again.")}async getAccessToken(){let e=await g();if(!e)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');let n=300*1e3;return Date.now()+n>=e.expiresAt&&(e=await this.refreshAccessToken(e)),e.accessToken}async refreshAccessToken(e){let n=null;if(e?.refreshToken?n=e:n=await g(),!n)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let r=(await m.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,grant_type:"refresh_token",refresh_token:n.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,i={accessToken:r.access_token,refreshToken:r.refresh_token||n.refreshToken,idToken:r.id_token||n.idToken,expiresAt:Date.now()+(r.expires_in||3600)*1e3};return await k(i),i}catch{throw await x(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await g();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let n=e.idToken.split(".")[1],o=Buffer.from(n,"base64").toString("utf8");return JSON.parse(o)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let n=e.split(".")[1],o=Buffer.from(n,"base64").toString("utf8"),i=JSON.parse(o)[U];if(!i)return;let s=i?.ns?.map(a=>typeof a=="object"&&a!==null?{id:a.id,name:a.name,displayName:a.name}:{id:a,name:a,displayName:a})||[];if(s.length===0)return;j(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),$()}async logout(){await x()}async isAuthenticated(){return await g()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},A=null;function B(){return A||(A=new _),A}var G=V(),fe=p();async function pe(){return F()}async function q(){if(await pe()==="oauth"){let o=await B().getAccessToken();if(!S())throw new Error('No organization selected. Please run "tigris orgs select" first.');let i=G.endpoint,s=G.iamEndpoint,a=fe.domain;return{sessionToken:o,accessKeyId:"",secretAccessKey:"",endpoint:i,organizationId:S()??void 0,iamEndpoint:s,authDomain:a}}let e=K();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint};throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}import{listBuckets as Se}from"@tigrisdata/storage";import{readFileSync as me,existsSync as he}from"fs";import{join as H,dirname as ye}from"path";import{fileURLToPath as Ce}from"url";import*as J from"yaml";var Te=Ce(import.meta.url),we=ye(Te),v=null;function ke(){let t=we;for(let e=0;e<5;e++){let n=H(t,"specs.yaml");if(he(n))return n;t=H(t,"..")}throw new Error("Could not find specs.yaml")}function xe(){if(!v){let t=ke(),e=me(t,"utf8");v=J.parse(e)}return v}function W(t,e){let o=xe().commands.find(r=>r.name===t);return o?e&&o.operations?o.operations.find(r=>r.name===e)||null:o:null}var Y={success:"\u2714",failure:"\u2716",hint:"\u2192"};function I(){return process.stdout.isTTY===!0}function h(t){let e=W(t.command,t.operation);if(e)return e.messages}function y(t,e){let n=t;return n=n.replace(/\\n/g,`
7
+ `),e&&(n=n.replace(/\{\{(\w+)\}\}/g,(o,r)=>{let i=e[r];return i!==void 0?String(i):`{{${r}}}`})),n}function X(t,e){if(!I())return;let n=h(t);n?.onStart&&console.log(y(n.onStart,e))}function Q(t,e){if(!I())return;let n=h(t);n?.onSuccess&&console.log(`${Y.success} ${y(n.onSuccess,e)}`)}function C(t,e,n){let o=h(t);o?.onFailure&&console.error(`${Y.failure} ${y(o.onFailure,n)}`),e&&console.error(` ${e}`)}function Z(t,e){if(!I())return;let n=h(t);n?.onEmpty&&console.log(y(n.onEmpty,e))}function ee(t,e){return{command:t,operation:e}}var u=ee("buckets","list");async function Ae(t){X(u);try{let e=P(t,["format","F"],"table"),{data:n,error:o}=await Se({config:await q()});if(o&&(C(u,o.message),process.exit(1)),!n.buckets||n.buckets.length===0){Z(u);return}let r=n.buckets.map(s=>({name:s.name,created:s.creationDate})),i=D(r,e,"buckets","bucket",[{key:"name",header:"Name"},{key:"created",header:"Created"}]);console.log(i),Q(u,{count:r.length})}catch(e){e instanceof Error?C(u,e.message):C(u,"An unknown error occurred"),process.exit(1)}}export{Ae as default};
@@ -0,0 +1,2 @@
1
+ function c(n,e,t){for(let i of e)if(n[i]!==void 0)return n[i];return t}function p(n){if(n!==void 0)return typeof n=="boolean"?n:n==="true"}import{S3Client as Me}from"@aws-sdk/client-s3";import{homedir as Z}from"os";import{join as E}from"path";import{readFileSync as ee,writeFileSync as ne,existsSync as D,mkdirSync as te}from"fs";import{chmod as ie}from"fs/promises";var k=E(Z(),".tigris"),m=E(k,"config.json");function oe(){D(k)||te(k,{recursive:!0,mode:448})}function d(){if(D(m))try{let n=ee(m,"utf8");return JSON.parse(n)}catch{return{}}return{}}async function h(n){oe(),ne(m,JSON.stringify(n,null,2),{mode:384});try{await ie(m,384)}catch{}}async function S(n){let e=d();e.tokens=n,await h(e)}async function l(){return d().tokens||null}async function x(){let n=d();delete n.tokens,await h(n)}async function z(n){let e=d();e.organizations=n,await h(e)}function N(){return d().organizations||[]}function u(){return d().selectedOrganization||null}function L(){let n=d();return n.temporaryCredentials||n.credentials||null}async function R(n){let e=d();e.loginMethod=n,await h(e)}function K(){return d().loginMethod||null}import C from"axios";import re from"open";function y(){return{domain:process.env.AUTH0_DOMAIN||"auth.tigris.dev",clientId:process.env.AUTH0_CLIENT_ID||"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",audience:process.env.AUTH0_AUDIENCE||"https://tigris-os-api"}}var j=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function $(){return{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||"https://t3.storage.dev",iamEndpoint:process.env.TIGRIS_IAM_ENDPOINT||"https://iam.storageapi.dev"}}var v=class{config;baseUrl;constructor(){this.config=y(),this.baseUrl=`https://${this.config.domain}`}async login(e){let i=(await C.post(`${this.baseUrl}/oauth/device/code`,{client_id:this.config.clientId,audience:this.config.audience,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data;e?.onDeviceCode?.(i.user_code,i.verification_uri),await this.sleep(2e3);try{await re(i.verification_uri_complete)}catch{}e?.onWaiting?.();let o=await this.pollForToken(i.device_code,i.interval||5);await S(o),R("oauth"),await this.extractAndStoreOrganizations(o.idToken)}async pollForToken(e,t){let o=0;for(;o<60;){o++;try{let s=(await C.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,device_code:e,grant_type:"urn:ietf:params:oauth:grant-type:device_code"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,a=Date.now()+(s.expires_in||3600)*1e3;return{accessToken:s.access_token,refreshToken:s.refresh_token,idToken:s.id_token,expiresAt:a}}catch(r){if(C.isAxiosError(r)&&r.response){let s=r.response.data?.error;if(s==="authorization_pending"){await this.sleep(t*1e3);continue}if(s==="slow_down"){t+=5,await this.sleep(t*1e3);continue}throw new Error(r.response.data?.error_description||"Authentication failed")}throw r}}throw new Error("Authentication timed out. Please try again.")}async getAccessToken(){let e=await l();if(!e)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');let t=300*1e3;return Date.now()+t>=e.expiresAt&&(e=await this.refreshAccessToken(e)),e.accessToken}async refreshAccessToken(e){let t=null;if(e?.refreshToken?t=e:t=await l(),!t)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let o=(await C.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,grant_type:"refresh_token",refresh_token:t.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,r={accessToken:o.access_token,refreshToken:o.refresh_token||t.refreshToken,idToken:o.id_token||t.idToken,expiresAt:Date.now()+(o.expires_in||3600)*1e3};return await S(r),r}catch{throw await x(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await l();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let t=e.idToken.split(".")[1],i=Buffer.from(t,"base64").toString("utf8");return JSON.parse(i)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let t=e.split(".")[1],i=Buffer.from(t,"base64").toString("utf8"),r=JSON.parse(i)[j];if(!r)return;let s=r?.ns?.map(a=>typeof a=="object"&&a!==null?{id:a.id,name:a.name,displayName:a.name}:{id:a,name:a,displayName:a})||[];if(s.length===0)return;z(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),N()}async logout(){await x()}async isAuthenticated(){return await l()!==null}sleep(e){return new Promise(t=>setTimeout(t,e))}},A=null;function F(){return A||(A=new v),A}var U=$(),se=y();async function ae(){return K()}async function B(){if(await ae()==="oauth"){let i=await F().getAccessToken();if(!u())throw new Error('No organization selected. Please run "tigris orgs select" first.');let r=U.endpoint,s=U.iamEndpoint,a=se.domain;return{sessionToken:i,accessKeyId:"",secretAccessKey:"",endpoint:r,organizationId:u()??void 0,iamEndpoint:s,authDomain:a}}let e=L();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint};throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}import{updateBucket as he}from"@tigrisdata/storage";import{readFileSync as ce,existsSync as de}from"fs";import{join as q,dirname as ge}from"path";import{fileURLToPath as le}from"url";import*as G from"yaml";var ue=le(import.meta.url),fe=ge(ue),_=null;function pe(){let n=fe;for(let e=0;e<5;e++){let t=q(n,"specs.yaml");if(de(t))return t;n=q(n,"..")}throw new Error("Could not find specs.yaml")}function me(){if(!_){let n=pe(),e=ce(n,"utf8");_=G.parse(e)}return _}function V(n,e){let i=me().commands.find(o=>o.name===n);return i?e&&i.operations?i.operations.find(o=>o.name===e)||null:i:null}var H={success:"\u2714",failure:"\u2716",hint:"\u2192"};function J(){return process.stdout.isTTY===!0}function I(n){let e=V(n.command,n.operation);if(e)return e.messages}function O(n,e){let t=n;return t=t.replace(/\\n/g,`
2
+ `),e&&(t=t.replace(/\{\{(\w+)\}\}/g,(i,o)=>{let r=e[o];return r!==void 0?String(r):`{{${o}}}`})),t}function Y(n,e){if(!J())return;let t=I(n);t?.onStart&&console.log(O(t.onStart,e))}function W(n,e){if(!J())return;let t=I(n);t?.onSuccess&&console.log(`${H.success} ${O(t.onSuccess,e)}`)}function T(n,e,t){let i=I(n);i?.onFailure&&console.error(`${H.failure} ${O(i.onFailure,t)}`),e&&console.error(` ${e}`)}function Q(n,e){return{command:n,operation:e}}var f=Q("buckets","set");async function ye(n){Y(f);let e=c(n,["name"]),t=c(n,["access"]),i=c(n,["region"]),o=c(n,["allow-object-acl","allowObjectAcl"]),r=c(n,["disable-directory-listing","disableDirectoryListing"]),s=c(n,["cache-control","cacheControl"]),a=c(n,["custom-domain","customDomain"]),w=c(n,["enable-delete-protection","enableDeleteProtection"]);e||(T(f,"Bucket name is required"),process.exit(1)),t===void 0&&i===void 0&&o===void 0&&r===void 0&&s===void 0&&a===void 0&&w===void 0&&(T(f,"At least one setting is required"),process.exit(1));let b=await B(),g={};t!==void 0&&(g.access=t),i!==void 0&&(g.regions=Array.isArray(i)?i:[i]),o!==void 0&&(g.allowObjectAcl=p(o)),r!==void 0&&(g.disableDirectoryListing=p(r)),s!==void 0&&(g.cacheControl=s),a!==void 0&&(g.customDomain=a),w!==void 0&&(g.enableDeleteProtection=p(w));let P=u(),X={...b,...P&&!b.organizationId?{organizationId:P}:{}},{error:M}=await he(e,{...g,config:X});M&&(T(f,M.message),process.exit(1)),W(f,{name:e})}export{ye as default};