hookdeck-cli 1.2.0-beta.1 → 1.3.0-beta.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 (3) hide show
  1. package/README.md +126 -45
  2. package/bin/hookdeck +0 -0
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -465,15 +465,13 @@ hookdeck connection enable # Enable a connection
465
465
  hookdeck connection disable # Disable a connection
466
466
  hookdeck connection pause # Pause a connection
467
467
  hookdeck connection unpause # Unpause a connection
468
- hookdeck connection archive # Archive a connection
469
- hookdeck connection unarchive # Unarchive a connection
470
468
  ```
471
469
 
472
470
  ### Manage active project
473
471
 
474
472
  If you are a part of multiple projects, you can switch between them using our project management commands.
475
473
 
476
- To list your projects, you can use the `hookdeck project list` command. It can take optional organization and project name substrings to filter the list. The matching is partial and case-insensitive.
474
+ #### List projects
477
475
 
478
476
  ```sh
479
477
  # List all projects
@@ -482,58 +480,149 @@ My Org / My Project (current)
482
480
  My Org / Another Project
483
481
  Another Org / Yet Another One
484
482
 
485
- # List projects with "Org" in the organization name and "Proj" in the project name
483
+ # Filter by organization and project name
486
484
  $ hookdeck project list Org Proj
487
485
  My Org / My Project (current)
488
486
  My Org / Another Project
489
487
  ```
490
488
 
491
- To select or change the active project, use the `hookdeck project use` command. When arguments are provided, it uses exact, case-insensitive matching for the organization and project names.
489
+ #### Select active project
492
490
 
493
491
  ```console
494
- hookdeck project use [<organization_name> [<project_name>]]
492
+ hookdeck project use [<organization_name> [<project_name>]] [--local]
493
+
494
+ Flags:
495
+ --local Save project to current directory (.hookdeck/config.toml)
495
496
  ```
496
497
 
497
- **Behavior:**
498
+ **Project Selection Modes:**
498
499
 
499
- - **`hookdeck project use`** (no arguments):
500
- An interactive prompt will guide you through selecting your organization and then the project within that organization.
500
+ - **No arguments**: Interactive prompt to select organization and project
501
+ - **One argument**: Filter by organization name (prompts if multiple projects)
502
+ - **Two arguments**: Directly select organization and project
501
503
 
502
- ```sh
503
- $ hookdeck project use
504
- Use the arrow keys to navigate: → ←
505
- ? Select Organization:
506
- My Org
507
- ▸ Another Org
508
- ...
509
- ? Select Project (Another Org):
510
- Project X
511
- ▸ Project Y
512
- Selecting project Project Y
513
- Successfully set active project to: [Another Org] Project Y
514
- ```
504
+ ```sh
505
+ $ hookdeck project use my-org my-project
506
+ Successfully set active project to: my-org / my-project
507
+ ```
515
508
 
516
- - **`hookdeck project use <organization_name>`** (one argument):
517
- Filters projects by the specified `<organization_name>`.
509
+ #### Configuration scope: Global vs Local
518
510
 
519
- - If multiple projects exist under that organization, you'll be prompted to choose one.
520
- - If only one project exists, it will be selected automatically.
511
+ By default, `project use` saves your selection to the **global configuration** (`~/.config/hookdeck/config.toml`). You can pin a specific project to the **current directory** using the `--local` flag.
521
512
 
522
- ```sh
523
- $ hookdeck project use "My Org"
524
- # (If multiple projects, prompts to select. If one, auto-selects)
525
- Successfully set active project to: [My Org] Default Project
513
+ **Configuration file precedence (only ONE is used):**
514
+
515
+ The CLI uses exactly one configuration file based on this precedence:
516
+
517
+ 1. **Custom config** (via `--config` flag) - highest priority
518
+ 2. **Local config** - `${PWD}/.hookdeck/config.toml` (if exists)
519
+ 3. **Global config** - `~/.config/hookdeck/config.toml` (default)
520
+
521
+ Unlike Git, Hookdeck **does not merge** multiple config files - only the highest precedence config is used.
522
+
523
+ **Examples:**
524
+
525
+ ```sh
526
+ # No local config exists → saves to global
527
+ $ hookdeck project use my-org my-project
528
+ Successfully set active project to: my-org / my-project
529
+ Saved to: ~/.config/hookdeck/config.toml
530
+
531
+ # Local config exists → automatically updates local
532
+ $ cd ~/repo-with-local-config # has .hookdeck/config.toml
533
+ $ hookdeck project use another-org another-project
534
+ Successfully set active project to: another-org / another-project
535
+ Updated: .hookdeck/config.toml
536
+
537
+ # Create new local config
538
+ $ cd ~/my-new-repo # no .hookdeck/ directory
539
+ $ hookdeck project use my-org my-project --local
540
+ Successfully set active project to: my-org / my-project
541
+ Created: .hookdeck/config.toml
542
+ ⚠️ Security: Add .hookdeck/ to .gitignore (contains credentials)
543
+
544
+ # Update existing local config with confirmation
545
+ $ hookdeck project use another-org another-project --local
546
+ Local configuration already exists at: .hookdeck/config.toml
547
+ ? Overwrite with new project configuration? (y/N) y
548
+ Successfully set active project to: another-org / another-project
549
+ Updated: .hookdeck/config.toml
550
+ ```
551
+
552
+ **Smart default behavior:**
553
+
554
+ When you run `project use` without `--local`:
555
+ - **If `.hookdeck/config.toml` exists**: Updates the local config
556
+ - **Otherwise**: Updates the global config
557
+
558
+ This ensures your directory-specific configuration is preserved when it exists.
559
+
560
+ **Flag validation:**
561
+
562
+ ```sh
563
+ # ✅ Valid
564
+ hookdeck project use my-org my-project
565
+ hookdeck project use my-org my-project --local
566
+
567
+ # ❌ Invalid (cannot combine --config with --local)
568
+ hookdeck --config custom.toml project use my-org my-project --local
569
+ Error: --local and --config flags cannot be used together
570
+ --local creates config at: .hookdeck/config.toml
571
+ --config uses custom path: custom.toml
572
+ ```
573
+
574
+ #### Benefits of local project pinning
575
+
576
+ - **Per-repository configuration**: Each repository can use a different Hookdeck project
577
+ - **Team collaboration**: Commit `.hookdeck/config.toml` to private repos (see security note)
578
+ - **No context switching**: Automatically uses the right project when you `cd` into a directory
579
+ - **CI/CD friendly**: Works seamlessly in automated environments
580
+
581
+ #### Security: Config files and source control
582
+
583
+ ⚠️ **IMPORTANT**: Configuration files contain your Hookdeck credentials and should be treated as sensitive.
584
+
585
+ **Credential Types:**
586
+
587
+ - **CLI Key**: Created when you run `hookdeck login` (interactive authentication)
588
+ - **CI Key**: Created in the Hookdeck dashboard for use in CI/CD pipelines
589
+ - Both are stored as `api_key` in config files
590
+
591
+ **Recommended practices:**
592
+
593
+ - **Private repositories**: You MAY commit `.hookdeck/config.toml` if your repository is guaranteed to remain private and all collaborators should have access to the credentials.
594
+
595
+ - **Public repositories**: You MUST add `.hookdeck/` to your `.gitignore`:
596
+ ```gitignore
597
+ # Hookdeck CLI configuration (contains credentials)
598
+ .hookdeck/
526
599
  ```
