getmyenv 0.5.2 → 0.6.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 (161) hide show
  1. package/README.md +57 -13
  2. package/dist/bin.js +1 -24
  3. package/dist/bin.js.map +1 -1
  4. package/dist/cli.d.ts +10 -0
  5. package/dist/cli.d.ts.map +1 -1
  6. package/dist/cli.js +179 -101
  7. package/dist/cli.js.map +1 -1
  8. package/dist/commands/backup.d.ts +2 -1
  9. package/dist/commands/backup.d.ts.map +1 -1
  10. package/dist/commands/backup.js +15 -25
  11. package/dist/commands/backup.js.map +1 -1
  12. package/dist/commands/claim.d.ts +2 -1
  13. package/dist/commands/claim.d.ts.map +1 -1
  14. package/dist/commands/claim.js +114 -82
  15. package/dist/commands/claim.js.map +1 -1
  16. package/dist/commands/context.d.ts +11 -0
  17. package/dist/commands/context.d.ts.map +1 -0
  18. package/dist/commands/context.js +53 -0
  19. package/dist/commands/context.js.map +1 -0
  20. package/dist/commands/export.d.ts +11 -0
  21. package/dist/commands/export.d.ts.map +1 -0
  22. package/dist/commands/export.js +67 -0
  23. package/dist/commands/export.js.map +1 -0
  24. package/dist/commands/guest.d.ts +9 -3
  25. package/dist/commands/guest.d.ts.map +1 -1
  26. package/dist/commands/guest.js +32 -30
  27. package/dist/commands/guest.js.map +1 -1
  28. package/dist/commands/import.d.ts +26 -0
  29. package/dist/commands/import.d.ts.map +1 -0
  30. package/dist/commands/import.js +168 -0
  31. package/dist/commands/import.js.map +1 -0
  32. package/dist/commands/lock.d.ts +5 -0
  33. package/dist/commands/lock.d.ts.map +1 -0
  34. package/dist/commands/lock.js +18 -0
  35. package/dist/commands/lock.js.map +1 -0
  36. package/dist/commands/ls.d.ts +6 -0
  37. package/dist/commands/ls.d.ts.map +1 -0
  38. package/dist/commands/ls.js +37 -0
  39. package/dist/commands/ls.js.map +1 -0
  40. package/dist/commands/restore.d.ts +7 -2
  41. package/dist/commands/restore.d.ts.map +1 -1
  42. package/dist/commands/restore.js +58 -51
  43. package/dist/commands/restore.js.map +1 -1
  44. package/dist/commands/run.d.ts +7 -5
  45. package/dist/commands/run.d.ts.map +1 -1
  46. package/dist/commands/run.js +97 -185
  47. package/dist/commands/run.js.map +1 -1
  48. package/dist/commands/set.d.ts +16 -0
  49. package/dist/commands/set.d.ts.map +1 -0
  50. package/dist/commands/set.js +111 -0
  51. package/dist/commands/set.js.map +1 -0
  52. package/dist/commands/start.d.ts +16 -0
  53. package/dist/commands/start.d.ts.map +1 -0
  54. package/dist/commands/start.js +118 -0
  55. package/dist/commands/start.js.map +1 -0
  56. package/dist/commands/status.d.ts +5 -0
  57. package/dist/commands/status.d.ts.map +1 -0
  58. package/dist/commands/status.js +40 -0
  59. package/dist/commands/status.js.map +1 -0
  60. package/dist/commands/unlink.d.ts +9 -0
  61. package/dist/commands/unlink.d.ts.map +1 -0
  62. package/dist/commands/unlink.js +70 -0
  63. package/dist/commands/unlink.js.map +1 -0
  64. package/dist/lib/api-url.d.ts +12 -0
  65. package/dist/lib/api-url.d.ts.map +1 -1
  66. package/dist/lib/api-url.js +32 -0
  67. package/dist/lib/api-url.js.map +1 -1
  68. package/dist/lib/api.d.ts +35 -23
  69. package/dist/lib/api.d.ts.map +1 -1
  70. package/dist/lib/api.js +23 -59
  71. package/dist/lib/api.js.map +1 -1
  72. package/dist/lib/authorize.d.ts +13 -6
  73. package/dist/lib/authorize.d.ts.map +1 -1
  74. package/dist/lib/authorize.js +68 -63
  75. package/dist/lib/authorize.js.map +1 -1
  76. package/dist/lib/bootstrap.d.ts +18 -15
  77. package/dist/lib/bootstrap.d.ts.map +1 -1
  78. package/dist/lib/bootstrap.js +59 -58
  79. package/dist/lib/bootstrap.js.map +1 -1
  80. package/dist/lib/confirm.js +4 -4
  81. package/dist/lib/confirm.js.map +1 -1
  82. package/dist/lib/context.d.ts +12 -0
  83. package/dist/lib/context.d.ts.map +1 -0
  84. package/dist/lib/context.js +43 -0
  85. package/dist/lib/context.js.map +1 -0
  86. package/dist/lib/credentials.d.ts +8 -9
  87. package/dist/lib/credentials.d.ts.map +1 -1
  88. package/dist/lib/credentials.js +2 -10
  89. package/dist/lib/credentials.js.map +1 -1
  90. package/dist/lib/fs.d.ts +26 -37
  91. package/dist/lib/fs.d.ts.map +1 -1
  92. package/dist/lib/fs.js +112 -327
  93. package/dist/lib/fs.js.map +1 -1
  94. package/dist/lib/guest-key.d.ts +8 -6
  95. package/dist/lib/guest-key.d.ts.map +1 -1
  96. package/dist/lib/guest-key.js +26 -3
  97. package/dist/lib/guest-key.js.map +1 -1
  98. package/dist/lib/identity.d.ts +9 -11
  99. package/dist/lib/identity.d.ts.map +1 -1
  100. package/dist/lib/identity.js +34 -24
  101. package/dist/lib/identity.js.map +1 -1
  102. package/dist/lib/keychain.d.ts +21 -0
  103. package/dist/lib/keychain.d.ts.map +1 -0
  104. package/dist/lib/keychain.js +124 -0
  105. package/dist/lib/keychain.js.map +1 -0
  106. package/dist/lib/pek.d.ts +15 -22
  107. package/dist/lib/pek.d.ts.map +1 -1
  108. package/dist/lib/pek.js +31 -51
  109. package/dist/lib/pek.js.map +1 -1
  110. package/dist/lib/run-env.d.ts +50 -0
  111. package/dist/lib/run-env.d.ts.map +1 -0
  112. package/dist/lib/run-env.js +114 -0
  113. package/dist/lib/run-env.js.map +1 -0
  114. package/dist/lib/unlock.d.ts +24 -0
  115. package/dist/lib/unlock.d.ts.map +1 -0
  116. package/dist/lib/unlock.js +87 -0
  117. package/dist/lib/unlock.js.map +1 -0
  118. package/dist/lib/update-check.d.ts +4 -2
  119. package/dist/lib/update-check.d.ts.map +1 -1
  120. package/dist/lib/update-check.js +54 -68
  121. package/dist/lib/update-check.js.map +1 -1
  122. package/dist/lib/upload.d.ts +21 -0
  123. package/dist/lib/upload.d.ts.map +1 -0
  124. package/dist/lib/upload.js +53 -0
  125. package/dist/lib/upload.js.map +1 -0
  126. package/package.json +5 -3
  127. package/dist/commands/delete.d.ts +0 -6
  128. package/dist/commands/delete.d.ts.map +0 -1
  129. package/dist/commands/delete.js +0 -55
  130. package/dist/commands/delete.js.map +0 -1
  131. package/dist/commands/link.d.ts +0 -16
  132. package/dist/commands/link.d.ts.map +0 -1
  133. package/dist/commands/link.js +0 -142
  134. package/dist/commands/link.js.map +0 -1
  135. package/dist/commands/pull.d.ts +0 -15
  136. package/dist/commands/pull.d.ts.map +0 -1
  137. package/dist/commands/pull.js +0 -159
  138. package/dist/commands/pull.js.map +0 -1
  139. package/dist/commands/push.d.ts +0 -15
  140. package/dist/commands/push.d.ts.map +0 -1
  141. package/dist/commands/push.js +0 -262
  142. package/dist/commands/push.js.map +0 -1
  143. package/dist/commands/remove.d.ts +0 -11
  144. package/dist/commands/remove.d.ts.map +0 -1
  145. package/dist/commands/remove.js +0 -39
  146. package/dist/commands/remove.js.map +0 -1
  147. package/dist/commands/token.d.ts +0 -14
  148. package/dist/commands/token.d.ts.map +0 -1
  149. package/dist/commands/token.js +0 -132
  150. package/dist/commands/token.js.map +0 -1
  151. package/dist/commands/whoami.d.ts +0 -6
  152. package/dist/commands/whoami.d.ts.map +0 -1
  153. package/dist/commands/whoami.js +0 -46
  154. package/dist/commands/whoami.js.map +0 -1
  155. package/dist/lib/env-name.d.ts +0 -3
  156. package/dist/lib/env-name.d.ts.map +0 -1
  157. package/dist/lib/env-name.js +0 -5
  158. package/dist/lib/env-name.js.map +0 -1
  159. package/dist/lib/guest-key.test.d.ts +0 -2
  160. package/dist/lib/guest-key.test.d.ts.map +0 -1
  161. package/dist/lib/guest-key.test.js.map +0 -1
