@tigrisdata/cli 2.9.0 → 2.10.1

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 (73) hide show
  1. package/README.md +240 -1
  2. package/dist/auth/client.js +1 -1
  3. package/dist/auth/config.js +1 -1
  4. package/dist/auth/fly.js +1 -0
  5. package/dist/auth/s3-client.js +1 -1
  6. package/dist/auth/storage.js +1 -1
  7. package/dist/chunk-2XAO2OYD.js +1 -0
  8. package/dist/{chunk-CVQCUDQS.js → chunk-3R67NH6M.js} +1 -1
  9. package/dist/{chunk-UUITLEOI.js → chunk-DOUR5YEY.js} +1 -1
  10. package/dist/chunk-E4MLGABW.js +1 -0
  11. package/dist/{chunk-45XYUGOE.js → chunk-F2VBJEK7.js} +1 -1
  12. package/dist/chunk-GZ7JBHFT.js +1 -0
  13. package/dist/chunk-KH63ANUX.js +1 -0
  14. package/dist/chunk-RL37R6IA.js +8 -0
  15. package/dist/chunk-TNOMT3EP.js +4 -0
  16. package/dist/{chunk-N3NPQW3I.js → chunk-USCKVLDO.js} +1 -1
  17. package/dist/cli.js +1 -1
  18. package/dist/constants.js +1 -1
  19. package/dist/index.js +1 -1
  20. package/dist/lib/access-keys/assign.js +1 -1
  21. package/dist/lib/access-keys/create.js +1 -1
  22. package/dist/lib/access-keys/delete.js +1 -1
  23. package/dist/lib/access-keys/get.js +1 -1
  24. package/dist/lib/access-keys/list.js +1 -1
  25. package/dist/lib/buckets/create.js +1 -1
  26. package/dist/lib/buckets/delete.js +1 -1
  27. package/dist/lib/buckets/get.js +1 -1
  28. package/dist/lib/buckets/list.js +1 -1
  29. package/dist/lib/buckets/set.js +1 -1
  30. package/dist/lib/configure/index.js +1 -1
  31. package/dist/lib/cp.js +1 -1
  32. package/dist/lib/credentials/test.js +1 -1
  33. package/dist/lib/forks/create.js +1 -1
  34. package/dist/lib/forks/list.js +1 -1
  35. package/dist/lib/iam/policies/create.js +1 -1
  36. package/dist/lib/iam/policies/delete.js +1 -1
  37. package/dist/lib/iam/policies/edit.js +1 -1
  38. package/dist/lib/iam/policies/get.js +1 -1
  39. package/dist/lib/iam/policies/list.js +1 -1
  40. package/dist/lib/iam/users/invite.js +5 -0
  41. package/dist/lib/iam/users/list.js +9 -0
  42. package/dist/lib/iam/users/remove.js +5 -0
  43. package/dist/lib/iam/users/revoke-invitation.js +5 -0
  44. package/dist/lib/iam/users/update-role.js +5 -0
  45. package/dist/lib/login/credentials.js +1 -1
  46. package/dist/lib/login/oauth.js +1 -1
  47. package/dist/lib/login/select.js +1 -1
  48. package/dist/lib/logout.js +1 -1
  49. package/dist/lib/ls.js +1 -1
  50. package/dist/lib/mk.js +1 -1
  51. package/dist/lib/mv.js +1 -1
  52. package/dist/lib/objects/delete.js +1 -1
  53. package/dist/lib/objects/get.js +1 -1
  54. package/dist/lib/objects/list.js +1 -1
  55. package/dist/lib/objects/put.js +1 -1
  56. package/dist/lib/objects/set.js +1 -1
  57. package/dist/lib/organizations/create.js +5 -2
  58. package/dist/lib/organizations/list.js +2 -2
  59. package/dist/lib/organizations/select.js +1 -1
  60. package/dist/lib/rm.js +1 -1
  61. package/dist/lib/snapshots/list.js +1 -1
  62. package/dist/lib/snapshots/take.js +1 -1
  63. package/dist/lib/stat.js +1 -1
  64. package/dist/lib/touch.js +1 -1
  65. package/dist/lib/whoami.js +1 -1
  66. package/dist/specs.yaml +147 -2
  67. package/dist/utils/update-check.js +1 -1
  68. package/package.json +24 -24
  69. package/dist/chunk-7F4WI32C.js +0 -1
  70. package/dist/chunk-BP52O7NB.js +0 -1
  71. package/dist/chunk-NJKXT74Y.js +0 -1
  72. package/dist/chunk-WU7FCMUU.js +0 -4
  73. package/dist/chunk-ZUDPATIH.js +0 -8
package/README.md CHANGED
@@ -24,6 +24,7 @@ Run `tigris help` to see all available commands, or `tigris <command> help` for
24
24
  - `tigris cp <src> <dest>` - Copy files between local filesystem and Tigris, or between paths within Tigris. At least one side must be a remote t3:// path
25
25
  - `tigris mv <src> <dest>` - Move (rename) objects within Tigris. Both source and destination must be remote t3:// paths
26
26
  - `tigris rm <path>` - Remove a bucket, folder, or object from Tigris. A bare bucket name deletes the bucket itself
27
+ - `tigris stat [path]` - Show storage stats (no args), bucket info, or object metadata
27
28
 
28
29
  ### Authentication
29
30
 
@@ -41,6 +42,7 @@ Run `tigris help` to see all available commands, or `tigris <command> help` for
41
42
  - `tigris forks` - List and create forks. A fork is a writable copy-on-write clone of a bucket, useful for testing or branching data
42
43
  - `tigris snapshots` - List and take snapshots. A snapshot is a point-in-time, read-only copy of a bucket's state
43
44
  - `tigris objects` - Low-level object operations for listing, downloading, uploading, and deleting individual objects in a bucket
45
+ - `tigris iam` - Identity and Access Management - manage policies, users, and permissions
44
46
 
45
47
  ---
46
48
 
@@ -67,12 +69,22 @@ tigris ls t3://my-bucket/prefix/
67
69
  Create a bucket (bare name) or a folder inside a bucket (bucket/folder/ with trailing slash)
68
70
 
69
71
  ```
70
- tigris mk <path>
72
+ tigris mk <path> [flags]
71
73
  ```
72
74
 
75
+ | Flag | Description |
76
+ |------|-------------|
77
+ | `-a, --access` | Access level (only applies when creating a bucket) |
78
+ | `--public` | Shorthand for --access public (only applies when creating a bucket) |
79
+ | `-s, --enable-snapshots` | Enable snapshots for the bucket (only applies when creating a bucket) |
80
+ | `-t, --default-tier` | Default storage tier (only applies when creating a bucket) |
81
+ | `-c, --consistency` | Consistency level (only applies when creating a bucket) |
82
+ | `-r, --region` | Region (only applies when creating a bucket) |
83
+
73
84
  **Examples:**
74
85
  ```bash
75
86
  tigris mk my-bucket
87
+ tigris mk my-bucket --access public --region iad
76
88
  tigris mk my-bucket/images/
77
89
  tigris mk t3://my-bucket
78
90
  ```
@@ -152,6 +164,25 @@ tigris rm t3://my-bucket -f
152
164
  tigris rm "t3://my-bucket/logs/*.tmp" -f
153
165
  ```
154
166
 
167
+ ### `stat`
168
+
169
+ Show storage stats (no args), bucket info, or object metadata
170
+
171
+ ```
172
+ tigris stat [path] [flags]
173
+ ```
174
+
175
+ | Flag | Description |
176
+ |------|-------------|
177
+ | `-f, --format` | Output format |
178
+
179
+ **Examples:**
180
+ ```bash
181
+ tigris stat
182
+ tigris stat t3://my-bucket
183
+ tigris stat t3://my-bucket/my-object.json
184
+ ```
185
+
155
186
  ## Authentication
156
187
 
157
188
  ### `login` | `l`
@@ -437,6 +468,7 @@ tigris buckets create [name] [flags]
437
468
  | Flag | Description |
438
469
  |------|-------------|
439
470
  | `-a, --access` | Access level (default: private) |
471
+ | `--public` | Shorthand for --access public |
440
472
  | `-s, --enable-snapshots` | Enable snapshots for the bucket (default: false) |
441
473
  | `-t, --default-tier` | Choose the default tier for the bucket (default: STANDARD) |
442
474
  | `-c, --consistency` | Choose the consistency level for the bucket (default: default) |
@@ -583,6 +615,7 @@ Low-level object operations for listing, downloading, uploading, and deleting in
583
615
  | `objects get` (g) | Download an object by key. Prints to stdout by default, or saves to a file with --output |
584
616
  | `objects put` (p) | Upload a local file as an object. Content-type is auto-detected from extension unless overridden |
585
617
  | `objects delete` (d) | Delete one or more objects by key from the given bucket |
618
+ | `objects set` (s) | Update settings on an existing object such as access level |
586
619
 
587
620
  #### `objects list`
588
621
 
@@ -649,6 +682,212 @@ tigris objects delete my-bucket old-file.txt
649
682
  tigris objects delete my-bucket file-a.txt,file-b.txt
650
683
  ```
651
684
 
