@tigrisdata/cli 2.6.0 → 2.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/README.md +22 -13
  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/auth/storage.js +1 -1
  6. package/dist/chunk-4LGKN5DA.js +1 -0
  7. package/dist/chunk-6U4U4JM6.js +1 -0
  8. package/dist/chunk-A3TXP5Y2.js +2 -0
  9. package/dist/chunk-D63SZLT5.js +1 -0
  10. package/dist/chunk-DJIPPZGR.js +4 -0
  11. package/dist/chunk-ESJWTUFN.js +1 -0
  12. package/dist/chunk-HE7E7ZMA.js +1 -0
  13. package/dist/chunk-HGIJOGCZ.js +6 -0
  14. package/dist/chunk-JRALYIRA.js +1 -0
  15. package/dist/chunk-JVB3Y42V.js +1 -0
  16. package/dist/chunk-LCWHZUZZ.js +1 -0
  17. package/dist/chunk-QZXBLNMQ.js +1 -0
  18. package/dist/chunk-TPUZYSCZ.js +12 -0
  19. package/dist/chunk-TUJTXB5G.js +8 -0
  20. package/dist/cli.js +1 -12
  21. package/dist/constants.js +1 -1
  22. package/dist/index.js +1 -12
  23. package/dist/lib/_stat.js +1 -1
  24. package/dist/lib/access-keys/assign.js +2 -3
  25. package/dist/lib/access-keys/create.js +2 -3
  26. package/dist/lib/access-keys/delete.js +2 -3
  27. package/dist/lib/access-keys/get.js +2 -3
  28. package/dist/lib/access-keys/list.js +2 -8
  29. package/dist/lib/buckets/create.js +1 -2
  30. package/dist/lib/buckets/delete.js +1 -2
  31. package/dist/lib/buckets/get.js +1 -7
  32. package/dist/lib/buckets/list.js +1 -7
  33. package/dist/lib/buckets/set.js +1 -2
  34. package/dist/lib/configure/index.js +1 -2
  35. package/dist/lib/cp.js +1 -1
  36. package/dist/lib/credentials/test.js +1 -2
  37. package/dist/lib/forks/create.js +1 -2
  38. package/dist/lib/forks/list.js +1 -7
  39. package/dist/lib/login/credentials.js +1 -2
  40. package/dist/lib/login/oauth.js +1 -5
  41. package/dist/lib/login/select.js +1 -5
  42. package/dist/lib/logout.js +1 -2
  43. package/dist/lib/ls.js +1 -6
  44. package/dist/lib/mk.js +1 -1
  45. package/dist/lib/mv.js +1 -1
  46. package/dist/lib/objects/delete.js +1 -2
  47. package/dist/lib/objects/get.js +1 -2
  48. package/dist/lib/objects/list.js +1 -7
  49. package/dist/lib/objects/put.js +1 -7
  50. package/dist/lib/organizations/create.js +2 -3
  51. package/dist/lib/organizations/list.js +2 -8
  52. package/dist/lib/organizations/select.js +4 -5
  53. package/dist/lib/rm.js +1 -1
  54. package/dist/lib/snapshots/list.js +1 -7
  55. package/dist/lib/snapshots/take.js +1 -2
  56. package/dist/lib/touch.js +1 -1
  57. package/dist/lib/whoami.js +2 -3
  58. package/dist/specs.yaml +49 -28
  59. package/dist/utils/format.js +1 -6
  60. package/dist/utils/messages.js +1 -2
  61. package/dist/utils/options.js +1 -1
  62. package/dist/utils/path.js +1 -1
  63. package/dist/utils/specs.js +1 -1
  64. package/dist/utils/update-check.js +1 -0
  65. package/package.json +3 -2
package/README.md CHANGED
@@ -21,16 +21,16 @@ Run `tigris help` to see all available commands, or `tigris <command> help` for
21
21
  - `tigris ls [path]` - List buckets or objects in a bucket or path
22
22
  - `tigris mk <path>` - Create a bucket or a folder in a bucket
23
23
  - `tigris touch <path>` - Create an empty object in a bucket
24
- - `tigris cp <src> <dest>` - Copy a folder or an object
25
- - `tigris mv <src> <dest>` - Move a folder or an object
26
- - `tigris rm <path>` - Remove a bucket or a folder in a bucket or an object in a bucket or path
24
+ - `tigris cp <src> <dest>` - Copy files between local filesystem and Tigris, or within Tigris
25
+ - `tigris mv <src> <dest>` - Move objects within Tigris
26
+ - `tigris rm <path>` - Remove a bucket, folder, or object from Tigris
27
27
 
28
28
  ### Authentication
29
29
 
30
30
  - `tigris login` - Start a session. Use OAuth (default) or temporary credentials that override your saved config
31
31
  - `tigris logout` - End your session. Clears login state but keeps credentials from 'configure'
32
32
  - `tigris whoami` - Show information about the current user
33
- - `tigris configure` - Save credentials permanently. After running this, all commands work automatically
33
+ - `tigris configure` - Save credentials permanently. After running this, all commands uses these credentials.
34
34
 
35
35
  ### Resources
36
36
 
@@ -58,6 +58,7 @@ tigris ls [path]
58
58
  ```bash
59
59
  tigris ls my-bucket
60
60
  tigris ls my-bucket/my-path
61
+ tigris ls t3://my-bucket
61
62
  ```
62
63
 
63
64
  ### `mk` | `create`
@@ -72,6 +73,7 @@ tigris mk <path>
72
73
  ```bash
73
74
  tigris mk my-bucket
74
75
  tigris mk my-bucket/my-path
76
+ tigris mk t3://my-bucket
75
77
  ```
76
78
 
77
79
  ### `touch`
@@ -85,16 +87,21 @@ tigris touch <path>
85
87
  **Examples:**
86
88
  ```bash
87
89
  tigris touch my-bucket/my-file.txt
90
+ tigris touch t3://my-bucket/my-file.txt
88
91
  ```
89
92
 
90
93
  ### `cp` | `copy`
91
94
 
92
- Copy a folder or an object
95
+ Copy files between local filesystem and Tigris, or within Tigris
93
96
 
94
97
  ```
95
- tigris cp <src> <dest>
98
+ tigris cp <src> <dest> [flags]
96
99
  ```
97
100
 
101
+ | Flag | Description |
102
+ |------|-------------|
103
+ | `-r, --recursive` | copy directories recursively |
104
+
98
105
  **Examples:**
99
106
  ```bash
100
107
  tigris cp bucket/file.txt bucket/copy.txt
@@ -103,7 +110,7 @@ tigris cp bucket/folder/ other-bucket/folder/
103
110
 
104
111
  ### `mv` | `move`
105
112
 
106
- Move a folder or an object
113
+ Move objects within Tigris
107
114
 
108
115
  ```
109
116
  tigris mv <src> <dest> [flags]
@@ -111,6 +118,7 @@ tigris mv <src> <dest> [flags]
111
118
 
112
119
  | Flag | Description |
113
120
  |------|-------------|
121
+ | `-r, --recursive` | move directories recursively |
114
122
  | `-f, --force` | Skip confirmation prompt |
115
123
 
116
124
  **Examples:**
@@ -121,7 +129,7 @@ tigris mv bucket/folder/ other-bucket/folder/
121
129
 
122
130
  ### `rm` | `remove`
123
131
 
124
- Remove a bucket or a folder in a bucket or an object in a bucket or path
132
+ Remove a bucket, folder, or object from Tigris
125
133
 
126
134
  ```
127
135
  tigris rm <path> [flags]
@@ -129,13 +137,14 @@ tigris rm <path> [flags]
129
137
 
130
138
  | Flag | Description |
131
139
  |------|-------------|
140
+ | `-r, --recursive` | remove directories recursively |
132
141
  | `-f, --force` | Skip confirmation prompt |
133
142
 
134
143
  **Examples:**
135
144
  ```bash
