envhub-cli 0.3.1 → 0.4.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 (61) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +103 -31
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +19 -6
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands/cat.d.ts +5 -1
  7. package/dist/commands/cat.d.ts.map +1 -1
  8. package/dist/commands/cat.js +27 -6
  9. package/dist/commands/cat.js.map +1 -1
  10. package/dist/commands/delete.d.ts.map +1 -1
  11. package/dist/commands/delete.js +5 -2
  12. package/dist/commands/delete.js.map +1 -1
  13. package/dist/commands/doctor.d.ts +39 -0
  14. package/dist/commands/doctor.d.ts.map +1 -0
  15. package/dist/commands/doctor.js +946 -0
  16. package/dist/commands/doctor.js.map +1 -0
  17. package/dist/commands/init.d.ts.map +1 -1
  18. package/dist/commands/init.js +89 -16
  19. package/dist/commands/init.js.map +1 -1
  20. package/dist/commands/list.d.ts +5 -1
  21. package/dist/commands/list.d.ts.map +1 -1
  22. package/dist/commands/list.js +13 -3
  23. package/dist/commands/list.js.map +1 -1
  24. package/dist/commands/pull.d.ts +6 -1
  25. package/dist/commands/pull.d.ts.map +1 -1
  26. package/dist/commands/pull.js +75 -12
  27. package/dist/commands/pull.js.map +1 -1
  28. package/dist/commands/push.d.ts.map +1 -1
  29. package/dist/commands/push.js +112 -33
  30. package/dist/commands/push.js.map +1 -1
  31. package/dist/config/config.d.ts.map +1 -1
  32. package/dist/config/config.js +7 -2
  33. package/dist/config/config.js.map +1 -1
  34. package/dist/config/config.schema.d.ts.map +1 -1
  35. package/dist/config/config.schema.js +6 -0
  36. package/dist/config/config.schema.js.map +1 -1
  37. package/dist/utils/diff.d.ts +9 -1
  38. package/dist/utils/diff.d.ts.map +1 -1
  39. package/dist/utils/diff.js +22 -8
  40. package/dist/utils/diff.js.map +1 -1
  41. package/dist/utils/env-parser.d.ts +9 -1
  42. package/dist/utils/env-parser.d.ts.map +1 -1
  43. package/dist/utils/env-parser.js +35 -4
  44. package/dist/utils/env-parser.js.map +1 -1
  45. package/dist/utils/envhub-header.d.ts +4 -0
  46. package/dist/utils/envhub-header.d.ts.map +1 -1
  47. package/dist/utils/envhub-header.js +18 -0
  48. package/dist/utils/envhub-header.js.map +1 -1
  49. package/dist/utils/logger.d.ts +44 -39
  50. package/dist/utils/logger.d.ts.map +1 -1
  51. package/dist/utils/logger.js +172 -46
  52. package/dist/utils/logger.js.map +1 -1
  53. package/dist/utils/pull-dry-run-ui.d.ts +11 -0
  54. package/dist/utils/pull-dry-run-ui.d.ts.map +1 -0
  55. package/dist/utils/pull-dry-run-ui.js +157 -0
  56. package/dist/utils/pull-dry-run-ui.js.map +1 -0
  57. package/dist/utils/push-preview-ui.d.ts +10 -0
  58. package/dist/utils/push-preview-ui.d.ts.map +1 -0
  59. package/dist/utils/push-preview-ui.js +134 -0
  60. package/dist/utils/push-preview-ui.js.map +1 -0
  61. package/package.json +4 -4
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Kemal Can Yaprak
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
@@ -1,56 +1,116 @@
1
- # 🛡️ ENVHUB-CLI
1
+ <div align="center">
2
+ <img src="./docs/assets/envhub-banner.svg" alt="ENVHUB CLI banner" width="100%">
3
+ <br />
4
+ <br />
5
+ <p>
6
+ <a href="https://www.npmjs.com/package/envhub-cli"><img src="https://img.shields.io/npm/v/envhub-cli?style=for-the-badge" alt="npm version"></a>
7
+ <a href="https://github.com/caanyp24/envhub-cli"><img src="https://img.shields.io/github/license/caanyp24/envhub-cli?style=for-the-badge" alt="license"></a>
8
+ <img src="https://img.shields.io/badge/node-%3E%3D18-3C873A?style=for-the-badge" alt="node version">
9
+ </p>
10
+ </div>
2
11
 