685
+ #### `objects set`
686
+
687
+ ```
688
+ tigris objects set <bucket> <key> [flags]
689
+ ```
690
+
691
+ | Flag | Description |
692
+ |------|-------------|
693
+ | `-a, --access` | Access level |
694
+ | `-n, --new-key` | Rename the object to a new key |
695
+
696
+ **Examples:**
697
+ ```bash
698
+ tigris objects set my-bucket my-file.txt --access public
699
+ tigris objects set my-bucket my-file.txt --access private
700
+ ```
701
+
702
+ ### `iam`
703
+
704
+ Identity and Access Management - manage policies, users, and permissions
705
+
706
+ | Command | Description |
707
+ |---------|-------------|
708
+ | `iam policies` (p) | Manage IAM policies. Policies define permissions for access keys |
709
+ | `iam users` (u) | Manage organization users and invitations |
710
+
711
+ #### `iam policies` | `p`
712
+
713
+ Manage IAM policies. Policies define permissions for access keys
714
+
715
+ | Command | Description |
716
+ |---------|-------------|
717
+ | `iam policies list` (l) | List all policies in the current organization |
718
+ | `iam policies get` (g) | Show details for a policy including its document and attached users. If no ARN provided, shows interactive selection |
719
+ | `iam policies create` (c) | Create a new policy with the given name and policy document. Document can be provided via file, inline JSON, or stdin |
720
+ | `iam policies edit` (e) | Update an existing policy's document. Document can be provided via file, inline JSON, or stdin. If no ARN provided, shows interactive selection |
721
+ | `iam policies delete` (d) | Delete a policy. If no ARN provided, shows interactive selection |
722
+
723
+ ##### `iam policies list`
724
+
725
+ ```
726
+ tigris iam policies list [flags]
727
+ ```
728
+
729
+ | Flag | Description |
730
+ |------|-------------|
731
+ | `-f, --format` | Output format (default: table) |
732
+
733
+ **Examples:**
734
+ ```bash
735
+ tigris iam policies list
736
+ ```
737
+
738
+ ##### `iam policies get`
739
+
740
+ ```
741
+ tigris iam policies get [resource] [flags]
742
+ ```
743
+
744
+ | Flag | Description |
745
+ |------|-------------|
746
+ | `-f, --format` | Output format (default: table) |
747
+
748
+ **Examples:**
749
+ ```bash
750
+ tigris iam policies get
751
+ tigris iam policies get arn:aws:iam::org_id:policy/my-policy
752
+ ```
753
+
754
+ ##### `iam policies create`
755
+
756
+ ```
757
+ tigris iam policies create <name> [flags]
758
+ ```
759
+
760
+ | Flag | Description |
761
+ |------|-------------|
762
+ | `-d, --document` | Policy document (JSON file path or inline JSON). If omitted, reads from stdin |
763
+ | `--description` | Policy description |
764
+
765
+ **Examples:**
766
+ ```bash
767
+ tigris iam policies create my-policy --document policy.json
768
+ tigris iam policies create my-policy --document '{"Version":"2012-10-17","Statement":[...]}'
769
+ cat policy.json | tigris iam policies create my-policy
770
+ ```
771
+
772
+ ##### `iam policies edit`
773
+
774
+ ```
775
+ tigris iam policies edit [resource] [flags]
776
+ ```
777
+
778
+ | Flag | Description |
779
+ |------|-------------|
780
+ | `-d, --document` | New policy document (JSON file path or inline JSON). If omitted, reads from stdin |
781
+ | `--description` | Update policy description |
782
+
783
+ **Examples:**
784
+ ```bash
785
+ tigris iam policies edit --document policy.json
786
+ tigris iam policies edit arn:aws:iam::org_id:policy/my-policy --document policy.json
787
+ cat policy.json | tigris iam policies edit arn:aws:iam::org_id:policy/my-policy
788
+ ```
789
+
790
+ ##### `iam policies delete`
791
+
792
+ ```
793
+ tigris iam policies delete [resource]
794
+ ```
795
+
796
+ **Examples:**
797
+ ```bash
798
+ tigris iam policies delete
799
+ tigris iam policies delete arn:aws:iam::org_id:policy/my-policy
800
+ ```
801
+
802
+ #### `iam users` | `u`
803
+
804
+ Manage organization users and invitations
805
+
806
+ | Command | Description |
807
+ |---------|-------------|
808
+ | `iam users list` (l) | List all users and pending invitations in the organization |
809
+ | `iam users invite` (i) | Invite users to the organization by email |
810
+ | `iam users revoke-invitation` (ri) | Revoke pending invitations. If no invitation ID provided, shows interactive selection |
811
+ | `iam users update-role` (ur) | Update user roles in the organization. If no user ID provided, shows interactive selection |
812
+ | `iam users remove` (rm) | Remove users from the organization. If no user ID provided, shows interactive selection |
813
+
814
+ ##### `iam users list`
815
+
816
+ ```
817
+ tigris iam users list [flags]
818
+ ```
819
+
820
+ | Flag | Description |
821
+ |------|-------------|
822
+ | `-f, --format` | Output format (default: table) |
823
+
824
+ **Examples:**
825
+ ```bash
826
+ tigris iam users list
827
+ tigris iam users list --format json
828
+ ```
829
+
830
+ ##### `iam users invite`
831
+
832
+ ```
833
+ tigris iam users invite <email> [flags]
834
+ ```
835
+
836
+ | Flag | Description |
837
+ |------|-------------|
838
+ | `-r, --role` | Role to assign to the invited user(s) (default: member) |
839
+
840
+ **Examples:**
841
+ ```bash
842
+ tigris iam users invite user@example.com
843
+ tigris iam users invite user@example.com --role admin
844
+ tigris iam users invite user1@example.com,user2@example.com
845
+ ```
846
+
847
+ ##### `iam users revoke-invitation`
848
+
849
+ ```
850
+ tigris iam users revoke-invitation [resource]
851
+ ```
852
+
853
+ **Examples:**
854
+ ```bash
855
+ tigris iam users revoke-invitation
856
+ tigris iam users revoke-invitation invitation_id
857
+ tigris iam users revoke-invitation id1,id2,id3
858
+ ```
859
+
860
+ ##### `iam users update-role`
861
+
862
+ ```
863
+ tigris iam users update-role [resource] [flags]
864
+ ```
865
+
866
+ | Flag | Description |
867
+ |------|-------------|
868
+ | `-r, --role` | Role(s) to assign (comma-separated). Each role pairs with the corresponding user ID. If one role is given, it applies to all users |
869
+
870
+ **Examples:**
871
+ ```bash
872
+ tigris iam users update-role --role admin
873
+ tigris iam users update-role user_id --role member
874
+ tigris iam users update-role id1,id2 --role admin
875
+ tigris iam users update-role id1,id2 --role admin,member
876
+ ```
877
+
878
+ ##### `iam users remove`
879
+
880
+ ```
881
+ tigris iam users remove [resource]
882
+ ```
883
+
884
+ **Examples:**
885
+ ```bash
886
+ tigris iam users remove
887
+ tigris iam users remove user@example.com
888
+ tigris iam users remove user@example.com,user@example.net
889
+ ```
890
+
652
891
  ## License
653
892
 
654
893
  MIT