136
- tigris rm my-bucket
137
- tigris rm my-bucket/my-path
138
- tigris rm my-bucket/my-path/*
145
+ tigris rm t3://my-bucket
146
+ tigris rm t3://my-bucket/my-path/my-object.json
147
+ tigris rm t3://my-bucket/my-path/
139
148
  ```
140
149
 
141
150
  ## Authentication
@@ -191,7 +200,7 @@ tigris whoami
191
200
 
192
201
  ### `configure` | `c`
193
202
 
194
- Save credentials permanently. After running this, all commands work automatically
203
+ Save credentials permanently. After running this, all commands uses these credentials.
195
204
 
196
205
  ```
197
206
  tigris configure [flags]
@@ -463,7 +472,7 @@ tigris objects get <bucket> <key> [flags]
463
472
  #### `objects put`
464
473
 
465
474
  ```
466
- tigris objects put <bucket> <key> <file> [flags]
475
+ tigris objects put <bucket> <key> [file] [flags]
467
476
  ```
468
477
 
469
478
  | Flag | Description |
@@ -1 +1 @@
1
- import g from"axios";import D from"open";function h(){let t=process.env.TIGRIS_ENV==="development",e=process.env.AUTH0_DOMAIN||t?"auth-dev.tigris.dev":"auth.tigris.dev",n=process.env.AUTH0_CLIENT_ID||t?"JdJVYIyw0O1uHi5L5OJH903qaWBgd3gF":"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",o=process.env.AUTH0_AUDIENCE||t?"https://tigris-api-dev":"https://tigris-os-api";return{domain:e,clientId:n,audience:o}}var C=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";import{homedir as v}from"os";import{join as I}from"path";import{readFileSync as y,writeFileSync as O,existsSync as S,mkdirSync as P}from"fs";import{loadSharedConfigFiles as K}from"@smithy/shared-ini-file-loader";import{chmod as x}from"fs/promises";var p=I(v(),".tigris"),l=I(p,"config.json");function N(){S(p)||P(p,{recursive:!0,mode:448})}function c(){if(S(l))try{let t=y(l,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function f(t){N(),O(l,JSON.stringify(t,null,2),{mode:384});try{await x(l,384)}catch{}}async function u(t){let e=c();e.tokens=t,await f(e)}async function d(){return c().tokens||null}async function T(){let t=c();delete t.tokens,await f(t)}async function A(t){let e=c();e.organizations=t,await f(e)}function w(){return c().organizations||[]}async function E(t){let e=c();e.loginMethod=t,await f(e)}var _=class{config;baseUrl;constructor(){this.config=h(),this.baseUrl=`https://${this.config.domain}`}async login(e){let o=(await g.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 D(o.verification_uri_complete)}catch{}e?.onWaiting?.();let r=await this.pollForToken(o.device_code,o.interval||5);await u(r),E("oauth"),await this.extractAndStoreOrganizations(r.idToken)}async pollForToken(e,n){let r=0;for(;r<60;){r++;try{let s=(await g.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(g.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 g.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 u(i),i}catch{throw await T(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await d();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let n=e.idToken.split(".")[1],o=Buffer.from(n,"base64").toString("utf8");return JSON.parse(o)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let n=e.split(".")[1],o=Buffer.from(n,"base64").toString("utf8"),i=JSON.parse(o)[C];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;A(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),w()}async logout(){await T()}async isAuthenticated(){return await d()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},m=null;function q(){return m||(m=new _),m}export{_ as TigrisAuthClient,q as getAuthClient};
1
+ import{a,b}from"../chunk-QZXBLNMQ.js";import"../chunk-6U4U4JM6.js";import"../chunk-JVB3Y42V.js";import"../chunk-D63SZLT5.js";export{a as TigrisAuthClient,b as getAuthClient};
@@ -1 +1 @@
1
- var t="https://t3.storage.dev",n="https://iam.storageapi.dev";function p(){let e=process.env.TIGRIS_ENV==="development",i=process.env.AUTH0_DOMAIN||e?"auth-dev.tigris.dev":"auth.tigris.dev",s=process.env.AUTH0_CLIENT_ID||e?"JdJVYIyw0O1uHi5L5OJH903qaWBgd3gF":"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",o=process.env.AUTH0_AUDIENCE||e?"https://tigris-api-dev":"https://tigris-os-api";return{domain:i,clientId:s,audience:o}}var T=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function E(){return process.env.TIGRIS_STORAGE_ENDPOINT||process.env.TIGRIS_IAM_ENDPOINT?{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||t,iamEndpoint:process.env.TIGRIS_IAM_ENDPOINT||n}:{endpoint:process.env.AWS_ENDPOINT_URL_S3||t,iamEndpoint:process.env.AWS_ENDPOINT_URL_IAM||n}}export{T as TIGRIS_CLAIMS_NAMESPACE,p as getAuth0Config,E as getTigrisConfig};
1
+ import{a,b,c}from"../chunk-6U4U4JM6.js";import"../chunk-D63SZLT5.js";export{b as TIGRIS_CLAIMS_NAMESPACE,a as getAuth0Config,c as getTigrisConfig};
@@ -1 +1 @@
1
- import{S3Client as u}from"@aws-sdk/client-s3";import{fromIni as b}from"@aws-sdk/credential-providers";import{homedir as D}from"os";import{join as p}from"path";import{readFileSync as W,writeFileSync as j,existsSync as m,mkdirSync as q}from"fs";import{loadSharedConfigFiles as H}from"@smithy/shared-ini-file-loader";import{chmod as J}from"fs/promises";var c="https://t3.storage.dev",w="https://iam.storageapi.dev";var S=p(D(),".tigris"),T=p(S,"config.json");function Y(){m(S)||q(S,{recursive:!0,mode:448})}function d(){if(m(T))try{let t=W(T,"utf8");return JSON.parse(t)}catch{return{}}return{}}async function h(t){Y(),j(T,JSON.stringify(t,null,2),{mode:384});try{await J(T,384)}catch{}}async function E(t){let e=d();e.tokens=t,await h(e)}async function f(){return d().tokens||null}async function k(){let t=d();delete t.tokens,await h(t)}async function R(t){let e=d();e.organizations=t,await h(e)}function z(){return d().organizations||[]}function C(){return d().selectedOrganization||null}function y(){if(process.env.TIGRIS_STORAGE_ACCESS_KEY_ID||process.env.TIGRIS_STORAGE_SECRET_ACCESS_KEY){let i=process.env.TIGRIS_STORAGE_ACCESS_KEY_ID,o=process.env.TIGRIS_STORAGE_SECRET_ACCESS_KEY;if(!i||!o)return null;let r=process.env.TIGRIS_STORAGE_ENDPOINT||c;return{accessKeyId:i,secretAccessKey:o,endpoint:r}}let t=process.env.AWS_ACCESS_KEY_ID,e=process.env.AWS_SECRET_ACCESS_KEY;if(!t||!e)return null;let n=process.env.AWS_ENDPOINT_URL_S3||c;return{accessKeyId:t,secretAccessKey:e,endpoint:n}}function _(){if(!process.env.AWS_PROFILE)return!1;let t=p(D(),".aws");return m(p(t,"credentials"))||m(p(t,"config"))}async function v(t){try{let{configFile:e}=await H(),n=e[t];return n?{endpoint:n.endpoint_url_s3||n.endpoint_url,iamEndpoint:n.endpoint_url_iam,region:n.region}:{}}catch{return{}}}function l(){let t=d();return t.temporaryCredentials||t.credentials||null}async function M(t){let e=d();e.loginMethod=t,await h(e)}function G(){return d().loginMethod||null}import I from"axios";import B from"open";function A(){let t=process.env.TIGRIS_ENV==="development",e=process.env.AUTH0_DOMAIN||t?"auth-dev.tigris.dev":"auth.tigris.dev",n=process.env.AUTH0_CLIENT_ID||t?"JdJVYIyw0O1uHi5L5OJH903qaWBgd3gF":"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",i=process.env.AUTH0_AUDIENCE||t?"https://tigris-api-dev":"https://tigris-os-api";return{domain:e,clientId:n,audience:i}}var L=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function F(){return process.env.TIGRIS_STORAGE_ENDPOINT||process.env.TIGRIS_IAM_ENDPOINT?{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||c,iamEndpoint:process.env.TIGRIS_IAM_ENDPOINT||w}:{endpoint:process.env.AWS_ENDPOINT_URL_S3||c,iamEndpoint:process.env.AWS_ENDPOINT_URL_IAM||w}}var P=class{config;baseUrl;constructor(){this.config=A(),this.baseUrl=`https://${this.config.domain}`}async login(e){let i=(await I.post(`${this.baseUrl}/oauth/device/code`,{client_id:this.config.clientId,audience:this.config.audience,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data;e?.onDeviceCode?.(i.user_code,i.verification_uri),await this.sleep(2e3);try{await B(i.verification_uri_complete)}catch{}e?.onWaiting?.();let o=await this.pollForToken(i.device_code,i.interval||5);await E(o),M("oauth"),await this.extractAndStoreOrganizations(o.idToken)}async pollForToken(e,n){let o=0;for(;o<60;){o++;try{let s=(await I.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(I.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 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 o=(await I.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 E(r),r}catch{throw await k(),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],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)[L];if(!r)return;let s=r?.ns?.map(a=>typeof a=="object"&&a!==null?{id:a.id,name:a.name,displayName:a.name}:{id:a,name:a,displayName:a})||[];if(s.length===0)return;R(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),z()}async logout(){await k()}async isAuthenticated(){return await f()!==null}sleep(e){return new Promise(n=>setTimeout(n,e))}},O=null;function x(){return O||(O=new P),O}var g=F(),$=A();async function N(){return G()}async function Ce(){if(_()){let i=process.env.AWS_PROFILE||"default",o=await v(i),r=await b({profile:i})();return{accessKeyId:r.accessKeyId,secretAccessKey:r.secretAccessKey,endpoint:o.endpoint||g.endpoint||c,iamEndpoint:o.iamEndpoint||g.iamEndpoint}}let t=await N();if(t==="oauth"){let o=await x().getAccessToken();if(!C())throw new Error('No organization selected. Please run "tigris orgs select" first.');return{sessionToken:o,accessKeyId:"",secretAccessKey:"",endpoint:g.endpoint,organizationId:C()??void 0,iamEndpoint:g.iamEndpoint,authDomain:$.domain}}if(t==="credentials"){let i=l();if(i)return{accessKeyId:i.accessKeyId,secretAccessKey:i.secretAccessKey,endpoint:i.endpoint}}let e=y();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint};let n=l();if(n)return{accessKeyId:n.accessKeyId,secretAccessKey:n.secretAccessKey,endpoint:n.endpoint};throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}async function ye(){if(_()){let i=process.env.AWS_PROFILE||"default",o=await v(i);return new u({region:"auto",endpoint:o.endpoint||g.endpoint||c,credentials:b({profile:i})})}let t=await N();if(t==="oauth"){let o=await x().getAccessToken(),r=C();if(!r)throw new Error('No organization selected. Please run "tigris orgs select" first.');let s=new u({region:"auto",endpoint:g.endpoint,credentials:{sessionToken:o,accessKeyId:"",secretAccessKey:""}});return s.middlewareStack.add(a=>async K=>{let U=K.request;return U.headers["x-Tigris-Namespace"]=r,await a(K)},{name:"x-Tigris-Namespace-Middleware",step:"build",override:!0}),s}if(t==="credentials"){let i=l();if(i)return new u({region:"auto",endpoint:i.endpoint,credentials:{accessKeyId:i.accessKeyId,secretAccessKey:i.secretAccessKey}})}let e=y();if(e)return new u({region:"auto",endpoint:e.endpoint,credentials:{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey}});let n=l();if(n)return new u({region:"auto",endpoint:n.endpoint,credentials:{accessKeyId:n.accessKeyId,secretAccessKey:n.secretAccessKey}});throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}async function _e(){return _()||await N()!==null||y()!==null||l()!==null}export{N as getLoginMethod,ye as getS3Client,Ce as getStorageConfig,_e as isAuthenticated};
1
+ import{a,b,c,d}from"../chunk-ESJWTUFN.js";import"../chunk-QZXBLNMQ.js";import"../chunk-6U4U4JM6.js";import"../chunk-JVB3Y42V.js";import"../chunk-D63SZLT5.js";export{a as getLoginMethod,c as getS3Client,b as getStorageConfig,d as isAuthenticated};
@@ -1 +1 @@
1
- import{homedir as d}from"os";import{join as r}from"path";import{readFileSync as p,writeFileSync as C,existsSync as s,mkdirSync as S}from"fs";import{loadSharedConfigFiles as m}from"@smithy/shared-ini-file-loader";import{chmod as _}from"fs/promises";var a="https://t3.storage.dev";var l=r(d(),".tigris"),c=r(l,"config.json");function E(){s(l)||S(l,{recursive:!0,mode:448})}function o(){if(s(c))try{let n=p(c,"utf8");return JSON.parse(n)}catch{return{}}return{}}async function t(n){E(),C(c,JSON.stringify(n,null,2),{mode:384});try{await _(c,384)}catch{}}async function w(n){let e=o();e.tokens=n,await t(e)}async function R(){return o().tokens||null}async function h(){let n=o();delete n.tokens,await t(n)}async function D(n){let e=o();e.organizations=n,await t(e)}function z(){return o().organizations||[]}async function G(n){let e=o();e.selectedOrganization=n,await t(e)}function N(){return o().selectedOrganization||null}function y(){if(process.env.TIGRIS_STORAGE_ACCESS_KEY_ID||process.env.TIGRIS_STORAGE_SECRET_ACCESS_KEY){let f=process.env.TIGRIS_STORAGE_ACCESS_KEY_ID,g=process.env.TIGRIS_STORAGE_SECRET_ACCESS_KEY;if(!f||!g)return null;let u=process.env.TIGRIS_STORAGE_ENDPOINT||a;return{accessKeyId:f,secretAccessKey:g,endpoint:u}}let n=process.env.AWS_ACCESS_KEY_ID,e=process.env.AWS_SECRET_ACCESS_KEY;if(!n||!e)return null;let i=process.env.AWS_ENDPOINT_URL_S3||a;return{accessKeyId:n,secretAccessKey:e,endpoint:i}}function k(){if(!process.env.AWS_PROFILE)return!1;let n=r(d(),".aws");return s(r(n,"credentials"))||s(r(n,"config"))}async function K(n){try{let{configFile:e}=await m(),i=e[n];return i?{endpoint:i.endpoint_url_s3||i.endpoint_url,iamEndpoint:i.endpoint_url_iam,region:i.region}:{}}catch{return{}}}function F(){let n=o();return y()||n.temporaryCredentials||n.credentials||null}function L(){let n=o();return n.temporaryCredentials||n.credentials||null}function M(){return o().credentials||null}async function Y(n){let e=o();e.credentials=n,await t(e)}async function U(n){let e=o();e.temporaryCredentials=n,await t(e)}async function W(){let n=o();delete n.temporaryCredentials,await t(n)}async function j(){let n=o();delete n.credentials,await t(n)}async function J(n){let e=o();e.loginMethod=n,await t(e)}function b(){return o().loginMethod||null}async function q(){let e=o().credentials;await t({credentials:e})}export{q as clearAllData,j as clearCredentials,W as clearTemporaryCredentials,h as clearTokens,K as getAwsProfileConfig,F as getCredentials,y as getEnvCredentials,b as getLoginMethod,z as getOrganizations,M as getSavedCredentials,N as getSelectedOrganization,L as getStoredCredentials,R as getTokens,k as hasAwsProfile,Y as storeCredentials,J as storeLoginMethod,D as storeOrganizations,G as storeSelectedOrganization,U as storeTemporaryCredentials,w as storeTokens};
1
+ import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t}from"../chunk-JVB3Y42V.js";import"../chunk-D63SZLT5.js";export{t as clearAllData,q as clearCredentials,p as clearTemporaryCredentials,c as clearTokens,j as getAwsProfileConfig,k as getCredentials,h as getEnvCredentials,s as getLoginMethod,e as getOrganizations,m as getSavedCredentials,g as getSelectedOrganization,l as getStoredCredentials,b as getTokens,i as hasAwsProfile,n as storeCredentials,r as storeLoginMethod,d as storeOrganizations,f as storeSelectedOrganization,o as storeTemporaryCredentials,a as storeTokens};
@@ -0,0 +1 @@
1
+ import{readFileSync as p}from"fs";import{join as a,dirname as c}from"path";import{fileURLToPath as m}from"url";import*as o from"yaml";var l=m(import.meta.url),u=c(l),s=null,f=a(u,"specs.yaml");function d(){if(!s){let n=p(f,"utf8");s=o.parse(n,{schema:"core"})}return s}function g(n,e){let r=d().commands.find(t=>t.name===n);return r?e&&r.operations?r.operations.find(t=>t.name===e)||null:r:null}function C(n,e,i){let r=g(n,i);return!r||!r.arguments?null:r.arguments.find(t=>t.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}export{d as a,g as b,C as c,h as d};
@@ -0,0 +1 @@
1
+ import{a as n,b as i}from"./chunk-D63SZLT5.js";function I(){let e=process.env.TIGRIS_ENV==="development",t=e?"auth-dev.tigris.dev":process.env.AUTH0_DOMAIN??"auth.tigris.dev",s=e?"JdJVYIyw0O1uHi5L5OJH903qaWBgd3gF":process.env.AUTH0_CLIENT_ID??"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",o=e?"https://tigris-api-dev":process.env.AUTH0_AUDIENCE??"https://tigris-os-api";return{domain:t,clientId:s,audience:o}}var p=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function T(){return process.env.TIGRIS_STORAGE_ENDPOINT||process.env.TIGRIS_IAM_ENDPOINT?{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||n,iamEndpoint:process.env.TIGRIS_IAM_ENDPOINT||i}:{endpoint:process.env.AWS_ENDPOINT_URL_S3||n,iamEndpoint:process.env.AWS_ENDPOINT_URL_IAM||i}}export{I as a,p as b,T as c};
@@ -0,0 +1,2 @@
1
+ import{b as u}from"./chunk-4LGKN5DA.js";var a={success:"\u2714",failure:"\u2716",hint:"\u2192"};function r(){return process.stdout.isTTY===!0}function t(n){let s=u(n.command,n.operation);if(s)return s.messages}function o(n,s){let e=n;return e=e.replace(/\\n/g,`
2
+ `),s&&(e=e.replace(/\{\{(\w+)\}\}/g,(i,c)=>{let g=s[c];return g!==void 0?String(g):`{{${c}}}`})),e}function l(n,s){if(!r())return;let e=t(n);e?.onStart&&console.log(o(e.onStart,s))}function f(n,s){if(!r())return;let e=t(n);e?.onSuccess&&console.log(`${a.success} ${o(e.onSuccess,s)}`)}function m(n,s,e){let i=t(n);i?.onFailure&&console.error(`${a.failure} ${o(i.onFailure,e)}`),s&&console.error(` ${s}`)}function d(n,s){if(!r())return;let e=t(n);e?.onEmpty&&console.log(o(e.onEmpty,s))}function M(n,s){if(!r())return;let e=t(n);e?.onAlreadyDone&&console.log(o(e.onAlreadyDone,s))}function x(n,s){if(!r())return;let e=t(n);e?.hint&&console.log(`${a.hint} ${o(e.hint,s)}`)}function C(n,s){return{command:n,operation:s}}export{l as a,f as b,m as c,d,M as e,x as f,C as g};
@@ -0,0 +1 @@
1
+ var t="https://t3.storage.dev",s="https://iam.storageapi.dev",o="https://registry.npmjs.org/@tigrisdata/cli/latest",e=864e5;export{t as a,s as b,o as c,e as d};
@@ -0,0 +1,4 @@
1
+ import{a as s,b as e,c,e as g,f as l,g as u}from"./chunk-A3TXP5Y2.js";import{b as a}from"./chunk-QZXBLNMQ.js";import{f as r}from"./chunk-JVB3Y42V.js";var t=u("login","oauth");async function f(){s(t);try{let n=a();if(await n.isAuthenticated()){g(t);return}await n.login({onDeviceCode:(o,p)=>{console.log(`
2
+ Your confirmation code: ${o}
3
+ `),console.log(`If browser doesn't open, visit: ${p}`)},onWaiting:()=>console.log(`
4
+ Waiting for authentication...`)});let i=await n.getOrganizations();if(i.length>0){let o=i[0];await r(o.id),e(t,{org:o.displayName||o.name}),i.length>1&&l(t,{count:i.length})}else e(t,{org:"none"})}catch{c(t),process.exit(1)}}var A=f;export{f as a,A as b};
@@ -0,0 +1 @@
1
+ import{b as f}from"./chunk-QZXBLNMQ.js";import{a as A,c as w}from"./chunk-6U4U4JM6.js";import{g as d,h as g,i as l,j as p,l as o,s as h}from"./chunk-JVB3Y42V.js";import{a as u}from"./chunk-D63SZLT5.js";import{S3Client as a}from"@aws-sdk/client-s3";import{fromIni as C}from"@aws-sdk/credential-providers";var r=w(),T=A();async function y(){return h()}async function O(){if(l()){let e=process.env.AWS_PROFILE||"default",s=await p(e),i=await C({profile:e})();return{accessKeyId:i.accessKeyId,secretAccessKey:i.secretAccessKey,endpoint:s.endpoint||r.endpoint||u,iamEndpoint:s.iamEndpoint||r.iamEndpoint}}let c=await y();if(c==="oauth"){let s=await f().getAccessToken();if(!d())throw new Error('No organization selected. Please run "tigris orgs select" first.');return{sessionToken:s,accessKeyId:"",secretAccessKey:"",endpoint:r.endpoint,organizationId:d()??void 0,iamEndpoint:r.iamEndpoint,authDomain:T.domain}}if(c==="credentials"){let e=o();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint}}let t=g();if(t)return{accessKeyId:t.accessKeyId,secretAccessKey:t.secretAccessKey,endpoint:t.endpoint};let n=o();if(n)return{accessKeyId:n.accessKeyId,secretAccessKey:n.secretAccessKey,endpoint:n.endpoint};throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}async function v(){if(l()){let e=process.env.AWS_PROFILE||"default",s=await p(e);return new a({region:"auto",endpoint:s.endpoint||r.endpoint||u,credentials:C({profile:e})})}let c=await y();if(c==="oauth"){let s=await f().getAccessToken(),i=d();if(!i)throw new Error('No organization selected. Please run "tigris orgs select" first.');let K=new a({region:"auto",endpoint:r.endpoint,credentials:{sessionToken:s,accessKeyId:"",secretAccessKey:""}});return K.middlewareStack.add(I=>async m=>{let E=m.request;return E.headers["x-Tigris-Namespace"]=i,await I(m)},{name:"x-Tigris-Namespace-Middleware",step:"build",override:!0}),K}if(c==="credentials"){let e=o();if(e)return new a({region:"auto",endpoint:e.endpoint,credentials:{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey}})}let t=g();if(t)return new a({region:"auto",endpoint:t.endpoint,credentials:{accessKeyId:t.accessKeyId,secretAccessKey:t.secretAccessKey}});let n=o();if(n)return new a({region:"auto",endpoint:n.endpoint,credentials:{accessKeyId:n.accessKeyId,secretAccessKey:n.secretAccessKey}});throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}async function z(){return l()||await y()!==null||g()!==null||o()!==null}export{y as a,O as b,v as c,z as d};
@@ -0,0 +1 @@
1
+ import{a as u,b as o,c as m,g}from"./chunk-A3TXP5Y2.js";import{m as i,o as d,r as y}from"./chunk-JVB3Y42V.js";import{a as n}from"./chunk-D63SZLT5.js";import p from"enquirer";var{prompt:S}=p,t=g("login","credentials");async function l(e){u(t);let s=e["access-key"]||e.accessKey||e.key||e.Key||e.accesskey,c=e["access-secret"]||e.accessSecret||e.secret||e.Secret||e.accesssecret;if(!s||!c){let r=[];s||r.push({type:"input",name:"accessKey",message:"Access Key ID:",required:!0}),c||r.push({type:"password",name:"accessSecret",message:"Secret Access Key:",required:!0});let a=await S(r);s=s||a.accessKey,c=c||a.accessSecret}(!s||!c)&&(m(t,"Access key and secret are required"),process.exit(1));let f=i()?.endpoint||n;await d({accessKeyId:s,secretAccessKey:c,endpoint:f}),await y("credentials"),o(t)}export{l as a};
@@ -0,0 +1,6 @@
1
+ function k(n){if(n===0)return"0 B";let e=["B","KB","MB","GB","TB"],t=Math.floor(Math.log(n)/Math.log(1024));return`${(n/Math.pow(1024,t)).toFixed(t>0?1:0)} ${e[t]}`}function l(n){return JSON.stringify(n,null,2)}function m(n){return String(n).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}function w(n,e=" "){return Object.entries(n).map(([t,r])=>`${e}<${t}>${m(r)}</${t}>`).join(`
2
+ `)}function T(n,e,t){let r=[`<${e}>`];return n.forEach(i=>{r.push(` <${t}>`),r.push(w(i," ")),r.push(` </${t}>`)}),r.push(`</${e}>`),r.join(`
3
+ `)}function f(n){if(n==null)return"";if(n instanceof Date)return h(n);if(typeof n=="string"){let e=new Date(n);if(!isNaN(e.getTime())&&n.includes("T"))return h(e)}return String(n)}function h(n){return new Intl.DateTimeFormat(void 0,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}).format(n)}function x(n,e){return e.map(t=>{if(t.width)return t.width;let r=t.header.length,i=n.reduce((a,u)=>{let s=f(u[t.key]);return Math.max(a,s.length)},0);return Math.max(r,i)})}function j(n,e){let t=[],r=x(n,e),i="\u250C"+r.map(o=>"\u2500".repeat(o+2)).join("\u252C")+"\u2510",a="\u251C"+r.map(o=>"\u2500".repeat(o+2)).join("\u253C")+"\u2524",u="\u2514"+r.map(o=>"\u2500".repeat(o+2)).join("\u2534")+"\u2518";t.push(`
4
+ `+i);let s="\u2502 "+e.map((o,c)=>o.header.padEnd(r[c])).join(" \u2502 ")+" \u2502";return t.push(s),t.push(a),n.forEach(o=>{let c=e.map((g,d)=>{let p=f(o[g.key]);return g.align==="right"?p.padStart(r[d]):p.padEnd(r[d])});t.push("\u2502 "+c.join(" \u2502 ")+" \u2502")}),t.push(u+`
5
+ `),t.join(`
6
+ `)}function $(n,e,t,r,i){switch(e){case"json":return l(n);case"xml":return T(n,t,r);default:return j(n,i)}}export{k as a,l as b,w as c,T as d,j as e,$ as f};
@@ -0,0 +1 @@
1
+ function t(n,r,o){for(let e of r)if(n[e]!==void 0)return n[e];return o}function f(n){if(n!==void 0)return typeof n=="boolean"?n:n==="true"}export{t as a,f as b};
@@ -0,0 +1 @@
1
+ import{a as l}from"./chunk-D63SZLT5.js";import{homedir as d,platform as C}from"os";import{join as r}from"path";import{readFileSync as m,writeFileSync as S,existsSync as c,mkdirSync as y,chmodSync as _}from"fs";import{execFileSync as E}from"child_process";import{loadSharedConfigFiles as I}from"@smithy/shared-ini-file-loader";var s=r(d(),".tigris"),a=r(s,"config.json");function u(n,e){if(C()==="win32")try{let i=process.env.USERNAME;i&&E("icacls",[n,"/inheritance:r","/grant:r",`${i}:F`],{stdio:"ignore"})}catch{console.warn(`Warning: Could not set restrictive permissions on ${n}. It may be accessible to other users.`)}else try{_(n,e)}catch{console.warn(`Warning: Could not set restrictive permissions on ${n}. It may be accessible to other users.`)}}function T(){c(s)||(y(s,{recursive:!0,mode:448}),u(s,448))}function o(){if(c(a))try{let n=m(a,"utf8");return JSON.parse(n)}catch{return{}}return{}}async function t(n){T(),S(a,JSON.stringify(n,null,2),{mode:384}),u(a,384)}async function h(n){let e=o();e.tokens=n,await t(e)}async function z(){return o().tokens||null}async function G(){let n=o();delete n.tokens,await t(n)}async function k(n){let e=o();e.organizations=n,await t(e)}function K(){return o().organizations||[]}async function D(n){let e=o();e.selectedOrganization=n,await t(e)}function F(){return o().selectedOrganization||null}function v(){if(process.env.TIGRIS_STORAGE_ACCESS_KEY_ID||process.env.TIGRIS_STORAGE_SECRET_ACCESS_KEY){let f=process.env.TIGRIS_STORAGE_ACCESS_KEY_ID,g=process.env.TIGRIS_STORAGE_SECRET_ACCESS_KEY;if(!f||!g)return null;let p=process.env.TIGRIS_STORAGE_ENDPOINT||l;return{accessKeyId:f,secretAccessKey:g,endpoint:p}}let n=process.env.AWS_ACCESS_KEY_ID,e=process.env.AWS_SECRET_ACCESS_KEY;if(!n||!e)return null;let i=process.env.AWS_ENDPOINT_URL_S3||l;return{accessKeyId:n,secretAccessKey:e,endpoint:i}}function N(){if(!process.env.AWS_PROFILE)return!1;let n=r(d(),".aws");return c(r(n,"credentials"))||c(r(n,"config"))}async function b(n){try{let{configFile:e}=await I(),i=e[n];return i?{endpoint:i.endpoint_url_s3||i.endpoint_url,iamEndpoint:i.endpoint_url_iam,region:i.region}:{}}catch{return{}}}function L(){let n=o();return v()||n.temporaryCredentials||n.credentials||null}function M(){let n=o();return n.temporaryCredentials||n.credentials||null}function W(){return o().credentials||null}async function Y(n){let e=o();e.credentials=n,await t(e)}async function j(n){let e=o();e.temporaryCredentials=n,await t(e)}async function U(){let n=o();delete n.temporaryCredentials,await t(n)}async function $(){let n=o();delete n.credentials,await t(n)}async function J(n){let e=o();e.loginMethod=n,await t(e)}function q(){return o().loginMethod||null}async function B(){let e=o().credentials;await t({credentials:e})}export{h as a,z as b,G as c,k as d,K as e,D as f,F as g,v as h,N as i,b as j,L as k,M as l,W as m,Y as n,j as o,U as p,$ as q,J as r,q as s,B as t};
@@ -0,0 +1 @@
1
+ import{list as g}from"@tigrisdata/storage";var f=["t3://","tigris://"];function p(t){return f.some(e=>t.startsWith(e))}function c(t){let e=f.find(r=>t.startsWith(r));return s(t.slice(e.length))}function s(t){let e=t.split("/");return{bucket:e[0],path:e.slice(1).join("/")}}async function m(t,e,r){let{data:i}=await g({prefix:`${e}/`,limit:1,config:{...r,bucket:t}});return!!(i?.items&&i.items.length>0)}function l(t,e){return{source:s(t),destination:s(e)}}function d(t){return p(t)?c(t):s(t)}function P(t){let e=t.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,"[^/]*");return new RegExp("^"+e+"$")}function x(t){let e=t.indexOf("*"),r=t.lastIndexOf("/",e);return r>=0?t.slice(0,r+1):""}async function h(t,e,r){let i=[],o;do{let{data:n,error:a}=await g({prefix:e,paginationToken:o,config:{...r,bucket:t}});if(a)return{items:i,error:a};n?.items&&i.push(...n.items),o=n?.hasMore?n.paginationToken:void 0}while(o);return{items:i}}export{p as a,c as b,s as c,m as d,l as e,d as f,P as g,x as h,h as i};
@@ -0,0 +1 @@
1
+ import{a as g,b as k}from"./chunk-6U4U4JM6.js";import{a as c,b as s,c as l,d as p,e as u,r as h}from"./chunk-JVB3Y42V.js";import a from"axios";import w from"open";import{createRemoteJWKSet as T,jwtVerify as y}from"jose";var f=class{config;baseUrl;jwks=null;constructor(){this.config=g(),this.baseUrl=`https://${this.config.domain}`}getJWKS(){return this.jwks||(this.jwks=T(new URL(`${this.baseUrl}/.well-known/jwks.json`))),this.jwks}async verifyIdToken(e){let{payload:t}=await y(e,this.getJWKS(),{issuer:`${this.baseUrl}/`,audience:this.config.clientId});return t}async login(e){let o=(await a.post(`${this.baseUrl}/oauth/device/code`,{client_id:this.config.clientId,audience:this.config.audience,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data;e?.onDeviceCode?.(o.user_code,o.verification_uri),await this.sleep(2e3);try{await w(o.verification_uri_complete)}catch{}e?.onWaiting?.();let n=await this.pollForToken(o.device_code,o.interval||5);await c(n),h("oauth"),await this.extractAndStoreOrganizations(n.idToken)}async pollForToken(e,t){let n=0;for(;n<60;){n++;try{let r=(await a.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,device_code:e,grant_type:"urn:ietf:params:oauth:grant-type:device_code"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data;if(!r.id_token)throw new Error("No ID token found. Please try again.");if((await this.verifyIdToken(r.id_token)).email_verified===!1)throw console.log("Email not verified. Please verify your email and try again."),new Error("Email not verified. Please verify your email and try again.");let m=Date.now()+(r.expires_in||3600)*1e3;return{accessToken:r.access_token,refreshToken:r.refresh_token,idToken:r.id_token,expiresAt:m}}catch(i){if(a.isAxiosError(i)&&i.response){let r=i.response.data?.error;if(r==="authorization_pending"){await this.sleep(t*1e3);continue}if(r==="slow_down"){t+=5,await this.sleep(t*1e3);continue}throw new Error(i.response.data?.error_description||"Authentication failed")}throw i}}throw new Error("Authentication timed out. Please try again.")}async getAccessToken(){let e=await s();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 s(),!t)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let n=(await a.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,grant_type:"refresh_token",refresh_token:t.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,i={accessToken:n.access_token,refreshToken:n.refresh_token||t.refreshToken,idToken:n.id_token||t.idToken,expiresAt:Date.now()+(n.expires_in||3600)*1e3};return await c(i),i}catch{throw await l(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await s();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{return await this.verifyIdToken(e.idToken)}catch{throw new Error('ID token verification failed. Please run "tigris login" to re-authenticate.')}}async extractAndStoreOrganizations(e){if(e)try{let o=(await this.verifyIdToken(e))[k];if(!o)return;let n=o?.ns?.map(i=>typeof i=="object"&&i!==null?{id:i.id,name:i.name,displayName:i.name}:{id:i,name:i,displayName:i})||[];if(n.length===0)return;p(n)}catch{}}async getOrganizations(){return await this.getAccessToken(),u()}async logout(){await l()}async isAuthenticated(){return await s()!==null}sleep(e){return new Promise(t=>setTimeout(t,e))}},d=null;function S(){return d||(d=new f),d}export{f as a,S as b};
@@ -0,0 +1,12 @@
1
+ import{a as C,c as A}from"./chunk-TUJTXB5G.js";import{a as w}from"./chunk-4LGKN5DA.js";import{Command as v}from"commander";import{existsSync as q}from"fs";import{join as c,dirname as k}from"path";import{fileURLToPath as R}from"url";process.on("unhandledRejection",e=>{(e===""||e===void 0)&&(console.error(`
2
+ Operation cancelled`),process.exit(1)),console.error(`
3
+ Error:`,e instanceof Error?e.message:e),process.exit(1)});process.on("uncaughtException",e=>{console.error(`
4
+ Error:`,e.message),process.exit(1)});var P=R(import.meta.url),d=k(P),l=w();function y(e,t){return(t?[c(d,"lib",e,`${t}.js`),c(d,"lib",e,t,"index.js")]:[c(d,"lib",`${e}.js`),c(d,"lib",e,"index.js")]).some(o=>q(o))}function E(e){let t;e.type==="positional"?t=` ${e.name}`:(t=` --${e.name}`,e.alias&&e.alias.length===1&&(t+=`, -${e.alias}`));let n=26,o=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(i=>i.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(", ")})`),`${o}${s}`}function b(e){if(console.log(`
5
+ ${l.name} ${e.name} - ${e.description}
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 o=` ${n.name}`;if(n.alias){let i=Array.isArray(n.alias)?n.alias:[n.alias];o+=` (${i.join(", ")})`}let s=o.padEnd(24);console.log(`${s}${n.description}`)}),console.log())}e.arguments&&e.arguments.length>0&&(console.log("Arguments:"),e.arguments.forEach(t=>{console.log(E(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
+ ${l.name} ${e.name} ${t.name} - ${t.description}
8
+ `),t.arguments&&t.arguments.length>0&&(console.log("Arguments:"),t.arguments.forEach(n=>{console.log(E(n))}),console.log())}function V(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: ${C}
9
+ `),console.log(`Usage: tigris [command] [options]
10
+ `),console.log("Commands:"),l.commands.filter(V).forEach(t=>{let n=` ${t.name}`;t.alias&&(n+=` (${t.alias})`);let o=n.padEnd(24);console.log(`${o}${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 o=n.required?`<${n.name}>`:`[${n.name}]`;e.argument(o,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[o,s]=n["required-when"].split("="),i=h(t,o,e),r=h(t,n.name,e);if(i===s&&!r)return console.error(`--${n.name} is required when --${o} 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(i=>i.name===t);if(s&&s.alias){let i=s.alias.charAt(0).toUpperCase()+s.alias.slice(1);if(e[i]!==void 0)return e[i]}}let o=[t,t.replace(/-/g,""),t.replace(/-/g,"").toLowerCase(),t.charAt(0).toUpperCase(),_(t)];for(let s of o)if(e[s]!==void 0)return e[s]}function _(e){return e.replace(/-([a-z])/g,(t,n)=>n.toUpperCase())}async function D(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 i=await import(s).catch(()=>null);if(i)return{module:i,error:null}}return{module:null,error:`Command not found: ${t?`${e} ${t}`:e}`}}async function $(e,t,n=[],o={},s){if(s){let j=s.replace(/\\n/g,`
12
+ `);console.log(j)}let{module:i,error:r}=await D(e,t);(r||!i)&&(console.error(r),process.exit(1));let a=t||e,p=i.default||i[a];typeof p!="function"&&(console.error(`Command not implemented: ${a}`),process.exit(1)),await p({...o,_positional:n})}var f=new v;f.name(l.name).description(l.description).version(l.version);function u(e,t,n){let o;"optsWithGlobals"in n&&typeof n.optsWithGlobals=="function"?o=n.optsWithGlobals():"opts"in n&&typeof n.opts=="function"?o=n.opts():o=n;let s={...o};return e.filter(r=>r.type==="positional").forEach((r,a)=>{t[a]!==void 0&&(r.multiple?s[r.name]=t[a].split(",").map(p=>p.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 o=t.command(n.name).description(n.description);n.alias&&(Array.isArray(n.alias)?n.alias:[n.alias]).forEach(i=>o.alias(i)),m(o,n.arguments),o.action(async(...s)=>{let i=s.pop(),r=s;n.arguments&&!g(n.arguments,u(n.arguments,r,i))||await $(e.name,n.name,r,u(n.arguments||[],r,i),n.message)}),o.command("help").description("Show help for this operation").action(()=>{U(e,n)})}),e.default){let n=e.operations?.find(o=>o.name===e.default);if(n){m(t,e.arguments),m(t,n.arguments);let o=[...e.arguments||[],...n.arguments||[]];t.action(async(...s)=>{let i=s.pop(),r=s;o.length>0&&!g(o,u(o,r,i))||await $(e.name,n.name,r,u(o,r,i),e.message||n.message)})}}else t.action(()=>{b(e)});else m(t,e.arguments),t.action(async(...n)=>{let o=n.pop(),s=n;e.arguments&&!g(e.arguments,u(e.arguments,s,o))||await $(e.name,void 0,s,u(e.arguments||[],s,o),e.message)});t.command("help").description("Show help for this command").action(()=>{b(e)})});f.command("help").description("Show general help").action(()=>{x()});f.action(()=>{x()});f.parse();A();
@@ -0,0 +1,8 @@
1
+ import{c as p,d as u}from"./chunk-D63SZLT5.js";import{readFileSync as h,writeFileSync as y,mkdirSync as v}from"fs";import{join as d}from"path";import{homedir as m}from"os";import b from"https";var c="2.6.2";var f=d(m(),".tigris","update-check.json");function C(){try{let e=h(f,"utf-8"),i=JSON.parse(e);return typeof i.latestVersion=="string"&&typeof i.lastChecked=="number"?i:null}catch{return null}}function k(e){try{v(d(m(),".tigris"),{recursive:!0}),y(f,JSON.stringify(e),"utf-8")}catch{}}function x(e,i){let n=t=>{let a=(t.startsWith("v")?t.slice(1):t).split(".");if(a.length!==3)return null;let o=a.map(Number);return o.some(isNaN)?null:o},s=n(e),r=n(i);if(!s||!r)return!1;for(let t=0;t<3;t++){if(r[t]>s[t])return!0;if(r[t]<s[t])return!1}return!1}function T(){try{let e=b.get(p,{timeout:5e3},i=>{let n="";i.on("data",s=>{n+=s}),i.on("end",()=>{try{let s=JSON.parse(n);typeof s.version=="string"&&k({latestVersion:s.version,lastChecked:Date.now()})}catch{}})});e.on("error",()=>{}),e.on("timeout",()=>{e.destroy()}),e.end(),e.unref()}catch{}}function V(){if(process.env.TIGRIS_NO_UPDATE_CHECK==="1"||!process.stdout.isTTY)return;let e=C();if(e&&x(c,e.latestVersion)){let n=`Update available: ${c} \u2192 ${e.latestVersion}`,s="Run `npm install -g @tigrisdata/cli` to upgrade.",r=Math.max(n.length,s.length)+4,t="\u250C"+"\u2500".repeat(r-2)+"\u2510",l="\u2514"+"\u2500".repeat(r-2)+"\u2518",a=o=>"\u2502 "+o.padEnd(r-4)+" \u2502";console.log(`
2
+ ${t}
3
+ ${a("")}
4
+ ${a(n)}
5
+ ${a(s)}
6
+ ${a("")}
7
+ ${l}
8
+ `)}let i=Number(process.env.TIGRIS_UPDATE_CHECK_INTERVAL_MS)||864e5;(!e||Date.now()-e.lastChecked>i)&&T()}export{c as a,x as b,V as c};
package/dist/cli.js CHANGED
@@ -1,13 +1,2 @@
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.6.0";process.on("unhandledRejection",e=>{(e===""||e===void 0)&&(console.error(`
3
- Operation cancelled`),process.exit(1)),console.error(`
4
- Error:`,e instanceof Error?e.message:e),process.exit(1)});process.on("uncaughtException",e=>{console.error(`
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 v(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(`
6
- ${l.name} ${e.name} - ${e.description}
7
- `),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(v(t))}),console.log()),console.log(`Use "${l.name} ${e.name} <operation> help" for more information about an operation.`)}function U(e,t){console.log(`
8
- ${l.name} ${e.name} ${t.name} - ${t.description}
9
- `),t.arguments&&t.arguments.length>0&&(console.log("Arguments:"),t.arguments.forEach(n=>{console.log(v(n))}),console.log())}function T(e){return y(e.name)?!0:e.operations?e.operations.some(t=>y(e.name,t.name)):!1}function A(){console.log(`Tigris CLI Version: ${b}
10
- `),console.log(`Usage: tigris [command] [options]
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.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
- `);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(()=>{A()});f.action(()=>{A()});f.parse();
2
+ import"./chunk-TPUZYSCZ.js";import"./chunk-TUJTXB5G.js";import"./chunk-4LGKN5DA.js";import"./chunk-D63SZLT5.js";
package/dist/constants.js CHANGED
@@ -1 +1 @@
1
- var t="https://t3.storage.dev",e="https://iam.storageapi.dev";export{e as DEFAULT_IAM_ENDPOINT,t as DEFAULT_STORAGE_ENDPOINT};
1
+ import{a,b,c,d}from"./chunk-D63SZLT5.js";export{b as DEFAULT_IAM_ENDPOINT,a as DEFAULT_STORAGE_ENDPOINT,c as NPM_REGISTRY_URL,d as UPDATE_CHECK_INTERVAL_MS};
package/dist/index.js CHANGED
@@ -1,12 +1 @@
1
- import{Command as E}from"commander";import{readFileSync as k,existsSync as q}from"fs";import{join as p,dirname as R}from"path";import{fileURLToPath as P}from"url";import*as C from"yaml";var b="2.6.0";process.on("unhandledRejection",e=>{(e===""||e===void 0)&&(console.error(`
2
- Operation cancelled`),process.exit(1)),console.error(`
3
- Error:`,e instanceof Error?e.message:e),process.exit(1)});process.on("uncaughtException",e=>{console.error(`
4
- Error:`,e.message),process.exit(1)});var D=P(import.meta.url),u=R(D),V=p(u,"specs.yaml"),M=k(V,"utf8"),l=C.parse(M);function y(e,t){return(t?[p(u,"lib",e,`${t}.js`),p(u,"lib",e,t,"index.js")]:[p(u,"lib",`${e}.js`),p(u,"lib",e,"index.js")]).some(i=>q(i))}function v(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
- ${l.name} ${e.name} - ${e.description}
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(v(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
- ${l.name} ${e.name} ${t.name} - ${t.description}
8
- `),t.arguments&&t.arguments.length>0&&(console.log("Arguments:"),t.arguments.forEach(n=>{console.log(v(n))}),console.log())}function T(e){return y(e.name)?!0:e.operations?e.operations.some(t=>y(e.name,t.name)):!1}function A(){console.log(`Tigris CLI Version: ${b}
9
- `),console.log(`Usage: tigris [command] [options]
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.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(()=>{A()});f.action(()=>{A()});f.parse();
1
+ import"./chunk-TPUZYSCZ.js";import"./chunk-TUJTXB5G.js";import"./chunk-4LGKN5DA.js";import"./chunk-D63SZLT5.js";
package/dist/lib/_stat.js CHANGED
@@ -1 +1 @@
1
- async function e(t){t.path||t._positional?.[0]||(console.error("path argument is required"),process.exit(1)),console.error("stat command not yet implemented"),process.exit(1)}export{e as default};
1
+ import{f as o}from"../chunk-LCWHZUZZ.js";async function s(t){let e=t.path||t._positional?.[0];e||(console.error("path argument is required"),process.exit(1));let{bucket:r}=o(e);r||(console.error("Invalid path"),process.exit(1)),console.error("stat command not yet implemented"),process.exit(1)}export{s as default};
@@ -1,3 +1,2 @@
1
- function p(n,e,t){for(let o of e)if(n[o]!==void 0)return n[o];return t}import{S3Client as je}from"@aws-sdk/client-s3";import{fromIni as We}from"@aws-sdk/credential-providers";import{homedir as te}from"os";import{join as b}from"path";import{readFileSync as oe,writeFileSync as ie,existsSync as K,mkdirSync as se}from"fs";import{loadSharedConfigFiles as ve}from"@smithy/shared-ini-file-loader";import{chmod as re}from"fs/promises";var f="https://t3.storage.dev",S="https://iam.storageapi.dev";var _=b(te(),".tigris"),h=b(_,"config.json");function ae(){K(_)||se(_,{recursive:!0,mode:448})}function g(){if(K(h))try{let n=oe(h,"utf8");return JSON.parse(n)}catch{return{}}return{}}async function y(n){ae(),ie(h,JSON.stringify(n,null,2),{mode:384});try{await re(h,384)}catch{}}async function w(n){let e=g();e.tokens=n,await y(e)}async function u(){return g().tokens||null}async function I(){let n=g();delete n.tokens,await y(n)}async function z(n){let e=g();e.organizations=n,await y(e)}function L(){return g().organizations||[]}function k(){return g().selectedOrganization||null}async function G(n){let e=g();e.loginMethod=n,await y(e)}function F(){return g().loginMethod||null}import A from"axios";import ce from"open";function C(){let n=process.env.TIGRIS_ENV==="development",e=process.env.AUTH0_DOMAIN||n?"auth-dev.tigris.dev":"auth.tigris.dev",t=process.env.AUTH0_CLIENT_ID||n?"JdJVYIyw0O1uHi5L5OJH903qaWBgd3gF":"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",o=process.env.AUTH0_AUDIENCE||n?"https://tigris-api-dev":"https://tigris-os-api";return{domain:e,clientId:t,audience:o}}var U=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function T(){return process.env.TIGRIS_STORAGE_ENDPOINT||process.env.TIGRIS_IAM_ENDPOINT?{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||f,iamEndpoint:process.env.TIGRIS_IAM_ENDPOINT||S}:{endpoint:process.env.AWS_ENDPOINT_URL_S3||f,iamEndpoint:process.env.AWS_ENDPOINT_URL_IAM||S}}var v=class{config;baseUrl;constructor(){this.config=C(),this.baseUrl=`https://${this.config.domain}`}async login(e){let o=(await A.post(`${this.baseUrl}/oauth/device/code`,{client_id:this.config.clientId,audience:this.config.audience,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data;e?.onDeviceCode?.(o.user_code,o.verification_uri),await this.sleep(2e3);try{await ce(o.verification_uri_complete)}catch{}e?.onWaiting?.();let i=await this.pollForToken(o.device_code,o.interval||5);await w(i),G("oauth"),await this.extractAndStoreOrganizations(i.idToken)}async pollForToken(e,t){let i=0;for(;i<60;){i++;try{let c=(await A.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,device_code:e,grant_type:"urn:ietf:params:oauth:grant-type:device_code"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,r=Date.now()+(c.expires_in||3600)*1e3;return{accessToken:c.access_token,refreshToken:c.refresh_token,idToken:c.id_token,expiresAt:r}}catch(s){if(A.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 u();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 u(),!t)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let i=(await A.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,grant_type:"refresh_token",refresh_token:t.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,s={accessToken:i.access_token,refreshToken:i.refresh_token||t.refreshToken,idToken:i.id_token||t.idToken,expiresAt:Date.now()+(i.expires_in||3600)*1e3};return await w(s),s}catch{throw await I(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await u();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let t=e.idToken.split(".")[1],o=Buffer.from(t,"base64").toString("utf8");return JSON.parse(o)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let t=e.split(".")[1],o=Buffer.from(t,"base64").toString("utf8"),s=JSON.parse(o)[U];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;z(c)}catch{}}async getOrganizations(){return await this.getAccessToken(),L()}async logout(){await I()}async isAuthenticated(){return await u()!==null}sleep(e){return new Promise(t=>setTimeout(t,e))}},E=null;function x(){return E||(E=new v),E}var Je=T(),Qe=C();async function $(){return F()}import{assignBucketRoles as ye,revokeAllBucketRoles as Ce}from"@tigrisdata/iam";import{readFileSync as de,existsSync as le}from"fs";import{join as j,dirname as ge}from"path";import{fileURLToPath as pe}from"url";import*as V from"yaml";var fe=pe(import.meta.url),ue=ge(fe),O=null;function me(){let n=ue;for(let e=0;e<5;e++){let t=j(n,"specs.yaml");if(le(t))return t;n=j(n,"..")}throw new Error("Could not find specs.yaml")}function he(){if(!O){let n=me(),e=de(n,"utf8");O=V.parse(e)}return O}function W(n,e){let o=he().commands.find(i=>i.name===n);return o?e&&o.operations?o.operations.find(i=>i.name===e)||null:o:null}var Y={success:"\u2714",failure:"\u2716",hint:"\u2192"};function q(){return process.stdout.isTTY===!0}function P(n){let e=W(n.command,n.operation);if(e)return e.messages}function R(n,e){let t=n;return t=t.replace(/\\n/g,`
2
- `),e&&(t=t.replace(/\{\{(\w+)\}\}/g,(o,i)=>{let s=e[i];return s!==void 0?String(s):`{{${i}}}`})),t}function B(n,e){if(!q())return;let t=P(n);t?.onStart&&console.log(R(t.onStart,e))}function N(n,e){if(!q())return;let t=P(n);t?.onSuccess&&console.log(`${Y.success} ${R(t.onSuccess,e)}`)}function d(n,e,t){let o=P(n);o?.onFailure&&console.error(`${Y.failure} ${R(o.onFailure,t)}`),e&&console.error(` ${e}`)}function H(n,e){return{command:n,operation:e}}var a=H("access-keys","assign"),J=["Editor","ReadOnly","NamespaceAdmin"];function Q(n){return n?Array.isArray(n)?n:[n]:[]}async function Te(n){B(a);let e=p(n,["id"]),t=p(n,["admin"]),o=p(n,["revokeRoles","revoke-roles"]),i=Q(p(n,["bucket","b"])),s=Q(p(n,["role","r"]));e||(d(a,"Access key ID is required"),process.exit(1)),t&&o&&(d(a,"Cannot use --admin and --revoke-roles together"),process.exit(1)),await $()!=="oauth"&&(d(a,`Bucket roles can only be managed when logged in via OAuth.
3
- Run "tigris login oauth" first.`),process.exit(1));let r=x();await r.isAuthenticated()||(d(a,'Not authenticated. Run "tigris login oauth" first.'),process.exit(1));let X=await r.getAccessToken(),Z=k(),ee=T(),M={sessionToken:X,organizationId:Z??void 0,iamEndpoint:ee.iamEndpoint};if(o){let{error:l}=await Ce(e,{config:M});l&&(d(a,l.message),process.exit(1)),N(a);return}let m;if(t)m=[{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)),s.length===0&&(d(a,"At least one role is required (or use --admin or --revoke-roles)"),process.exit(1));for(let l of s)J.includes(l)||(d(a,`Invalid role "${l}". Valid roles are: ${J.join(", ")}`),process.exit(1));s.length===1?m=i.map(l=>({bucket:l,role:s[0]})):s.length===i.length?m=i.map((l,ne)=>({bucket:l,role:s[ne]})):(d(a,`Number of roles (${s.length}) must be 1 or match number of buckets (${i.length})`),process.exit(1))}let{error:D}=await ye(e,m,{config:M});D&&(d(a,D.message),process.exit(1)),N(a)}export{Te as default};
1
+ import{a as R,b as l,c as t,g as b}from"../../chunk-A3TXP5Y2.js";import"../../chunk-4LGKN5DA.js";import{a as n}from"../../chunk-JRALYIRA.js";import{a as A}from"../../chunk-ESJWTUFN.js";import{b as k}from"../../chunk-QZXBLNMQ.js";import{c as h}from"../../chunk-6U4U4JM6.js";import{g as p}from"../../chunk-JVB3Y42V.js";import"../../chunk-D63SZLT5.js";import{assignBucketRoles as C,revokeAllBucketRoles as N}from"@tigrisdata/iam";var e=b("access-keys","assign"),x=["Editor","ReadOnly","NamespaceAdmin"];function y(o){return o?Array.isArray(o)?o:[o]:[]}async function E(o){R(e);let c=n(o,["id"]),g=n(o,["admin"]),d=n(o,["revokeRoles","revoke-roles"]),r=y(n(o,["bucket","b"])),s=y(n(o,["role","r"]));c||(t(e,"Access key ID is required"),process.exit(1)),g&&d&&(t(e,"Cannot use --admin and --revoke-roles together"),process.exit(1)),await A()!=="oauth"&&(t(e,`Bucket roles can only be managed when logged in via OAuth.
2
+ Run "tigris login oauth" first.`),process.exit(1));let m=k();await m.isAuthenticated()||(t(e,'Not authenticated. Run "tigris login oauth" first.'),process.exit(1));let T=await m.getAccessToken(),v=p(),w=h(),u={sessionToken:T,organizationId:v??void 0,iamEndpoint:w.iamEndpoint};if(d){let{error:i}=await N(c,{config:u});i&&(t(e,i.message),process.exit(1)),l(e);return}let a;if(g)a=[{bucket:"*",role:"NamespaceAdmin"}];else{r.length===0&&(t(e,"At least one bucket name is required (or use --admin or --revoke-roles)"),process.exit(1)),s.length===0&&(t(e,"At least one role is required (or use --admin or --revoke-roles)"),process.exit(1));for(let i of s)x.includes(i)||(t(e,`Invalid role "${i}". Valid roles are: ${x.join(", ")}`),process.exit(1));s.length===1?a=r.map(i=>({bucket:i,role:s[0]})):s.length===r.length?a=r.map((i,O)=>({bucket:i,role:s[O]})):(t(e,`Number of roles (${s.length}) must be 1 or match number of buckets (${r.length})`),process.exit(1))}let{error:f}=await C(c,a,{config:u});f&&(t(e,f.message),process.exit(1)),l(e)}export{E as default};
@@ -1,3 +1,2 @@
1
- function N(n,e,t){for(let o of e)if(n[o]!==void 0)return n[o];return t}import{S3Client as Ke}from"@aws-sdk/client-s3";import{fromIni as Re}from"@aws-sdk/credential-providers";import{homedir as H}from"os";import{join as M}from"path";import{readFileSync as J,writeFileSync as B,existsSync as K,mkdirSync as Q}from"fs";import{loadSharedConfigFiles as ye}from"@smithy/shared-ini-file-loader";import{chmod as X}from"fs/promises";var l="https://t3.storage.dev",T="https://iam.storageapi.dev";var A=M(H(),".tigris"),f=M(A,"config.json");function Z(){K(A)||Q(A,{recursive:!0,mode:448})}function c(){if(K(f))try{let n=J(f,"utf8");return JSON.parse(n)}catch{return{}}return{}}async function u(n){Z(),B(f,JSON.stringify(n,null,2),{mode:384});try{await X(f,384)}catch{}}async function S(n){let e=c();e.tokens=n,await u(e)}async function g(){return c().tokens||null}async function _(){let n=c();delete n.tokens,await u(n)}async function D(n){let e=c();e.organizations=n,await u(e)}function R(){return c().organizations||[]}function w(){return c().selectedOrganization||null}async function b(n){let e=c();e.loginMethod=n,await u(e)}function z(){return c().loginMethod||null}import y from"axios";import ee from"open";function m(){let n=process.env.TIGRIS_ENV==="development",e=process.env.AUTH0_DOMAIN||n?"auth-dev.tigris.dev":"auth.tigris.dev",t=process.env.AUTH0_CLIENT_ID||n?"JdJVYIyw0O1uHi5L5OJH903qaWBgd3gF":"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",o=process.env.AUTH0_AUDIENCE||n?"https://tigris-api-dev":"https://tigris-os-api";return{domain:e,clientId:t,audience:o}}var L=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function h(){return process.env.TIGRIS_STORAGE_ENDPOINT||process.env.TIGRIS_IAM_ENDPOINT?{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||l,iamEndpoint:process.env.TIGRIS_IAM_ENDPOINT||T}:{endpoint:process.env.AWS_ENDPOINT_URL_S3||l,iamEndpoint:process.env.AWS_ENDPOINT_URL_IAM||T}}var E=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 ee(o.verification_uri_complete)}catch{}e?.onWaiting?.();let i=await this.pollForToken(o.device_code,o.interval||5);await S(i),b("oauth"),await this.extractAndStoreOrganizations(i.idToken)}async pollForToken(e,t){let i=0;for(;i<60;){i++;try{let r=(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()+(r.expires_in||3600)*1e3;return{accessToken:r.access_token,refreshToken:r.refresh_token,idToken:r.id_token,expiresAt:a}}catch(s){if(y.isAxiosError(s)&&s.response){let r=s.response.data?.error;if(r==="authorization_pending"){await this.sleep(t*1e3);continue}if(r==="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 g();if(!e)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');let t=300*1e3;return Date.now()+t>=e.expiresAt&&(e=await this.refreshAccessToken(e)),e.accessToken}async refreshAccessToken(e){let t=null;if(e?.refreshToken?t=e:t=await g(),!t)throw new Error('No refresh token available. Please run "tigris login" to re-authenticate.');try{let i=(await y.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,grant_type:"refresh_token",refresh_token:t.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,s={accessToken:i.access_token,refreshToken:i.refresh_token||t.refreshToken,idToken:i.id_token||t.idToken,expiresAt:Date.now()+(i.expires_in||3600)*1e3};return await S(s),s}catch{throw await _(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await g();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let t=e.idToken.split(".")[1],o=Buffer.from(t,"base64").toString("utf8");return JSON.parse(o)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let t=e.split(".")[1],o=Buffer.from(t,"base64").toString("utf8"),s=JSON.parse(o)[L];if(!s)return;let r=s?.ns?.map(a=>typeof a=="object"&&a!==null?{id:a.id,name:a.name,displayName:a.name}:{id:a,name:a,displayName:a})||[];if(r.length===0)return;D(r)}catch{}}async getOrganizations(){return await this.getAccessToken(),R()}async logout(){await _()}async isAuthenticated(){return await g()!==null}sleep(e){return new Promise(t=>setTimeout(t,e))}},I=null;function k(){return I||(I=new E),I}var Fe=h(),Ue=m();async function G(){return z()}import{createAccessKey as de}from"@tigrisdata/iam";import{readFileSync as ne,existsSync as te}from"fs";import{join as F,dirname as oe}from"path";import{fileURLToPath as ie}from"url";import*as U from"yaml";var se=ie(import.meta.url),re=oe(se),v=null;function ae(){let n=re;for(let e=0;e<5;e++){let t=F(n,"specs.yaml");if(te(t))return t;n=F(n,"..")}throw new Error("Could not find specs.yaml")}function ce(){if(!v){let n=ae(),e=ne(n,"utf8");v=U.parse(e)}return v}function $(n,e){let o=ce().commands.find(i=>i.name===n);return o?e&&o.operations?o.operations.find(i=>i.name===e)||null:o:null}var j={success:"\u2714",failure:"\u2716",hint:"\u2192"};function W(){return process.stdout.isTTY===!0}function x(n){let e=$(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,(o,i)=>{let s=e[i];return s!==void 0?String(s):`{{${i}}}`})),t}function Y(n,e){if(!W())return;let t=x(n);t?.onStart&&console.log(O(t.onStart,e))}function V(n,e){if(!W())return;let t=x(n);t?.onSuccess&&console.log(`${j.success} ${O(t.onSuccess,e)}`)}function p(n,e,t){let o=x(n);o?.onFailure&&console.error(`${j.failure} ${O(o.onFailure,t)}`),e&&console.error(` ${e}`)}function q(n,e){return{command:n,operation:e}}var d=q("access-keys","create");async function le(n){Y(d);let e=N(n,["name"]);e||(p(d,"Access key name is required"),process.exit(1)),await G()!=="oauth"&&(p(d,`Access keys can only be created when logged in via OAuth.
3
- Run "tigris login oauth" first.`),process.exit(1));let o=k();await o.isAuthenticated()||(p(d,'Not authenticated. Run "tigris login oauth" first.'),process.exit(1));let s=await o.getAccessToken(),r=w(),a=h(),{data:C,error:P}=await de(e,{config:{sessionToken:s,organizationId:r??void 0,iamEndpoint:a.iamEndpoint}});P&&(p(d,P.message),process.exit(1)),console.log(` Name: ${C.name}`),console.log(` Access Key ID: ${C.id}`),console.log(` Secret Access Key: ${C.secret}`),console.log(""),console.log(" Save these credentials securely. The secret will not be shown again."),V(d)}export{le as default};
1
+ import{a as m,b as d,c as t,g as u}from"../../chunk-A3TXP5Y2.js";import"../../chunk-4LGKN5DA.js";import{a as c}from"../../chunk-JRALYIRA.js";import{a as l}from"../../chunk-ESJWTUFN.js";import{b as g}from"../../chunk-QZXBLNMQ.js";import{c as a}from"../../chunk-6U4U4JM6.js";import{g as r}from"../../chunk-JVB3Y42V.js";import"../../chunk-D63SZLT5.js";import{createAccessKey as y}from"@tigrisdata/iam";var e=u("access-keys","create");async function w(f){m(e);let i=c(f,["name"]);i||(t(e,"Access key name is required"),process.exit(1)),await l()!=="oauth"&&(t(e,`Access keys can only be created when logged in via OAuth.
2
+ Run "tigris login oauth" first.`),process.exit(1));let n=g();await n.isAuthenticated()||(t(e,'Not authenticated. Run "tigris login oauth" first.'),process.exit(1));let p=await n.getAccessToken(),h=r(),A=a(),{data:o,error:s}=await y(i,{config:{sessionToken:p,organizationId:h??void 0,iamEndpoint:A.iamEndpoint}});s&&(t(e,s.message),process.exit(1)),console.log(` Name: ${o.name}`),console.log(` Access Key ID: ${o.id}`),console.log(` Secret Access Key: ${o.secret}`),console.log(""),console.log(" Save these credentials securely. The secret will not be shown again."),d(e)}export{w as default};
@@ -1,3 +1,2 @@
1
- function P(n,e,t){for(let o of e)if(n[o]!==void 0)return n[o];return t}import{S3Client as Me}from"@aws-sdk/client-s3";import{fromIni as Re}from"@aws-sdk/credential-providers";import{homedir as q}from"os";import{join as N}from"path";import{readFileSync as H,writeFileSync as J,existsSync as M,mkdirSync as B}from"fs";import{loadSharedConfigFiles as he}from"@smithy/shared-ini-file-loader";import{chmod as Q}from"fs/promises";var g="https://t3.storage.dev",y="https://iam.storageapi.dev";var T=N(q(),".tigris"),f=N(T,"config.json");function X(){M(T)||B(T,{recursive:!0,mode:448})}function c(){if(M(f))try{let n=H(f,"utf8");return JSON.parse(n)}catch{return{}}return{}}async function u(n){X(),J(f,JSON.stringify(n,null,2),{mode:384});try{await Q(f,384)}catch{}}async function A(n){let e=c();e.tokens=n,await u(e)}async function l(){return c().tokens||null}async function S(){let n=c();delete n.tokens,await u(n)}async function D(n){let e=c();e.organizations=n,await u(e)}function R(){return c().organizations||[]}function _(){return c().selectedOrganization||null}async function K(n){let e=c();e.loginMethod=n,await u(e)}function b(){return c().loginMethod||null}import C from"axios";import Z from"open";function m(){let n=process.env.TIGRIS_ENV==="development",e=process.env.AUTH0_DOMAIN||n?"auth-dev.tigris.dev":"auth.tigris.dev",t=process.env.AUTH0_CLIENT_ID||n?"JdJVYIyw0O1uHi5L5OJH903qaWBgd3gF":"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",o=process.env.AUTH0_AUDIENCE||n?"https://tigris-api-dev":"https://tigris-os-api";return{domain:e,clientId:t,audience:o}}var z=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function h(){return process.env.TIGRIS_STORAGE_ENDPOINT||process.env.TIGRIS_IAM_ENDPOINT?{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||g,iamEndpoint:process.env.TIGRIS_IAM_ENDPOINT||y}:{endpoint:process.env.AWS_ENDPOINT_URL_S3||g,iamEndpoint:process.env.AWS_ENDPOINT_URL_IAM||y}}var I=class{config;baseUrl;constructor(){this.config=m(),this.baseUrl=`https://${this.config.domain}`}async login(e){let o=(await C.post(`${this.baseUrl}/oauth/device/code`,{client_id:this.config.clientId,audience:this.config.audience,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data;e?.onDeviceCode?.(o.user_code,o.verification_uri),await this.sleep(2e3);try{await Z(o.verification_uri_complete)}catch{}e?.onWaiting?.();let i=await this.pollForToken(o.device_code,o.interval||5);await A(i),K("oauth"),await this.extractAndStoreOrganizations(i.idToken)}async pollForToken(e,t){let i=0;for(;i<60;){i++;try{let r=(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()+(r.expires_in||3600)*1e3;return{accessToken:r.access_token,refreshToken:r.refresh_token,idToken:r.id_token,expiresAt:a}}catch(s){if(C.isAxiosError(s)&&s.response){let r=s.response.data?.error;if(r==="authorization_pending"){await this.sleep(t*1e3);continue}if(r==="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 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 i=(await C.post(`${this.baseUrl}/oauth/token`,{client_id:this.config.clientId,grant_type:"refresh_token",refresh_token:t.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,s={accessToken:i.access_token,refreshToken:i.refresh_token||t.refreshToken,idToken:i.id_token||t.idToken,expiresAt:Date.now()+(i.expires_in||3600)*1e3};return await A(s),s}catch{throw await S(),new Error('Token refresh failed. Please run "tigris login" to re-authenticate.')}}async getIdTokenClaims(){let e=await l();if(!e||!e.idToken)throw new Error('Not authenticated. Please run "tigris login" to authenticate.');try{let t=e.idToken.split(".")[1],o=Buffer.from(t,"base64").toString("utf8");return JSON.parse(o)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let t=e.split(".")[1],o=Buffer.from(t,"base64").toString("utf8"),s=JSON.parse(o)[z];if(!s)return;let r=s?.ns?.map(a=>typeof a=="object"&&a!==null?{id:a.id,name:a.name,displayName:a.name}:{id:a,name:a,displayName:a})||[];if(r.length===0)return;D(r)}catch{}}async getOrganizations(){return await this.getAccessToken(),R()}async logout(){await S()}async isAuthenticated(){return await l()!==null}sleep(e){return new Promise(t=>setTimeout(t,e))}},w=null;function E(){return w||(w=new I),w}var Ge=h(),Fe=m();async function L(){return b()}import{removeAccessKey as ce}from"@tigrisdata/iam";import{readFileSync as ee,existsSync as ne}from"fs";import{join as G,dirname as te}from"path";import{fileURLToPath as oe}from"url";import*as F from"yaml";var ie=oe(import.meta.url),se=te(ie),k=null;function re(){let n=se;for(let e=0;e<5;e++){let t=G(n,"specs.yaml");if(ne(t))return t;n=G(n,"..")}throw new Error("Could not find specs.yaml")}function ae(){if(!k){let n=re(),e=ee(n,"utf8");k=F.parse(e)}return k}function U(n,e){let o=ae().commands.find(i=>i.name===n);return o?e&&o.operations?o.operations.find(i=>i.name===e)||null:o:null}var $={success:"\u2714",failure:"\u2716",hint:"\u2192"};function j(){return process.stdout.isTTY===!0}function v(n){let e=U(n.command,n.operation);if(e)return e.messages}function x(n,e){let t=n;return t=t.replace(/\\n/g,`
2
- `),e&&(t=t.replace(/\{\{(\w+)\}\}/g,(o,i)=>{let s=e[i];return s!==void 0?String(s):`{{${i}}}`})),t}function W(n,e){if(!j())return;let t=v(n);t?.onStart&&console.log(x(t.onStart,e))}function Y(n,e){if(!j())return;let t=v(n);t?.onSuccess&&console.log(`${$.success} ${x(t.onSuccess,e)}`)}function p(n,e,t){let o=v(n);o?.onFailure&&console.error(`${$.failure} ${x(o.onFailure,t)}`),e&&console.error(` ${e}`)}function V(n,e){return{command:n,operation:e}}var d=V("access-keys","delete");async function de(n){W(d);let e=P(n,["id"]);e||(p(d,"Access key ID is required"),process.exit(1)),await L()!=="oauth"&&(p(d,`Access keys can only be deleted when logged in via OAuth.
3
- Run "tigris login oauth" first.`),process.exit(1));let o=E();await o.isAuthenticated()||(p(d,'Not authenticated. Run "tigris login oauth" first.'),process.exit(1));let s=await o.getAccessToken(),r=_(),a=h(),{error:O}=await ce(e,{config:{sessionToken:s,organizationId:r??void 0,iamEndpoint:a.iamEndpoint}});O&&(p(d,O.message),process.exit(1)),Y(d)}export{de as default};
1
+ import{a as d,b as m,c as e,g as f}from"../../chunk-A3TXP5Y2.js";import"../../chunk-4LGKN5DA.js";import{a as s}from"../../chunk-JRALYIRA.js";import{a as g}from"../../chunk-ESJWTUFN.js";import{b as a}from"../../chunk-QZXBLNMQ.js";import{c}from"../../chunk-6U4U4JM6.js";import{g as r}from"../../chunk-JVB3Y42V.js";import"../../chunk-D63SZLT5.js";import{removeAccessKey as A}from"@tigrisdata/iam";var t=f("access-keys","delete");async function k(u){d(t);let i=s(u,["id"]);i||(e(t,"Access key ID is required"),process.exit(1)),await g()!=="oauth"&&(e(t,`Access keys can only be deleted when logged in via OAuth.
2
+ Run "tigris login oauth" first.`),process.exit(1));let o=a();await o.isAuthenticated()||(e(t,'Not authenticated. Run "tigris login oauth" first.'),process.exit(1));let p=await o.getAccessToken(),h=r(),l=c(),{error:n}=await A(i,{config:{sessionToken:p,organizationId:h??void 0,iamEndpoint:l.iamEndpoint}});n&&(e(t,n.message),process.exit(1)),m(t)}export{k as default};
@@ -1,3 +1,2 @@
1
- function M(n,e,t){for(let o of e)if(n[o]!==void 0)return n[o];return t}import{S3Client as De}from"@aws-sdk/client-s3";import{fromIni as be}from"@aws-sdk/credential-providers";import{homedir as J}from"os";import{join as R}from"path";import{readFileSync as B,writeFileSync as Q,existsSync as D,mkdirSync as X}from"fs";import{loadSharedConfigFiles as ye}from"@smithy/shared-ini-file-loader";import{chmod as Z}from"fs/promises";var g="https://t3.storage.dev",T="https://iam.storageapi.dev";var A=R(J(),".tigris"),u=R(A,"config.json");function ee(){D(A)||X(A,{recursive:!0,mode:448})}function d(){if(D(u))try{let n=B(u,"utf8");return JSON.parse(n)}catch{return{}}return{}}async function m(n){ee(),Q(u,JSON.stringify(n,null,2),{mode:384});try{await Z(u,384)}catch{}}async function S(n){let e=d();e.tokens=n,await m(e)}async function p(){return d().tokens||null}async function _(){let n=d();delete n.tokens,await m(n)}async function K(n){let e=d();e.organizations=n,await m(e)}function b(){return d().organizations||[]}function w(){return d().selectedOrganization||null}async function z(n){let e=d();e.loginMethod=n,await m(e)}function L(){return d().loginMethod||null}import y from"axios";import ne from"open";function h(){let n=process.env.TIGRIS_ENV==="development",e=process.env.AUTH0_DOMAIN||n?"auth-dev.tigris.dev":"auth.tigris.dev",t=process.env.AUTH0_CLIENT_ID||n?"JdJVYIyw0O1uHi5L5OJH903qaWBgd3gF":"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",o=process.env.AUTH0_AUDIENCE||n?"https://tigris-api-dev":"https://tigris-os-api";return{domain:e,clientId:t,audience:o}}var G=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function C(){return process.env.TIGRIS_STORAGE_ENDPOINT||process.env.TIGRIS_IAM_ENDPOINT?{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||g,iamEndpoint:process.env.TIGRIS_IAM_ENDPOINT||T}:{endpoint:process.env.AWS_ENDPOINT_URL_S3||g,iamEndpoint:process.env.AWS_ENDPOINT_URL_IAM||T}}var E=class{config;baseUrl;constructor(){this.config=h(),this.baseUrl=`https://${this.config.domain}`}async login(e){let o=(await y.post(`${this.baseUrl}/oauth/device/code`,{client_id:this.config.clientId,audience:this.config.audience,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data;e?.onDeviceCode?.(o.user_code,o.verification_uri),await this.sleep(2e3);try{await ne(o.verification_uri_complete)}catch{}e?.onWaiting?.();let i=await this.pollForToken(o.device_code,o.interval||5);await S(i),z("oauth"),await this.extractAndStoreOrganizations(i.idToken)}async pollForToken(e,t){let i=0;for(;i<60;){i++;try{let r=(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()+(r.expires_in||3600)*1e3;return{accessToken:r.access_token,refreshToken:r.refresh_token,idToken:r.id_token,expiresAt:a}}catch(s){if(y.isAxiosError(s)&&s.response){let r=s.response.data?.error;if(r==="authorization_pending"){await this.sleep(t*1e3);continue}if(r==="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 p();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 p(),!t)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:t.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,s={accessToken:i.access_token,refreshToken:i.refresh_token||t.refreshToken,idToken:i.id_token||t.idToken,expiresAt:Date.now()+(i.expires_in||3600)*1e3};return await S(s),s}catch{throw await _(),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 t=e.idToken.split(".")[1],o=Buffer.from(t,"base64").toString("utf8");return JSON.parse(o)}catch{throw new Error("Failed to decode ID token")}}async extractAndStoreOrganizations(e){if(e)try{let t=e.split(".")[1],o=Buffer.from(t,"base64").toString("utf8"),s=JSON.parse(o)[G];if(!s)return;let r=s?.ns?.map(a=>typeof a=="object"&&a!==null?{id:a.id,name:a.name,displayName:a.name}:{id:a,name:a,displayName:a})||[];if(r.length===0)return;K(r)}catch{}}async getOrganizations(){return await this.getAccessToken(),b()}async logout(){await _()}async isAuthenticated(){return await p()!==null}sleep(e){return new Promise(t=>setTimeout(t,e))}},I=null;function k(){return I||(I=new E),I}var $e=C(),Ue=h();async function F(){return L()}import{getAccessKey as le}from"@tigrisdata/iam";import{readFileSync as te,existsSync as oe}from"fs";import{join as $,dirname as ie}from"path";import{fileURLToPath as se}from"url";import*as U from"yaml";var re=se(import.meta.url),ae=ie(re),v=null;function ce(){let n=ae;for(let e=0;e<5;e++){let t=$(n,"specs.yaml");if(oe(t))return t;n=$(n,"..")}throw new Error("Could not find specs.yaml")}function de(){if(!v){let n=ce(),e=te(n,"utf8");v=U.parse(e)}return v}function j(n,e){let o=de().commands.find(i=>i.name===n);return o?e&&o.operations?o.operations.find(i=>i.name===e)||null:o:null}var W={success:"\u2714",failure:"\u2716",hint:"\u2192"};function Y(){return process.stdout.isTTY===!0}function x(n){let e=j(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,(o,i)=>{let s=e[i];return s!==void 0?String(s):`{{${i}}}`})),t}function V(n,e){if(!Y())return;let t=x(n);t?.onStart&&console.log(O(t.onStart,e))}function q(n,e){if(!Y())return;let t=x(n);t?.onSuccess&&console.log(`${W.success} ${O(t.onSuccess,e)}`)}function f(n,e,t){let o=x(n);o?.onFailure&&console.error(`${W.failure} ${O(o.onFailure,t)}`),e&&console.error(` ${e}`)}function H(n,e){return{command:n,operation:e}}var l=H("access-keys","get");async function ge(n){V(l);let e=M(n,["id"]);e||(f(l,"Access key ID is required"),process.exit(1)),await F()!=="oauth"&&(f(l,`Access keys can only be retrieved when logged in via OAuth.
3
- Run "tigris login oauth" first.`),process.exit(1));let o=k();await o.isAuthenticated()||(f(l,'Not authenticated. Run "tigris login oauth" first.'),process.exit(1));let s=await o.getAccessToken(),r=w(),a=C(),{data:c,error:P}=await le(e,{config:{sessionToken:s,organizationId:r??void 0,iamEndpoint:a.iamEndpoint}});if(P&&(f(l,P.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 N of c.roles)console.log(` - ${N.bucket}: ${N.role}`)}else console.log(" Roles: None");q(l)}export{ge as default};
1
+ import{a as f,b as u,c as t,g as m}from"../../chunk-A3TXP5Y2.js";import"../../chunk-4LGKN5DA.js";import{a as c}from"../../chunk-JRALYIRA.js";import{a as d}from"../../chunk-ESJWTUFN.js";import{b as l}from"../../chunk-QZXBLNMQ.js";import{c as g}from"../../chunk-6U4U4JM6.js";import{g as a}from"../../chunk-JVB3Y42V.js";import"../../chunk-D63SZLT5.js";import{getAccessKey as $}from"@tigrisdata/iam";var e=m("access-keys","get");async function w(p){f(e);let i=c(p,["id"]);i||(t(e,"Access key ID is required"),process.exit(1)),await d()!=="oauth"&&(t(e,`Access keys can only be retrieved when logged in via OAuth.
2
+ Run "tigris login oauth" first.`),process.exit(1));let n=l();await n.isAuthenticated()||(t(e,'Not authenticated. Run "tigris login oauth" first.'),process.exit(1));let h=await n.getAccessToken(),A=a(),k=g(),{data:o,error:s}=await $(i,{config:{sessionToken:h,organizationId:A??void 0,iamEndpoint:k.iamEndpoint}});if(s&&(t(e,s.message),process.exit(1)),console.log(` Name: ${o.name}`),console.log(` ID: ${o.id}`),console.log(` Status: ${o.status}`),console.log(` Created: ${o.createdAt}`),console.log(` Organization: ${o.organizationId}`),o.roles&&o.roles.length>0){console.log(" Roles:");for(let r of o.roles)console.log(` - ${r.bucket}: ${r.role}`)}else console.log(" Roles: None");u(e)}export{w as default};
@@ -1,8 +1,2 @@
1
- function ee(n){return JSON.stringify(n,null,2)}function ne(n,e=" "){return Object.entries(n).map(([t,i])=>`${e}<${t}>${i}</${t}>`).join(`
2
- `)}function te(n,e,t){let i=[`<${e}>`];return n.forEach(o=>{i.push(` <${t}>`),i.push(ne(o," ")),i.push(` </${t}>`)}),i.push(`</${e}>`),i.join(`
3
- `)}function b(n){if(n==null)return"";if(n instanceof Date)return K(n);if(typeof n=="string"){let e=new Date(n);if(!isNaN(e.getTime())&&n.includes("T"))return K(e)}return String(n)}function K(n){return new Intl.DateTimeFormat(void 0,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}).format(n)}function ie(n,e){return e.map(t=>{if(t.width)return t.width;let i=t.header.length,o=n.reduce((r,s)=>{let a=b(s[t.key]);return Math.max(r,a.length)},0);return Math.max(i,o)})}function oe(n,e){let t=[],i=ie(n,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";t.push(`
4
- `+o);let a="\u2502 "+e.map((c,u)=>c.header.padEnd(i[u])).join(" \u2502 ")+" \u2502";return t.push(a),t.push(r),n.forEach(c=>{let u=e.map((g,D)=>{let R=b(c[g.key]);return g.align==="right"?R.padStart(i[D]):R.padEnd(i[D])});t.push("\u2502 "+u.join(" \u2502 ")+" \u2502")}),t.push(s+`
5
- `),t.join(`
6
- `)}function z(n,e,t,i,o){switch(e){case"json":return ee(n);case"xml":return te(n,t,i);default:return oe(n,o)}}import{S3Client as We}from"@aws-sdk/client-s3";import{fromIni as Ye}from"@aws-sdk/credential-providers";import{homedir as re}from"os";import{join as L}from"path";import{readFileSync as se,writeFileSync as ae,existsSync as F,mkdirSync as ce}from"fs";import{loadSharedConfigFiles as ve}from"@smithy/shared-ini-file-loader";import{chmod as de}from"fs/promises";var p="https://t3.storage.dev",_="https://iam.storageapi.dev";var I=L(re(),".tigris"),m=L(I,"config.json");function ge(){F(I)||ce(I,{recursive:!0,mode:448})}function d(){if(F(m))try{let n=se(m,"utf8");return JSON.parse(n)}catch{return{}}return{}}async function h(n){ge(),ae(m,JSON.stringify(n,null,2),{mode:384});try{await de(m,384)}catch{}}async function E(n){let e=d();e.tokens=n,await h(e)}async function f(){return d().tokens||null}async function k(){let n=d();delete n.tokens,await h(n)}async function G(n){let e=d();e.organizations=n,await h(e)}function j(){return d().organizations||[]}function x(){return d().selectedOrganization||null}async function $(n){let e=d();e.loginMethod=n,await h(e)}function U(){return d().loginMethod||null}import C from"axios";import le from"open";function y(){let n=process.env.TIGRIS_ENV==="development",e=process.env.AUTH0_DOMAIN||n?"auth-dev.tigris.dev":"auth.tigris.dev",t=process.env.AUTH0_CLIENT_ID||n?"JdJVYIyw0O1uHi5L5OJH903qaWBgd3gF":"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",i=process.env.AUTH0_AUDIENCE||n?"https://tigris-api-dev":"https://tigris-os-api";return{domain:e,clientId:t,audience:i}}var W=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function T(){return process.env.TIGRIS_STORAGE_ENDPOINT||process.env.TIGRIS_IAM_ENDPOINT?{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||p,iamEndpoint:process.env.TIGRIS_IAM_ENDPOINT||_}:{endpoint:process.env.AWS_ENDPOINT_URL_S3||p,iamEndpoint:process.env.AWS_ENDPOINT_URL_IAM||_}}var O=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 le(i.verification_uri_complete)}catch{}e?.onWaiting?.();let o=await this.pollForToken(i.device_code,i.interval||5);await E(o),$("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 f();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 f(),!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 E(r),r}catch{throw await k(),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 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)[W];if(!r)return;let s=r?.ns?.map(a=>typeof a=="object"&&a!==null?{id:a.id,name:a.name,displayName:a.name}:{id:a,name:a,displayName:a})||[];if(s.length===0)return;G(s)}catch{}}async getOrganizations(){return await this.getAccessToken(),j()}async logout(){await k()}async isAuthenticated(){return await f()!==null}sleep(e){return new Promise(t=>setTimeout(t,e))}},v=null;function P(){return v||(v=new O),v}var Xe=T(),Qe=y();async function V(){return U()}import{listAccessKeys as Ae}from"@tigrisdata/iam";import{readFileSync as ue,existsSync as pe}from"fs";import{join as Y,dirname as fe}from"path";import{fileURLToPath as me}from"url";import*as J from"yaml";var he=me(import.meta.url),ye=fe(he),N=null;function Te(){let n=ye;for(let e=0;e<5;e++){let t=Y(n,"specs.yaml");if(pe(t))return t;n=Y(n,"..")}throw new Error("Could not find specs.yaml")}function Ce(){if(!N){let n=Te(),e=ue(n,"utf8");N=J.parse(e)}return N}function H(n,e){let i=Ce().commands.find(o=>o.name===n);return i?e&&i.operations?i.operations.find(o=>o.name===e)||null:i:null}var q={success:"\u2714",failure:"\u2716",hint:"\u2192"};function M(){return process.stdout.isTTY===!0}function A(n){let e=H(n.command,n.operation);if(e)return e.messages}function S(n,e){let t=n;return t=t.replace(/\\n/g,`
7
- `),e&&(t=t.replace(/\{\{(\w+)\}\}/g,(i,o)=>{let r=e[o];return r!==void 0?String(r):`{{${o}}}`})),t}function B(n,e){if(!M())return;let t=A(n);t?.onStart&&console.log(S(t.onStart,e))}function X(n,e){if(!M())return;let t=A(n);t?.onSuccess&&console.log(`${q.success} ${S(t.onSuccess,e)}`)}function w(n,e,t){let i=A(n);i?.onFailure&&console.error(`${q.failure} ${S(i.onFailure,t)}`),e&&console.error(` ${e}`)}function Q(n,e){if(!M())return;let t=A(n);t?.onEmpty&&console.log(S(t.onEmpty,e))}function Z(n,e){return{command:n,operation:e}}var l=Z("access-keys","list");async function Se(){B(l),await V()!=="oauth"&&(w(l,`Access keys can only be listed when logged in via OAuth.
8
- Run "tigris login oauth" first.`),process.exit(1));let e=P();await e.isAuthenticated()||(w(l,'Not authenticated. Run "tigris login oauth" first.'),process.exit(1));let i=await e.getAccessToken(),o=x(),r=T(),{data:s,error:a}=await Ae({config:{sessionToken:i,organizationId:o??void 0,iamEndpoint:r.iamEndpoint}});if(a&&(w(l,a.message),process.exit(1)),!s.accessKeys||s.accessKeys.length===0){Q(l);return}let c=s.accessKeys.map(g=>({name:g.name,id:g.id,status:g.status,created:g.createdAt})),u=z(c,"table","keys","key",[{key:"name",header:"Name"},{key:"id",header:"ID"},{key:"status",header:"Status"},{key:"created",header:"Created"}]);console.log(u),X(l,{count:c.length})}export{Se as default};
1
+ import{a as m,b as l,c as s,d as p,g as f}from"../../chunk-A3TXP5Y2.js";import"../../chunk-4LGKN5DA.js";import{f as u}from"../../chunk-HGIJOGCZ.js";import{a as g}from"../../chunk-ESJWTUFN.js";import{b as d}from"../../chunk-QZXBLNMQ.js";import{c as r}from"../../chunk-6U4U4JM6.js";import{g as c}from"../../chunk-JVB3Y42V.js";import"../../chunk-D63SZLT5.js";import{listAccessKeys as w}from"@tigrisdata/iam";var t=f("access-keys","list");async function x(){m(t),await g()!=="oauth"&&(s(t,`Access keys can only be listed when logged in via OAuth.
2
+ Run "tigris login oauth" first.`),process.exit(1));let o=d();await o.isAuthenticated()||(s(t,'Not authenticated. Run "tigris login oauth" first.'),process.exit(1));let h=await o.getAccessToken(),y=c(),k=r(),{data:i,error:n}=await w({config:{sessionToken:h,organizationId:y??void 0,iamEndpoint:k.iamEndpoint}});if(n&&(s(t,n.message),process.exit(1)),!i.accessKeys||i.accessKeys.length===0){p(t);return}let a=i.accessKeys.map(e=>({name:e.name,id:e.id,status:e.status,created:e.createdAt})),A=u(a,"table","keys","key",[{key:"name",header:"Name"},{key:"id",header:"ID"},{key:"status",header:"Status"},{key:"created",header:"Created"}]);console.log(A),l(t,{count:a.length})}export{x as default};