envhub-cli 0.3.0 → 0.4.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.
Files changed (61) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +97 -35
  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 +111 -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,60 +1,122 @@
1
- # 🛡️ ENVHUB-CLI
2
-
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.
4
-
5
- ## Why envhub?
6
-
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)
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>
11
+
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.
13
+
14
+ ## Why ENVHUB
15
+
16
+ - Stop sharing secrets in Slack, Teams, or email
17
+ - Sync `.env` files with simple `push` and `pull` commands
18
+ - Reduce accidental overwrites with version tracking
19
+ - Set up projects fast with an interactive `init` wizard
20
+ - Keep full control by using your existing cloud provider
11
21
 
12
22
  ## Table of Contents
13
23
 
14
- ### Getting Started
24
+ - [Quick Start](#quick-start)
25
+ - [Command Overview](#command-overview)
26
+ - [Documentation](#documentation)
27
+ - [Supported Providers](#supported-providers)
28
+ - [Requirements](#requirements)
29
+ - [License](#license)
15
30
 
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)
31
+ ## Quick Start
20
32
 
21
- ### Commands
33
+ ### 1. Install
22
34
 
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) |
35
+ ```bash
36
+ npm install --save-dev envhub-cli
37
+ ```
32
38
 
33
- ### Architecture
39
+ Or install globally:
34
40
 
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)
41
+ ```bash
42
+ npm install -g envhub-cli
43
+ ```
37
44
 
38
- ## Quick Example
45
+ ### 2. Initialize project
39
46
 
40
47
  ```bash
41
- # 1. Set up your project
42
48
  npx envhub init
49
+ ```
50
+
51
+ ### 3. Push your current environment
43
52
 
44
- # 2. Push your .env file
53
+ ```bash
45
54
  npx envhub push my-app-dev ./.env -m "Initial setup"
55
+ ```
46
56
 
47
- # 3. Your teammate pulls it
57
+ ### 4. Teammate pulls the same env
58
+
59
+ ```bash
48
60
  npx envhub pull my-app-dev ./.env
61
+ ```
62
+
63
+ ## Command Overview
49
64
 
50
- # 4. Grant access to another developer (AWS only)
51
- npx envhub grant my-app-dev jane.doe
65
+ | Command | What it does |
66
+ | --- | --- |
67
+ | [`init`](./docs/getting-started/setup.md) | Interactive setup for provider + project config |
68
+ | [`push`](./docs/commands/push.md) | Upload local `.env` to your cloud secret store |
69
+ | [`pull`](./docs/commands/pull.md) | Download latest secret and write local `.env` |
70
+ | [`cat`](./docs/commands/cat.md) | Inspect a secret’s content |
71
+ | [`list`](./docs/commands/list.md) | See all envhub-managed secrets |
72
+ | [`delete`](./docs/commands/delete.md) | Remove a secret |
73
+ | [`grant`](./docs/commands/grant.md) | Grant user access (AWS only) |
74
+ | [`revoke`](./docs/commands/revoke.md) | Revoke user access (AWS only) |
75
+ | [`doctor`](./docs/commands/doctor.md) | Validate setup and provider access |
76
+
77
+ ## Common Workflow
78
+
79
+ ```bash
80
+ # Initialize once per project
81
+ npx envhub init
82
+
83
+ # Push local changes
84
+ npx envhub push my-app-dev ./.env -m "Updated API keys"
85
+
86
+ # Teammates pull the latest config
87
+ npx envhub pull my-app-dev ./.env
52
88
  ```
53
89
 
90
+ ## Documentation
91
+
92
+ ### Getting Started
93
+
94
+ 1. [Installation](./docs/getting-started/installation.md)
95
+ 2. [Setup (`envhub init`)](./docs/getting-started/setup.md)
96
+ 3. [First Secret](./docs/getting-started/first-secret.md)
97
+ 4. [Version Control](./docs/getting-started/version-control.md)
98
+
99
+ ### Architecture
100
+
101
+ - [Configuration (`.envhubrc.json`)](./docs/architecture/configuration.md)
102
+ - [Provider Architecture](./docs/architecture/providers.md)
103
+
54
104
  ## Supported Providers
55
105
 
56
106
  | Provider | Status |
57
107
  | --- | --- |
58
108
  | AWS Secrets Manager | Available |
59
109
  | Azure Key Vault | Available |
60
- | GCP Secret Manager | Planned |
110
+ | GCP Secret Manager | Available |
111
+
112
+ ## Requirements
113
+
114
+ - Node.js >= 18
115
+ - One configured provider account/CLI:
116
+ - AWS CLI for AWS Secrets Manager
117
+ - Azure CLI for Azure Key Vault
118
+ - Google Cloud CLI for GCP Secret Manager
119
+
120
+ ## License
121
+
122
+ 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":"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"}
@@ -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"}