3
- **envhub** is a CLI tool that makes sharing `.env` files between developers easy and secure. Instead of sending secrets over chat messages, envhub stores them in a cloud secrets manager and lets your team push and pull environment configurations safely.
12
+ `envhub` is a developer-first CLI to push and pull environment files through AWS Secrets Manager, Azure Key Vault, or GCP Secret Manager with safer team collaboration and built-in versioning.
4
13
 
5
- ## Why envhub?
14
+ ## Why ENVHUB
6
15
 
7
- - No more sending API keys over Teams or Slack
8
- - Built-in version control prevents accidental overwrites
9
- - Easy interactive setup — no manual config files needed
10
- - Extensible provider architecture (AWS and Azure available, GCP coming soon)
16
+ Most tools store your secrets in their own cloud.
17
+
18
+ envhub doesn't.
19
+
20
+ - Use your existing AWS, GCP, or Azure account
21
+ - No external SaaS or secret storage
22
+ - No vendor lock-in
23
+ - Sync `.env` files with simple `push` / `pull`
24
+ - Track versions and avoid accidental overwrites
25
+ - Stop sharing secrets in Slack, Teams, or email
11
26
 
12
27
  ## Table of Contents
13
28
 
14
- ### Getting Started
29
+ - [Demo](#demo)
30
+ - [Quick Start](#quick-start)
31
+ - [Command Overview](#command-overview)
32
+ - [Documentation](#documentation)
33
+ - [Supported Providers](#supported-providers)
34
+ - [Requirements](#requirements)
35
+ - [License](#license)
15
36
 
16
- 1. [Installation](https://github.com/caanyp24/envhub-cli/blob/main/docs/getting-started/installation.md)
17
- 2. [Setup (envhub init)](https://github.com/caanyp24/envhub-cli/blob/main/docs/getting-started/setup.md)
18
- 3. [Your First Secret](https://github.com/caanyp24/envhub-cli/blob/main/docs/getting-started/first-secret.md)
19
- 4. [Version Control](https://github.com/caanyp24/envhub-cli/blob/main/docs/getting-started/version-control.md)
37
+ ## Demo
20
38
 
21
- ### Commands
39
+ ![ENVHUB CLI demo](./docs/assets/envhub-demo.gif)
22
40
 
23
- | Command | Description |
24
- | --- | --- |
25
- | [push](https://github.com/caanyp24/envhub-cli/blob/main/docs/commands/push.md) | Push a local .env file to the cloud |
26
- | [pull](https://github.com/caanyp24/envhub-cli/blob/main/docs/commands/pull.md) | Pull the latest .env file from the cloud |
27
- | [cat](https://github.com/caanyp24/envhub-cli/blob/main/docs/commands/cat.md) | Display the contents of a secret |
28
- | [list](https://github.com/caanyp24/envhub-cli/blob/main/docs/commands/list.md) | List all managed secrets |
29
- | [delete](https://github.com/caanyp24/envhub-cli/blob/main/docs/commands/delete.md) | Delete a secret |
30
- | [grant](https://github.com/caanyp24/envhub-cli/blob/main/docs/commands/grant.md) | Grant a user access to a secret (AWS only) |
31
- | [revoke](https://github.com/caanyp24/envhub-cli/blob/main/docs/commands/revoke.md) | Revoke a user's access to a secret (AWS only) |
41
+ ## Quick Start
32
42
 
33
- ### Architecture
43
+ ### 1. Install
34
44
 
35
- - [Configuration (.envhubrc.json)](https://github.com/caanyp24/envhub-cli/blob/main/docs/architecture/configuration.md)
36
- - [Provider Architecture](https://github.com/caanyp24/envhub-cli/blob/main/docs/architecture/providers.md)
45
+ ```bash
46
+ npm install --save-dev envhub-cli
47
+ ```
37
48
 
38
- ## Quick Example
49
+ Or install globally:
50
+
51
+ ```bash
52
+ npm install -g envhub-cli
53
+ ```
54
+
55
+ ### 2. Initialize project
39
56
 
40
57
  ```bash
41
- # 1. Set up your project
42
58
  npx envhub init
59
+ ```
60
+
61
+ ### 3. Push your current environment
43
62
 
44
- # 2. Push your .env file
63
+ ```bash
45
64
  npx envhub push my-app-dev ./.env -m "Initial setup"
65
+ ```
46
66
 
47
- # 3. Your teammate pulls it
67
+ ### 4. Teammate pulls the same env
68
+
69
+ ```bash
48
70
  npx envhub pull my-app-dev ./.env
71
+ ```
72
+
73
+ ## Command Overview
49
74
 
50
- # 4. Grant access to another developer (AWS only)
51
- npx envhub grant my-app-dev jane.doe
75
+ | Command | What it does |
76
+ | --- | --- |
77
+ | [`init`](./docs/getting-started/setup.md) | Interactive setup for provider + project config |
78
+ | [`push`](./docs/commands/push.md) | Upload local `.env` to your cloud secret store |
79
+ | [`pull`](./docs/commands/pull.md) | Download latest secret and write local `.env` |
80
+ | [`cat`](./docs/commands/cat.md) | Inspect a secret’s content |
81
+ | [`list`](./docs/commands/list.md) | See all envhub-managed secrets |
82
+ | [`delete`](./docs/commands/delete.md) | Remove a secret |
83
+ | [`grant`](./docs/commands/grant.md) | Grant user access (AWS only) |
84
+ | [`revoke`](./docs/commands/revoke.md) | Revoke user access (AWS only) |
85
+ | [`doctor`](./docs/commands/doctor.md) | Validate setup and provider access |
86
+
87
+ ## Common Workflow
88
+
89
+ ```bash
90
+ # Initialize once per project
91
+ npx envhub init
92
+
93
+ # Push local changes
94
+ npx envhub push my-app-dev ./.env -m "Updated API keys"
95
+
96
+ # Teammates pull the latest config
97
+ npx envhub pull my-app-dev ./.env
52
98
  ```
53
99
 
100
+ ## Documentation
101
+
102
+ ### Getting Started
103
+
104
+ 1. [Installation](./docs/getting-started/installation.md)
105
+ 2. [Setup (`envhub init`)](./docs/getting-started/setup.md)
106
+ 3. [First Secret](./docs/getting-started/first-secret.md)
107
+ 4. [Version Control](./docs/getting-started/version-control.md)
108
+
109
+ ### Architecture
110
+
111
+ - [Configuration (`.envhubrc.json`)](./docs/architecture/configuration.md)
112
+ - [Provider Architecture](./docs/architecture/providers.md)
113
+
54
114
  ## Supported Providers
55
115
 
56
116
  | Provider | Status |
@@ -58,3 +118,15 @@ npx envhub grant my-app-dev jane.doe
58
118
  | AWS Secrets Manager | Available |
59
119
  | Azure Key Vault | Available |
60
120
  | GCP Secret Manager | Available |
121
+
122
+ ## Requirements
123
+
124
+ - Node.js >= 18
125
+ - One configured provider account/CLI:
126
+ - AWS CLI for AWS Secrets Manager
127
+ - Azure CLI for Azure Key Vault
128
+ - Google Cloud CLI for GCP Secret Manager
129
+
130
+ ## License
131
+
132
+ MIT
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAkGvC"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAgHvC"}
package/dist/cli.js CHANGED
@@ -8,6 +8,7 @@ import { listCommand } from "./commands/list.js";
8
8
  import { deleteCommand } from "./commands/delete.js";
9
9
  import { grantCommand } from "./commands/grant.js";
10
10
  import { revokeCommand } from "./commands/revoke.js";
11
+ import { doctorCommand } from "./commands/doctor.js";
11
12
  const require = createRequire(import.meta.url);
12
13
  const pkg = require("../package.json");
13
14
  /**
@@ -43,24 +44,28 @@ export function createProgram() {
43
44
  .description("Pull the latest .env file from the cloud provider")
44
45
  .argument("<name>", "Name of the secret to pull")
45
46
  .argument("<file>", "Path to write the .env file to")
46
- .action(async (name, file) => {
47
- await pullCommand(name, file);
47
+ .option("--dry-run", "Show the pull diff without writing the local file", false)
48
+ .option("--backup", "Create <file>.bak before overwriting the local file", false)
49
+ .action(async (name, file, options) => {
50
+ await pullCommand(name, file, options);
48
51
  });
49
52
  // ── cat ─────────────────────────────────────────────────────────
50
53
  program
51
54
  .command("cat")
52
55
  .description("Display the contents of a secret")
53
56
  .argument("<name>", "Name of the secret to display")
54
- .action(async (name) => {
55
- await catCommand(name);
57
+ .option("--masked", "Mask secret values in output", false)
58
+ .action(async (name, options) => {
59
+ await catCommand(name, options);
56
60
  });
57
61
  // ── list ────────────────────────────────────────────────────────
58
62
  program
59
63
  .command("list")
60
64
  .alias("ls")
61
65
  .description("List all secrets managed by envhub")
62
- .action(async () => {
63
- await listCommand();
66
+ .option("--json", "Output secrets as JSON", false)
67
+ .action(async (options) => {
68
+ await listCommand(options);
64
69
  });
65
70
  // ── delete ──────────────────────────────────────────────────────
66
71
  program
@@ -90,6 +95,14 @@ export function createProgram() {
90
95
  .action(async (name, user) => {
91
96
  await revokeCommand(name, user);
92
97
  });
98
+ // ── doctor ──────────────────────────────────────────────────────
99
+ program
100
+ .command("doctor")
101
+ .description("Run health checks for envhub configuration and provider access")
102
+ .option("--json", "Output checks as JSON for CI parsing", false)
103
+ .action(async (options) => {
104
+ await doctorCommand(options);
105
+ });
93
106
  return program;
94
107
  }
95
108
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,10 @@
1
+ interface CatCommandOptions {
2
+ masked?: boolean;
3
+ }
1
4
  /**
2
5
  * The `envhub cat` command.
3
6
  * Outputs the contents of a secret without writing to disk.
4
7
  */
5
- export declare function catCommand(secretName: string): Promise<void>;
8
+ export declare function catCommand(secretName: string, options?: CatCommandOptions): Promise<void>;
9
+ export {};
6
10
  //# sourceMappingURL=cat.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cat.d.ts","sourceRoot":"","sources":["../../src/commands/cat.ts"],"names":[],"mappings":"AAqCA;;;GAGG;AACH,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBlE"}
1
+ {"version":3,"file":"cat.d.ts","sourceRoot":"","sources":["../../src/commands/cat.ts"],"names":[],"mappings":"AAMA,UAAU,iBAAiB;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AA6CD;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAiCf"}
@@ -6,10 +6,11 @@ import { logger } from "../utils/logger.js";
6
6
  /**
7
7
  * Format .env content into a styled, readable table.
8
8
  */
9
- function formatEnvTable(content) {
9
+ function formatEnvTable(content, options = {}) {
10
10
  const entries = parseEnvContent(content);
11
+ const shouldMaskValues = options.masked ?? false;
11
12
  if (entries.size === 0) {
12
- return chalk.dim(" (empty)");
13
+ return chalk.dim("(empty)");
13
14
  }
14
15
  // Find the longest key for alignment
15
16
  let maxKeyLen = 0;
@@ -22,16 +23,26 @@ function formatEnvTable(content) {
22
23
  lines.push(separator);
23
24
  for (const [key, value] of entries) {
24
25
  const paddedKey = key.padEnd(maxKeyLen);
25
- lines.push(` ${chalk.bold.cyan(paddedKey)} ${chalk.dim("=")} ${value}`);
26
+ const renderedValue = shouldMaskValues ? maskValue(value) : value;
27
+ lines.push(`${chalk.bold.cyan(paddedKey)} ${chalk.dim("=")} ${renderedValue}`);
26
28
  }
27
29
  lines.push(separator);
28
30
  return lines.join("\n");
29
31
  }
32
+ /**
33
+ * Mask a value for safe display (show first 3 chars, mask the rest).
34
+ */
35
+ function maskValue(value) {
36
+ if (value.length <= 3) {
37
+ return "•••";
38
+ }
39
+ return value.substring(0, 3) + "•••";
40
+ }
30
41
  /**
31
42
  * The `envhub cat` command.
32
43
  * Outputs the contents of a secret without writing to disk.
33
44
  */
34
- export async function catCommand(secretName) {
45
+ export async function catCommand(secretName, options = {}) {
35
46
  // Load config and create provider
36
47
  const config = await configManager.load();
37
48
  const provider = ProviderFactory.createProvider(config);
@@ -39,9 +50,19 @@ export async function catCommand(secretName) {
39
50
  try {
40
51
  const content = await provider.cat(secretName);
41
52
  const entries = parseEnvContent(content);
42
- spinner.succeed(`${chalk.bold(secretName)} ${chalk.dim(`(${entries.size} keys)`)}`);
53
+ let remoteVersion;
54
+ try {
55
+ remoteVersion = await provider.getVersion(secretName);
56
+ }
57
+ catch {
58
+ remoteVersion = undefined;
59
+ }
60
+ const versionSegment = typeof remoteVersion === "number"
61
+ ? `v${remoteVersion}, `
62
+ : "";
63
+ spinner.succeed(`${chalk.bold(secretName)} ${chalk.dim(`(${versionSegment}${entries.size} keys)`)}`);
43
64
  logger.newline();
44
- logger.log(formatEnvTable(content));
65
+ logger.log(formatEnvTable(content, options));
45
66
  logger.newline();
46
67
  }
47
68
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"cat.js","sourceRoot":"","sources":["../../src/commands/cat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C;;GAEG;AACH,SAAS,cAAc,CAAC,OAAe;IACrC,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAEzC,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAChC,CAAC;IAED,qCAAqC;IACrC,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QACjC,IAAI,GAAG,CAAC,MAAM,GAAG,SAAS;YAAE,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC;IACrD,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC;IAExD,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAEtB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAEtB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,UAAkB;IACjD,kCAAkC;IAClC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC;IAC1C,MAAM,QAAQ,GAAG,eAAe,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAExD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,UAAU,MAAM,CAAC,CAAC;IAE7D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QACzC,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAC;QAEpF,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,mBAAmB,UAAU,IAAI,CAAC,CAAC;QAChD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"cat.js","sourceRoot":"","sources":["../../src/commands/cat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAM5C;;GAEG;AACH,SAAS,cAAc,CAAC,OAAe,EAAE,UAA6B,EAAE;IACtE,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC;IAEjD,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC9B,CAAC;IAED,qCAAqC;IACrC,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QACjC,IAAI,GAAG,CAAC,MAAM,GAAG,SAAS;YAAE,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC;IACrD,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC;IAExD,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAEtB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACxC,MAAM,aAAa,GAAG,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAClE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,aAAa,EAAE,CAAC,CAAC;IACnF,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAEtB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAAC,KAAa;IAC9B,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,UAAkB,EAClB,UAA6B,EAAE;IAE/B,kCAAkC;IAClC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC;IAC1C,MAAM,QAAQ,GAAG,eAAe,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAExD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,UAAU,MAAM,CAAC,CAAC;IAE7D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,aAAiC,CAAC;QACtC,IAAI,CAAC;YACH,aAAa,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QACxD,CAAC;QAAC,MAAM,CAAC;YACP,aAAa,GAAG,SAAS,CAAC;QAC5B,CAAC;QACD,MAAM,cAAc,GAAG,OAAO,aAAa,KAAK,QAAQ;YACtD,CAAC,CAAC,IAAI,aAAa,IAAI;YACvB,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,CAAC,OAAO,CACb,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,cAAc,GAAG,OAAO,CAAC,IAAI,QAAQ,CAAC,EAAE,CACpF,CAAC;QAEF,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,mBAAmB,UAAU,IAAI,CAAC,CAAC;QAChD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":"AAKA,UAAU,oBAAoB;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC,CA4Cf"}
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":"AAIA,UAAU,oBAAoB;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAiDf"}
@@ -1,4 +1,3 @@
1
- import { confirm } from "@inquirer/prompts";
2
1
  import { configManager } from "../config/config.js";
3
2
  import { ProviderFactory } from "../providers/provider.factory.js";
4
3
  import { logger } from "../utils/logger.js";
@@ -12,10 +11,14 @@ export async function deleteCommand(secretName, options) {
12
11
  const provider = ProviderFactory.createProvider(config);
13
12
  // Confirm deletion
14
13
  if (!options.force) {
15
- const confirmed = await confirm({
14
+ const confirmed = await logger.promptConfirm({
16
15
  message: `Are you sure you want to delete '${secretName}'? This action cannot be undone.`,
17
16
  default: false,
17
+ cancelMessage: "Deletion cancelled.",
18
18
  });
19
+ if (confirmed === "cancelled") {
20
+ return;
21
+ }
19
22
  if (!confirmed) {
20
23
  logger.info("Deletion cancelled.");
21
24
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAM5C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,UAAkB,EAClB,OAA6B;IAE7B,kCAAkC;IAClC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC;IAC1C,MAAM,QAAQ,GAAG,eAAe,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAExD,mBAAmB;IACnB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC;YAC9B,OAAO,EAAE,oCAAoC,UAAU,kCAAkC;YACzF,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACnC,OAAO;QACT,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,UAAU,MAAM,CAAC,CAAC;IAE9D,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAE5D,6BAA6B;QAC7B,MAAM,GAAG,GAAG,aAAa,CAAC,SAAS,EAAE,CAAC;QACtC,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,OAAO,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC/B,MAAM,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,CAAC,OAAO,CAAC,YAAY,UAAU,IAAI,CAAC,CAAC;QAE5C,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,CAAC,GAAG,CACR,mFAAmF,CACpF,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,qBAAqB,UAAU,IAAI,CAAC,CAAC;QAClD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAM5C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,UAAkB,EAClB,OAA6B;IAE7B,kCAAkC;IAClC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC;IAC1C,MAAM,QAAQ,GAAG,eAAe,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAExD,mBAAmB;IACnB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC;YAC3C,OAAO,EAAE,oCAAoC,UAAU,kCAAkC;YACzF,OAAO,EAAE,KAAK;YACd,aAAa,EAAE,qBAAqB;SACrC,CAAC,CAAC;QAEH,IAAI,SAAS,KAAK,WAAW,EAAE,CAAC;YAC9B,OAAO;QACT,CAAC;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACnC,OAAO;QACT,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,UAAU,MAAM,CAAC,CAAC;IAE9D,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAE5D,6BAA6B;QAC7B,MAAM,GAAG,GAAG,aAAa,CAAC,SAAS,EAAE,CAAC;QACtC,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,OAAO,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC/B,MAAM,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,CAAC,OAAO,CAAC,YAAY,UAAU,IAAI,CAAC,CAAC;QAE5C,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,CAAC,GAAG,CACR,mFAAmF,CACpF,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,qBAAqB,UAAU,IAAI,CAAC,CAAC;QAClD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,39 @@
1
+ type DoctorCheckStatus = "pass" | "warn" | "fail";
2
+ interface DoctorCheckResult {
3
+ id: "version.check" | "config.load" | "prefix" | "provider.init" | "provider.identity" | "provider.identity_verified" | "provider.reachability_and_auth" | "provider.list_rights" | "provider.read_rights";
4
+ title: string;
5
+ status: DoctorCheckStatus;
6
+ message: string;
7
+ details?: string;
8
+ }
9
+ interface DoctorSummary {
10
+ pass: number;
11
+ warn: number;
12
+ fail: number;
13
+ }
14
+ interface DoctorReport {
15
+ summary: DoctorSummary;
16
+ checks: DoctorCheckResult[];
17
+ }
18
+ interface DoctorCommandOptions {
19
+ json?: boolean;
20
+ }
21
+ type DoctorCheckId = DoctorCheckResult["id"];
22
+ type DoctorProgressEvent = {
23
+ phase: "start";
24
+ id: DoctorCheckId;
25
+ title: string;
26
+ } | {
27
+ phase: "end";
28
+ check: DoctorCheckResult;
29
+ };
30
+ type DoctorProgressHandler = (event: DoctorProgressEvent) => void;
31
+ declare function runDoctorChecks(progress?: DoctorProgressHandler): Promise<DoctorReport>;
32
+ /**
33
+ * The `envhub doctor` command.
34
+ * Runs read-only health checks for local config and provider connectivity.
35
+ */
36
+ export declare function doctorCommand(options: DoctorCommandOptions): Promise<void>;
37
+ export type { DoctorCheckResult, DoctorCheckStatus, DoctorReport };
38
+ export { runDoctorChecks };
39
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAgBA,KAAK,iBAAiB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAElD,UAAU,iBAAiB;IACzB,EAAE,EACE,eAAe,GACf,aAAa,GACb,QAAQ,GACR,eAAe,GACf,mBAAmB,GACnB,4BAA4B,GAC5B,gCAAgC,GAChC,sBAAsB,GACtB,sBAAsB,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,iBAAiB,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,YAAY;IACpB,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,iBAAiB,EAAE,CAAC;CAC7B;AAED,UAAU,oBAAoB;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAGD,KAAK,aAAa,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAE7C,KAAK,mBAAmB,GACpB;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,EAAE,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAC/C,KAAK,qBAAqB,GAAG,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;AAqlBlE,iBAAe,eAAe,CAAC,QAAQ,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,YAAY,CAAC,CAuYtF;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmDhF;AAED,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,YAAY,EAAE,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,CAAC"}