@tigrisdata/cli 3.6.1 → 3.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +146 -5
- package/dist/auth/iam.js +1 -1
- package/dist/auth/provider.js +1 -1
- package/dist/chunk-3XXEYQSC.js +1 -0
- package/dist/{chunk-2FH2T67P.js → chunk-53WGD3ZA.js} +1 -1
- package/dist/chunk-672QCRVD.js +1 -0
- package/dist/{chunk-SDZJD5IE.js → chunk-7POBS5HR.js} +1 -1
- package/dist/chunk-APJUJ6TW.js +1 -0
- package/dist/chunk-BMWWPXMU.js +1 -0
- package/dist/chunk-C272RML4.js +7 -0
- package/dist/{chunk-KPEAQ6DK.js → chunk-D4UGWRGR.js} +1 -1
- package/dist/chunk-E6COPYXK.js +28 -0
- package/dist/chunk-G4OJTPSI.js +1 -0
- package/dist/chunk-HCZGZVF3.js +9 -0
- package/dist/{chunk-5YAC4LCL.js → chunk-IZ24VXZP.js} +1 -1
- package/dist/{chunk-4W44TSLI.js → chunk-JTLRSM54.js} +1 -1
- package/dist/chunk-KBJD6TVB.js +4 -0
- package/dist/chunk-L6I5MSYU.js +5 -0
- package/dist/chunk-LBT5RYWD.js +8 -0
- package/dist/chunk-RJKK3Z7Y.js +8 -0
- package/dist/{chunk-AWTU3DRX.js → chunk-RKWWRLWW.js} +1 -1
- package/dist/chunk-U5QIVG66.js +1 -0
- package/dist/chunk-ZTXDZIWN.js +1 -0
- package/dist/{chunk-7Z6ZHS7Y.js → chunk-ZXKDIMZY.js} +1 -1
- package/dist/cli-core.js +1 -1
- package/dist/cli.js +1 -1
- package/dist/constants.js +1 -1
- package/dist/index.js +1 -1
- package/dist/lib/access-keys/assign.js +1 -1
- package/dist/lib/access-keys/attach-policy.js +1 -1
- package/dist/lib/access-keys/create.js +1 -1
- package/dist/lib/access-keys/delete.js +1 -1
- package/dist/lib/access-keys/detach-policy.js +1 -1
- package/dist/lib/access-keys/get.js +1 -1
- package/dist/lib/access-keys/list-policies.js +1 -1
- package/dist/lib/access-keys/list.js +1 -1
- package/dist/lib/access-keys/rotate.js +1 -1
- package/dist/lib/buckets/create.js +1 -1
- package/dist/lib/buckets/delete.js +1 -1
- package/dist/lib/buckets/disable-snapshots.js +1 -1
- package/dist/lib/buckets/enable-snapshots.js +1 -1
- package/dist/lib/buckets/get.js +1 -1
- package/dist/lib/buckets/lifecycle/create.js +1 -1
- package/dist/lib/buckets/lifecycle/edit.js +1 -1
- package/dist/lib/buckets/lifecycle/list.js +1 -1
- package/dist/lib/buckets/lifecycle/shared.js +1 -1
- package/dist/lib/buckets/list.js +1 -1
- package/dist/lib/buckets/merge.js +1 -1
- package/dist/lib/buckets/migrate.js +5 -5
- package/dist/lib/buckets/rebase.js +1 -1
- package/dist/lib/buckets/restore.js +1 -1
- package/dist/lib/buckets/set-cors.js +1 -1
- package/dist/lib/buckets/set-locations.js +1 -1
- package/dist/lib/buckets/set-migration.js +1 -1
- package/dist/lib/buckets/set-notifications.js +1 -1
- package/dist/lib/buckets/set.js +1 -1
- package/dist/lib/bundle.js +1 -1
- package/dist/lib/configure/index.js +1 -1
- package/dist/lib/cp.js +1 -1
- package/dist/lib/credentials/test.js +1 -1
- package/dist/lib/iam/policies/create.js +1 -1
- package/dist/lib/iam/policies/delete.js +1 -1
- package/dist/lib/iam/policies/edit.js +1 -1
- package/dist/lib/iam/policies/get.js +1 -1
- package/dist/lib/iam/policies/link-key.js +1 -1
- package/dist/lib/iam/policies/list-keys.js +1 -1
- package/dist/lib/iam/policies/list.js +1 -1
- package/dist/lib/iam/policies/select-policy.js +1 -1
- package/dist/lib/iam/policies/unlink-key.js +1 -1
- package/dist/lib/iam/teams/create.js +1 -1
- package/dist/lib/iam/teams/edit.js +1 -1
- package/dist/lib/iam/teams/list.js +1 -1
- package/dist/lib/iam/teams/shared.js +1 -1
- package/dist/lib/iam/users/invite.js +1 -1
- package/dist/lib/iam/users/list.js +1 -1
- package/dist/lib/iam/users/remove.js +1 -1
- package/dist/lib/iam/users/revoke-invitation.js +1 -1
- package/dist/lib/iam/users/update-role.js +1 -1
- package/dist/lib/init/index.js +1 -1
- package/dist/lib/init/interactive.js +1 -1
- package/dist/lib/init/plan.js +1 -1
- package/dist/lib/init/shared.js +1 -1
- package/dist/lib/login/credentials.js +1 -1
- package/dist/lib/login/oauth.js +1 -1
- package/dist/lib/login/select.js +1 -1
- package/dist/lib/logout.js +1 -1
- package/dist/lib/ls.js +1 -1
- package/dist/lib/mk.js +1 -1
- package/dist/lib/mv.js +1 -1
- package/dist/lib/objects/delete.js +1 -1
- package/dist/lib/objects/get.js +1 -1
- package/dist/lib/objects/info.js +1 -1
- package/dist/lib/objects/list-versions.js +1 -1
- package/dist/lib/objects/list.js +1 -1
- package/dist/lib/objects/put.js +1 -1
- package/dist/lib/objects/restore-info.js +1 -1
- package/dist/lib/objects/restore.js +1 -1
- package/dist/lib/objects/set-access.js +1 -1
- package/dist/lib/objects/set.js +1 -1
- package/dist/lib/organizations/create.js +1 -1
- package/dist/lib/organizations/list.js +1 -1
- package/dist/lib/organizations/select.js +3 -3
- package/dist/lib/presign.js +1 -1
- package/dist/lib/rm.js +1 -1
- package/dist/lib/snapshots/list.js +1 -1
- package/dist/lib/snapshots/take.js +1 -1
- package/dist/lib/stat.js +1 -1
- package/dist/lib/telemetry/disable.js +1 -0
- package/dist/lib/telemetry/enable.js +3 -0
- package/dist/lib/telemetry/status.js +2 -0
- package/dist/lib/touch.js +1 -1
- package/dist/lib/update.js +1 -1
- package/dist/lib/whoami.js +2 -2
- package/dist/specs.yaml +43 -1
- package/dist/utils/analytics.js +1 -0
- package/dist/utils/exit.js +1 -1
- package/dist/utils/install-method.js +1 -0
- package/dist/utils/redact.js +1 -0
- package/dist/utils/telemetry-config.js +1 -0
- package/dist/utils/telemetry.js +1 -1
- package/dist/utils/update-check.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-4J4ZJAMQ.js +0 -8
- package/dist/chunk-5OPGTV33.js +0 -4
- package/dist/chunk-6ZZ54RU7.js +0 -1
- package/dist/chunk-AWUW4BD3.js +0 -1
- package/dist/chunk-FB54QSI7.js +0 -35
- package/dist/chunk-IHMIXWMY.js +0 -1
- package/dist/chunk-MW4NG7JY.js +0 -8
- package/dist/chunk-OWYZCGWM.js +0 -8
- package/dist/chunk-TOKNV45Q.js +0 -6
- package/dist/chunk-YGFC3GME.js +0 -1
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Tigris Data Inc
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -14,6 +14,13 @@ You can also install CLI using brew
|
|
|
14
14
|
brew install tigrisdata/tap/tigris
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
+
To try it without installing anything, run it through the unscoped
|
|
18
|
+
[`tigris`](https://www.npmjs.com/package/tigris) alias:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npx tigris init
|
|
22
|
+
```
|
|
23
|
+
|
|
17
24
|
## Usage
|
|
18
25
|
|
|
19
26
|
```
|
|
@@ -26,12 +33,14 @@ Run `tigris help` to see all available commands, or `tigris <command> help` for
|
|
|
26
33
|
|
|
27
34
|
| Command | Description |
|
|
28
35
|
|---------|-------------|
|
|
36
|
+
| `tigris init` (start) | Connect Tigris to your AI coding agent — MCP server config and agent skills |
|
|
29
37
|
| `tigris configure` (c) | Save access-key credentials to ~/.tigris/config.json for persistent use across all commands |
|
|
30
38
|
| `tigris login` (l) | Start a session via OAuth (default) or temporary credentials. Session state is cleared on logout |
|
|
31
39
|
| `tigris whoami` (w) | Print the currently authenticated user, organization, and auth method |
|
|
32
40
|
| `tigris update` | Update the CLI to the latest version |
|
|
33
41
|
| `tigris logout` | End the current session and clear login state. Credentials saved via 'configure' are kept |
|
|
34
42
|
| `tigris credentials` (creds) | Test whether your current credentials can reach Tigris and optionally verify access to a specific bucket |
|
|
43
|
+
| `tigris telemetry` | Show or change whether the CLI sends usage analytics and error reports |
|
|
35
44
|
| `tigris ls` (list) | List all buckets (no arguments) or objects under a bucket/prefix path. Accepts bare names or t3:// URIs |
|
|
36
45
|
| `tigris mk` (create) | Create a bucket (bare name) or a folder inside a bucket (bucket/folder/ with trailing slash) |
|
|
37
46
|
| `tigris touch` | Create an empty (zero-byte) object at the given bucket/key path |
|
|
@@ -50,6 +59,25 @@ Run `tigris help` to see all available commands, or `tigris <command> help` for
|
|
|
50
59
|
|
|
51
60
|
---
|
|
52
61
|
|
|
62
|
+
### `tigris init` (start)
|
|
63
|
+
|
|
64
|
+
Connect Tigris to your AI coding agent — MCP server config and agent skills
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
tigris init [flags]
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
| Flag | Description |
|
|
71
|
+
|------|-------------|
|
|
72
|
+
| `--agent` | Print a setup recipe for an AI coding agent to follow instead of running the interactive wizard |
|
|
73
|
+
|
|
74
|
+
**Examples:**
|
|
75
|
+
```bash
|
|
76
|
+
tigris init
|
|
77
|
+
npx tigris init
|
|
78
|
+
tigris init --agent
|
|
79
|
+
```
|
|
80
|
+
|
|
53
81
|
### `tigris configure` (c)
|
|
54
82
|
|
|
55
83
|
Save access-key credentials to ~/.tigris/config.json for persistent use across all commands
|
|
@@ -185,6 +213,55 @@ tigris credentials test
|
|
|
185
213
|
tigris credentials test --bucket my-bucket
|
|
186
214
|
```
|
|
187
215
|
|
|
216
|
+
### `tigris telemetry`
|
|
217
|
+
|
|
218
|
+
Show or change whether the CLI sends usage analytics and error reports
|
|
219
|
+
|
|
220
|
+
| Command | Description |
|
|
221
|
+
|---------|-------------|
|
|
222
|
+
| `tigris telemetry status` | Show whether telemetry is enabled, what is collected, and which setting is in effect |
|
|
223
|
+
| `tigris telemetry disable` | Turn off usage analytics and error reports on this machine |
|
|
224
|
+
| `tigris telemetry enable` | Turn usage analytics and error reports back on for this machine |
|
|
225
|
+
|
|
226
|
+
#### `tigris telemetry status`
|
|
227
|
+
|
|
228
|
+
Show whether telemetry is enabled, what is collected, and which setting is in effect
|
|
229
|
+
|
|
230
|
+
```
|
|
231
|
+
tigris telemetry status
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
**Examples:**
|
|
235
|
+
```bash
|
|
236
|
+
tigris telemetry status
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
#### `tigris telemetry disable`
|
|
240
|
+
|
|
241
|
+
Turn off usage analytics and error reports on this machine
|
|
242
|
+
|
|
243
|
+
```
|
|
244
|
+
tigris telemetry disable
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
**Examples:**
|
|
248
|
+
```bash
|
|
249
|
+
tigris telemetry disable
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
#### `tigris telemetry enable`
|
|
253
|
+
|
|
254
|
+
Turn usage analytics and error reports back on for this machine
|
|
255
|
+
|
|
256
|
+
```
|
|
257
|
+
tigris telemetry enable
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
**Examples:**
|
|
261
|
+
```bash
|
|
262
|
+
tigris telemetry enable
|
|
263
|
+
```
|
|
264
|
+
|
|
188
265
|
### `tigris ls` (list)
|
|
189
266
|
|
|
190
267
|
List all buckets (no arguments) or objects under a bucket/prefix path. Accepts bare names or t3:// URIs
|
|
@@ -450,10 +527,12 @@ Create, inspect, update, and delete buckets. Buckets are top-level containers th
|
|
|
450
527
|
|---------|-------------|
|
|
451
528
|
| `tigris buckets list` (l) | List all buckets in the current organization |
|
|
452
529
|
| `tigris buckets create` (c) | Create a new bucket with optional access, tier, and location settings |
|
|
530
|
+
| `tigris buckets rebase` | Update a fork with the latest changes from its source bucket |
|
|
531
|
+
| `tigris buckets merge` | Merge a fork's changes back into its source bucket |
|
|
453
532
|
| `tigris buckets get` (g) | Show details for a bucket including access level, region, tier, and custom domain |
|
|
454
533
|
| `tigris buckets delete` (d) | Delete one or more buckets by name. The bucket must be empty or delete-protection must be off |
|
|
455
534
|
| `tigris buckets restore` | Restore a soft-deleted bucket within its retention window. List recoverable buckets with "tigris buckets list --deleted" |
|
|
456
|
-
| `tigris buckets set` (s) | Update settings on an existing bucket such as access level, location, caching, or custom domain |
|
|
535
|
+
| `tigris buckets set` (s) | Update settings on an existing bucket such as access level, default tier, location, caching, or custom domain |
|
|
457
536
|
| `tigris buckets enable-snapshots` | Enable snapshots on an existing bucket, converting it to a snapshot bucket |
|
|
458
537
|
| `tigris buckets disable-snapshots` | Disable snapshots on an existing bucket, converting it back to a regular bucket. Rejected while the bucket has dependent forks |
|
|
459
538
|
| `tigris buckets set-locations` | Set the data locations for a bucket |
|
|
@@ -518,6 +597,41 @@ tigris buckets create my-fork --fork-of my-bucket
|
|
|
518
597
|
tigris buckets create my-fork --fork-of my-bucket --source-snapshot 1765889000501544464
|
|
519
598
|
```
|
|
520
599
|
|
|
600
|
+
#### `tigris buckets rebase`
|
|
601
|
+
|
|
602
|
+
Update a fork with the latest changes from its source bucket
|
|
603
|
+
|
|
604
|
+
```
|
|
605
|
+
tigris buckets rebase <fork>
|
|
606
|
+
```
|
|
607
|
+
|
|
608
|
+
**Examples:**
|
|
609
|
+
```bash
|
|
610
|
+
tigris buckets rebase my-fork
|
|
611
|
+
tigris buckets rebase my-fork --yes
|
|
612
|
+
```
|
|
613
|
+
|
|
614
|
+
#### `tigris buckets merge`
|
|
615
|
+
|
|
616
|
+
Merge a fork's changes back into its source bucket
|
|
617
|
+
|
|
618
|
+
```
|
|
619
|
+
tigris buckets merge <fork> [flags]
|
|
620
|
+
```
|
|
621
|
+
|
|
622
|
+
| Flag | Description |
|
|
623
|
+
|------|-------------|
|
|
624
|
+
| `-source, --into` | Source bucket to merge into. Defaults to the fork's parent source bucket |
|
|
625
|
+
| `-from-snap, --from-snapshot` | Merge from a specific snapshot of the fork rather than its current state. Accepts a snapshot version string or any UNIX nanosecond-precision timestamp (e.g. 1765889000501544464) |
|
|
626
|
+
|
|
627
|
+
**Examples:**
|
|
628
|
+
```bash
|
|
629
|
+
tigris buckets merge my-fork
|
|
630
|
+
tigris buckets merge my-fork --into my-bucket
|
|
631
|
+
tigris buckets merge my-fork --from-snapshot 1765889000501544464
|
|
632
|
+
tigris buckets merge my-fork --yes
|
|
633
|
+
```
|
|
634
|
+
|
|
521
635
|
#### `tigris buckets get` (g)
|
|
522
636
|
|
|
523
637
|
Show details for a bucket including access level, region, tier, and custom domain
|
|
@@ -568,7 +682,7 @@ tigris buckets restore my-bucket
|
|
|
568
682
|
|
|
569
683
|
#### `tigris buckets set` (s)
|
|
570
684
|
|
|
571
|
-
Update settings on an existing bucket such as access level, location, caching, or custom domain
|
|
685
|
+
Update settings on an existing bucket such as access level, default tier, location, caching, or custom domain
|
|
572
686
|
|
|
573
687
|
```
|
|
574
688
|
tigris buckets set <name> [flags]
|
|
@@ -577,6 +691,7 @@ tigris buckets set <name> [flags]
|
|
|
577
691
|
| Flag | Description |
|
|
578
692
|
|------|-------------|
|
|
579
693
|
| `--access` | Bucket access level |
|
|
694
|
+
| `--default-tier` | Change the default storage tier for objects uploaded to the bucket |
|
|
580
695
|
| `--locations` | Bucket location (see https://www.tigrisdata.com/docs/buckets/locations/ for more details) |
|
|
581
696
|
| `--allow-object-acl` | Enable object-level ACL |
|
|
582
697
|
| `--disable-directory-listing` | Disable directory listing |
|
|
@@ -590,6 +705,7 @@ tigris buckets set <name> [flags]
|
|
|
590
705
|
**Examples:**
|
|
591
706
|
```bash
|
|
592
707
|
tigris buckets set my-bucket --access public
|
|
708
|
+
tigris buckets set my-bucket --default-tier GLACIER
|
|
593
709
|
tigris buckets set my-bucket --locations iad,fra --cache-control 'max-age=3600'
|
|
594
710
|
tigris buckets set my-bucket --custom-domain assets.example.com
|
|
595
711
|
tigris buckets set my-bucket --soft-delete enable --retention-days 30
|
|
@@ -671,14 +787,19 @@ tigris buckets set-migration my-bucket --disable
|
|
|
671
787
|
Actively migrate all objects from a shadow bucket to Tigris by scheduling server-side migration for unmigrated objects
|
|
672
788
|
|
|
673
789
|
```
|
|
674
|
-
tigris buckets migrate <path>
|
|
790
|
+
tigris buckets migrate <path> [flags]
|
|
675
791
|
```
|
|
676
792
|
|
|
793
|
+
| Flag | Description |
|
|
794
|
+
|------|-------------|
|
|
795
|
+
| `--max-in-flight-gb` | Max total gigabytes of scheduled-but-unconfirmed migrations to keep in flight. Accepts 1-100 (default: 50) |
|
|
796
|
+
|
|
677
797
|
**Examples:**
|
|
678
798
|
```bash
|
|
679
799
|
tigris buckets migrate my-bucket
|
|
680
800
|
tigris buckets migrate my-bucket/images/
|
|
681
801
|
tigris buckets migrate t3://my-bucket/prefix/
|
|
802
|
+
tigris buckets migrate my-bucket --max-in-flight-gb 100
|
|
682
803
|
```
|
|
683
804
|
|
|
684
805
|
#### `tigris buckets lifecycle` (lc)
|
|
@@ -869,7 +990,7 @@ Low-level object operations for listing, downloading, uploading, and deleting in
|
|
|
869
990
|
| `tigris objects list` (l) | List objects in a bucket, optionally filtered by a key prefix |
|
|
870
991
|
| `tigris objects list-versions` (lv) | List object versions and delete markers in a bucket (requires bucket versioning). Returns both arrays separately to match the S3 ListObjectVersions response |
|
|
871
992
|
| `tigris objects get` (g) | Download an object by key. Prints to stdout by default, or saves to a file with --output |
|
|
872
|
-
| `tigris objects put` (p) | Upload a local file as an object. Content-type is auto-detected from extension unless overridden |
|
|
993
|
+
| `tigris objects put` (p) | Upload a local file — or data piped via stdin — as an object. Content-type is auto-detected from the file extension unless overridden |
|
|
873
994
|
| `tigris objects delete` (d) | Delete one or more objects by key from the given bucket. On a versioned bucket, the default creates a delete marker; use --version-id or --all-versions to hard-delete versions |
|
|
874
995
|
| `tigris objects set` (s) | (Deprecated) Update settings on an existing object such as access level. Use `tigris objects set-access` for ACL changes and `tigris mv` to rename |
|
|
875
996
|
| `tigris objects set-access` (sa) | Set the access level (public or private) on an existing object |
|
|
@@ -952,7 +1073,7 @@ tigris objects get my-bucket archive.zip --output ./archive.zip --mode stream
|
|
|
952
1073
|
|
|
953
1074
|
#### `tigris objects put` (p)
|
|
954
1075
|
|
|
955
|
-
Upload a local file as an object. Content-type is auto-detected from extension unless overridden
|
|
1076
|
+
Upload a local file — or data piped via stdin — as an object. Content-type is auto-detected from the file extension unless overridden
|
|
956
1077
|
|
|
957
1078
|
```
|
|
958
1079
|
tigris objects put <bucket> [key] [file] [flags]
|
|
@@ -969,6 +1090,8 @@ tigris objects put <bucket> [key] [file] [flags]
|
|
|
969
1090
|
tigris objects put my-bucket report.pdf ./report.pdf
|
|
970
1091
|
tigris objects put t3://my-bucket/report.pdf ./report.pdf
|
|
971
1092
|
tigris objects put my-bucket logo.png ./logo.png --access public --content-type image/png
|
|
1093
|
+
echo 'hello' | tigris objects put t3://my-bucket/hello.txt
|
|
1094
|
+
cat report.pdf | tigris objects put my-bucket report.pdf --content-type application/pdf
|
|
972
1095
|
```
|
|
973
1096
|
|
|
974
1097
|
#### `tigris objects delete` (d)
|
|
@@ -1066,6 +1189,7 @@ tigris objects restore <bucket> [key] [flags]
|
|
|
1066
1189
|
|------|-------------|
|
|
1067
1190
|
| `-d, --days` | How many days the restored copy stays available before reverting to its archived tier (default: 1) |
|
|
1068
1191
|
| `--version-id` | Restore a specific object version (requires bucket versioning). Omit to restore the current version |
|
|
1192
|
+
| `-snapshot, --snapshot-version` | Restore the object as of a specific bucket snapshot. Accepts a snapshot version string or any UNIX nanosecond-precision timestamp (e.g. 1765889000501544464) |
|
|
1069
1193
|
| `--format` | Output format (default: table) |
|
|
1070
1194
|
|
|
1071
1195
|
**Examples:**
|
|
@@ -1073,6 +1197,7 @@ tigris objects restore <bucket> [key] [flags]
|
|
|
1073
1197
|
tigris objects restore my-bucket archived.bin
|
|
1074
1198
|
tigris objects restore my-bucket archived.bin --days 3
|
|
1075
1199
|
tigris objects restore t3://my-bucket/archived.bin --days 7
|
|
1200
|
+
tigris objects restore my-bucket archived.bin --snapshot-version 1765889000501544464
|
|
1076
1201
|
```
|
|
1077
1202
|
|
|
1078
1203
|
#### `tigris objects restore-info` (ri)
|
|
@@ -1086,12 +1211,14 @@ tigris objects restore-info <bucket> [key] [flags]
|
|
|
1086
1211
|
| Flag | Description |
|
|
1087
1212
|
|------|-------------|
|
|
1088
1213
|
| `--version-id` | Inspect a specific object version (requires bucket versioning). Omit to read the current version |
|
|
1214
|
+
| `-snapshot, --snapshot-version` | Inspect the object as of a specific bucket snapshot. Accepts a snapshot version string or any UNIX nanosecond-precision timestamp (e.g. 1765889000501544464) |
|
|
1089
1215
|
| `--format` | Output format (default: table) |
|
|
1090
1216
|
|
|
1091
1217
|
**Examples:**
|
|
1092
1218
|
```bash
|
|
1093
1219
|
tigris objects restore-info my-bucket archived.bin
|
|
1094
1220
|
tigris objects restore-info t3://my-bucket/archived.bin --format json
|
|
1221
|
+
tigris objects restore-info my-bucket archived.bin --snapshot-version 1765889000501544464
|
|
1095
1222
|
```
|
|
1096
1223
|
|
|
1097
1224
|
### `tigris access-keys` (keys)
|
|
@@ -1619,6 +1746,20 @@ tigris iam teams edit team_id --description 'Platform team'
|
|
|
1619
1746
|
tigris iam teams edit team_id --members a@example.com,b@example.com
|
|
1620
1747
|
```
|
|
1621
1748
|
|
|
1749
|
+
## Telemetry
|
|
1750
|
+
|
|
1751
|
+
The CLI reports usage analytics and error reports to improve quality.
|
|
1752
|
+
Credentials are never collected. You can opt out at any time:
|
|
1753
|
+
|
|
1754
|
+
```bash
|
|
1755
|
+
tigris telemetry disable # persists to ~/.tigris/telemetry.json
|
|
1756
|
+
tigris telemetry status # current setting, and exactly what is collected
|
|
1757
|
+
tigris telemetry enable
|
|
1758
|
+
```
|
|
1759
|
+
|
|
1760
|
+
`TIGRIS_NO_TELEMETRY=1` or `DO_NOT_TRACK=1` also disable it and take precedence
|
|
1761
|
+
over the stored setting. Telemetry is off in development builds and test runs.
|
|
1762
|
+
|
|
1622
1763
|
## License
|
|
1623
1764
|
|
|
1624
1765
|
MIT
|
package/dist/auth/iam.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as b,b as c}from"../chunk-
|
|
1
|
+
import{a as b,b as c}from"../chunk-53WGD3ZA.js";import"../chunk-RKWWRLWW.js";import"../chunk-JTLRSM54.js";import"../chunk-D7WXNA2O.js";import"../chunk-NI4EYBQH.js";import"../chunk-ZTXDZIWN.js";import"../chunk-DV3LCXRH.js";import"../chunk-3XXEYQSC.js";import"../chunk-BMWWPXMU.js";import"../chunk-APJUJ6TW.js";import"../chunk-672QCRVD.js";import"../chunk-J3MAV7JB.js";import{a}from"../chunk-KJBSIIND.js";import"../chunk-F4AGJWCK.js";export{c as getIAMConfig,b as getOAuthIAMConfig,a as isFlyOrganization};
|
package/dist/auth/provider.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a,b,c,d,e,f,g}from"../chunk-
|
|
1
|
+
import{a,b,c,d,e,f,g}from"../chunk-RKWWRLWW.js";import"../chunk-672QCRVD.js";import"../chunk-J3MAV7JB.js";import"../chunk-F4AGJWCK.js";export{c as getEnvCredentials,b as getEnvForcePathStyle,e as getStorageConfig,f as getStorageConfigWithOrg,a as getTigrisConfig,g as requireOAuthLogin,d as resolveAuthMethod};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e="3.8.0";export{e as a};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as o,d as a}from"./chunk-
|
|
1
|
+
import{a as o,d as a}from"./chunk-RKWWRLWW.js";import{b as i}from"./chunk-JTLRSM54.js";import{c as r}from"./chunk-J3MAV7JB.js";import{i as n,p as s}from"./chunk-F4AGJWCK.js";async function d(e){s()!=="oauth"&&i(e,`This operation requires OAuth login.
|
|
2
2
|
Run "tigris login oauth" first.`);let t=r();await t.isAuthenticated()||i(e,'Not authenticated. Run "tigris login oauth" first.');let c=n(),{iamEndpoint:g,mgmtEndpoint:u}=o();return{sessionToken:await t.getAccessToken(),organizationId:c??void 0,iamEndpoint:g,mgmtEndpoint:u}}async function A(e){let t=await a();switch(t.type){case"oauth":return d(e);case"aws-profile":case"credentials":case"environment":case"configured":return{accessKeyId:t.accessKeyId,secretAccessKey:t.secretAccessKey,organizationId:n()??void 0,iamEndpoint:o().iamEndpoint};case"none":i(e,'Not authenticated. Run "tigris login" or "tigris configure" first.')}}export{d as a,A as b};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var t="https://t3.storage.dev",s="https://iam.storageapi.dev",o="https://mgmt.storageapi.dev",p="https://registry.npmjs.org/@tigrisdata/cli/latest",e=216e5,T=36e5,r="https://c3a84c6a2811c557d70e42412cda4ffa@o4507410155896832.ingest.us.sentry.io/4511767771545600",_="phc_6a2zd9w9hGzIqYl527bL4dXk3Wz8J9pEHyXTwP1hHq4",a="https://ph.tigrisdata.com";export{t as a,s as b,o as c,p as d,e,T as f,r as g,_ as h,a as i};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as n}from"./chunk-S77OAN6Y.js";import{b as s}from"./chunk-
|
|
1
|
+
import{a as n}from"./chunk-S77OAN6Y.js";import{b as s}from"./chunk-JTLRSM54.js";import{e as o}from"./chunk-D7WXNA2O.js";import m from"enquirer";import{listPolicies as f}from"@tigrisdata/iam";var{prompt:p}=m;async function h(a,t,c="Select a policy:"){let{data:e,error:r}=await f({config:a});if(r&&s(t,r),!e.policies||e.policies.length===0){o(t);return}n("Provide the policy ARN as a positional argument");let{selected:l}=await p({type:"select",name:"selected",message:c,choices:e.policies.map(i=>({name:i.resource,message:`${i.name} (${i.resource})`}))});return l}export{h as a};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{randomUUID as a}from"crypto";import{mkdirSync as c,readFileSync as T,writeFileSync as m}from"fs";import{homedir as f}from"os";import{join as i}from"path";var l=i(f(),".tigris"),s=i(l,"telemetry.json");var n=null;function o(){if(n)return n;try{let e=JSON.parse(T(s,"utf8"));n=e!==null&&typeof e=="object"?e:{}}catch{n={}}return n}function r(e){n=e;try{return c(l,{recursive:!0}),m(s,JSON.stringify(e,null,2),"utf8"),!0}catch{return!1}}function _(){n=null}function u(e){if(e===void 0)return!1;let t=e.trim().toLowerCase();return t!==""&&t!=="0"&&t!=="false"&&t!=="no"}function p(){return u(process.env.TIGRIS_NO_TELEMETRY)?"TIGRIS_NO_TELEMETRY":u(process.env.DO_NOT_TRACK)?"DO_NOT_TRACK":process.env.NODE_ENV==="test"?"test":process.env.TIGRIS_ENV==="development"?"development":o().optOut===!0?"opt-out":null}function I(){return p()!==null}function O(){let e=o();if(e.anonymousId)return e.anonymousId;let t=a();return r({...e,anonymousId:t}),t}function R(e){return r({...o(),optOut:e})}function b(){return o().noticeShownAt===void 0}function N(){r({...o(),noticeShownAt:Date.now()})}export{s as a,o as b,_ as c,p as d,I as e,O as f,R as g,b as h,N as i};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var o=[/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/g,/\bt(?:id|sec)_[A-Za-z0-9]+/gi,/eyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{4,}/g,/Bearer\s+[A-Za-z0-9._-]+/gi,/AKIA[0-9A-Z]{16}/g,/((?:secret[-_ ]?access[-_ ]?key|secret|password|token|authorization)["']?\s*[:=]\s*["']?)([^\s"',]+)/gi];function a(t){let s=t;for(let n of o)s=s.replace(n,(e,r)=>typeof r=="string"?`${r}[redacted]`:"[redacted]");return s}var u=/secret|password|token|credential|auth|user(name)?|e-?mail|owner|name|key$/i,g=new Set(["-t"]);function c(t){return u.test(t)||g.has(t)}function d(t){let s=[];for(let n=0;n<t.length;n++){let e=t[n],r=e.indexOf("=");if(e.startsWith("-")&&r!==-1){let i=e.slice(0,r);s.push(c(i)?`${i}=[redacted]`:`${i}=${a(e.slice(r+1))}`);continue}if(e.startsWith("-")&&c(e)&&n+1<t.length&&!t[n+1].startsWith("-")){s.push(e,"[redacted]"),n++;continue}s.push(a(e))}return s}export{a,d as b};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import{a as p,b as a}from"./chunk-G4OJTPSI.js";import{a as r}from"./chunk-3XXEYQSC.js";import{b as f}from"./chunk-BMWWPXMU.js";import{e as c,f as I,h as _,i as g}from"./chunk-APJUJ6TW.js";import{h as l,i as m}from"./chunk-672QCRVD.js";import{request as O}from"http";import{request as v}from"https";var E="/i/v0/e/",N=1e3;function y(){return process.env.TIGRIS_POSTHOG_KEY?.trim()||l}function R(){return process.env.TIGRIS_POSTHOG_HOST?.trim()||m}var C=["CI","CONTINUOUS_INTEGRATION","BUILD_NUMBER","GITHUB_ACTIONS","GITLAB_CI","CIRCLECI","TRAVIS","JENKINS_URL","BUILDKITE","TEAMCITY_VERSION","TF_BUILD"];function w(){return C.some(e=>{let t=process.env[e];return t!==void 0&&t!==""&&t!=="0"&&t.toLowerCase()!=="false"})}var k=/^[a-z0-9][a-z0-9-]*$/i;function M(e){let t=new Set;for(let o of e){if(o==="--")break;if(!o.startsWith("-")||o==="-")continue;let n=o.split("=")[0].replace(/^--?/,"");k.test(n)&&t.add(n)}return[...t].sort()}function b(e){try{let t=e.split(".")[1];if(!t)return;let n=JSON.parse(Buffer.from(t,"base64url").toString("utf8"))?.email;return typeof n=="string"&&n.length>0?n:void 0}catch{return}}async function h(){let e=I(),t={distinctId:e,anonymousId:e,isIdentified:!1,authMethod:"none"};try{let o=await import("./auth/storage.js"),n=await o.getTokens(),i=n?.idToken?b(n.idToken):void 0;return{distinctId:i??e,anonymousId:e,isIdentified:i!==void 0,authMethod:o.getLoginMethod()??"none",organizationId:o.getSelectedOrganization()??void 0}}catch{return t}}function T(){return{$lib:"tigris-cli",$lib_version:r,interface:"cli",cli_version:r,runtime:p()?"binary":"node",install_method:a(),node_version:process.version,os:process.platform,arch:process.arch,is_ci:w(),is_tty:process.stdout.isTTY===!0}}function S(e){return new Promise(t=>{let o=!1,n=()=>{o||(o=!0,t())};try{let i=new URL(E,R()),u=JSON.stringify(e),s=(i.protocol==="http:"?O:v)({protocol:i.protocol,hostname:i.hostname,port:i.port||void 0,path:i.pathname,method:"POST",timeout:N,headers:{"content-type":"application/json","content-length":Buffer.byteLength(u),"user-agent":`tigris-cli/${r}`}},d=>{d.resume(),d.on("end",n),d.on("error",n)});s.on("error",n),s.on("timeout",()=>{s.destroy(),n()}),s.end(u)}catch{n()}})}var L=`
|
|
2
|
+
Tigris CLI collects usage analytics (which commands you run and their
|
|
3
|
+
arguments, CLI version, OS) and error reports, to help us decide what to
|
|
4
|
+
improve. Credentials \u2014 access keys, secrets, tokens \u2014 are never collected.
|
|
5
|
+
|
|
6
|
+
Opt out any time: tigris telemetry disable (or set TIGRIS_NO_TELEMETRY=1)
|
|
7
|
+
`,A=new Set(["telemetry"]);function G(){c()||process.stderr.isTTY!==!0||globalThis.__TIGRIS_JSON_MODE===!0||_()&&(console.error(L),g())}async function U(e){try{let t=y();if(!t||c())return;let o=await h(),n=process.argv.slice(2);await S({api_key:t,event:"cli_command",distinct_id:o.distinctId,properties:{...T(),command:e.join(" "),command_root:e[0],command_args:f(n).join(" "),flags:M(n),auth_method:o.authMethod,json_mode:globalThis.__TIGRIS_JSON_MODE===!0,$set:{cli_version:r,cli_install_method:a(),cli_last_os:process.platform},...o.organizationId?{$groups:{company:o.organizationId}}:{}}})}catch{}}function x(e){A.has(e[0])||(G(),U(e))}async function Y(){try{let e=y();if(!e||c())return;let t=await h();if(!t.isIdentified)return;await S({api_key:e,event:"$identify",distinct_id:t.distinctId,properties:{...T(),$anon_distinct_id:t.anonymousId,$set:{email:t.distinctId,cli_version:r,cli_install_method:a()},...t.organizationId?{$groups:{company:t.organizationId}}:{}}})}catch{}}export{w as a,M as b,b as c,U as d,x as e,Y as f};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as d,b as o}from"./chunk-JNSFDQGG.js";import{a}from"./chunk-S6KFKBMY.js";import{b as i}from"./chunk-
|
|
1
|
+
import{a as d,b as o}from"./chunk-JNSFDQGG.js";import{a}from"./chunk-S6KFKBMY.js";import{b as i}from"./chunk-JTLRSM54.js";import{getBucketInfo as l,setBucketLifecycle as g}from"@tigrisdata/storage";var f=["STANDARD_IA","GLACIER","GLACIER_IR"];function c(e){return f.includes(e)}function u(e){return/^\d{4}-\d{2}-\d{2}/.test(e)&&!Number.isNaN(new Date(e).getTime())}function C(e){return{prefix:a(e,["prefix"]),storageClass:a(e,["storage-class","storageClass"]),days:a(e,["days"]),date:a(e,["date"]),expireDays:a(e,["expire-days","expireDays"]),expireDate:a(e,["expire-date","expireDate"]),enable:a(e,["enable"]),disable:a(e,["disable"])}}function p(e,{requireStorageClassForTiming:r=!0}={}){if(e.enable&&e.disable)return"Cannot use both --enable and --disable";if(r&&(e.days!==void 0||e.date!==void 0)&&!e.storageClass)return"--storage-class is required when setting --days or --date";if(e.storageClass&&!c(e.storageClass))return`--storage-class must be one of: ${f.join(", ")} (STANDARD is not a valid transition target)`;if(e.days!==void 0&&e.date!==void 0)return"Cannot specify both --days and --date";if(e.days!==void 0&&(Number.isNaN(Number(e.days))||Number(e.days)<=0))return"--days must be a positive number";if(e.date!==void 0&&!u(e.date))return"--date must be a valid ISO-8601 date (e.g. 2026-06-01)";if(e.expireDays!==void 0&&e.expireDate!==void 0)return"Cannot specify both --expire-days and --expire-date";if(e.expireDays!==void 0&&(Number.isNaN(Number(e.expireDays))||Number(e.expireDays)<=0))return"--expire-days must be a positive number";if(e.expireDate!==void 0&&!u(e.expireDate))return"--expire-date must be a valid ISO-8601 date (e.g. 2026-06-01)";if(e.prefix!==void 0&&e.prefix==="")return"--prefix cannot be empty"}function D(e){let r={};return e.storageClass&&(r.storageClass=e.storageClass),e.days!==void 0?(r.days=Number(e.days),r.date=void 0):e.date!==void 0&&(r.date=e.date,r.days=void 0),r}function R(e){if(e.expireDays!==void 0)return{days:Number(e.expireDays),date:void 0};if(e.expireDate!==void 0)return{date:e.expireDate,days:void 0}}function I(e){if(e.enable)return!0;if(e.disable)return!1}async function N(e,r,n){let{data:t,error:s}=await l(r,{config:n});return s&&i(e,s),t?.settings.lifecycleRules??[]}async function T(e,r,n,t){let{error:s}=await g(r,{lifecycleRules:n,config:t});s&&i(e,s)}function S(e){return d(e)??"-"}function A(e){return o(e)??"-"}export{C as a,p as b,D as c,R as d,I as e,N as f,T as g,S as h,A as i};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
var i="Ask permission, then install the CLI: `npm install -g @tigrisdata/cli --ignore-scripts`.",r="Ensure the CLI is on the latest version: `tigris update`.",o=["Check if the user is already authenticated using `tigris whoami`. If not, authenticate using `tigris login oauth`.","Run `tigris orgs list --format json`. If there's more than one org, ask which to use, then make it active with `tigris orgs select <org>` so the following commands target it.","Infer the project name from metadata (package.json, go.mod, pyproject.toml, ...). Check `tigris buckets list --format json` first; if the bucket is absent, `tigris buckets create <name> --format json`. Ask the user whenever anything is ambiguous.",`Create the access key into a private temp file (overwrite, never append), then print only the ID:
|
|
2
|
+
\`umask 077; tmpfile=$(mktemp); tigris access-keys create <username>-<project>-devel --format json > "$tmpfile" && jq -r '.id' < "$tmpfile"\``,"Grant bucket access: `tigris access-keys assign <id> --bucket <bucket> --role Editor --format json`.",`Detect whether the code uses the Tigris SDK or the AWS SDK, then have a small script append the right vars to .env, reading \`.id\`/\`.secret\` from the temp file. Do NOT read the secret into your context \u2014 append it via script. Delete the temp file when done: \`rm -f "$tmpfile"\`.
|
|
3
|
+
|
|
4
|
+
Tigris SDK (@tigrisdata/storage, storage-go):
|
|
5
|
+
TIGRIS_STORAGE_ACCESS_KEY_ID = .id
|
|
6
|
+
TIGRIS_STORAGE_SECRET_ACCESS_KEY = .secret (secret)
|
|
7
|
+
TIGRIS_STORAGE_BUCKET = <bucket>
|
|
8
|
+
|
|
9
|
+
AWS SDK:
|
|
10
|
+
AWS_ACCESS_KEY_ID = .id
|
|
11
|
+
AWS_SECRET_ACCESS_KEY = .secret (secret)
|
|
12
|
+
AWS_ENDPOINT_URL_S3 = https://t3.storage.dev (required)
|
|
13
|
+
AWS_ENDPOINT_URL_IAM = https://iam.storageapi.dev (required)
|
|
14
|
+
AWS_REGION = auto (required)
|
|
15
|
+
`,`Congratulate the user and point them to:
|
|
16
|
+
- JS: https://www.tigrisdata.com/docs/sdks/tigris/
|
|
17
|
+
- Go: https://pkg.go.dev/github.com/tigrisdata/storage-go
|
|
18
|
+
- Docs: https://www.tigrisdata.com/docs/
|
|
19
|
+
- Discord: https://community.tigrisdata.com/
|
|
20
|
+
- Skills: https://www.tigrisdata.com/docs/skills/
|
|
21
|
+
|
|
22
|
+
Suggest adding to their agent config:
|
|
23
|
+
> ## Tigris object storage
|
|
24
|
+
> This project uses Tigris. For any Tigris questions, consult https://www.tigrisdata.com/llms.txt before acting; look it up rather than relying on memory.`];function c(t){return`Help the user set up their project with Tigris:
|
|
25
|
+
|
|
26
|
+
${[t?r:i,...o].map((e,s)=>`${s+1}. ${e}`).join(`
|
|
27
|
+
`)}
|
|
28
|
+
`}export{c as a};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{realpathSync as r}from"fs";function n(){return globalThis.__TIGRIS_BINARY===!0}function t(){if(process.platform==="win32")return!1;try{let e=r(process.execPath);return e.includes("/Cellar/")||e.includes("/Caskroom/")}catch{return!1}}function l(){return n()?t()?"homebrew":"binary":"npm"}export{n as a,l as b};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import{spawnSync as w}from"child_process";import{homedir as O}from"os";import{delimiter as j,join as e,normalize as _,sep as P}from"path";import{fileURLToPath as C}from"url";import{applyEdits as A,modify as I,parse as R}from"jsonc-parser";function G(){return{encoding:"utf8",...process.platform==="win32"?{shell:!0}:{}}}function M(){let r;try{r=C(import.meta.url)}catch{return null}let t=r.indexOf(`${P}node_modules${P}`);return t===-1?null:e(r.slice(0,t),"node_modules",".bin")}var T=/[\\/](?:_npx|dlx(?:-[^\\/]*)?)(?:[\\/]|$)/;function K(r,t=M()){let s=t===null?null:y(t);return(r??"").split(j).filter(n=>n!==""&&!T.test(n)&&(s===null||y(n)!==s)).join(j)}function y(r){let t=_(r),s=t.length>1?t.replace(/[\\/]+$/,""):t;return process.platform==="win32"?s.toLowerCase():s}function W(){let r=w("tigris",["--version"],G());if(r.error||r.status!==0||!r.stdout)return null;let t=r.stdout.trim().split(`
|
|
2
|
+
`)[0].trim();return/^\d+\.\d+\.\d+/.test(t)?t:null}function V(r){return[...r?[]:["CLI - Global"],"MCP - Global","Skills - Project"].join(", ")}var c=O(),f=process.env.XDG_CONFIG_HOME?.trim()||e(c,".config"),E=process.env.CODEX_HOME?.trim()||e(c,".codex");function D(r,t){return process.platform==="darwin"?e(r,"Library","Application Support","Code","User"):process.platform==="win32"?e(t.APPDATA?.trim()||e(r,"AppData","Roaming"),"Code","User"):e(t.XDG_CONFIG_HOME?.trim()||e(r,".config"),"Code","User")}var $=D(c,process.env),S="saoudrizwan.claude-dev";function L(r,t){return e($,"globalStorage",r,"settings",t)}var Z="tigris",d="https://mcp.storage.dev/mcp";function q(r,t,s,n){let o=r?.trim()?r:"{}",l=[],i=R(o,l,{allowTrailingComma:!0});if(l.length>0)throw new Error("config is not valid JSON/JSONC");if(!b(i))throw new Error("config root is not an object");let p=i[t];if(p!==void 0&&!b(p))throw new Error(`"${t}" is not an object`);let a=b(p)&&Object.hasOwn(p,s),u=I(o,[t,s],n,{formattingOptions:{insertSpaces:!0,tabSize:2}});return{content:m(A(o,u)),replaced:a}}function b(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function Q(r,t,s,n){let l=[`[${t}.${s}]`,...Object.entries(n).map(([g,x])=>`${g} = ${JSON.stringify(x)}`)],i=r??"";if(N(i,t,s))throw new Error(`existing TOML defines ${t}.${s} inline`);let p=`${t}.${s}`,a=i.length?i.split(`
|
|
3
|
+
`):[],u=a.findIndex(g=>k(g)===p);if(u!==-1){let g=u+1;for(;g<a.length&&k(a[g])===null;)g++;return a.splice(u,g-u,...l),{content:m(a.join(`
|
|
4
|
+
`)),replaced:!0}}let h=i.length===0?"":m(i),v=h.length===0?"":`
|
|
5
|
+
`;return{content:m(h+v+l.join(`
|
|
6
|
+
`)),replaced:!1}}function m(r){return r.endsWith(`
|
|
7
|
+
`)?r:`${r}
|
|
8
|
+
`}function k(r){let t=r.trim().match(/^\[([^[\]]*)\]/);return t?t[1].split(".").map(s=>s.trim()).join("."):null}function N(r,t,s){let n="";for(let o of r.split(`
|
|
9
|
+
`)){let l=o.trim();if(l===""||l.startsWith("#"))continue;let i=k(l);if(i!==null){n=i;continue}let p=l.indexOf("=");if(p===-1)continue;let a=l.slice(0,p).trim().replace(/^['"]|['"]$/g,"");if(n===t&&(a===s||a.startsWith(`${s}.`))||n===""&&(a===`${t}.${s}`||a.startsWith(`${t}.${s}.`)))return!0}return!1}var z={source:"custom",command:"npx",args:["-y","mcp-remote",d]},Y=[{id:"claude-code",label:"Claude Code",mcp:{format:"json",key:"mcpServers",entry:{type:"http",url:d},projectPath:".mcp.json",globalPath:e(c,".claude.json")},skillsAgent:"claude-code",skillsProjectDir:e(".claude","skills"),skillsGlobalDir:e(c,".claude","skills")},{id:"cursor",label:"Cursor",mcp:{format:"json",key:"mcpServers",entry:{url:d},projectPath:e(".cursor","mcp.json"),globalPath:e(c,".cursor","mcp.json")},skillsAgent:"cursor",skillsProjectDir:e(".agents","skills"),skillsGlobalDir:e(c,".cursor","skills")},{id:"vscode",label:"VS Code",mcp:{format:"json",key:"servers",entry:{type:"http",url:d},projectPath:e(".vscode","mcp.json")},skillsAgent:"github-copilot",skillsProjectDir:e(".agents","skills"),skillsGlobalDir:e(c,".copilot","skills")},{id:"windsurf",label:"Windsurf",mcp:{format:"json",key:"mcpServers",entry:{serverUrl:d},globalPath:e(c,".codeium","windsurf","mcp_config.json")},skillsAgent:"windsurf",skillsProjectDir:e(".windsurf","skills"),skillsGlobalDir:e(c,".codeium","windsurf","skills")},{id:"codex",label:"Codex",mcp:{format:"toml",key:"mcp_servers",entry:{url:d},projectPath:e(".codex","config.toml"),globalPath:e(E,"config.toml")},skillsAgent:"codex",skillsProjectDir:e(".agents","skills"),skillsGlobalDir:e(E,"skills")},{id:"antigravity-cli",label:"Antigravity CLI",mcp:{format:"json",key:"mcpServers",entry:{serverUrl:d},globalPath:e(c,".gemini","config","mcp_config.json")},skillsAgent:"antigravity-cli",skillsProjectDir:e(".agents","skills"),skillsGlobalDir:e(c,".gemini","antigravity-cli","skills")},{id:"cline",label:"Cline",mcp:{format:"json",key:"mcpServers",entry:{type:"streamableHttp",url:d,disabled:!1,autoApprove:[]},globalPath:L(S,"cline_mcp_settings.json"),createDirs:!1},skillsAgent:"cline",skillsProjectDir:e(".agents","skills"),skillsGlobalDir:e(c,".agents","skills")},{id:"zed",label:"Zed",mcp:{format:"json",key:"context_servers",entry:z,projectPath:e(".zed","settings.json"),globalPath:e(f,"zed","settings.json")},skillsAgent:"zed",skillsProjectDir:e(".agents","skills"),skillsGlobalDir:e(c,".agents","skills")},{id:"roo",label:"Roo Code",mcp:{format:"json",key:"mcpServers",entry:{type:"streamable-http",url:d},projectPath:e(".roo","mcp.json")},skillsAgent:"roo",skillsProjectDir:e(".roo","skills"),skillsGlobalDir:e(c,".roo","skills")},{id:"opencode",label:"opencode",mcp:{format:"json",key:"mcp",entry:{type:"remote",url:d,enabled:!0},projectPath:"opencode.json",globalPath:e(f,"opencode","opencode.json")},skillsAgent:"opencode",skillsProjectDir:e(".agents","skills"),skillsGlobalDir:e(f,"opencode","skills")}];function ee(r,t,s){let n=r.map(o=>t==="global"?o.skillsGlobalDir:e(s,o.skillsProjectDir));return[...new Set(n)]}function te(r,t,s){let n=r.mcp;if(!n)return null;let o=n.globalPath!==void 0,l=n.projectPath!==void 0,i=t==="global"?o?"global":l?"project":null:l?"project":o?"global":null;return i==="global"?{path:n.globalPath,scope:i}:i==="project"?{path:e(s,n.projectPath),scope:i}:null}function re(r){let{env:t,cwd:s,home:n,fileExists:o}=r,l=t.XDG_CONFIG_HOME?.trim()||e(n,".config"),i=[];return(t.CLAUDECODE==="1"||o(e(s,".claude"))||o(e(n,".claude.json")))&&i.push("claude-code"),(t.TERM_PROGRAM==="cursor"||o(e(s,".cursor"))||o(e(n,".cursor")))&&i.push("cursor"),(t.TERM_PROGRAM==="vscode"||o(e(s,".vscode")))&&i.push("vscode"),o(e(n,".codeium","windsurf"))&&i.push("windsurf"),(t.CODEX_HOME?.trim()||o(e(n,".codex")))&&i.push("codex"),(o(e(n,".gemini","antigravity-cli"))||o(e(n,".gemini","antigravity"))||o(e(n,".gemini","config")))&&i.push("antigravity-cli"),(o(e(n,".cline"))||o(e(D(n,t),"globalStorage",S)))&&i.push("cline"),(o(e(l,"zed"))||o("/Applications/Zed.app"))&&i.push("zed"),o(e(s,".roo"))&&i.push("roo"),(o(e(l,"opencode"))||o(e(s,"opencode.json"))||o(e(s,"opencode.jsonc")))&&i.push("opencode"),i}var H="github.com/tigrisdata/skills",ne=[{id:"tigris-agent-kit",label:"Agent kit",recommended:!0},{id:"tigris-object-operations",label:"Object operations",recommended:!0},{id:"tigris-bucket-management",label:"Bucket management",recommended:!0},{id:"tigris-sdk-guide",label:"SDK guide",recommended:!0},{id:"tigris-snapshots-forking",label:"Snapshots & forking",recommended:!1},{id:"tigris-snapshots-recovery",label:"Snapshots recovery",recommended:!1},{id:"tigris-lifecycle-management",label:"Lifecycle management",recommended:!1},{id:"tigris-security-access-control",label:"Security & access control",recommended:!1},{id:"tigris-s3-migration",label:"S3 migration",recommended:!1},{id:"tigris-static-assets",label:"Static assets",recommended:!1},{id:"tigris-image-optimization",label:"Image optimization",recommended:!1},{id:"tigris-egress-optimizer",label:"Egress optimizer",recommended:!1},{id:"tigris-backup-export",label:"Backup & export",recommended:!1},{id:"tigris-python-sdk",label:"Python SDK",recommended:!1}];function oe(r,t,s){let n=["-y","skills","add",H];for(let o of r)n.push("--skill",o);s&&n.push("-g");for(let o of t)n.push("-a",o);return n.push("--yes"),n}export{G as a,K as b,W as c,V as d,Z as e,d as f,q as g,Q as h,Y as i,ee as j,te as k,re as l,H as m,ne as n,oe as o};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as n}from"./chunk-
|
|
1
|
+
import{b as n}from"./chunk-JTLRSM54.js";function o(s,e){if(e===void 0)return;let t=(Array.isArray(e)?e:[e]).map(r=>typeof r=="string"?r.trim():"").filter(r=>r.length>0);return t.length===0&&n(s,"--members requires at least one email address"),t}export{o as a};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{a as r,d as a}from"./chunk-D7WXNA2O.js";import{c}from"./chunk-NI4EYBQH.js";import{d as m}from"./chunk-ZTXDZIWN.js";import{b as i}from"./chunk-DV3LCXRH.js";function p(){return globalThis.__TIGRIS_JSON_MODE===!0}function g(){return process.stderr.isTTY===!0}function f(){return process.stdout.isTTY===!0}function u(t,o,n){let e=i(t);if(p()){let s={error:{message:e.message,code:e.exitCode,category:e.category}};e.nextActions.length>0&&(s.nextActions=e.nextActions),console.error(JSON.stringify(s))}else if(o||console.error(`
|
|
2
2
|
Error: ${e.message}`),g()&&e.nextActions.length>0){console.error(`
|
|
3
3
|
Next steps:`);for(let s of e.nextActions)console.error(` \u2192 ${s.command} ${s.description}`)}n?.skipCapture||m(t,{category:e.category,command:o?.command,exitCode:e.exitCode}),process.exit(e.exitCode)}function M(t,o){let n=o instanceof Error?o.message:String(o);a(t,n),u(o,t)}function x(t,o){let n=c(t.command,t.operation);return n?.messages?.nextActions?n.messages.nextActions.map(e=>({command:r(e.command,o),description:r(e.description,o)})):[]}function T(t,o){if(!f()||p())return;let n=x(t,o);if(n.length!==0){console.log(`
|
|
4
4
|
Next steps:`);for(let e of n)console.log(` \u2192 ${e.command} ${e.description}`)}}export{u as a,M as b,x as c,T as d};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{b as h}from"./chunk-S6KFKBMY.js";import{f as c}from"./chunk-C272RML4.js";import{a as d,d as e}from"./chunk-JTLRSM54.js";import{b as l,c as r,d as f,g as m,j as p}from"./chunk-D7WXNA2O.js";import{c as u}from"./chunk-J3MAV7JB.js";import{h as g,r as s}from"./chunk-F4AGJWCK.js";var o=p("login","oauth");async function O(w={}){l(o);let a=h(w);try{let t=u();await t.login({onDeviceCode:(i,y)=>{console.log(`
|
|
2
|
+
Your confirmation code: ${i}
|
|
3
|
+
`),console.log(`If browser doesn't open, visit: ${y}`)},onWaiting:()=>console.log(`
|
|
4
|
+
Waiting for authentication...`)}),await s();let n=await t.getOrganizations();if(n.length>0){let i=n[0];await g(i.id),a==="json"&&console.log(JSON.stringify({action:"logged_in"})),r(o,{org:i.name}),e(o),n.length>1&&m(o,{count:n.length})}else a==="json"&&console.log(JSON.stringify({action:"logged_in"})),r(o,{org:"none"}),e(o);c()}catch(t){f(o),d(t,o)}}var j=O;export{O as a,j as b};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import{a as I,c as m,d as S,e as v,g as T,h as L,i as C,j as P,k as j,l as x,n as b,o as A}from"./chunk-HCZGZVF3.js";import{spawnSync as M}from"child_process";import{existsSync as d,mkdirSync as F,readFileSync as O,writeFileSync as V}from"fs";import{homedir as W}from"os";import{dirname as E}from"path";import*as t from"@clack/prompts";async function Q(){process.stdin.isTTY||(console.error("Run `tigris init` in an interactive terminal."),process.exit(1));let e=process.cwd(),i=W();t.intro("Connect Tigris to your AI coding agent");let n=x({env:process.env,cwd:e,home:i,fileExists:d}),r=await t.multiselect({message:"Which editor(s) should use Tigris?",options:C.map(l=>({value:l.id,label:l.label})),initialValues:n,required:!0});if(t.isCancel(r))return k();let s=C.filter(l=>r.includes(l.id)),a=m(),o=await t.select({message:"What would you like to install?",options:[{value:"defaults",label:"Defaults",hint:S(a!==null)},{value:"custom",label:"Customize installation"}],initialValue:"defaults"});if(t.isCancel(o))return k();let u="global",c="project";o==="custom"&&(u=await R("MCP server:","global"),c=await R("Agent skills:","project"));let g=b.map(l=>l.id);if(o==="custom"&&c!=="skip"){let l=await t.multiselect({message:"Which skills should your agent get? (space to toggle)",options:b.map(p=>({value:p.id,label:p.label})),initialValues:b.filter(p=>p.recommended).map(p=>p.id),required:!1});if(t.isCancel(l))return k();g=l}let f;if(a?f=N(a)||Y(a):f=G(),u==="skip")t.log.info("MCP server: skipped");else for(let l of s)_(l,u,e,i);if(c==="skip"||g.length===0)t.log.info("Agent skills: skipped");else{let l=s.map(h=>h.skillsAgent),p=A(g,l,c==="global"),w=$("npx",p,`Installing ${g.length} Tigris skill(s) (${c})`);if(w.ok)for(let h of P(s,c,e))t.log.success(`Skills \u2192 ${y(h,i)}`);else w.output&&t.log.error(w.output.split(`
|
|
2
|
+
`).slice(-6).join(`
|
|
3
|
+
`))}t.note(f?"tigris init --agent":"npx tigris init --agent","Paste this to your AI coding agent to finish setup"),t.outro("Your agent will authenticate with Tigris in-browser on first use.")}async function R(e,i){let n=await t.select({message:e,options:[{value:"global",label:"Global (available in all projects)"},{value:"project",label:"Project-level (this project only)"},{value:"skip",label:"Skip"}],initialValue:i});return t.isCancel(n)&&k(),n}function k(){t.cancel("Setup cancelled."),process.exit(1)}function y(e,i){return e.startsWith(i)?`~${e.slice(i.length)}`:e}function _(e,i,n,r){let s=e.mcp,a=j(e,i,n);if(!s||!a){t.log.warn(`${e.label}: no writable MCP config \u2014 skipped.`);return}let o=a.path;!d(o)&&o.endsWith(".json")&&d(`${o}c`)&&(o=`${o}c`);let u=E(o);if(s.createDirs===!1&&!d(E(u))){t.log.warn(`${e.label}: not installed \u2014 skipped.`);return}try{let c=d(o)?O(o,"utf8"):null,g=s.format==="toml"?L(c,s.key,v,H(s.entry)):T(c,s.key,v,s.entry);F(u,{recursive:!0}),V(o,g.content);let f=a.scope===i?"":` (${a.scope}-only)`;t.log.success(`${e.label}: MCP \u2192 ${y(o,r)}${f}`)}catch{t.log.error(`${e.label}: could not update ${y(o,r)} (incompatible or unwritable) \u2014 skipped.`)}}function H(e){let i={};for(let[n,r]of Object.entries(e))typeof r=="string"&&(i[n]=r);return i}function G(){let e=$("npm",["install","-g","@tigrisdata/cli","--ignore-scripts"],"Installing Tigris CLI (global)");return D(e)?m()===null?(t.log.warn("Tigris CLI installed but not on PATH \u2014 the agent handoff will use npx."),!1):!0:!1}function N(e){if(!D($("tigris",["update"],`Checking for Tigris CLI updates (${e})`)))return!1;let n=m();return n&&n!==e&&t.log.success(`Tigris CLI ${e} \u2192 ${n}`),!0}function Y(e){let i=M("tigris",["init","--agent"],I());return i.error||i.status!==0?(t.log.warn(`Tigris CLI ${e} predates \`init --agent\` \u2014 the agent handoff will use npx.`),!1):!0}function $(e,i,n){let r=t.spinner();r.start(n);let s=M(e,i,I());return s.status===0?(r.stop(`${n} \u2014 done`),{ok:!0}):(r.stop(`${n} \u2014 failed`),{ok:!1,output:(s.stderr||s.stdout||s.error?.message||"").trim()})}function D(e){return!e.ok&&e.output&&t.log.error(e.output.split(`
|
|
4
|
+
`).slice(-6).join(`
|
|
5
|
+
`)),e.ok}export{Q as a};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import{b as h}from"./chunk-G4OJTPSI.js";import{a as p}from"./chunk-3XXEYQSC.js";import{d as f,e as m,f as d}from"./chunk-672QCRVD.js";import{mkdirSync as w,readFileSync as E,writeFileSync as T}from"fs";import I from"https";import{homedir as g}from"os";import{join as C}from"path";var N=C(g(),".tigris","update-check.json");function _(){try{let r=E(N,"utf-8"),i=JSON.parse(r);return typeof i.latestVersion=="string"&&typeof i.lastChecked=="number"?i:null}catch{return null}}function b(r){try{w(C(g(),".tigris"),{recursive:!0}),T(N,JSON.stringify(r),"utf-8")}catch{}}function U(r,i){let o=s=>{let n=s.startsWith("v")?s.slice(1):s,c=null,a=n.indexOf("-");a!==-1&&(c=n.slice(a+1),n=n.slice(0,a));let l=n.split(".");if(l.length!==3)return null;let u=l.map(Number);return u.some(Number.isNaN)?null:{major:u[0],minor:u[1],patch:u[2],prerelease:c}},t=o(r),e=o(i);return!t||!e?!1:e.major>t.major?!0:e.major<t.major?!1:e.minor>t.minor?!0:e.minor<t.minor?!1:e.patch>t.patch?!0:e.patch<t.patch?!1:t.prerelease&&!e.prerelease?!0:(!t.prerelease&&e.prerelease,!1)}function D(){switch(h()){case"npm":return"npm install -g @tigrisdata/cli";case"homebrew":return"brew upgrade tigris";default:return process.platform==="win32"?"irm https://raw.githubusercontent.com/tigrisdata/storage/main/packages/cli/scripts/install.ps1 | iex":"curl -fsSL https://raw.githubusercontent.com/tigrisdata/storage/main/packages/cli/scripts/install.sh | sh"}}function k(r={}){return new Promise((i,o)=>{let t=I.get(f,{timeout:1e4},e=>{let s="";e.on("data",n=>{s+=n}),e.on("end",()=>{try{let n=JSON.parse(s);typeof n.version=="string"?(b({..._(),latestVersion:n.version,lastChecked:Date.now()}),i(n.version)):o(new Error("Unexpected registry response"))}catch{o(new Error("Failed to parse registry response"))}})});t.on("error",e=>{o(e)}),t.on("timeout",()=>{t.destroy(),o(new Error("Request timed out"))}),r.unref&&t.on("socket",e=>{e.unref()}),t.end()})}function S(){k({unref:!0}).catch(()=>{})}function M(){if(process.env.TIGRIS_NO_UPDATE_CHECK==="1"||!process.stdout.isTTY)return;let r=_(),i=Number(process.env.TIGRIS_UPDATE_NOTIFY_INTERVAL_MS)||36e5;if(r&&U(p,r.latestVersion)&&(!r.lastNotified||Date.now()-r.lastNotified>i)){let t=`Update available: ${p} \u2192 ${r.latestVersion}`,e='Run "tigris update" to upgrade.',s=Math.max(t.length,e.length)+4,n=`\u250C${"\u2500".repeat(s-2)}\u2510`,c=`\u2514${"\u2500".repeat(s-2)}\u2518`,a=l=>`\u2502 ${l.padEnd(s-4)} \u2502`;console.log(`
|
|
2
|
+
${n}
|
|
3
|
+
${a("")}
|
|
4
|
+
${a(t)}
|
|
5
|
+
${a(e)}
|
|
6
|
+
${a("")}
|
|
7
|
+
${c}
|
|
8
|
+
`),b({...r,lastNotified:Date.now()})}let o=Number(process.env.TIGRIS_UPDATE_CHECK_INTERVAL_MS)||216e5;(!r||Date.now()-r.lastChecked>o)&&S()}export{_ as a,U as b,D as c,k as d,M as e};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import{e as x}from"./chunk-C272RML4.js";import{a as S}from"./chunk-JTLRSM54.js";import{h as C}from"./chunk-D7WXNA2O.js";import{c as b,d as k,e as E}from"./chunk-ZTXDZIWN.js";import{b as v}from"./chunk-DV3LCXRH.js";import{Command as V,Option as H}from"commander";function y(n,o,e,a,t){let r=n[n.length-1],i=typeof r=="object"&&r!==null&&"args"in r?r.args:n.filter(m=>typeof m=="string");if(i.length===0)return i;let l=i[0],d=(o.commands??[]).filter(m=>g(m,[...e,m.name],t));if(!new Set(d.flatMap(m=>[m.name,...Array.isArray(m.alias)?m.alias:m.alias?[m.alias]:[]])).has(l)){let m=d.map(u=>u.name),p=e.length>0?`'${l}' for '${e.join(" ")}'`:`'${l}'`;console.error(`Unknown command ${p}.`),m.length>0&&console.error(`Available commands: ${m.join(", ")}`);let f=e.length>0?`${a.name} ${e.join(" ")} help`:`${a.name} help`;console.error(`
|
|
2
|
+
Run "${f}" for usage.`),process.exit(1)}return i}function Z(){b();let n=!1,o=async e=>{n&&process.exit(1),n=!0,k(e,{crash:!0,exitCode:v(e).exitCode}),await E(),S(e,void 0,{skipCapture:!0})};process.on("unhandledRejection",e=>{(e===""||e===void 0)&&(console.error(`
|
|
3
|
+
Operation cancelled`),process.exit(1)),o(e)}),process.on("uncaughtException",e=>{o(e)})}function T(n){return/^[a-zA-Z0-9_-]+$/.test(n)}function W(n){let o;n.type==="positional"?o=` ${n.name}`:(o=` --${n.name}`,n.alias&&typeof n.alias=="string"&&(o+=n.alias.length===1?`, -${n.alias}`:`, --${n.alias}`));let e=26,a=o.length>=e?`${o} `:o.padEnd(e),t=n.description;return n.options&&(Array.isArray(n.options)&&typeof n.options[0]=="string"?t+=` (options: ${n.options.join(", ")})`:t+=` (options: ${n.options.map(r=>r.value).join(", ")})`),n.default&&(t+=` [default: ${n.default}]`),n.required&&(t+=" [required]"),n.deprecated&&(t+=n.replaced_by?` [deprecated: use ${n.replaced_by}]`:" [deprecated]"),n["required-when"]&&(t+=` [required when: ${n["required-when"]}]`),n.multiple&&(t+=" [multiple values: comma-separated]"),n.type==="positional"&&(t+=" [positional argument]"),n.examples&&n.examples.length>0&&(t+=` (examples: ${n.examples.join(", ")})`),`${a}${t}`}function g(n,o,e){return n.removed||e(o)?!0:n.commands?n.commands.some(a=>g(a,[...o,a.name],e)):!1}function D(n,o){let e=o?` Use ${o} instead.`:" See the changelog for migration guidance.";console.error(`${n} was removed in this version.${e}`),process.exit(1)}function j(n,o){if(n)for(let e of n){if(!e.removed)continue;h(o,e.name,n)!==void 0&&D(`--${e.name}`,e.replaced_by)}}function I(n,o,e,a){let t=e.join(" ");if(console.log(`
|
|
4
|
+
${n.name} ${t} - ${o.description??""}
|
|
5
|
+
`),o.commands&&o.commands.length>0){let l=o.commands.filter(s=>!s.removed&&g(s,[...e,s.name],a));l.length>0&&(console.log("Commands:"),l.forEach(s=>{let d=` ${s.name}`;if(s.alias){let m=Array.isArray(s.alias)?s.alias:[s.alias];d+=` (${m.join(", ")})`}let c=d.padEnd(24);console.log(`${c}${s.description??""}`)}),console.log())}let r=n.definitions?.global_arguments??[],i=w(r,o.arguments).filter(l=>!l.removed);i.length>0&&(console.log("Arguments:"),i.forEach(l=>{console.log(W(l))}),console.log()),o.examples&&o.examples.length>0&&(console.log("Examples:"),o.examples.forEach(l=>{console.log(` ${l}`)}),console.log()),o.commands&&o.commands.length>0&&console.log(`Use "${n.name} ${t} <command> help" for more information about a command.`)}function R(n,o,e){console.log(`Tigris CLI Version: ${o}
|
|
6
|
+
`),console.log(`Usage: tigris [command] [options]
|
|
7
|
+
`),console.log("Commands:"),n.commands.filter(t=>!t.removed&&g(t,[t.name],e)).forEach(t=>{let r=` ${t.name}`;if(t.alias){let l=Array.isArray(t.alias)?t.alias:[t.alias];r+=` (${l.join(", ")})`}let i=r.padEnd(24);console.log(`${i}${t.description??""}`)}),console.log(`
|
|
8
|
+
Use "${n.name} <command> help" for more information about a command.`)}function w(n,o){let e=o??[],a=new Set(e.map(i=>i.name)),t=new Set(e.filter(i=>i.alias).map(i=>i.alias)),r=n.filter(i=>!a.has(i.name)&&!(i.alias&&t.has(i.alias)));return[...e,...r]}function _(n,o=[]){o.forEach(e=>{if(e.type==="positional"){let a=e.required?`<${e.name}>`:`[${e.name}]`;n.argument(a,e.description)}else{let a=e.alias&&typeof e.alias=="string"&&e.alias.length===1,t=e.alias&&typeof e.alias=="string"&&e.alias.length>1,r=a?`-${e.alias}, --${e.name}`:t?`--${e.alias}, --${e.name}`:`--${e.name}`;if(e.type==="flag"||(e.type==="boolean"?r+=" [value]":e.options?r+=" <value>":r+=e.required||e["required-when"]?" <value>":" [value]"),e.removed)n.addOption(new H(r,e.description??"").hideHelp());else{let i=e.description??"";if(e.deprecated){let l=e.replaced_by?` Use ${e.replaced_by} instead.`:"";i=`(deprecated) ${i}${l}`}n.option(r,i,e.default)}}})}function G(n){return n.replace(/-([a-z])/g,(o,e)=>e.toUpperCase())}function h(n,o,e){if(e){let t=e.find(r=>r.name===o);if(t?.alias&&typeof t.alias=="string"){let r=t.alias.charAt(0).toUpperCase()+t.alias.slice(1);if(n[r]!==void 0)return n[r]}}let a=[o,o.replace(/-/g,""),o.replace(/-/g,"").toLowerCase(),o.charAt(0).toUpperCase(),G(o)];for(let t of a)if(n[t]!==void 0)return n[t]}function q(n,o){for(let e of n){if(e["required-when"]){let[a,t]=e["required-when"].split("="),r=h(o,a,n),i=h(o,e.name,n);if(r===t&&!i)return console.error(`--${e.name} is required when --${a} is ${t}`),!1}if(e.required&&!h(o,e.name,n))return console.error(`--${e.name} is required`),!1}return!0}function L(n,o,e){let a;"optsWithGlobals"in e&&typeof e.optsWithGlobals=="function"?a=e.optsWithGlobals():"opts"in e&&typeof e.opts=="function"?a=e.opts():a=e;let t={...a};return n.filter(i=>i.type==="positional").forEach((i,l)=>{o[l]!==void 0&&(i.multiple?t[i.name]=o[l].split(",").map(s=>s.trim()):t[i.name]=o[l])}),n.forEach(i=>{i.multiple&&i.type!=="positional"&&t[i.name]&&typeof t[i.name]=="string"&&(t[i.name]=t[i.name].split(",").map(l=>l.trim()))}),t}async function U(n,o,e=[],a={}){(a.json||a.format==="json")&&(globalThis.__TIGRIS_JSON_MODE=!0);let{module:t,error:r}=await n(o);(r||!t)&&(console.error(r),process.exit(1));let i=o[o.length-1],l=t.default||t[i];typeof l!="function"&&(console.error(`Command not implemented: ${o.join(" ")}`),process.exit(1)),x(o),await l({...a,_positional:e})}function M(n,o,e,a=[]){let{specs:t,loadModule:r,hasImplementation:i}=n,l=t.definitions?.global_arguments??[];for(let s of e){T(s.name)||(console.error(`Invalid command name "${s.name}": only alphanumeric, hyphens, and underscores allowed`),process.exit(1));let d=[...a,s.name];if(!g(s,d,i))continue;let c=o.command(s.name,s.removed?{hidden:!0}:void 0).description(s.description??"");if(s.alias&&(Array.isArray(s.alias)?s.alias:[s.alias]).forEach(p=>{c.alias(p)}),s.removed){c.allowUnknownOption(!0),c.allowExcessArguments(!0),c.action(()=>{D(`${t.name} ${d.join(" ")}`,s.replaced_by)});continue}if(s.commands&&s.commands.length>0)if(M(n,c,s.commands,d),s.default){let m=s.commands.find(p=>p.name===s.default);if(m){let p=w(l,[...s.arguments||[],...m.arguments||[]]);_(c,p),c.allowExcessArguments(!0),c.action(async(...f)=>{let u=f.pop(),A=y([u],s,d,t,i),$=L(p,A,u);p.length>0&&!q(p,$)||(j(p,$),m.deprecated&&m.messages?.onDeprecated&&C(m.messages.onDeprecated),await U(r,[...d,m.name],A,$))})}}else c.allowExcessArguments(!0),c.action((...m)=>{y(m,s,d,t,i),I(t,s,d,i)});else _(c,w(l,s.arguments)),c.action(async(...m)=>{let p=m.pop(),f=m,u=L(s.arguments||[],f,p);s.arguments&&!q(s.arguments,u)||(j(s.arguments,u),s.deprecated&&s.messages?.onDeprecated&&C(s.messages.onDeprecated),await U(r,d,f,u))});c.command("help").description("Show help for this command").action(()=>{I(t,s,d,i)})}}function Q(n){let{specs:o,version:e,hasImplementation:a}=n,t=new V;return t.name(o.name).description(o.description).version(e),M(n,t,o.commands),t.command("help").description("Show general help").action(()=>{R(o,e,a)}),t.command("version").description("Show the CLI version").action(()=>{console.log(e)}),t.allowExcessArguments(!0),t.action((...r)=>{y(r,{commands:o.commands},[],o,a),R(o,e,a)}),t}export{Z as a,T as b,W as c,g as d,I as e,R as f,_ as g,q as h,L as i,M as j,Q as k};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as o,b as a,c as g}from"./chunk-
|
|
1
|
+
import{a as o,b as a,c as g}from"./chunk-672QCRVD.js";import{a as A,c as I}from"./chunk-J3MAV7JB.js";import{i as c,j as l,k as y,l as i,p as d}from"./chunk-F4AGJWCK.js";import{fromIni as S}from"@aws-sdk/credential-providers";function _(){return process.env.AWS_ENDPOINT_URL_S3||process.env.AWS_ENDPOINT_URL_IAM?{endpoint:process.env.AWS_ENDPOINT_URL_S3||o,iamEndpoint:process.env.AWS_ENDPOINT_URL_IAM||a,mgmtEndpoint:process.env.AWS_ENDPOINT_URL_MGMT||g}:{endpoint:process.env.TIGRIS_STORAGE_ENDPOINT||o,iamEndpoint:process.env.TIGRIS_IAM_ENDPOINT||a,mgmtEndpoint:process.env.TIGRIS_MGMT_ENDPOINT||g}}function K(){let e=process.env.TIGRIS_FORCE_PATH_STYLE?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"||e==="on"}var r=_(),T=A();function p(){if(process.env.AWS_ACCESS_KEY_ID&&process.env.AWS_SECRET_ACCESS_KEY){let e=process.env.AWS_ENDPOINT_URL_S3||o;return{accessKeyId:process.env.AWS_ACCESS_KEY_ID,secretAccessKey:process.env.AWS_SECRET_ACCESS_KEY,endpoint:e,source:"aws"}}if(process.env.TIGRIS_STORAGE_ACCESS_KEY_ID&&process.env.TIGRIS_STORAGE_SECRET_ACCESS_KEY){let e=process.env.TIGRIS_STORAGE_ENDPOINT||o;return{accessKeyId:process.env.TIGRIS_STORAGE_ACCESS_KEY_ID,secretAccessKey:process.env.TIGRIS_STORAGE_SECRET_ACCESS_KEY,endpoint:e,source:"tigris"}}return null}var f=!1;async function C(){if(f||!process.stdin.isTTY)return!1;f=!0,console.log(`Not authenticated. Starting login...
|
|
2
2
|
`);let{default:e}=await import("./lib/login/select.js");return await e({}),console.log(),!0}async function h(){if(l()){let s=process.env.AWS_PROFILE||"default",u=await S({profile:s})();return{type:"aws-profile",profile:s,accessKeyId:u.accessKeyId,secretAccessKey:u.secretAccessKey}}let e=p();if(e)return{type:"environment",accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,source:e.source};let t=d();if(t==="oauth")return{type:"oauth"};if(t==="credentials"){let s=i();if(s)return{type:"credentials",accessKeyId:s.accessKeyId,secretAccessKey:s.secretAccessKey}}let n=i();return n?{type:"configured",accessKeyId:n.accessKeyId,secretAccessKey:n.secretAccessKey}:{type:"none"}}async function m(e){let t=await E(e);return K()?{...t,forcePathStyle:!0}:t}async function E(e){let t=await h();switch(t.type){case"aws-profile":{let n=await y(t.profile);return{accessKeyId:t.accessKeyId,secretAccessKey:t.secretAccessKey,endpoint:n.endpoint||r.endpoint||o,iamEndpoint:n.iamEndpoint||r.iamEndpoint}}case"oauth":{let n=I(),s=c();if(!s)throw new Error('No organization selected. Please run "tigris orgs select" first.');return{sessionToken:await n.getAccessToken(),accessKeyId:"",secretAccessKey:"",...e?.withCredentialProvider&&{credentialProvider:async()=>({accessKeyId:"",secretAccessKey:"",sessionToken:await n.getAccessToken(),expiration:new Date(Date.now()+600*1e3)})},endpoint:r.endpoint,organizationId:s,iamEndpoint:r.iamEndpoint,authDomain:T.domain}}case"credentials":{let n=c();return{accessKeyId:t.accessKeyId,secretAccessKey:t.secretAccessKey,endpoint:i()?.endpoint||o,organizationId:n??void 0,iamEndpoint:r.iamEndpoint}}case"environment":return{accessKeyId:t.accessKeyId,secretAccessKey:t.secretAccessKey,endpoint:p()?.endpoint||o};case"configured":{let n=c();return{accessKeyId:t.accessKeyId,secretAccessKey:t.secretAccessKey,endpoint:i()?.endpoint||o,organizationId:n??void 0,iamEndpoint:r.iamEndpoint}}case"none":{if(await C())return E(e);throw new Error('Not authenticated. Please run "tigris login" or "tigris configure" first.')}}}async function O(){let e=await m(),t=c();return{...e,...t&&!e.organizationId?{organizationId:t}:{}}}function R(e){return d()==="oauth"?!1:(p()||i()?console.log(`You are using access key credentials, which belong to a single organization.
|
|
3
3
|
${e} is only available with OAuth login.
|
|
4
4
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as K}from"./chunk-S77OAN6Y.js";import{a as w}from"./chunk-RKWWRLWW.js";import{b as S}from"./chunk-S6KFKBMY.js";import{b as u,d as l}from"./chunk-JTLRSM54.js";import{b as f,c as y,j as p}from"./chunk-D7WXNA2O.js";import{a as i}from"./chunk-672QCRVD.js";import{l as n,n as o,o as d,q as m,s as g}from"./chunk-F4AGJWCK.js";import C from"enquirer";import{whoami as k}from"@tigrisdata/iam";var{prompt:I}=C,a=p("login","credentials");async function q(e){f(a);let A=S(e),s=e["access-key"]||e.accessKey||e.key||e.Key||e.accesskey,r=e["access-secret"]||e.accessSecret||e.secret||e.Secret||e.accesssecret;if(!s||!r){let t=[];s||t.push({type:"input",name:"accessKey",message:"Access Key ID:",required:!0}),r||t.push({type:"password",name:"accessSecret",message:"Secret Access Key:",required:!0}),K("Provide --access-key and --access-secret");let c=await I(t);s=s||c.accessKey,r=r||c.accessSecret}(!s||!r)&&u(a,"Access key and secret are required");let h=n()?.endpoint||i;await o({accessKeyId:s,secretAccessKey:r,endpoint:h}),await d("credentials"),await g();try{let t=w(),{data:c}=await k({config:{accessKeyId:s,secretAccessKey:r,iamEndpoint:t.iamEndpoint}});c?.organizationId&&await m(c.organizationId,"temporary")}catch{}A==="json"&&console.log(JSON.stringify({action:"logged_in"})),y(a),l(a)}export{q as a};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as c}from"./chunk-3XXEYQSC.js";import{a as u,b as y}from"./chunk-BMWWPXMU.js";import{e as l}from"./chunk-APJUJ6TW.js";import{g as m}from"./chunk-672QCRVD.js";import*as t from"@sentry/node";var g=new Set(["general","network"]),p=!1,a=!1;function S(){return process.env.TIGRIS_SENTRY_DSN?.trim()||m}var E=process.env.TIGRIS_ENV==="development"?"development":"production";function h(r){let e=r[0];return e&&!e.startsWith("-")?e:void 0}var T=new Set(["OnUncaughtException","OnUnhandledRejection","LocalVariables","LocalVariablesAsync","Console","ChildProcess"]);function f(r){if(typeof r=="string")return u(r);if(Array.isArray(r))return r.map(f);if(r!==null&&typeof r=="object"){let e=r;for(let n of Object.keys(e))e[n]=f(e[n]);return e}return r}function R(r){return r.server_name=void 0,f(r)}function w(){if(p)return;p=!0;let r=S();if(!(!r||l()))try{t.init({dsn:r,release:`@tigrisdata/cli@${c}`,environment:E,tracesSampleRate:0,sendDefaultPii:!1,integrations:i=>i.filter(s=>!T.has(s.name)),beforeSend:R}),t.setContext("cli",{version:c,node:process.version,platform:process.platform,arch:process.arch});let e=process.argv.slice(2);t.setContext("invocation",{command:y(e).join(" ")});let n=h(e);n&&t.setTag("command",n),a=!0}catch{a=!1}}function A(r,e={}){if(!a)return;let{category:n,command:i,crash:s,exitCode:d}=e;if(!(!s&&n&&!g.has(n)))try{t.captureException(r,o=>(o.setTag("crash",s===!0),n&&o.setTag("error.category",n),i&&o.setTag("command",i),d!==void 0&&o.setTag("exit_code",d),o))}catch{}}async function I(r=2e3){if(a)try{await t.flush(r)}catch{}}export{h as a,R as b,w as c,A as d,I as e};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{e as l}from"./chunk-
|
|
1
|
+
import{e as l}from"./chunk-LBT5RYWD.js";import{a as m,k as s}from"./chunk-RJKK3Z7Y.js";import{b as i}from"./chunk-NI4EYBQH.js";import{a as t}from"./chunk-3XXEYQSC.js";import{existsSync as c}from"fs";import{dirname as u,join as a}from"path";import{fileURLToPath as f}from"url";m();var j=f(import.meta.url),d=u(j),h=i(),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=s({specs:h,version:t,loadModule:b,hasImplementation:y});x.parse();l();
|
package/dist/cli-core.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a,b,c,d,e,f,g,h,i,j,k}from"./chunk-
|
|
1
|
+
import{a,b,c,d,e,f,g,h,i,j,k}from"./chunk-RJKK3Z7Y.js";import"./chunk-C272RML4.js";import"./chunk-G4OJTPSI.js";import"./chunk-JTLRSM54.js";import"./chunk-D7WXNA2O.js";import"./chunk-NI4EYBQH.js";import"./chunk-ZTXDZIWN.js";import"./chunk-DV3LCXRH.js";import"./chunk-3XXEYQSC.js";import"./chunk-BMWWPXMU.js";import"./chunk-APJUJ6TW.js";import"./chunk-672QCRVD.js";export{g as addArgumentsToCommand,d as commandHasAnyImplementation,k as createProgram,i as extractArgumentValues,c as formatArgumentHelp,b as isValidCommandName,j as registerCommands,a as setupErrorHandlers,e as showCommandHelp,f as showMainHelp,h as validateRequiredWhen};
|
package/dist/cli.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import"./chunk-
|
|
2
|
+
import"./chunk-ZXKDIMZY.js";import"./chunk-LBT5RYWD.js";import"./chunk-RJKK3Z7Y.js";import"./chunk-C272RML4.js";import"./chunk-G4OJTPSI.js";import"./chunk-JTLRSM54.js";import"./chunk-D7WXNA2O.js";import"./chunk-NI4EYBQH.js";import"./chunk-ZTXDZIWN.js";import"./chunk-DV3LCXRH.js";import"./chunk-3XXEYQSC.js";import"./chunk-BMWWPXMU.js";import"./chunk-APJUJ6TW.js";import"./chunk-672QCRVD.js";
|
package/dist/constants.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a,b,c,d,e,f,g}from"./chunk-
|
|
1
|
+
import{a,b,c,d,e,f,g,h,i}from"./chunk-672QCRVD.js";export{b as DEFAULT_IAM_ENDPOINT,c as DEFAULT_MGMT_ENDPOINT,a as DEFAULT_STORAGE_ENDPOINT,d as NPM_REGISTRY_URL,i as POSTHOG_HOST,h as POSTHOG_KEY,g as SENTRY_DSN,e as UPDATE_CHECK_INTERVAL_MS,f as UPDATE_NOTIFY_INTERVAL_MS};
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./chunk-
|
|
1
|
+
import"./chunk-ZXKDIMZY.js";import"./chunk-LBT5RYWD.js";import"./chunk-RJKK3Z7Y.js";import"./chunk-C272RML4.js";import"./chunk-G4OJTPSI.js";import"./chunk-JTLRSM54.js";import"./chunk-D7WXNA2O.js";import"./chunk-NI4EYBQH.js";import"./chunk-ZTXDZIWN.js";import"./chunk-DV3LCXRH.js";import"./chunk-3XXEYQSC.js";import"./chunk-BMWWPXMU.js";import"./chunk-APJUJ6TW.js";import"./chunk-672QCRVD.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as y}from"../../chunk-
|
|
1
|
+
import{b as y}from"../../chunk-53WGD3ZA.js";import"../../chunk-RKWWRLWW.js";import{a as s,b as h}from"../../chunk-S6KFKBMY.js";import{b as n,c as b,d as p}from"../../chunk-JTLRSM54.js";import{b as A,c as f,j as R}from"../../chunk-D7WXNA2O.js";import"../../chunk-NI4EYBQH.js";import"../../chunk-ZTXDZIWN.js";import"../../chunk-DV3LCXRH.js";import"../../chunk-3XXEYQSC.js";import"../../chunk-BMWWPXMU.js";import"../../chunk-APJUJ6TW.js";import"../../chunk-672QCRVD.js";import"../../chunk-J3MAV7JB.js";import"../../chunk-KJBSIIND.js";import"../../chunk-F4AGJWCK.js";import{assignBucketRoles as x,revokeAllBucketRoles as w}from"@tigrisdata/iam";var e=R("access-keys","assign"),N=["Editor","ReadOnly","NamespaceAdmin"];function v(r){return r?Array.isArray(r)?r:[r]:[]}async function O(r){A(e);let g=h(r),i=s(r,["id"]),m=s(r,["admin"]),d=s(r,["revokeRoles","revoke-roles"]),l=v(s(r,["bucket","b"])),t=v(s(r,["role","r"]));i||n(e,"Access key ID is required"),m&&d&&n(e,"Cannot use --admin and --revoke-roles together");let u=await y(e);if(d){let{error:o}=await w(i,{config:u});o&&n(e,o),g==="json"&&console.log(JSON.stringify({action:"revoked",id:i})),f(e);return}let a;if(m)a=[{bucket:"*",role:"NamespaceAdmin"}];else{l.length===0&&n(e,"At least one bucket name is required (or use --admin or --revoke-roles)"),t.length===0&&n(e,"At least one role is required (or use --admin or --revoke-roles)");for(let o of t)N.includes(o)||n(e,`Invalid role "${o}". Valid roles are: ${N.join(", ")}`);t.length===1?a=l.map(o=>({bucket:o,role:t[0]})):t.length===l.length?a=l.map((o,c)=>({bucket:o,role:t[c]})):n(e,`Number of roles (${t.length}) must be 1 or match number of buckets (${l.length})`)}let{error:k}=await x(i,a,{config:u});if(k&&n(e,k),g==="json"){let o=b(e),c={action:"assigned",id:i,assignments:a};o.length>0&&(c.nextActions=o),console.log(JSON.stringify(c))}f(e),p(e)}export{O as default};
|