@@ -1 +1 @@
1
- import{a,b}from"../chunk-NJKXT74Y.js";import"../chunk-UUITLEOI.js";import"../chunk-7F4WI32C.js";import"../chunk-BP52O7NB.js";export{a as TigrisAuthClient,b as getAuthClient};
1
+ import{a,b}from"../chunk-E4MLGABW.js";import"../chunk-DOUR5YEY.js";import"../chunk-KH63ANUX.js";import"../chunk-2XAO2OYD.js";export{a as TigrisAuthClient,b as getAuthClient};
@@ -1 +1 @@
1
- import{a,b,c}from"../chunk-7F4WI32C.js";import"../chunk-BP52O7NB.js";export{b as TIGRIS_CLAIMS_NAMESPACE,a as getAuth0Config,c as getTigrisConfig};
1
+ import{a,b,c}from"../chunk-KH63ANUX.js";import"../chunk-2XAO2OYD.js";export{b as TIGRIS_CLAIMS_NAMESPACE,a as getAuth0Config,c as getTigrisConfig};
@@ -0,0 +1 @@
1
+ import{a,b}from"../chunk-GZ7JBHFT.js";import"../chunk-KH63ANUX.js";import"../chunk-2XAO2OYD.js";export{b as fetchOrganizationsFromUserInfo,a as isFlyUser};
@@ -1 +1 @@
1
- import{a,b,c,d}from"../chunk-N3NPQW3I.js";import"../chunk-NJKXT74Y.js";import"../chunk-UUITLEOI.js";import"../chunk-7F4WI32C.js";import"../chunk-BP52O7NB.js";export{a as getLoginMethod,c as getS3Client,b as getStorageConfig,d as isAuthenticated};
1
+ import{a,b,c,d}from"../chunk-USCKVLDO.js";import"../chunk-E4MLGABW.js";import"../chunk-DOUR5YEY.js";import"../chunk-KH63ANUX.js";import"../chunk-2XAO2OYD.js";export{a as getLoginMethod,c as getS3Client,b as getStorageConfig,d as isAuthenticated};
@@ -1 +1 @@
1
- import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t}from"../chunk-UUITLEOI.js";import"../chunk-BP52O7NB.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};
1
+ import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t}from"../chunk-DOUR5YEY.js";import"../chunk-2XAO2OYD.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
+ var t="https://t3.storage.dev",s="https://iam.storageapi.dev",o="https://mgmt.storageapi.dev",e="https://registry.npmjs.org/@tigrisdata/cli/latest",T=864e5,_=216e5;export{t as a,s as b,o as c,e as d,T as e,_ as f};
@@ -1 +1 @@
1
- import{a as s,c as l}from"./chunk-ZUDPATIH.js";import{b as m}from"./chunk-BETAO4PB.js";import{a as t,k as i}from"./chunk-4V35SYMM.js";import{existsSync as c}from"fs";import{join as a,dirname as u}from"path";import{fileURLToPath as f}from"url";t();var j=f(import.meta.url),d=u(j),h=m(),y=o=>{if(o.length===0)return!1;let e=a(d,"lib",...o)+".js";if(c(e))return!0;let r=a(d,"lib",...o,"index.js");return!!c(r)},b=async o=>{let e=[`./lib/${o.join("/")}.js`,`./lib/${o.join("/")}/index.js`];for(let p of e){let n=await import(p).catch(()=>null);if(n)return{module:n,error:null}}return{module:null,error:`Command not found: ${o.join(" ")}`}},x=i({specs:h,version:s,loadModule:b,hasImplementation:y});x.parse();l();
1
+ import{a as s,c as l}from"./chunk-RL37R6IA.js";import{b as m}from"./chunk-BETAO4PB.js";import{a as t,k as i}from"./chunk-4V35SYMM.js";import{existsSync as c}from"fs";import{join as a,dirname as u}from"path";import{fileURLToPath as f}from"url";t();var j=f(import.meta.url),d=u(j),h=m(),y=o=>{if(o.length===0)return!1;let e=a(d,"lib",...o)+".js";if(c(e))return!0;let r=a(d,"lib",...o,"index.js");return!!c(r)},b=async o=>{let e=[`./lib/${o.join("/")}.js`,`./lib/${o.join("/")}/index.js`];for(let p of e){let n=await import(p).catch(()=>null);if(n)return{module:n,error:null}}return{module:null,error:`Command not found: ${o.join(" ")}`}},x=i({specs:h,version:s,loadModule:b,hasImplementation:y});x.parse();l();
@@ -1 +1 @@
1
- import{a as l}from"./chunk-BP52O7NB.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};
1
+ import{a as l}from"./chunk-2XAO2OYD.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{a as c,b as s,c as l,d as h,e as g,r as k}from"./chunk-DOUR5YEY.js";import{a as p,b as u}from"./chunk-KH63ANUX.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=p(),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:i}=await y(e,this.getJWKS(),{issuer:`${this.baseUrl}/`,audience:this.config.clientId});return i}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),k("oauth"),await this.extractAndStoreOrganizations(n.idToken)}async pollForToken(e,i){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(t){if(a.isAxiosError(t)&&t.response){let r=t.response.data?.error;if(r==="authorization_pending"){await this.sleep(i*1e3);continue}if(r==="slow_down"){i+=5,await this.sleep(i*1e3);continue}throw new Error(t.response.data?.error_description||"Authentication failed",{cause:t})}throw t}}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 i=300*1e3;return Date.now()+i>=e.expiresAt&&(e=await this.refreshAccessToken(e)),e.accessToken}async refreshAccessToken(e){let i;if(e?.refreshToken?i=e:i=await s(),!i)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:i.refreshToken,scope:"openid profile email offline_access"},{headers:{"Content-Type":"application/x-www-form-urlencoded"}})).data,t={accessToken:n.access_token,refreshToken:n.refresh_token||i.refreshToken,idToken:n.id_token||i.idToken,expiresAt:Date.now()+(n.expires_in||3600)*1e3};return await c(t),t}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))[u];if(!o)return;let n=o?.ns?.map(t=>typeof t=="object"&&t!==null?{id:t.id,name:t.name,displayName:t.name}:{id:t,name:t,displayName:t})||[];if(n.length===0)return;h(n)}catch{}}async getOrganizations(){return await this.getAccessToken(),g()}async logout(){await l()}async isAuthenticated(){return await s()!==null}sleep(e){return new Promise(i=>setTimeout(i,e))}},d=null;function S(){return d||(d=new f),d}export{f as a,S as b};
@@ -1 +1 @@
1
- import{a as u,b as o,c as m,g}from"./chunk-SYGTCM6P.js";import{m as i,o as d,r as y}from"./chunk-UUITLEOI.js";import{a as n}from"./chunk-BP52O7NB.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};
1
+ import{a as u,b as o,c as m,g}from"./chunk-SYGTCM6P.js";import{m as i,o as d,r as y}from"./chunk-DOUR5YEY.js";import{a as n}from"./chunk-2XAO2OYD.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 @@
1
+ import{a as o,b as e}from"./chunk-KH63ANUX.js";import a from"axios";function p(n){return!!n?.startsWith("flyio_")}async function u(n){try{let{domain:i}=o(),t=(await a.get(`https://${i}/userinfo`,{headers:{Authorization:`Bearer ${n}`}})).data[e]?.ns;return Array.isArray(t)?t.map(r=>({id:r.id,name:r.name,displayName:r.name})):null}catch{return null}}export{p as a,u as b};
@@ -0,0 +1 @@
1
+ import{a as e,b as i,c as t}from"./chunk-2XAO2OYD.js";function T(){let n=process.env.TIGRIS_ENV==="development",s=n?"auth-dev.tigris.dev":process.env.AUTH0_DOMAIN??"auth.tigris.dev",o=n?"JdJVYIyw0O1uHi5L5OJH903qaWBgd3gF":process.env.AUTH0_CLIENT_ID??"DMejqeM3CQ4IqTjEcd3oA9eEiT40hn8D",r=n?"https://tigris-api-dev":process.env.AUTH0_AUDIENCE??"https://tigris-os-api";return{domain:s,clientId:o,audience:r}}var p=process.env.TIGRIS_CLAIMS_NAMESPACE||"https://tigris";function _(){return process.env.TIGRIS_STORAGE_ENDPOINT||process.env.TIGRIS_IAM_ENDPOINT?{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||e,iamEndpoint:process.env.TIGRIS_IAM_ENDPOINT||i,mgmtEndpoint:process.env.TIGRIS_MGMT_ENDPOINT||t}:{endpoint:process.env.AWS_ENDPOINT_URL_S3||e,iamEndpoint:process.env.AWS_ENDPOINT_URL_IAM||i,mgmtEndpoint:process.env.AWS_ENDPOINT_URL_MGMT||t}}export{T as a,p as b,_ as c};
@@ -0,0 +1,8 @@
1
+ import{d as m,e as d,f}from"./chunk-2XAO2OYD.js";import{readFileSync as T,writeFileSync as I,mkdirSync as N}from"fs";import{join as g}from"path";import{homedir as h}from"os";import k from"https";var u="2.10.1";var b=g(h(),".tigris","update-check.json");function y(){try{let e=T(b,"utf-8"),s=JSON.parse(e);return typeof s.latestVersion=="string"&&typeof s.lastChecked=="number"?s:null}catch{return null}}function v(e){try{N(g(h(),".tigris"),{recursive:!0}),I(b,JSON.stringify(e),"utf-8")}catch{}}function j(e,s){let a=o=>{let r=o.startsWith("v")?o.slice(1):o,c=null,l=r.indexOf("-");l!==-1&&(c=r.slice(l+1),r=r.slice(0,l));let p=r.split(".");if(p.length!==3)return null;let n=p.map(Number);return n.some(isNaN)?null:{major:n[0],minor:n[1],patch:n[2],prerelease:c}},t=a(e),i=a(s);return!t||!i?!1:i.major>t.major?!0:i.major<t.major?!1:i.minor>t.minor?!0:i.minor<t.minor?!1:i.patch>t.patch?!0:i.patch<t.patch?!1:t.prerelease&&!i.prerelease?!0:(!t.prerelease&&i.prerelease,!1)}function x(){try{let e=k.get(m,{timeout:5e3},s=>{let a="";s.on("data",t=>{a+=t}),s.on("end",()=>{try{let t=JSON.parse(a);if(typeof t.version=="string"){let i=y();v({...i,latestVersion:t.version,lastChecked:Date.now()})}}catch{}})});e.on("error",()=>{}),e.on("timeout",()=>{e.destroy()}),e.end(),e.on("socket",s=>{s.unref()})}catch{}}function V(){if(process.env.TIGRIS_NO_UPDATE_CHECK==="1"||!process.stdout.isTTY)return;let e=y(),s=Number(process.env.TIGRIS_UPDATE_NOTIFY_INTERVAL_MS)||216e5;if(e&&j(u,e.latestVersion)&&(!e.lastNotified||Date.now()-e.lastNotified>s)){let t=globalThis.__TIGRIS_BINARY===!0,i=process.platform==="win32",o=`Update available: ${u} \u2192 ${e.latestVersion}`,r;t?i?r="Run `irm https://raw.githubusercontent.com/tigrisdata/cli/main/scripts/install.ps1 | iex`":r="Run `curl -fsSL https://raw.githubusercontent.com/tigrisdata/cli/main/scripts/install.sh | sh`":r="Run `npm install -g @tigrisdata/cli` to upgrade.";let c=Math.max(o.length,r.length)+4,l="\u250C"+"\u2500".repeat(c-2)+"\u2510",p="\u2514"+"\u2500".repeat(c-2)+"\u2518",n=_=>"\u2502 "+_.padEnd(c-4)+" \u2502";console.log(`
2
+ ${l}
3
+ ${n("")}
4
+ ${n(o)}
5
+ ${n(r)}
6
+ ${n("")}
7
+ ${p}
8
+ `),v({...e,lastNotified:Date.now()})}let a=Number(process.env.TIGRIS_UPDATE_CHECK_INTERVAL_MS)||864e5;(!e||Date.now()-e.lastChecked>a)&&x()}export{u as a,j as b,V as c};
@@ -0,0 +1,4 @@
1
+ import{a as s,b as e,c,e as g,f as l,g as u}from"./chunk-SYGTCM6P.js";import{b as a}from"./chunk-E4MLGABW.js";import{f as r}from"./chunk-DOUR5YEY.js";var t=u("login","oauth");async function f(){s(t);try{let i=a();if(await i.isAuthenticated()){g(t);return}await i.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 n=await i.getOrganizations();if(n.length>0){let o=n[0];await r(o.id),e(t,{org:o.displayName||o.name}),n.length>1&&l(t,{count:n.length})}else e(t,{org:"none"})}catch{c(t),process.exit(1)}}var A=f;export{f as a,A as b};
@@ -1,2 +1,2 @@
1
- import{b as f}from"./chunk-NJKXT74Y.js";import{g as u,h as d,i as l,j as p,l as r,s as h}from"./chunk-UUITLEOI.js";import{a as w,c as A}from"./chunk-7F4WI32C.js";import{a as g}from"./chunk-BP52O7NB.js";import{S3Client as a}from"@aws-sdk/client-s3";import{fromIni as I}from"@aws-sdk/credential-providers";var c=A(),S=w(),C=!1;async function T(){if(C||!process.stdin.isTTY)return!1;C=!0,console.log(`Not authenticated. Starting login...
1
+ import{b as f}from"./chunk-E4MLGABW.js";import{g as u,h as d,i as l,j as p,l as r,s as h}from"./chunk-DOUR5YEY.js";import{a as w,c as A}from"./chunk-KH63ANUX.js";import{a as g}from"./chunk-2XAO2OYD.js";import{S3Client as a}from"@aws-sdk/client-s3";import{fromIni as I}from"@aws-sdk/credential-providers";var c=A(),S=w(),C=!1;async function T(){if(C||!process.stdin.isTTY)return!1;C=!0,console.log(`Not authenticated. Starting login...
2
2
  `);let{default:o}=await import("./lib/login/select.js");return await o({}),console.log(),!0}async function y(){return h()}async function k(){if(l()){let e=process.env.AWS_PROFILE||"default",s=await p(e),i=await I({profile:e})();return{accessKeyId:i.accessKeyId,secretAccessKey:i.secretAccessKey,endpoint:s.endpoint||c.endpoint||g,iamEndpoint:s.iamEndpoint||c.iamEndpoint}}let o=await y();if(o==="oauth"){let s=await f().getAccessToken(),i=u();if(!i)throw new Error('No organization selected. Please run "tigris orgs select" first.');return{sessionToken:s,accessKeyId:"",secretAccessKey:"",endpoint:c.endpoint,organizationId:i,iamEndpoint:c.iamEndpoint,authDomain:S.domain}}if(o==="credentials"){let e=r();if(e)return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,endpoint:e.endpoint}}let t=d();if(t)return{accessKeyId:t.accessKeyId,secretAccessKey:t.secretAccessKey,endpoint:t.endpoint};let n=r();if(n)return{accessKeyId:n.accessKeyId,secretAccessKey:n.secretAccessKey,endpoint:n.endpoint};if(await T())return k();throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}async function L(){if(l()){let e=process.env.AWS_PROFILE||"default",s=await p(e);return new a({region:"auto",endpoint:s.endpoint||c.endpoint||g,credentials:I({profile:e})})}let o=await y();if(o==="oauth"){let s=await f().getAccessToken(),i=u();if(!i)throw new Error('No organization selected. Please run "tigris orgs select" first.');let m=new a({region:"auto",endpoint:c.endpoint,credentials:{sessionToken:s,accessKeyId:"",secretAccessKey:""}});return m.middlewareStack.add(E=>async K=>{let P=K.request;return P.headers["x-Tigris-Namespace"]=i,await E(K)},{name:"x-Tigris-Namespace-Middleware",step:"build",override:!0}),m}if(o==="credentials"){let e=r();if(e)return new a({region:"auto",endpoint:e.endpoint,credentials:{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey}})}let t=d();if(t)return new a({region:"auto",endpoint:t.endpoint,credentials:{accessKeyId:t.accessKeyId,secretAccessKey:t.secretAccessKey}});let n=r();if(n)return new a({region:"auto",endpoint:n.endpoint,credentials:{accessKeyId:n.accessKeyId,secretAccessKey:n.secretAccessKey}});if(await T())return L();throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}async function b(){return l()||await y()!==null||d()!==null||r()!==null}export{y as a,k as b,L as c,b as d};
package/dist/cli.js CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import"./chunk-CVQCUDQS.js";import"./chunk-ZUDPATIH.js";import"./chunk-BETAO4PB.js";import"./chunk-4V35SYMM.js";import"./chunk-BP52O7NB.js";
2
+ import"./chunk-3R67NH6M.js";import"./chunk-RL37R6IA.js";import"./chunk-BETAO4PB.js";import"./chunk-4V35SYMM.js";import"./chunk-2XAO2OYD.js";
package/dist/constants.js CHANGED
@@ -1 +1 @@
1
- import{a,b,c,d,e}from"./chunk-BP52O7NB.js";export{b as DEFAULT_IAM_ENDPOINT,a as DEFAULT_STORAGE_ENDPOINT,c as NPM_REGISTRY_URL,d as UPDATE_CHECK_INTERVAL_MS,e as UPDATE_NOTIFY_INTERVAL_MS};
1
+ import{a,b,c,d,e,f}from"./chunk-2XAO2OYD.js";export{b as DEFAULT_IAM_ENDPOINT,c as DEFAULT_MGMT_ENDPOINT,a as DEFAULT_STORAGE_ENDPOINT,d as NPM_REGISTRY_URL,e as UPDATE_CHECK_INTERVAL_MS,f as UPDATE_NOTIFY_INTERVAL_MS};
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import"./chunk-CVQCUDQS.js";import"./chunk-ZUDPATIH.js";import"./chunk-BETAO4PB.js";import"./chunk-4V35SYMM.js";import"./chunk-BP52O7NB.js";
1
+ import"./chunk-3R67NH6M.js";import"./chunk-RL37R6IA.js";import"./chunk-BETAO4PB.js";import"./chunk-4V35SYMM.js";import"./chunk-2XAO2OYD.js";
@@ -1,2 +1,2 @@
1
- import{a as A,b as l,c as t,g as R}from"../../chunk-SYGTCM6P.js";import{a as n}from"../../chunk-JRALYIRA.js";import"../../chunk-BETAO4PB.js";import{a as b}from"../../chunk-N3NPQW3I.js";import{b as k}from"../../chunk-NJKXT74Y.js";import{g as h}from"../../chunk-UUITLEOI.js";import{c as p}from"../../chunk-7F4WI32C.js";import"../../chunk-BP52O7NB.js";import{assignBucketRoles as C,revokeAllBucketRoles as N}from"@tigrisdata/iam";var e=R("access-keys","assign"),x=["Editor","ReadOnly","NamespaceAdmin"];function y(o){return o?Array.isArray(o)?o:[o]:[]}async function E(o){A(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 b()!=="oauth"&&(t(e,`Bucket roles can only be managed when logged in via OAuth.
1
+ import{a as A,b as l,c as t,g as R}from"../../chunk-SYGTCM6P.js";import{a as n}from"../../chunk-JRALYIRA.js";import{a as b}from"../../chunk-USCKVLDO.js";import"../../chunk-BETAO4PB.js";import{b as k}from"../../chunk-E4MLGABW.js";import{g as h}from"../../chunk-DOUR5YEY.js";import{c as p}from"../../chunk-KH63ANUX.js";import"../../chunk-2XAO2OYD.js";import{assignBucketRoles as C,revokeAllBucketRoles as N}from"@tigrisdata/iam";var e=R("access-keys","assign"),x=["Editor","ReadOnly","NamespaceAdmin"];function y(o){return o?Array.isArray(o)?o:[o]:[]}async function E(o){A(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 b()!=="oauth"&&(t(e,`Bucket roles can only be managed when logged in via OAuth.
2
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=h(),w=p(),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,2 +1,2 @@
1
- import{a as g,b as l,c as t,g as m}from"../../chunk-SYGTCM6P.js";import{a as u}from"../../chunk-JRALYIRA.js";import"../../chunk-BETAO4PB.js";import{a as d}from"../../chunk-N3NPQW3I.js";import{b as a}from"../../chunk-NJKXT74Y.js";import{g as r}from"../../chunk-UUITLEOI.js";import{c}from"../../chunk-7F4WI32C.js";import"../../chunk-BP52O7NB.js";import{createAccessKey as y}from"@tigrisdata/iam";var e=m("access-keys","create");async function w(f){g(e);let i=u(f,["name"]);i||(t(e,"Access key name is required"),process.exit(1)),await d()!=="oauth"&&(t(e,`Access keys can only be created when logged in via OAuth.
1
+ import{a as g,b as l,c as t,g as m}from"../../chunk-SYGTCM6P.js";import{a as u}from"../../chunk-JRALYIRA.js";import{a as d}from"../../chunk-USCKVLDO.js";import"../../chunk-BETAO4PB.js";import{b as a}from"../../chunk-E4MLGABW.js";import{g as r}from"../../chunk-DOUR5YEY.js";import{c}from"../../chunk-KH63ANUX.js";import"../../chunk-2XAO2OYD.js";import{createAccessKey as y}from"@tigrisdata/iam";var e=m("access-keys","create");async function w(f){g(e);let i=u(f,["name"]);i||(t(e,"Access key name is required"),process.exit(1)),await d()!=="oauth"&&(t(e,`Access keys can only be created when logged in via OAuth.
2
2
  Run "tigris login oauth" first.`),process.exit(1));let n=a();await n.isAuthenticated()||(t(e,'Not authenticated. Run "tigris login oauth" first.'),process.exit(1));let p=await n.getAccessToken(),h=r(),A=c(),{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."),l(e)}export{w as default};
@@ -1,2 +1,2 @@
1
- import{a,b as g,c as e,g as d}from"../../chunk-SYGTCM6P.js";import{a as f}from"../../chunk-JRALYIRA.js";import"../../chunk-BETAO4PB.js";import{a as m}from"../../chunk-N3NPQW3I.js";import{b as c}from"../../chunk-NJKXT74Y.js";import{g as r}from"../../chunk-UUITLEOI.js";import{c as s}from"../../chunk-7F4WI32C.js";import"../../chunk-BP52O7NB.js";import{removeAccessKey as A}from"@tigrisdata/iam";var t=d("access-keys","delete");async function k(u){a(t);let i=f(u,["id"]);i||(e(t,"Access key ID is required"),process.exit(1)),await m()!=="oauth"&&(e(t,`Access keys can only be deleted when logged in via OAuth.
1
+ import{a,b as g,c as e,g as d}from"../../chunk-SYGTCM6P.js";import{a as f}from"../../chunk-JRALYIRA.js";import{a as m}from"../../chunk-USCKVLDO.js";import"../../chunk-BETAO4PB.js";import{b as c}from"../../chunk-E4MLGABW.js";import{g as r}from"../../chunk-DOUR5YEY.js";import{c as s}from"../../chunk-KH63ANUX.js";import"../../chunk-2XAO2OYD.js";import{removeAccessKey as A}from"@tigrisdata/iam";var t=d("access-keys","delete");async function k(u){a(t);let i=f(u,["id"]);i||(e(t,"Access key ID is required"),process.exit(1)),await m()!=="oauth"&&(e(t,`Access keys can only be deleted when logged in via OAuth.
2
2
  Run "tigris login oauth" first.`),process.exit(1));let o=c();await o.isAuthenticated()||(e(t,'Not authenticated. Run "tigris login oauth" first.'),process.exit(1));let p=await o.getAccessToken(),h=r(),l=s(),{error:n}=await A(i,{config:{sessionToken:p,organizationId:h??void 0,iamEndpoint:l.iamEndpoint}});n&&(e(t,n.message),process.exit(1)),g(t)}export{k as default};
@@ -1,2 +1,2 @@
1
- import{a as l,b as d,c as t,g as f}from"../../chunk-SYGTCM6P.js";import{a as m}from"../../chunk-JRALYIRA.js";import"../../chunk-BETAO4PB.js";import{a as u}from"../../chunk-N3NPQW3I.js";import{b as g}from"../../chunk-NJKXT74Y.js";import{g as a}from"../../chunk-UUITLEOI.js";import{c}from"../../chunk-7F4WI32C.js";import"../../chunk-BP52O7NB.js";import{getAccessKey as $}from"@tigrisdata/iam";var e=f("access-keys","get");async function w(p){l(e);let i=m(p,["id"]);i||(t(e,"Access key ID is required"),process.exit(1)),await u()!=="oauth"&&(t(e,`Access keys can only be retrieved when logged in via OAuth.
1
+ import{a as l,b as d,c as t,g as f}from"../../chunk-SYGTCM6P.js";import{a as m}from"../../chunk-JRALYIRA.js";import{a as u}from"../../chunk-USCKVLDO.js";import"../../chunk-BETAO4PB.js";import{b as g}from"../../chunk-E4MLGABW.js";import{g as a}from"../../chunk-DOUR5YEY.js";import{c}from"../../chunk-KH63ANUX.js";import"../../chunk-2XAO2OYD.js";import{getAccessKey as $}from"@tigrisdata/iam";var e=f("access-keys","get");async function w(p){l(e);let i=m(p,["id"]);i||(t(e,"Access key ID is required"),process.exit(1)),await u()!=="oauth"&&(t(e,`Access keys can only be retrieved when logged in via OAuth.
2
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 h=await n.getAccessToken(),A=a(),k=c(),{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");d(e)}export{w as default};
@@ -1,2 +1,2 @@
1
- import{a as g,b as u,c as s,d as m,g as l}from"../../chunk-SYGTCM6P.js";import{f}from"../../chunk-CQCBYE3X.js";import"../../chunk-BETAO4PB.js";import{a as p}from"../../chunk-N3NPQW3I.js";import{b as d}from"../../chunk-NJKXT74Y.js";import{g as r}from"../../chunk-UUITLEOI.js";import{c}from"../../chunk-7F4WI32C.js";import"../../chunk-BP52O7NB.js";import{listAccessKeys as w}from"@tigrisdata/iam";var t=l("access-keys","list");async function x(){g(t),await p()!=="oauth"&&(s(t,`Access keys can only be listed when logged in via OAuth.
1
+ import{a as g,b as u,c as s,d as m,g as l}from"../../chunk-SYGTCM6P.js";import{f}from"../../chunk-CQCBYE3X.js";import{a as p}from"../../chunk-USCKVLDO.js";import"../../chunk-BETAO4PB.js";import{b as d}from"../../chunk-E4MLGABW.js";import{g as r}from"../../chunk-DOUR5YEY.js";import{c}from"../../chunk-KH63ANUX.js";import"../../chunk-2XAO2OYD.js";import{listAccessKeys as w}from"@tigrisdata/iam";var t=l("access-keys","list");async function x(){g(t),await p()!=="oauth"&&(s(t,`Access keys can only be listed when logged in via OAuth.
2
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=r(),k=c(),{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){m(t);return}let a=i.accessKeys.map(e=>({name:e.name,id:e.id,status:e.status,created:e.createdAt})),A=f(a,"table","keys","key",[{key:"name",header:"Name"},{key:"id",header:"ID"},{key:"status",header:"Status"},{key:"created",header:"Created"}]);console.log(A),u(t,{count:a.length})}export{x as default};
@@ -1 +1 @@
1
- import{a as S,b as x,c as b,g as k}from"../../chunk-SYGTCM6P.js";import{a as c}from"../../chunk-JRALYIRA.js";import{d,e as f}from"../../chunk-BETAO4PB.js";import{b as A}from"../../chunk-N3NPQW3I.js";import"../../chunk-NJKXT74Y.js";import"../../chunk-UUITLEOI.js";import"../../chunk-7F4WI32C.js";import"../../chunk-BP52O7NB.js";import I from"enquirer";import{createBucket as v}from"@tigrisdata/storage";var{prompt:T}=I,p=k("buckets","create");async function C(a){S(p);let t=!c(a,["name"]),u=c(a,["name"]),h=t?void 0:c(a,["access","a","A"]),l=t?void 0:c(a,["enable-snapshots","s","S"]),g=t?void 0:c(a,["default-tier","t","T"]),m=t?void 0:c(a,["consistency","c","C"]),r=t?void 0:c(a,["region","r","R"]),i=[];if((!u||t)&&i.push({type:"input",name:"name",message:"Bucket name:",required:!0}),!h||t){let e=d("buckets","access","create"),s=f(e),n=s?.findIndex(o=>o.value===e?.default);i.push({type:"select",name:"access",message:"Access level:",choices:s||[],initial:n!==void 0&&n>=0?n:0})}if(!g||t){let e=d("buckets","default-tier","create"),s=f(e),n=s?.findIndex(o=>o.value===e?.default);i.push({type:"select",name:"defaultTier",message:"Default storage tier:",choices:s||[],initial:n!==void 0&&n>=0?n:0})}if(!m||t){let e=d("buckets","consistency","create"),s=f(e),n=s?.findIndex(o=>o.value===e?.default);i.push({type:"select",name:"consistency",message:"Consistency level:",choices:s||[],initial:n!==void 0&&n>=0?n:0})}if(!r||t){let e=d("buckets","region","create"),s=f(e),n=s?.findIndex(o=>o.value===e?.default);i.push({type:"select",name:"region",message:"Region:",choices:s||[],initial:n!==void 0&&n>=0?n:0})}if((l===void 0||t)&&i.push({type:"confirm",name:"enableSnapshots",message:"Enable snapshots?",initial:!0}),i.length>0){let e=await T(i);u=u||e.name,h=h||e.access,l=l!==void 0?l:e.enableSnapshots,g=g||e.defaultTier,m=m||e.consistency,r=r!==void 0?r:e.region}u||(b(p,"Bucket name is required"),process.exit(1));let{error:y}=await v(u,{defaultTier:g??"STANDARD",consistency:m==="strict"?"strict":"default",enableSnapshot:l===!0,region:r!=="global"&&r!==void 0?r.split(","):void 0,config:await A()});y&&(b(p,y.message),process.exit(1)),x(p,{name:u})}export{C as default};
1
+ import{a as x,b as k,c as h,g as v}from"../../chunk-SYGTCM6P.js";import{a as i}from"../../chunk-JRALYIRA.js";import{b as A}from"../../chunk-USCKVLDO.js";import{d,e as f}from"../../chunk-BETAO4PB.js";import"../../chunk-E4MLGABW.js";import"../../chunk-DOUR5YEY.js";import"../../chunk-KH63ANUX.js";import"../../chunk-2XAO2OYD.js";import I from"enquirer";import{createBucket as T}from"@tigrisdata/storage";var{prompt:C}=I,b=v("buckets","create");async function q(c){x(b);let t=!i(c,["name"]),u=i(c,["name"]),y=i(c,["public"]),g=y?"public":t?void 0:i(c,["access","a","A"]),l=t?void 0:i(c,["enable-snapshots","s","S"]),m=t?void 0:i(c,["default-tier","t","T"]),p=t?void 0:i(c,["consistency","c","C"]),r=t?void 0:i(c,["region","r","R"]),a=[];if((!u||t)&&a.push({type:"input",name:"name",message:"Bucket name:",required:!0}),(!g||t)&&!y){let e=d("buckets","access","create"),s=f(e),n=s?.findIndex(o=>o.value===e?.default);a.push({type:"select",name:"access",message:"Access level:",choices:s||[],initial:n!==void 0&&n>=0?n:0})}if(!m||t){let e=d("buckets","default-tier","create"),s=f(e),n=s?.findIndex(o=>o.value===e?.default);a.push({type:"select",name:"defaultTier",message:"Default storage tier:",choices:s||[],initial:n!==void 0&&n>=0?n:0})}if(!p||t){let e=d("buckets","consistency","create"),s=f(e),n=s?.findIndex(o=>o.value===e?.default);a.push({type:"select",name:"consistency",message:"Consistency level:",choices:s||[],initial:n!==void 0&&n>=0?n:0})}if(!r||t){let e=d("buckets","region","create"),s=f(e),n=s?.findIndex(o=>o.value===e?.default);a.push({type:"select",name:"region",message:"Region:",choices:s||[],initial:n!==void 0&&n>=0?n:0})}if((l===void 0||t)&&a.push({type:"confirm",name:"enableSnapshots",message:"Enable snapshots?",initial:!0}),a.length>0){let e=await C(a);u=u||e.name,g=g||e.access,l=l!==void 0?l:e.enableSnapshots,m=m||e.defaultTier,p=p||e.consistency,r=r!==void 0?r:e.region}u||(h(b,"Bucket name is required"),process.exit(1));let{error:S}=await T(u,{defaultTier:m??"STANDARD",consistency:p==="strict"?"strict":"default",enableSnapshot:l===!0,access:g??"private",region:r!=="global"&&r!==void 0?r.split(","):void 0,config:await A()});S&&(h(b,S.message),process.exit(1)),k(b,{name:u})}export{q as default};
@@ -1 +1 @@
1
- import{a as i,b as s,c as o,g as c}from"../../chunk-SYGTCM6P.js";import{a as m}from"../../chunk-JRALYIRA.js";import"../../chunk-BETAO4PB.js";import{b as a}from"../../chunk-N3NPQW3I.js";import"../../chunk-NJKXT74Y.js";import"../../chunk-UUITLEOI.js";import"../../chunk-7F4WI32C.js";import"../../chunk-BP52O7NB.js";import{removeBucket as g}from"@tigrisdata/storage";var e=c("buckets","delete");async function k(f){i(e);let t=m(f,["name"]);t||(o(e,"Bucket name is required"),process.exit(1));let p=Array.isArray(t)?t:[t],u=await a();for(let r of p){let{error:n}=await g(r,{config:u});n&&(o(e,n.message,{name:r}),process.exit(1)),s(e,{name:r})}}export{k as default};
1
+ import{a as i,b as s,c as o,g as c}from"../../chunk-SYGTCM6P.js";import{a as m}from"../../chunk-JRALYIRA.js";import{b as a}from"../../chunk-USCKVLDO.js";import"../../chunk-BETAO4PB.js";import"../../chunk-E4MLGABW.js";import"../../chunk-DOUR5YEY.js";import"../../chunk-KH63ANUX.js";import"../../chunk-2XAO2OYD.js";import{removeBucket as g}from"@tigrisdata/storage";var e=c("buckets","delete");async function k(f){i(e);let t=m(f,["name"]);t||(o(e,"Bucket name is required"),process.exit(1));let p=Array.isArray(t)?t:[t],u=await a();for(let r of p){let{error:n}=await g(r,{config:u});n&&(o(e,n.message,{name:r}),process.exit(1)),s(e,{name:r})}}export{k as default};
@@ -1 +1 @@
1
- import{a as s,b as p,c as r,g as n}from"../../chunk-SYGTCM6P.js";import{f as i}from"../../chunk-CQCBYE3X.js";import{a as c}from"../../chunk-JRALYIRA.js";import"../../chunk-BETAO4PB.js";import{b as u}from"../../chunk-N3NPQW3I.js";import"../../chunk-NJKXT74Y.js";import"../../chunk-UUITLEOI.js";import"../../chunk-7F4WI32C.js";import"../../chunk-BP52O7NB.js";import{getBucketInfo as l}from"@tigrisdata/storage";var t=n("buckets","get");async function g(m){s(t);let o=c(m,["name"]);o||(r(t,"Bucket name is required"),process.exit(1));let{data:e,error:a}=await l(o,{config:await u()});a&&(r(t,a.message),process.exit(1));let f=[{property:"Name",value:o},{property:"Snapshots Enabled",value:e.isSnapshotEnabled?"Yes":"No"},{property:"Has Forks",value:e.hasForks?"Yes":"No"},...e.sourceBucketName?[{property:"Source Bucket",value:e.sourceBucketName}]:[],...e.sourceBucketSnapshot?[{property:"Source Snapshot",value:e.sourceBucketSnapshot}]:[]],k=i(f,"table","bucket","property",[{key:"property",header:"Property"},{key:"value",header:"Value"}]);console.log(k),p(t)}export{g as default};
1
+ import{a as s,b as p,c as r,g as n}from"../../chunk-SYGTCM6P.js";import{f as i}from"../../chunk-CQCBYE3X.js";import{a as c}from"../../chunk-JRALYIRA.js";import{b as u}from"../../chunk-USCKVLDO.js";import"../../chunk-BETAO4PB.js";import"../../chunk-E4MLGABW.js";import"../../chunk-DOUR5YEY.js";import"../../chunk-KH63ANUX.js";import"../../chunk-2XAO2OYD.js";import{getBucketInfo as l}from"@tigrisdata/storage";var t=n("buckets","get");async function g(m){s(t);let o=c(m,["name"]);o||(r(t,"Bucket name is required"),process.exit(1));let{data:e,error:a}=await l(o,{config:await u()});a&&(r(t,a.message),process.exit(1));let f=[{property:"Name",value:o},{property:"Snapshots Enabled",value:e.isSnapshotEnabled?"Yes":"No"},{property:"Has Forks",value:e.hasForks?"Yes":"No"},...e.sourceBucketName?[{property:"Source Bucket",value:e.sourceBucketName}]:[],...e.sourceBucketSnapshot?[{property:"Source Snapshot",value:e.sourceBucketSnapshot}]:[]],k=i(f,"table","bucket","property",[{key:"property",header:"Property"},{key:"value",header:"Value"}]);console.log(k),p(t)}export{g as default};
@@ -1 +1 @@
1
- import{a as c,b as i,c as r,d as m,g as u}from"../../chunk-SYGTCM6P.js";import{f as g}from"../../chunk-CQCBYE3X.js";import{a as f}from"../../chunk-JRALYIRA.js";import"../../chunk-BETAO4PB.js";import{b as p}from"../../chunk-N3NPQW3I.js";import"../../chunk-NJKXT74Y.js";import"../../chunk-UUITLEOI.js";import"../../chunk-7F4WI32C.js";import"../../chunk-BP52O7NB.js";import{listBuckets as d}from"@tigrisdata/storage";var t=u("buckets","list");async function b(k){c(t);try{let e=f(k,["format","F"],"table"),{data:o,error:n}=await d({config:await p()});if(n&&(r(t,n.message),process.exit(1)),!o.buckets||o.buckets.length===0){m(t);return}let s=o.buckets.map(a=>({name:a.name,created:a.creationDate})),l=g(s,e,"buckets","bucket",[{key:"name",header:"Name"},{key:"created",header:"Created"}]);console.log(l),i(t,{count:s.length})}catch(e){e instanceof Error?r(t,e.message):r(t,"An unknown error occurred"),process.exit(1)}}export{b as default};
1
+ import{a as c,b as i,c as r,d as m,g as u}from"../../chunk-SYGTCM6P.js";import{f as g}from"../../chunk-CQCBYE3X.js";import{a as f}from"../../chunk-JRALYIRA.js";import{b as p}from"../../chunk-USCKVLDO.js";import"../../chunk-BETAO4PB.js";import"../../chunk-E4MLGABW.js";import"../../chunk-DOUR5YEY.js";import"../../chunk-KH63ANUX.js";import"../../chunk-2XAO2OYD.js";import{listBuckets as d}from"@tigrisdata/storage";var t=u("buckets","list");async function b(k){c(t);try{let e=f(k,["format","F"],"table"),{data:o,error:n}=await d({config:await p()});if(n&&(r(t,n.message),process.exit(1)),!o.buckets||o.buckets.length===0){m(t);return}let s=o.buckets.map(a=>({name:a.name,created:a.creationDate})),l=g(s,e,"buckets","bucket",[{key:"name",header:"Name"},{key:"created",header:"Created"}]);console.log(l),i(t,{count:s.length})}catch(e){e instanceof Error?r(t,e.message):r(t,"An unknown error occurred"),process.exit(1)}}export{b as default};
@@ -1 +1 @@
1
- import{a as O,b as y,c,g as w}from"../../chunk-SYGTCM6P.js";import{a as e,b as r}from"../../chunk-JRALYIRA.js";import"../../chunk-BETAO4PB.js";import{b as k}from"../../chunk-N3NPQW3I.js";import"../../chunk-NJKXT74Y.js";import{g as D}from"../../chunk-UUITLEOI.js";import"../../chunk-7F4WI32C.js";import"../../chunk-BP52O7NB.js";import{updateBucket as x}from"@tigrisdata/storage";var o=w("buckets","set");async function B(n){O(o);let s=e(n,["name"]),a=e(n,["access"]),i=e(n,["region"]),d=e(n,["allow-object-acl","allowObjectAcl"]),l=e(n,["disable-directory-listing","disableDirectoryListing"]),f=e(n,["cache-control","cacheControl"]),u=e(n,["custom-domain","customDomain"]),g=e(n,["enable-delete-protection","enableDeleteProtection"]);s||(c(o,"Bucket name is required"),process.exit(1)),a===void 0&&i===void 0&&d===void 0&&l===void 0&&f===void 0&&u===void 0&&g===void 0&&(c(o,"At least one setting is required"),process.exit(1));let m=await k(),t={};a!==void 0&&(t.access=a),i!==void 0&&(t.regions=Array.isArray(i)?i:[i]),d!==void 0&&(t.allowObjectAcl=r(d)),l!==void 0&&(t.disableDirectoryListing=r(l)),f!==void 0&&(t.cacheControl=f),u!==void 0&&(t.customDomain=u),g!==void 0&&(t.enableDeleteProtection=r(g));let p=D(),A={...m,...p&&!m.organizationId?{organizationId:p}:{}},{error:b}=await x(s,{...t,config:A});b&&(c(o,b.message),process.exit(1)),y(o,{name:s})}export{B as default};
1
+ import{a as O,b as y,c,g as w}from"../../chunk-SYGTCM6P.js";import{a as e,b as r}from"../../chunk-JRALYIRA.js";import{b as k}from"../../chunk-USCKVLDO.js";import"../../chunk-BETAO4PB.js";import"../../chunk-E4MLGABW.js";import{g as D}from"../../chunk-DOUR5YEY.js";import"../../chunk-KH63ANUX.js";import"../../chunk-2XAO2OYD.js";import{updateBucket as x}from"@tigrisdata/storage";var o=w("buckets","set");async function B(n){O(o);let s=e(n,["name"]),a=e(n,["access"]),i=e(n,["region"]),d=e(n,["allow-object-acl","allowObjectAcl"]),l=e(n,["disable-directory-listing","disableDirectoryListing"]),f=e(n,["cache-control","cacheControl"]),u=e(n,["custom-domain","customDomain"]),g=e(n,["enable-delete-protection","enableDeleteProtection"]);s||(c(o,"Bucket name is required"),process.exit(1)),a===void 0&&i===void 0&&d===void 0&&l===void 0&&f===void 0&&u===void 0&&g===void 0&&(c(o,"At least one setting is required"),process.exit(1));let m=await k(),t={};a!==void 0&&(t.access=a),i!==void 0&&(t.regions=Array.isArray(i)?i:[i]),d!==void 0&&(t.allowObjectAcl=r(d)),l!==void 0&&(t.disableDirectoryListing=r(l)),f!==void 0&&(t.cacheControl=f),u!==void 0&&(t.customDomain=u),g!==void 0&&(t.enableDeleteProtection=r(g));let p=D(),A={...m,...p&&!m.organizationId?{organizationId:p}:{}},{error:b}=await x(s,{...t,config:A});b&&(c(o,b.message),process.exit(1)),y(o,{name:s})}export{B as default};
@@ -1 +1 @@
1
- import{a as g,b as p,c as n,g as m}from"../../chunk-SYGTCM6P.js";import"../../chunk-BETAO4PB.js";import{n as u,r as y}from"../../chunk-UUITLEOI.js";import{a as d}from"../../chunk-BP52O7NB.js";import f from"enquirer";var{prompt:l}=f,i=m("configure");async function o(e){g(i);let s=e["access-key"]||e.accessKey||e.key||e.Key||e.accesskey,r=e["access-secret"]||e.accessSecret||e.secret||e.Secret||e.accesssecret,c=e.endpoint||e.e||e.E||e.Endpoint;if(!s||!r||!c){let t=[];s||t.push({type:"input",name:"accessKey",message:"Tigris Access Key ID:",required:!0}),r||t.push({type:"password",name:"accessSecret",message:"Tigris Secret Access Key:",required:!0}),c||t.push({type:"input",name:"endpoint",message:"Tigris Endpoint:",required:!0,initial:d});let a=await l(t);s=s||a.accessKey,r=r||a.accessSecret,c=c||a.endpoint}(!s||!r||!c)&&(n(i,"All credentials are required"),process.exit(1));try{await u({accessKeyId:s,secretAccessKey:r,endpoint:c}),await y("credentials"),p(i)}catch{n(i,"Failed to save credentials"),process.exit(1)}}export{o as default};
1
+ import{a as g,b as p,c as n,g as m}from"../../chunk-SYGTCM6P.js";import"../../chunk-BETAO4PB.js";import{n as u,r as y}from"../../chunk-DOUR5YEY.js";import{a as d}from"../../chunk-2XAO2OYD.js";import f from"enquirer";var{prompt:l}=f,i=m("configure");async function o(e){g(i);let s=e["access-key"]||e.accessKey||e.key||e.Key||e.accesskey,c=e["access-secret"]||e.accessSecret||e.secret||e.Secret||e.accesssecret,r=e.endpoint||e.e||e.E||e.Endpoint;if(!s||!c||!r){let t=[];s||t.push({type:"input",name:"accessKey",message:"Tigris Access Key ID:",required:!0}),c||t.push({type:"password",name:"accessSecret",message:"Tigris Secret Access Key:",required:!0}),r||t.push({type:"input",name:"endpoint",message:"Tigris Endpoint:",required:!0,initial:d});let a=await l(t);s=s||a.accessKey,c=c||a.accessSecret,r=r||a.endpoint}(!s||!c||!r)&&(n(i,"All credentials are required"),process.exit(1));try{await u({accessKeyId:s,secretAccessKey:c,endpoint:r}),await y("credentials"),p(i)}catch{n(i,"Failed to save credentials"),process.exit(1)}}export{o as default};
package/dist/lib/cp.js CHANGED
@@ -1 +1 @@
1
- import{a as $}from"../chunk-CQCBYE3X.js";import{a as v}from"../chunk-JRALYIRA.js";import{a as D,b as W,d as S,g as R,h as C,i as T}from"../chunk-LCWHZUZZ.js";import{b as M}from"../chunk-N3NPQW3I.js";import"../chunk-NJKXT74Y.js";import"../chunk-UUITLEOI.js";import"../chunk-7F4WI32C.js";import"../chunk-BP52O7NB.js";import{createReadStream as Q,createWriteStream as V,statSync as z,readdirSync as N,mkdirSync as X,existsSync as O}from"fs";import{resolve as B,dirname as E,basename as j,join as x,relative as L}from"path";import{homedir as Y}from"os";import{Readable as q}from"stream";import{pipeline as Z}from"stream/promises";import{get as G,put as A,list as _,head as H}from"@tigrisdata/storage";function P(r,e){let t=D(r),a=D(e);return!t&&!a&&(console.error("At least one path must be a remote Tigris path (t3:// or tigris://)"),process.exit(1)),t&&a?"remote-to-remote":t?"remote-to-local":"local-to-remote"}function J(r){return r==="~"||r.startsWith("~/")?B(Y(),r.slice(2)):B(r)}function ee(r){return N(r,{recursive:!0,withFileTypes:!0}).filter(t=>t.isFile()).map(t=>{let a=t.parentPath??t.path;return x(a,t.name)})}function te(r,e){let t=E(r),a=j(r),p=R(a);return O(t)?e?N(t,{recursive:!0,withFileTypes:!0}).filter(o=>o.isFile()&&p.test(o.name)).map(o=>{let n=o.parentPath??o.path;return x(n,o.name)}):N(t,{withFileTypes:!0}).filter(n=>n.isFile()&&p.test(n.name)).map(n=>x(t,n.name)):[]}async function U(r,e,t,a,p=!1){let u;try{u=z(r).size}catch{return{error:`File not found: ${r}`}}let o=Q(r),n=q.toWeb(o),i=u!==void 0&&u>100*1024*1024,{error:l}=await A(t,n,{multipart:i,onUploadProgress:p?({loaded:c})=>{if(u!==void 0&&u>0){let s=Math.round(c/u*100);process.stdout.write(`\rUploading: ${$(c)} / ${$(u)} (${s}%)`)}else process.stdout.write(`\rUploading: ${$(c)}`)}:void 0,config:{...a,bucket:e}});return p&&process.stdout.write("\r"+" ".repeat(60)+"\r"),l?{error:l.message}:{}}async function K(r,e,t,a,p=!1){let u;if(p){let{data:s}=await H(e,{config:{...a,bucket:r}});u=s?.size}let{data:o,error:n}=await G(e,"stream",{config:{...a,bucket:r}});if(n)return{error:n.message};let i=E(t);O(i)||X(i,{recursive:!0});let l=V(t),c=q.fromWeb(o);if(p&&u!==void 0&&u>0){let s=0;c.on("data",h=>{s+=h.length;let m=Math.round(s/u*100);process.stdout.write(`\rDownloading: ${$(s)} / ${$(u)} (${m}%)`)})}return await Z(c,l),p&&process.stdout.write("\r"+" ".repeat(60)+"\r"),{}}async function I(r,e,t,a,p,u=!1){if(t.endsWith("/")){let{error:s}=await A(p,"",{config:{...r,bucket:a}});return s?{error:s.message}:{}}let o;if(u){let{data:s}=await H(t,{config:{...r,bucket:e}});o=s?.size}let{data:n,error:i}=await G(t,"stream",{config:{...r,bucket:e}});if(i)return{error:i.message};let l=o!==void 0&&o>100*1024*1024,{error:c}=await A(p,n,{multipart:l,onUploadProgress:u?({loaded:s})=>{if(o!==void 0&&o>0){let h=Math.round(s/o*100);process.stdout.write(`\rCopying: ${$(s)} / ${$(o)} (${h}%)`)}else process.stdout.write(`\rCopying: ${$(s)}`)}:void 0,config:{...r,bucket:a}});return u&&process.stdout.write("\r"+" ".repeat(60)+"\r"),c?{error:c.message}:{}}async function oe(r,e,t,a){let p=J(r);if(r.includes("*")){let n=te(p,a);if(n.length===0){console.log("No files matching pattern");return}let i=E(p),l=0;for(let c of n){let s=L(i,c),h=e.path?`${e.path.replace(/\/$/,"")}/${s}`:s,m=await U(c,e.bucket,h,t);m.error?console.error(`Failed to upload ${c}: ${m.error}`):(console.log(`Uploaded ${c} -> t3://${e.bucket}/${h}`),l++)}console.log(`Uploaded ${l} file(s)`);return}let o;try{o=z(p)}catch{console.error(`Source not found: ${r}`),process.exit(1)}if(o.isDirectory()){a||(console.error(`${r} is a directory (not copied). Use -r to copy recursively.`),process.exit(1));let n=ee(p);if(n.length===0){console.log("No files to upload");return}let i=r.endsWith("/")?"":j(p),l=0;for(let c of n){let s=L(p,c),m=[e.path?.replace(/\/$/,""),i,s].filter(Boolean).join("/"),b=await U(c,e.bucket,m,t);b.error?console.error(`Failed to upload ${c}: ${b.error}`):(console.log(`Uploaded ${c} -> t3://${e.bucket}/${m}`),l++)}console.log(`Uploaded ${l} file(s)`)}else{let n=j(p),i;e.path?r.endsWith("/")||e.path.endsWith("/")?i=`${e.path.replace(/\/$/,"")}/${n}`:await S(e.bucket,e.path,t)?i=`${e.path}/${n}`:i=e.path:i=n;let l=await U(p,e.bucket,i,t,!0);l.error&&(console.error(l.error),process.exit(1)),console.log(`Uploaded ${r} -> t3://${e.bucket}/${i}`)}}async function re(r,e,t,a,p){let u=r.endsWith("/");!e.path&&!u&&(console.error("Cannot copy a bucket. Provide a path within the bucket."),process.exit(1));let o=J(t),n=e.path.includes("*"),i=e.path.endsWith("/")||!e.path&&u;if(!n&&!i&&(i=await S(e.bucket,e.path,a)),i&&!n&&!p&&(console.error("Source is a remote folder (not copied). Use -r to copy recursively."),process.exit(1)),n||i){let l=n?C(e.path):e.path?e.path.endsWith("/")?e.path:`${e.path}/`:"",c=!n&&e.path&&!e.path.endsWith("/")?e.path.split("/").filter(Boolean).pop()??"":"",{items:s,error:h}=await T(e.bucket,l||void 0,a);h&&(console.error(h.message),process.exit(1));let m=s.filter(d=>!d.name.endsWith("/"));if(n){let d=e.path.split("/").pop(),g=R(d);m=m.filter(w=>{let f=l?w.name.slice(l.length):w.name;return!p&&f.includes("/")?!1:g.test(f.split("/").pop())})}if(m.length===0){console.log("No objects to download");return}let b=0;for(let d of m){let g=l?d.name.slice(l.length):d.name,w=c?x(o,c,g):x(o,g),f=await K(e.bucket,d.name,w,a);f.error?console.error(`Failed to download ${d.name}: ${f.error}`):(console.log(`Downloaded t3://${e.bucket}/${d.name} -> ${w}`),b++)}console.log(`Downloaded ${b} file(s)`)}else{let l=e.path.split("/").pop(),c,s=!1;try{s=z(o).isDirectory()}catch{}s||t.endsWith("/")?c=x(o,l):c=o;let h=await K(e.bucket,e.path,c,a,!0);h.error&&(console.error(h.error),process.exit(1)),console.log(`Downloaded t3://${e.bucket}/${e.path} -> ${c}`)}}async function ie(r,e,t,a,p){let u=r.endsWith("/");!e.path&&!u&&(console.error("Cannot copy a bucket. Provide a path within the bucket."),process.exit(1));let o=r.includes("*"),n=e.path.endsWith("/")||!e.path&&u;if(!o&&!n&&e.path&&(n=await S(e.bucket,e.path,a)),n&&!o&&!p&&(console.error("Source is a remote folder (not copied). Use -r to copy recursively."),process.exit(1)),o||n){let i=o?C(e.path):e.path?e.path.endsWith("/")?e.path:`${e.path}/`:"",l=!o&&e.path&&!e.path.endsWith("/")?e.path.split("/").filter(Boolean).pop()??"":"",s=[t.path?.replace(/\/$/,"")||"",l].filter(Boolean).join("/"),h=s?`${s}/`:"";e.bucket===t.bucket&&i===h&&(console.error("Source and destination are the same"),process.exit(1));let{items:m,error:b}=await T(e.bucket,i||void 0,a);b&&(console.error(b.message),process.exit(1));let d=m.filter(f=>f.name!==i);if(o){let f=e.path.split("/").pop(),y=R(f);d=d.filter(k=>{let F=i?k.name.slice(i.length):k.name;return!p&&F.includes("/")?!1:y.test(F.split("/").pop())})}let g=0;for(let f of d){let y=i?f.name.slice(i.length):f.name,k=s?`${s}/${y}`:y,F=await I(a,e.bucket,f.name,t.bucket,k);F.error?console.error(`Failed to copy ${f.name}: ${F.error}`):(console.log(`Copied t3://${e.bucket}/${f.name} -> t3://${t.bucket}/${k}`),g++)}let w=!1;if(s&&i){let{data:f}=await _({prefix:i,limit:1,config:{...a,bucket:e.bucket}});if(f?.items?.some(y=>y.name===i)){let y=`${s}/`,k=await I(a,e.bucket,i,t.bucket,y);k.error?console.error(`Failed to copy folder marker: ${k.error}`):w=!0}}if(g===0&&w&&(g=1),g===0){console.log("No objects to copy");return}console.log(`Copied ${g} object(s)`)}else{let i=e.path.split("/").pop(),l;t.path?t.path.endsWith("/")?l=`${t.path}${i}`:await S(t.bucket,t.path,a)?l=`${t.path}/${i}`:l=t.path:l=i,e.bucket===t.bucket&&e.path===l&&(console.error("Source and destination are the same"),process.exit(1));let c=await I(a,e.bucket,e.path,t.bucket,l,!0);c.error&&(console.error(c.error),process.exit(1)),console.log(`Copied t3://${e.bucket}/${e.path} -> t3://${t.bucket}/${l}`)}}async function ne(r){let e=v(r,["src"]),t=v(r,["dest"]);(!e||!t)&&(console.error("Both src and dest arguments are required"),process.exit(1));let a=!!v(r,["recursive","r"]),p=P(e,t),u=await M();switch(p){case"local-to-remote":{let o=W(t);o.bucket||(console.error("Invalid destination path"),process.exit(1)),await oe(e,o,u,a);break}case"remote-to-local":{let o=W(e);o.bucket||(console.error("Invalid source path"),process.exit(1)),await re(e,o,t,u,a);break}case"remote-to-remote":{let o=W(e),n=W(t);o.bucket||(console.error("Invalid source path"),process.exit(1)),n.bucket||(console.error("Invalid destination path"),process.exit(1)),await ie(e,o,n,u,a);break}}process.exit(0)}export{ne as default};
1
+ import{a as $}from"../chunk-CQCBYE3X.js";import{a as v}from"../chunk-JRALYIRA.js";import{a as D,b as W,d as S,g as R,h as C,i as T}from"../chunk-LCWHZUZZ.js";import{b as M}from"../chunk-USCKVLDO.js";import"../chunk-E4MLGABW.js";import"../chunk-DOUR5YEY.js";import"../chunk-KH63ANUX.js";import"../chunk-2XAO2OYD.js";import{createReadStream as Q,createWriteStream as V,statSync as z,readdirSync as N,mkdirSync as X,existsSync as O}from"fs";import{resolve as B,dirname as E,basename as j,join as x,relative as L}from"path";import{homedir as Y}from"os";import{Readable as q}from"stream";import{pipeline as Z}from"stream/promises";import{get as G,put as A,list as _,head as H}from"@tigrisdata/storage";function P(r,e){let t=D(r),a=D(e);return!t&&!a&&(console.error("At least one path must be a remote Tigris path (t3:// or tigris://)"),process.exit(1)),t&&a?"remote-to-remote":t?"remote-to-local":"local-to-remote"}function J(r){return r==="~"||r.startsWith("~/")?B(Y(),r.slice(2)):B(r)}function ee(r){return N(r,{recursive:!0,withFileTypes:!0}).filter(t=>t.isFile()).map(t=>{let a=t.parentPath??t.path;return x(a,t.name)})}function te(r,e){let t=E(r),a=j(r),p=R(a);return O(t)?e?N(t,{recursive:!0,withFileTypes:!0}).filter(o=>o.isFile()&&p.test(o.name)).map(o=>{let n=o.parentPath??o.path;return x(n,o.name)}):N(t,{withFileTypes:!0}).filter(n=>n.isFile()&&p.test(n.name)).map(n=>x(t,n.name)):[]}async function U(r,e,t,a,p=!1){let u;try{u=z(r).size}catch{return{error:`File not found: ${r}`}}let o=Q(r),n=q.toWeb(o),i=u!==void 0&&u>100*1024*1024,{error:l}=await A(t,n,{multipart:i,onUploadProgress:p?({loaded:c})=>{if(u!==void 0&&u>0){let s=Math.round(c/u*100);process.stdout.write(`\rUploading: ${$(c)} / ${$(u)} (${s}%)`)}else process.stdout.write(`\rUploading: ${$(c)}`)}:void 0,config:{...a,bucket:e}});return p&&process.stdout.write("\r"+" ".repeat(60)+"\r"),l?{error:l.message}:{}}async function K(r,e,t,a,p=!1){let u;if(p){let{data:s}=await H(e,{config:{...a,bucket:r}});u=s?.size}let{data:o,error:n}=await G(e,"stream",{config:{...a,bucket:r}});if(n)return{error:n.message};let i=E(t);O(i)||X(i,{recursive:!0});let l=V(t),c=q.fromWeb(o);if(p&&u!==void 0&&u>0){let s=0;c.on("data",h=>{s+=h.length;let m=Math.round(s/u*100);process.stdout.write(`\rDownloading: ${$(s)} / ${$(u)} (${m}%)`)})}return await Z(c,l),p&&process.stdout.write("\r"+" ".repeat(60)+"\r"),{}}async function I(r,e,t,a,p,u=!1){if(t.endsWith("/")){let{error:s}=await A(p,"",{config:{...r,bucket:a}});return s?{error:s.message}:{}}let o;if(u){let{data:s}=await H(t,{config:{...r,bucket:e}});o=s?.size}let{data:n,error:i}=await G(t,"stream",{config:{...r,bucket:e}});if(i)return{error:i.message};let l=o!==void 0&&o>100*1024*1024,{error:c}=await A(p,n,{multipart:l,onUploadProgress:u?({loaded:s})=>{if(o!==void 0&&o>0){let h=Math.round(s/o*100);process.stdout.write(`\rCopying: ${$(s)} / ${$(o)} (${h}%)`)}else process.stdout.write(`\rCopying: ${$(s)}`)}:void 0,config:{...r,bucket:a}});return u&&process.stdout.write("\r"+" ".repeat(60)+"\r"),c?{error:c.message}:{}}async function oe(r,e,t,a){let p=J(r);if(r.includes("*")){let n=te(p,a);if(n.length===0){console.log("No files matching pattern");return}let i=E(p),l=0;for(let c of n){let s=L(i,c),h=e.path?`${e.path.replace(/\/$/,"")}/${s}`:s,m=await U(c,e.bucket,h,t);m.error?console.error(`Failed to upload ${c}: ${m.error}`):(console.log(`Uploaded ${c} -> t3://${e.bucket}/${h}`),l++)}console.log(`Uploaded ${l} file(s)`);return}let o;try{o=z(p)}catch{console.error(`Source not found: ${r}`),process.exit(1)}if(o.isDirectory()){a||(console.error(`${r} is a directory (not copied). Use -r to copy recursively.`),process.exit(1));let n=ee(p);if(n.length===0){console.log("No files to upload");return}let i=r.endsWith("/")?"":j(p),l=0;for(let c of n){let s=L(p,c),m=[e.path?.replace(/\/$/,""),i,s].filter(Boolean).join("/"),b=await U(c,e.bucket,m,t);b.error?console.error(`Failed to upload ${c}: ${b.error}`):(console.log(`Uploaded ${c} -> t3://${e.bucket}/${m}`),l++)}console.log(`Uploaded ${l} file(s)`)}else{let n=j(p),i;e.path?r.endsWith("/")||e.path.endsWith("/")?i=`${e.path.replace(/\/$/,"")}/${n}`:await S(e.bucket,e.path,t)?i=`${e.path}/${n}`:i=e.path:i=n;let l=await U(p,e.bucket,i,t,!0);l.error&&(console.error(l.error),process.exit(1)),console.log(`Uploaded ${r} -> t3://${e.bucket}/${i}`)}}async function re(r,e,t,a,p){let u=r.endsWith("/");!e.path&&!u&&(console.error("Cannot copy a bucket. Provide a path within the bucket."),process.exit(1));let o=J(t),n=e.path.includes("*"),i=e.path.endsWith("/")||!e.path&&u;if(!n&&!i&&(i=await S(e.bucket,e.path,a)),i&&!n&&!p&&(console.error("Source is a remote folder (not copied). Use -r to copy recursively."),process.exit(1)),n||i){let l=n?C(e.path):e.path?e.path.endsWith("/")?e.path:`${e.path}/`:"",c=!n&&e.path&&!e.path.endsWith("/")?e.path.split("/").filter(Boolean).pop()??"":"",{items:s,error:h}=await T(e.bucket,l||void 0,a);h&&(console.error(h.message),process.exit(1));let m=s.filter(d=>!d.name.endsWith("/"));if(n){let d=e.path.split("/").pop(),g=R(d);m=m.filter(w=>{let f=l?w.name.slice(l.length):w.name;return!p&&f.includes("/")?!1:g.test(f.split("/").pop())})}if(m.length===0){console.log("No objects to download");return}let b=0;for(let d of m){let g=l?d.name.slice(l.length):d.name,w=c?x(o,c,g):x(o,g),f=await K(e.bucket,d.name,w,a);f.error?console.error(`Failed to download ${d.name}: ${f.error}`):(console.log(`Downloaded t3://${e.bucket}/${d.name} -> ${w}`),b++)}console.log(`Downloaded ${b} file(s)`)}else{let l=e.path.split("/").pop(),c,s=!1;try{s=z(o).isDirectory()}catch{}s||t.endsWith("/")?c=x(o,l):c=o;let h=await K(e.bucket,e.path,c,a,!0);h.error&&(console.error(h.error),process.exit(1)),console.log(`Downloaded t3://${e.bucket}/${e.path} -> ${c}`)}}async function ie(r,e,t,a,p){let u=r.endsWith("/");!e.path&&!u&&(console.error("Cannot copy a bucket. Provide a path within the bucket."),process.exit(1));let o=r.includes("*"),n=e.path.endsWith("/")||!e.path&&u;if(!o&&!n&&e.path&&(n=await S(e.bucket,e.path,a)),n&&!o&&!p&&(console.error("Source is a remote folder (not copied). Use -r to copy recursively."),process.exit(1)),o||n){let i=o?C(e.path):e.path?e.path.endsWith("/")?e.path:`${e.path}/`:"",l=!o&&e.path&&!e.path.endsWith("/")?e.path.split("/").filter(Boolean).pop()??"":"",s=[t.path?.replace(/\/$/,"")||"",l].filter(Boolean).join("/"),h=s?`${s}/`:"";e.bucket===t.bucket&&i===h&&(console.error("Source and destination are the same"),process.exit(1));let{items:m,error:b}=await T(e.bucket,i||void 0,a);b&&(console.error(b.message),process.exit(1));let d=m.filter(f=>f.name!==i);if(o){let f=e.path.split("/").pop(),y=R(f);d=d.filter(k=>{let F=i?k.name.slice(i.length):k.name;return!p&&F.includes("/")?!1:y.test(F.split("/").pop())})}let g=0;for(let f of d){let y=i?f.name.slice(i.length):f.name,k=s?`${s}/${y}`:y,F=await I(a,e.bucket,f.name,t.bucket,k);F.error?console.error(`Failed to copy ${f.name}: ${F.error}`):(console.log(`Copied t3://${e.bucket}/${f.name} -> t3://${t.bucket}/${k}`),g++)}let w=!1;if(s&&i){let{data:f}=await _({prefix:i,limit:1,config:{...a,bucket:e.bucket}});if(f?.items?.some(y=>y.name===i)){let y=`${s}/`,k=await I(a,e.bucket,i,t.bucket,y);k.error?console.error(`Failed to copy folder marker: ${k.error}`):w=!0}}if(g===0&&w&&(g=1),g===0){console.log("No objects to copy");return}console.log(`Copied ${g} object(s)`)}else{let i=e.path.split("/").pop(),l;t.path?t.path.endsWith("/")?l=`${t.path}${i}`:await S(t.bucket,t.path,a)?l=`${t.path}/${i}`:l=t.path:l=i,e.bucket===t.bucket&&e.path===l&&(console.error("Source and destination are the same"),process.exit(1));let c=await I(a,e.bucket,e.path,t.bucket,l,!0);c.error&&(console.error(c.error),process.exit(1)),console.log(`Copied t3://${e.bucket}/${e.path} -> t3://${t.bucket}/${l}`)}}async function ne(r){let e=v(r,["src"]),t=v(r,["dest"]);(!e||!t)&&(console.error("Both src and dest arguments are required"),process.exit(1));let a=!!v(r,["recursive","r"]),p=P(e,t),u=await M();switch(p){case"local-to-remote":{let o=W(t);o.bucket||(console.error("Invalid destination path"),process.exit(1)),await oe(e,o,u,a);break}case"remote-to-local":{let o=W(e);o.bucket||(console.error("Invalid source path"),process.exit(1)),await re(e,o,t,u,a);break}case"remote-to-remote":{let o=W(e),n=W(t);o.bucket||(console.error("Invalid source path"),process.exit(1)),n.bucket||(console.error("Invalid destination path"),process.exit(1)),await ie(e,o,n,u,a);break}}process.exit(0)}export{ne as default};
@@ -1 +1 @@
1
- import{a as f,b as g,c as n,g as u}from"../../chunk-SYGTCM6P.js";import{a as d}from"../../chunk-JRALYIRA.js";import"../../chunk-BETAO4PB.js";import{b as l}from"../../chunk-N3NPQW3I.js";import"../../chunk-NJKXT74Y.js";import{g as a}from"../../chunk-UUITLEOI.js";import"../../chunk-7F4WI32C.js";import"../../chunk-BP52O7NB.js";import{listBuckets as m,getBucketInfo as p}from"@tigrisdata/storage";var e=u("credentials","test");async function b(k){f(e);let t=d(k,["bucket","b"]),o=await l();!o.accessKeyId&&!o.sessionToken&&(n(e,'No credentials found. Run "tigris configure" or "tigris login" first.'),process.exit(1));let c=a(),r={...o,...c&&!o.organizationId?{organizationId:c}:{}};if(t){let{data:i,error:s}=await p(t,{config:r});s&&(n(e,`Current credentials don't have access to bucket "${t}"`),process.exit(1)),console.log(` Bucket: ${t}`),console.log(" Access verified."),i.sourceBucketName&&console.log(` Fork of: ${i.sourceBucketName}`)}else{let{data:i,error:s}=await m({config:r});s&&(n(e,"Current credentials don't have sufficient access"),process.exit(1)),console.log(` Access verified. Found ${i.buckets.length} bucket(s).`)}g(e)}export{b as default};
1
+ import{a as f,b as g,c as n,g as u}from"../../chunk-SYGTCM6P.js";import{a as d}from"../../chunk-JRALYIRA.js";import{b as l}from"../../chunk-USCKVLDO.js";import"../../chunk-BETAO4PB.js";import"../../chunk-E4MLGABW.js";import{g as a}from"../../chunk-DOUR5YEY.js";import"../../chunk-KH63ANUX.js";import"../../chunk-2XAO2OYD.js";import{listBuckets as m,getBucketInfo as p}from"@tigrisdata/storage";var e=u("credentials","test");async function b(k){f(e);let t=d(k,["bucket","b"]),o=await l();!o.accessKeyId&&!o.sessionToken&&(n(e,'No credentials found. Run "tigris configure" or "tigris login" first.'),process.exit(1));let c=a(),r={...o,...c&&!o.organizationId?{organizationId:c}:{}};if(t){let{data:i,error:s}=await p(t,{config:r});s&&(n(e,`Current credentials don't have access to bucket "${t}"`),process.exit(1)),console.log(` Bucket: ${t}`),console.log(" Access verified."),i.sourceBucketName&&console.log(` Fork of: ${i.sourceBucketName}`)}else{let{data:i,error:s}=await m({config:r});s&&(n(e,"Current credentials don't have sufficient access"),process.exit(1)),console.log(` Access verified. Found ${i.buckets.length} bucket(s).`)}g(e)}export{b as default};
@@ -1 +1 @@
1
- import{a as c,b as a,c as r,g as m}from"../../chunk-SYGTCM6P.js";import{a as t}from"../../chunk-JRALYIRA.js";import"../../chunk-BETAO4PB.js";import{b as f}from"../../chunk-N3NPQW3I.js";import"../../chunk-NJKXT74Y.js";import"../../chunk-UUITLEOI.js";import"../../chunk-7F4WI32C.js";import"../../chunk-BP52O7NB.js";import{createBucket as p}from"@tigrisdata/storage";var e=m("forks","create");async function g(o){c(e);let s=t(o,["name"]),n=t(o,["fork-name","forkName"]),u=t(o,["snapshot","s","S"]);s||(r(e,"Source bucket name is required"),process.exit(1)),n||(r(e,"Fork name is required"),process.exit(1));let{error:i}=await p(n,{sourceBucketName:s,sourceBucketSnapshot:u,config:await f()});i&&(r(e,i.message),process.exit(1)),a(e,{name:s,forkName:n})}export{g as default};
1
+ import{a as c,b as a,c as r,g as m}from"../../chunk-SYGTCM6P.js";import{a as t}from"../../chunk-JRALYIRA.js";import{b as f}from"../../chunk-USCKVLDO.js";import"../../chunk-BETAO4PB.js";import"../../chunk-E4MLGABW.js";import"../../chunk-DOUR5YEY.js";import"../../chunk-KH63ANUX.js";import"../../chunk-2XAO2OYD.js";import{createBucket as p}from"@tigrisdata/storage";var e=m("forks","create");async function g(o){c(e);let s=t(o,["name"]),n=t(o,["fork-name","forkName"]),u=t(o,["snapshot","s","S"]);s||(r(e,"Source bucket name is required"),process.exit(1)),n||(r(e,"Fork name is required"),process.exit(1));let{error:i}=await p(n,{sourceBucketName:s,sourceBucketSnapshot:u,config:await f()});i&&(r(e,i.message),process.exit(1)),a(e,{name:s,forkName:n})}export{g as default};