527
600
 
528
- - **`hookdeck project use <organization_name> <project_name>`** (two arguments):
529
- Directly selects the project `<project_name>` under the organization `<organization_name>`.
601
+ - **CI/CD environments**: Use the `HOOKDECK_API_KEY` environment variable:
530
602
  ```sh
531
- $ hookdeck project use "My Corp" "API Staging"
532
- Successfully set active project to: [My Corp] API Staging
603
+ # The ci command automatically reads HOOKDECK_API_KEY
604
+ export HOOKDECK_API_KEY="your-ci-key"
605
+ hookdeck ci
606
+ hookdeck listen 3000
533
607
  ```
534
608
 
535
- Upon successful selection, you will generally see a confirmation message like:
536
- `Successfully set active project to: [<organization_name>] <project_name>`
609
+ **Checking which config is active:**
610
+
611
+ ```sh
612
+ $ hookdeck whoami
613
+ Logged in as: user@example.com
614
+ Active project: my-org / my-project
615
+ Config file: /Users/username/my-repo/.hookdeck/config.toml (local)
616
+ ```
617
+
618
+ **Removing local configuration:**
619
+
620
+ To stop using local configuration and switch back to global:
621
+
622
+ ```sh
623
+ $ rm -rf .hookdeck/
624
+ # Now CLI uses global config
625
+ ```
537
626
 
538
627
  ### Manage connections
539
628
 
@@ -724,9 +813,8 @@ $ hookdeck connection list --destination dest_xyz789
724
813
  # Filter by name pattern
725
814
  $ hookdeck connection list --name "production-*"
726
815
 
727
- # Include disabled or paused connections
816
+ # Include disabled connections
728
817
  $ hookdeck connection list --disabled
729
- $ hookdeck connection list --paused
730
818
 
731
819
  # Output as JSON
732
820
  $ hookdeck connection list --output json
@@ -763,18 +851,11 @@ $ hookdeck connection pause conn_123abc
763
851
 
764
852
  # Resume a paused connection
765
853
  $ hookdeck connection unpause conn_123abc
766
-
767
- # Archive a connection (hide from main lists)
768
- $ hookdeck connection archive conn_123abc
769
-
770
- # Restore an archived connection
771
- $ hookdeck connection unarchive conn_123abc
772
854
  ```
773
855
 
774
856
  **State differences:**
775
857
  - **Disabled**: Connection stops receiving events entirely
776
858
  - **Paused**: Connection queues events but doesn't forward them (useful during maintenance)
777
- - **Archived**: Connection is hidden from main lists but can be restored
778
859
 
779
860
  #### Delete a connection
780
861
 
package/bin/hookdeck CHANGED
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hookdeck-cli",
3
- "version": "1.2.0-beta.1",
3
+ "version": "1.3.0-beta.1",
4
4
  "description": "Hookdeck CLI",
5
5
  "repository": {
6
6
  "type": "git",