package/README.md CHANGED
@@ -2,31 +2,75 @@
2
2
 
3
3
  CLI for [getmyenv](https://getmyenv.com) - encrypted environment variables for any language.
4
4
 
5
- AI-first .env alternative:
5
+ Keep using environment variables. Stop managing them as files.
6
6
 
7
7
  ```bash
8
8
  cd your-project
9
- npx getmyenv guest --name my-app
9
+ npx getmyenv # Start without an account, or Sign in
10
+ npx getmyenv import # encrypt and upload your .env
11
+ npx getmyenv run -- npm run dev # start with the default context
12
+ npx getmyenv run staging -- npm start # or pick one
10
13
  ```
11
14
 
12
- Human account (Development laptop):
15
+ ## Commands
16
+
17
+ - `getmyenv`: setup in a new folder, status in a linked one. Without a TTY it prints next steps and exits.
18
+ - `run [context] -- <cmd>`: resolve, validate, merge, spawn. A missing value stops the run and prints its name (`--allow-missing` to run anyway). getmyenv values replace the parent env and replaced names are printed (`--keep-existing` to keep parent values). `--explain` lists names and origins, never values.
19
+ - `status`: project, token, contexts and the run command.
20
+ - `context list | create "<name>" [--from <slug>] [--use] | use <slug>`
21
+ - `set KEY[=VALUE]... [--expires <date|never>]`, `set KEY --stdin`, `unset KEY... [--all]`, `ls`
22
+ - `import [file] [--prune] [--dry-run] [--yes]`: `.env.<slug>` goes to that context.
23
+ - `export [-o file | --stdout] [--yes]`: for tools that need a file. The file is added to `.gitignore` and gets owner-only permissions on macOS and Linux.
24
+ - `guest [--name <name>]`: a project without an account. It works for 30 days. Claim it within 60.
25
+ - `claim`: claim a guest project from `.getmyenv/claim.json`.
26
+ - `backup [-o file]`: encrypted backup of open contexts (default `<project>.getmyenv`).
27
+ - `restore <file> [--dry-run] [--yes]`
28
+ - `lock`, `unlink [--yes]`, `help [command]`
29
+
30
+ `run`, `set`, `unset`, `ls`, `import` and `export` take `-c, --context <slug>`. The default is the server token's context, then `context` in `.getmyenv/project.json`, then `development`.
31
+
32
+ `run`, `set`, `import`, `export` and `restore` take `--vault-password-stdin`. Every command takes `--api-url <url>`.
33
+
34
+ Prompts and status lines go to stderr, so `export --stdout > .env` stays clean.
35
+
36
+ ## Vault password
37
+
38
+ For open contexts, after you enter the Vault password in a terminal, the unlocked project key stays in your OS keychain (macOS Keychain, Windows Credential Manager, Linux Secret Service) for 8 hours. The password itself is never stored.
39
+
40
+ - `npx getmyenv lock` removes it. `unlink` removes it too.
41
+ - Locked contexts, CI and `--vault-password-stdin` ask on each run.
42
+ - Guest projects unlock with the passphrase in `.getmyenv/claim.json` and never ask.
43
+ - `GETMYENV_KEYCHAIN=0` always asks.
44
+
45
+ ## CI and servers
13
46
 
14
47
  ```bash
15
- npx getmyenv run -- npm run dev # opens browser on first run, then runs
48
+ printf %s "$VAULT_PASSWORD" | npx getmyenv run --vault-password-stdin -- node server.js
49
+ printf %s "$VALUE" | npx getmyenv set API_KEY --stdin
50
+ printf '%s\n%s' "$VAULT_PASSWORD" "$VALUE" | npx getmyenv set API_KEY --stdin --vault-password-stdin
16
51
  ```
17
52
 
18
- The first verb you run in a folder opens the browser to create a per-project CLI token, stores it in `.getmyenv/token.json`, and continues. Six primary commands. No separate authorize step. One folder = one project = one token. Token name is project + scope.
53
+ Server tokens are read-only, so `set` needs the folder token from browser sign-in (or a guest project). With both `--stdin` and `--vault-password-stdin`, send the password on the first line and the value after it.
54
+
55
+ - `GETMYENV_TOKEN`: a token from the dashboard CLI page.
56
+ - `GETMYENV_CONFIG_DIR`: machine key and cache (default `~/.config/getmyenv`). Use a persistent volume in containers.
57
+ - `GETMYENV_API_URL`: API origin. https only, http for localhost.
58
+ - `GETMYENV_MACHINE_LABEL`: the machine name shown in approval requests.
59
+ - `GETMYENV_SKIP_UPDATE=1`: skip the update notice.
60
+ - `GETMYENV_KEYCHAIN=0`: never use the OS keychain.
61
+ - The update check and the keychain are skipped when `CI` is set (unless it is `false` or `0`).
19
62
 
20
- - Development token: `run`, `push`, `pull`, `remove`, `restore`. `push` skips `.env*` basenames containing `production`.
21
- - Production token: read-only (`run`, `backup`). Set Production values in the dashboard. Create the token with an IP allowlist; set `GETMYENV_TOKEN`. No browser day to day.
22
- - Environment comes from token scope. Omit `-e` day to day.
23
- - Forget this folder: `npx getmyenv delete` (local `.getmyenv/` only; vault stays on the server). Then re-run `run` or `push` to authorize again.
24
- - CI: set `GETMYENV_TOKEN`.
63
+ ## Open and Locked
25
64
 
26
- Primary: `guest`, `run`, `push`, `remove`, `delete`, `claim`. Also: `pull`, `backup`, `restore`, `whoami`.
65
+ - Open contexts: the CLI can read and write. Browser sign-in gives the folder a token in `.getmyenv/token.json`.
66
+ - Locked contexts: the CLI is read-only. Set values in the dashboard. Use a server token from the CLI page (one context, IP allowlist) with `GETMYENV_TOKEN`. New machines need approval unless trusted.
27
67
 
28
- AI scaffolding without an account: `npx getmyenv guest --name <project>`. Commit `.getmyenv/project.json` and `.getmyenv/claim.json`. Human takeover: `npx getmyenv claim` within 30 days.
68
+ ## Chaining
69
+
70
+ ```bash
71
+ op run -- npx getmyenv run staging -- npm start
72
+ ```
29
73
 
30
- License: MIT (see [LICENSE](./LICENSE)). The hosted service at getmyenv.com is governed by its Terms, not this file.
74
+ License: MIT (see [LICENSE](./LICENSE)). The hosted service at getmyenv.com has its own Terms.
31
75
 
32
76
  See https://getmyenv.com/docs
package/dist/bin.js CHANGED
@@ -1,30 +1,7 @@
1
1
  #!/usr/bin/env node
2
- import fs from "node:fs";
3
- import path from "node:path";
4
- import os from "node:os";
5
2
  import { runCli } from "./cli.js";
6
3
  import { maybeSuggestUpdate } from "./lib/update-check.js";
7
- /**
8
- * One-shot retire of the machine-global credentials store from before 0.3.4.
9
- * Silent: delete the file (secrets do not linger) and print one honest line so
10
- * the user knows why the first verb in a folder asks to authorize.
11
- */
12
- function retireLegacyCredentials() {
13
- const base = process.env.GETMYENV_CONFIG_DIR?.trim() ||
14
- path.join(os.homedir(), ".config", "getmyenv");
15
- const file = path.join(base, "credentials.json");
16
- if (!fs.existsSync(file))
17
- return;
18
- try {
19
- fs.unlinkSync(file);
20
- console.error("getmyenv: retired old ~/.config/getmyenv/credentials.json. Tokens now live in .getmyenv/token.json per folder.");
21
- }
22
- catch {
23
- /* ignore */
24
- }
25
- }
26
4
  async function main() {
27
- retireLegacyCredentials();
28
5
  await maybeSuggestUpdate();
29
6
  await runCli(process.argv);
30
7
  }
@@ -32,6 +9,6 @@ main().catch((err) => {
32
9
  const message = err instanceof Error ? err.message : "Unexpected error";
33
10
  // Never print secret values - sanitize to message only
34
11
  console.error(`getmyenv: ${message}`);
35
- process.exit(1);
12
+ process.exit(process.exitCode ? Number(process.exitCode) : 1);
36
13
  });
37
14
  //# sourceMappingURL=bin.js.map
package/dist/bin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D;;;;GAIG;AACH,SAAS,uBAAuB;IAC9B,MAAM,IAAI,GACR,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,EAAE;QACvC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;IACjD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO;IACjC,IAAI,CAAC;QACH,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACpB,OAAO,CAAC,KAAK,CACX,gHAAgH,CACjH,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,YAAY;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,uBAAuB,EAAE,CAAC;IAC1B,MAAM,kBAAkB,EAAE,CAAC;IAC3B,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IAC5B,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC;IACxE,uDAAuD;IACvD,OAAO,CAAC,KAAK,CAAC,aAAa,OAAO,EAAE,CAAC,CAAC;IACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,KAAK,UAAU,IAAI;IACjB,MAAM,kBAAkB,EAAE,CAAC;IAC3B,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IAC5B,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC;IACxE,uDAAuD;IACvD,OAAO,CAAC,KAAK,CAAC,aAAa,OAAO,EAAE,CAAC,CAAC;IACtC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC,CAAC,CAAC"}
package/dist/cli.d.ts CHANGED
@@ -1,2 +1,12 @@
1
+ /**
2
+ * Split `run` operands around `--`.
3
+ * `run staging -- npm start`: context staging, command npm start.
4
+ * `run -- npm start`: default context.
5
+ * `run npm start` (no `--`): the whole thing is the command.
6
+ */
7
+ export declare function splitRunArgs(operands: string[], argv: string[], explain: boolean): {
8
+ context?: string;
9
+ command: string[];
10
+ };
1
11
  export declare function runCli(argv: string[]): Promise<void>;
2
12
  //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AA6BA,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA2J1D"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AA+BA;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAAE,EAClB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,OAAO,GACf;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CASzC;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA8L1D"}
package/dist/cli.js CHANGED
@@ -1,131 +1,209 @@
1
1
  import { Command } from "commander";
2
2
  import { backupCommand } from "./commands/backup.js";
3
+ import { claimCommand } from "./commands/claim.js";
4
+ import { contextCreateCommand, contextListCommand, contextUseCommand, } from "./commands/context.js";
5
+ import { exportCommand } from "./commands/export.js";
6
+ import { guestCommand } from "./commands/guest.js";
7
+ import { importCommand } from "./commands/import.js";
8
+ import { lockCommand } from "./commands/lock.js";
9
+ import { lsCommand } from "./commands/ls.js";
3
10
  import { restoreCommand } from "./commands/restore.js";
4
11
  import { runCommand } from "./commands/run.js";
5
- import { pushCommand } from "./commands/push.js";
6
- import { pullCommand } from "./commands/pull.js";
7
- import { whoamiCommand } from "./commands/whoami.js";
8
- import { guestCommand } from "./commands/guest.js";
9
- import { claimCommand } from "./commands/claim.js";
10
- import { removeCommand } from "./commands/remove.js";
11
- import { deleteCommand } from "./commands/delete.js";
12
- import { normalizeEnvName } from "./lib/env-name.js";
13
- import { CLI_VERSION, resolveApiUrl } from "./lib/api.js";
14
- import { readProjectMeta } from "./lib/fs.js";
15
- function envWasDefaultFromArgv() {
16
- return !process.argv.includes("-e") && !process.argv.includes("--env");
17
- }
18
- function folderEnvOption() {
19
- const meta = readProjectMeta();
20
- return meta?.environment ?? "development";
21
- }
22
- const ENV_OPTION = [
23
- "-e, --env <name>",
24
- "Environment (must match token scope; omit to use the token)",
12
+ import { setCommand, unsetCommand } from "./commands/set.js";
13
+ import { startCommand } from "./commands/start.js";
14
+ import { statusCommand } from "./commands/status.js";
15
+ import { unlinkCommand } from "./commands/unlink.js";
16
+ import { CLI_VERSION } from "./lib/api.js";
17
+ const CONTEXT_OPTION = [
18
+ "-c, --context <slug>",
19
+ "Context to use (default: project.json context, then development)",
20
+ ];
21
+ const API_OPTION = ["--api-url <url>", "API base URL"];
22
+ const STDIN_OPTION = [
23
+ "--vault-password-stdin",
24
+ "Read the Vault password from stdin (non-interactive)",
25
25
  ];
26
+ /**
27
+ * Split `run` operands around `--`.
28
+ * `run staging -- npm start`: context staging, command npm start.
29
+ * `run -- npm start`: default context.
30
+ * `run npm start` (no `--`): the whole thing is the command.
31
+ */
32
+ export function splitRunArgs(operands, argv, explain) {
33
+ const dash = argv.indexOf("--");
34
+ if (dash >= 0) {
35
+ const command = argv.slice(dash + 1);
36
+ const before = operands.slice(0, Math.max(0, operands.length - command.length));
37
+ return { context: before[0], command };
38
+ }
39
+ if (explain && operands.length <= 1)
40
+ return { context: operands[0], command: [] };
41
+ return { command: operands };
42
+ }
26
43
  export async function runCli(argv) {
27
- const apiDefault = resolveApiUrl();
28
44
  const program = new Command();
29
45
  program
30
46
  .name("getmyenv")
31
47
  .description("Keep using environment variables. Stop managing them as files.")
32
- .version(CLI_VERSION);
33
- program
34
- .command("guest")
35
- .description("Create a guest project without an account. Claim within 30 days.")
36
- .option("--name <name>", "Project name (default: folder name)")
37
- .option("--api-url <url>", "API base URL to remember (default production)")
38
- .action((opts) => guestCommand(opts));
48
+ .version(CLI_VERSION)
49
+ .option(...API_OPTION)
50
+ .addHelpText("after", [
51
+ "",
52
+ "Environment:",
53
+ " GETMYENV_TOKEN Token for CI and servers (instead of .getmyenv/token.json)",
54
+ " GETMYENV_API_URL API base URL (https, or http://localhost)",
55
+ " GETMYENV_CONFIG_DIR Machine identity and cache dir (default ~/.config/getmyenv)",
56
+ " GETMYENV_SKIP_UPDATE Set to 1 to skip the update notice",
57
+ " GETMYENV_KEYCHAIN Set to 0 to always ask for the Vault password",
58
+ " GETMYENV_MACHINE_LABEL Name shown for this machine in access requests",
59
+ ].join("\n"))
60
+ .helpCommand(true)
61
+ .action((opts) => startCommand(opts));
62
+ // The root owns --api-url wherever it appears, so hand it to the command that runs.
63
+ program.hook("preAction", (_root, actionCommand) => {
64
+ const apiUrl = program.opts().apiUrl;
65
+ if (apiUrl && actionCommand !== program && !actionCommand.opts().apiUrl) {
66
+ actionCommand.setOptionValue("apiUrl", apiUrl);
67
+ }
68
+ });
39
69
  program
40
70
  .command("run")
41
- .description("Decrypt authorized secrets and run a command (opens browser on first use)")
42
- .option(...ENV_OPTION)
43
- .option("--api-url <url>", "API base URL", apiDefault)
44
- .option("--vault-password-stdin", "Read vault password from stdin (non-interactive)")
71
+ .description("Run a command with a context's variables in its environment")
72
+ .usage("[context] [options] -- <command...>")
73
+ .addHelpText("after", [
74
+ "",
75
+ "Examples:",
76
+ " npx getmyenv run -- npm run dev",
77
+ " npx getmyenv run staging -- node server.js",
78
+ ' printf %s "$VAULT_PASSWORD" | npx getmyenv run production --vault-password-stdin -- node server.js',
79
+ ].join("\n"))
80
+ .argument("[context]", "Context slug (same as -c)")
81
+ .option(...CONTEXT_OPTION)
82
+ .option("--explain", "List each variable and where its value comes from (names only)")
83
+ .option("--keep-existing", "Keep variables already set in the parent environment")
84
+ .option("--allow-missing", "Run even when some variables have no value in this context")
85
+ .option(...STDIN_OPTION)
86
+ .option(...API_OPTION)
45
87
  .allowUnknownOption(true)
46
88
  .allowExcessArguments(true)
47
- .action(async (opts, cmd) => {
48
- const args = cmd.args;
49
- const dashIdx = process.argv.indexOf("--");
50
- const childArgs = dashIdx >= 0 ? process.argv.slice(dashIdx + 1) : args;
51
- await runCommand({
52
- ...opts,
53
- env: normalizeEnvName(opts.env ?? folderEnvOption()),
54
- envWasDefault: envWasDefaultFromArgv(),
55
- apiUrl: opts.apiUrl ?? apiDefault,
56
- }, childArgs);
89
+ .action(async (_ctx, opts, cmd) => {
90
+ const split = splitRunArgs(cmd.args, argv, opts.explain === true);
91
+ if (opts.context && split.context && opts.context !== split.context) {
92
+ throw new Error(`Two contexts given: ${split.context} and -c ${opts.context}. Pick one.`);
93
+ }
94
+ await runCommand({ ...opts, context: opts.context ?? split.context }, split.command);
57
95
  });
58
96
  program
59
- .command("push")
60
- .description("Encrypt local secrets and upload to the linked project")
61
- .option(...ENV_OPTION)
62
- .option("-f, --file <path>", "Path to .env file to push")
63
- .option("-k, --key <NAME=VALUE>", "Push a single secret (NAME or NAME=VALUE)")
64
- .option("--prune", "Delete hosted secrets that are not in the local file")
65
- .option("--yes", "Apply changes without prompting on conflicts")
66
- .option("--dry-run", "Show what would change without uploading")
67
- .option("--api-url <url>", "API base URL", apiDefault)
68
- .option("--vault-password-stdin", "Read vault password from stdin (non-interactive)")
69
- .action((opts) => pushCommand({
70
- ...opts,
71
- env: normalizeEnvName(opts.env ?? folderEnvOption()),
72
- envWasDefault: envWasDefaultFromArgv(),
73
- }));
97
+ .command("status")
98
+ .description("Show project, token, contexts and the run command")
99
+ .option(...API_OPTION)
100
+ .action((opts) => statusCommand(opts));
101
+ const context = program.command("context").description("List, create or pick contexts");
102
+ context
103
+ .command("list", { isDefault: true })
104
+ .description("List contexts (* marks this folder's default)")
105
+ .option(...API_OPTION)
106
+ .action((opts) => contextListCommand(opts));
107
+ context
108
+ .command("create <name>")
109
+ .description('Create an open context, e.g. context create "Customer Acme"')
110
+ .option("--from <slug>", "Copy values from an open context")
111
+ .option("--use", "Make it this folder's default")
112
+ .option(...API_OPTION)
113
+ .action((name, opts) => contextCreateCommand(name, opts));
114
+ context
115
+ .command("use <slug>")
116
+ .description("Set this folder's default context (saved in project.json)")
117
+ .option(...API_OPTION)
118
+ .action((slug, opts) => contextUseCommand(slug, opts));
74
119
  program
75
- .command("claim")
76
- .description("Claim a guest project from .getmyenv/claim.json (browser + Vault password)")
77
- .option("--api-url <url>", "API base URL")
78
- .action((opts) => claimCommand(opts));
120
+ .command("set")
121
+ .description("Set values: set KEY=VALUE, or set KEY to be prompted")
122
+ .argument("<pairs...>", "KEY or KEY=VALUE")
123
+ .option(...CONTEXT_OPTION)
124
+ .option("--expires <date>", "Expiry date, e.g. 2026-12-31, or never")
125
+ .option("--stdin", "Read the value of one KEY from stdin (keeps it out of argv)")
126
+ .option(...STDIN_OPTION)
127
+ .option(...API_OPTION)
128
+ .action((pairs, opts) => setCommand(pairs, opts));
129
+ program
130
+ .command("unset")
131
+ .description("Remove values from a context")
132
+ .argument("<names...>", "Variable names")
133
+ .option(...CONTEXT_OPTION)
134
+ .option("--all", "Delete the variable from every context")
135
+ .option(...API_OPTION)
136
+ .action((names, opts) => unsetCommand(names, opts));
137
+ program
138
+ .command("ls")
139
+ .description("Variable names by context with status (never values)")
140
+ .option(...CONTEXT_OPTION)
141
+ .option(...API_OPTION)
142
+ .action((opts) => lsCommand(opts));
143
+ program
144
+ .command("import")
145
+ .description("Encrypt a .env file and upload it (.env.<slug> goes to that context)")
146
+ .argument("[file]", "Env file (default: .env files in this folder)")
147
+ .option(...CONTEXT_OPTION)
148
+ .option("--prune", "Unset values in the context that are not in the file")
149
+ .option("--dry-run", "Show what would change without uploading")
150
+ .option("--yes", "Do not ask for confirmation")
151
+ .option(...STDIN_OPTION)
152
+ .option(...API_OPTION)
153
+ .action((file, opts) => importCommand(file, opts));
79
154
  program
80
- .command("pull")
81
- .description("Download secrets to a plaintext .env file")
82
- .option(...ENV_OPTION)
155
+ .command("export")
156
+ .description("Write a context to a plaintext .env file, for tools that need one")
157
+ .option(...CONTEXT_OPTION)
83
158
  .option("-o, --output <file>", "Output file", ".env")
84
- .option("--to <file>", "Alias for --output")
85
159
  .option("--stdout", "Write to stdout instead of a file")
86
- .option("--yes", "Overwrite conflicting local values without prompting")
87
- .option("--merge", "Only fill missing keys; keep local values")
88
- .option("--dry-run", "Show what would change without writing")
89
- .option("--api-url <url>", "API base URL", apiDefault)
90
- .option("--vault-password-stdin", "Read vault password from stdin (non-interactive)")
91
- .action((opts) => pullCommand({
92
- ...opts,
93
- env: normalizeEnvName(opts.env ?? folderEnvOption()),
94
- envWasDefault: envWasDefaultFromArgv(),
95
- }));
160
+ .option("--yes", "Change an existing file without asking")
161
+ .option(...STDIN_OPTION)
162
+ .option(...API_OPTION)
163
+ .action((opts) => exportCommand(opts));
96
164
  program
97
- .command("whoami")
98
- .description("Show the folder's CLI token, project, and defaults")
99
- .option("--api-url <url>", "API base URL")
100
- .action(whoamiCommand);
165
+ .command("guest")
166
+ .description("Create a guest project without an account. It works for 30 days. Claim it within 60.")
167
+ .option("--name <name>", "Project name (default: folder name)")
168
+ .option(...API_OPTION)
169
+ .action((opts) => guestCommand(opts));
170
+ program
171
+ .command("claim")
172
+ .description("Claim a guest project from .getmyenv/claim.json")
173
+ .option(...API_OPTION)
174
+ .action((opts) => claimCommand(opts));
101
175
  program
102
176
  .command("backup")
103
- .description("Create a portable encrypted .getmyenv backup")
104
- .option("-o, --output <file>", "Output file")
105
- .option("--api-url <url>", "API base URL", apiDefault)
106
- .action(backupCommand);
177
+ .description("Write an encrypted backup of open contexts")
178
+ .option("-o, --output <file>", "Output file (default: <project>.getmyenv)")
179
+ .option(...API_OPTION)
180
+ .action((opts) => backupCommand(opts));
107
181
  program
108
182
  .command("restore <file>")
109
- .description("Restore from an encrypted .getmyenv backup into the linked project")
110
- .option("--api-url <url>", "API base URL", apiDefault)
111
- .option("--into-linked", "Require a linked folder (restore still targets the token project)")
112
- .option("--vault-password-stdin", "Read vault password from stdin (non-interactive)")
113
- .action(restoreCommand);
183
+ .description("Restore an encrypted backup into this folder's project")
184
+ .option("--dry-run", "Check the backup and show what would be restored")
185
+ .option("--yes", "Do not ask for confirmation")
186
+ .option(...STDIN_OPTION)
187
+ .option(...API_OPTION)
188
+ .action((file, opts) => restoreCommand(file, opts));
114
189
  program
115
- .command("remove")
116
- .description("Delete named secret(s) from the linked project")
117
- .argument("<names...>", "Secret name(s) to remove")
118
- .option(...ENV_OPTION)
119
- .option("--api-url <url>", "API base URL", apiDefault)
120
- .action((names, opts) => removeCommand(names, {
121
- ...opts,
122
- env: normalizeEnvName(opts.env ?? folderEnvOption()),
123
- envWasDefault: envWasDefaultFromArgv(),
124
- }));
190
+ .command("lock")
191
+ .description("Forget the unlocked project key on this machine (OS keychain)")
192
+ .option(...API_OPTION)
193
+ .action((opts) => lockCommand(opts));
125
194
  program
126
- .command("delete")
127
- .description("Forget this folder: remove .getmyenv/ locally (cloud project stays)")
128
- .action(() => deleteCommand());
195
+ .command("unlink")
196
+ .description("Revoke this folder's token and remove local .getmyenv files")
197
+ .option("--yes", "Do not ask for confirmation")
198
+ .option(...API_OPTION)
199
+ .action((opts) => unlinkCommand(opts));
200
+ const first = argv[2];
201
+ if (first &&
202
+ !first.startsWith("-") &&
203
+ first !== "help" &&
204
+ !program.commands.some((c) => c.name() === first || c.aliases().includes(first))) {
205
+ throw new Error(`Unknown command "${first}". See: npx getmyenv --help`);
206
+ }
129
207
  await program.parseAsync(argv);
130
208
  }
131
209
  //# 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,7 +1,8 @@
1
1
  type BackupOpts = {
2
2
  output?: string;
3
- apiUrl: string;
3
+ apiUrl?: string;
4
4
  };
5
+ /** Encrypted backup of open contexts. Readable offline with the Vault password. */
5
6
  export declare function backupCommand(opts: BackupOpts): Promise<void>;
6
7
  export {};
7
8
  //# sourceMappingURL=backup.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"AAaA,KAAK,UAAU,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtD,wBAAsB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAgDnE"}
1
+ {"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"AAaA,KAAK,UAAU,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,mFAAmF;AACnF,wBAAsB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCnE"}
@@ -2,38 +2,28 @@ import fs from "node:fs";
2
2
  import path from "node:path";
3
3
  import pc from "picocolors";
4
4
  import { createBackupEnvelope, parsePayload, parseWrappedKey, serializeBackup, } from "@getmyenv/crypto";
5
- import { readProjectMeta } from "../lib/fs.js";
6
- import { ApiClient } from "../lib/api.js";
5
+ import { slugify } from "@getmyenv/shared";
7
6
  import { ensureTokenAndLink } from "../lib/bootstrap.js";
7
+ /** Encrypted backup of open contexts. Readable offline with the Vault password. */
8
8
  export async function backupCommand(opts) {
9
- console.log(pc.bold("\ngetmyenv backup\n"));
10
- const { apiUrl, token, projectId } = await ensureTokenAndLink({
11
- apiUrl: opts.apiUrl,
12
- action: "backup",
13
- });
14
- const meta = readProjectMeta();
15
- const client = new ApiClient(apiUrl, token);
16
- const data = await client.request("GET", `/api/cli/projects/${projectId}/backup`);
9
+ const { client } = await ensureTokenAndLink({ apiUrl: opts.apiUrl });
10
+ const data = await client.request("GET", "/api/cli/backup");
17
11
  const envelope = createBackupEnvelope({
18
12
  projectName: data.projectName,
19
13
  wrappedProjectKey: parseWrappedKey(JSON.stringify(data.wrappedProjectKey)),
20
- secrets: data.secrets.map((s) => ({
21
- name: s.name,
22
- environment: s.environment,
23
- status: s.status,
24
- expiresAt: s.expiresAt,
25
- payload: s.ciphertext != null && s.status !== "placeholder"
26
- ? parsePayload(s.ciphertext)
27
- : null,
14
+ contexts: data.contexts,
15
+ keys: data.keys,
16
+ tags: data.tags,
17
+ values: data.values.map((v) => ({
18
+ key: v.key,
19
+ context: v.context,
20
+ expiresAt: v.expiresAt,
21
+ payload: parsePayload(v.ciphertext),
28
22
  })),
29
23
  });
30
- const out = opts.output ??
31
- path.join(process.cwd(), `${data.projectName.replace(/\s+/g, "-").toLowerCase()}.getmyenv`);
24
+ const out = opts.output ?? path.join(process.cwd(), `${slugify(data.projectName) || "project"}.getmyenv`);
32
25
  fs.writeFileSync(out, serializeBackup(envelope), { mode: 0o600 });
33
- console.log(`${pc.green("✓")} Wrote encrypted backup: ${out}`);
34
- if (meta?.environment) {
35
- console.log(pc.dim(`Linked environment: ${meta.environment}`));
36
- }
37
- console.log(pc.dim("Encrypted. Unlock with your Vault password.\n"));
26
+ console.log(`${pc.green("✓")} Encrypted backup: ${out} (${data.values.length} values, ${data.contexts.length} open contexts)`);
27
+ console.log(pc.dim("Locked contexts are backed up from the dashboard."));
38
28
  }
39
29
  //# sourceMappingURL=backup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EACL,oBAAoB,EACpB,YAAY,EACZ,eAAe,EACf,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAIzD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAgB;IAClD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAC5C,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,kBAAkB,CAAC;QAC5D,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,MAAM,EAAE,QAAQ;KACjB,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAE5C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAU9B,KAAK,EAAE,qBAAqB,SAAS,SAAS,CAAC,CAAC;IAEnD,MAAM,QAAQ,GAAG,oBAAoB,CAAC;QACpC,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,iBAAiB,EAAE,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC1E,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAChC,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,OAAO,EACL,CAAC,CAAC,UAAU,IAAI,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,aAAa;gBAChD,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC;gBAC5B,CAAC,CAAC,IAAI;SACX,CAAC,CAAC;KACJ,CAAC,CAAC;IAEH,MAAM,GAAG,GACP,IAAI,CAAC,MAAM;QACX,IAAI,CAAC,IAAI,CACP,OAAO,CAAC,GAAG,EAAE,EACb,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,WAAW,CAClE,CAAC;IACJ,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,eAAe,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,GAAG,EAAE,CAAC,CAAC;IAC/D,IAAI,IAAI,EAAE,WAAW,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,uBAAuB,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC,CAAC;AACvE,CAAC"}
1
+ {"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EACL,oBAAoB,EACpB,YAAY,EACZ,eAAe,EACf,eAAe,GAEhB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAIzD,mFAAmF;AACnF,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAgB;IAClD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,kBAAkB,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACrE,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAO9B,KAAK,EAAE,iBAAiB,CAAC,CAAC;IAE7B,MAAM,QAAQ,GAAG,oBAAoB,CAAC;QACpC,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,iBAAiB,EAAE,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC1E,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9B,GAAG,EAAE,CAAC,CAAC,GAAG;YACV,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC;SACpC,CAAC,CAAC;KACJ,CAAC,CAAC;IAEH,MAAM,GAAG,GACP,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,SAAS,WAAW,CAAC,CAAC;IAChG,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,eAAe,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CACT,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,YAAY,IAAI,CAAC,QAAQ,CAAC,MAAM,iBAAiB,CAClH,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC,CAAC;AAC3E,CAAC"}
@@ -2,7 +2,8 @@ export type ClaimOpts = {
2
2
  apiUrl?: string;
3
3
  };
4
4
  /**
5
- * Claim a guest project: browser ownership transfer, then rewrap vault password.
5
+ * Claim a guest project: sign in and take ownership in the browser, then
6
+ * rewrap the project key with a Vault password.
6
7
  */
7
8
  export declare function claimCommand(opts?: ClaimOpts): Promise<void>;
8
9
  //# sourceMappingURL=claim.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"claim.d.ts","sourceRoot":"","sources":["../../src/commands/claim.ts"],"names":[],"mappings":"AAkBA,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAiBF;;GAEG;AACH,wBAAsB,YAAY,CAAC,IAAI,GAAE,SAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA4ItE"}
1
+ {"version":3,"file":"claim.d.ts","sourceRoot":"","sources":["../../src/commands/claim.ts"],"names":[],"mappings":"AAoBA,MAAM,MAAM,SAAS,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAqF5C;;;GAGG;AACH,wBAAsB,YAAY,CAAC,IAAI,GAAE,SAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA0EtE"}