getmyenv 0.3.8 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -6
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +51 -40
- package/dist/cli.js.map +1 -1
- package/dist/commands/backup.js +2 -2
- package/dist/commands/backup.js.map +1 -1
- package/dist/commands/claim.d.ts +8 -0
- package/dist/commands/claim.d.ts.map +1 -0
- package/dist/commands/claim.js +113 -0
- package/dist/commands/claim.js.map +1 -0
- package/dist/commands/delete.d.ts +6 -0
- package/dist/commands/delete.d.ts.map +1 -0
- package/dist/commands/delete.js +55 -0
- package/dist/commands/delete.js.map +1 -0
- package/dist/commands/guest.d.ts +10 -0
- package/dist/commands/guest.d.ts.map +1 -0
- package/dist/commands/guest.js +66 -0
- package/dist/commands/guest.js.map +1 -0
- package/dist/commands/link.js +4 -4
- package/dist/commands/link.js.map +1 -1
- package/dist/commands/pull.js +2 -2
- package/dist/commands/pull.js.map +1 -1
- package/dist/commands/push.js +1 -1
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/remove.d.ts +11 -0
- package/dist/commands/remove.d.ts.map +1 -0
- package/dist/commands/remove.js +39 -0
- package/dist/commands/remove.js.map +1 -0
- package/dist/commands/restore.d.ts.map +1 -1
- package/dist/commands/restore.js +2 -2
- package/dist/commands/restore.js.map +1 -1
- package/dist/commands/run.js +2 -2
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/token.d.ts.map +1 -1
- package/dist/commands/token.js +1 -2
- package/dist/commands/token.js.map +1 -1
- package/dist/commands/whoami.d.ts.map +1 -1
- package/dist/commands/whoami.js +7 -1
- package/dist/commands/whoami.js.map +1 -1
- package/dist/lib/api.d.ts +9 -3
- package/dist/lib/api.d.ts.map +1 -1
- package/dist/lib/api.js +17 -9
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/authorize.d.ts +9 -0
- package/dist/lib/authorize.d.ts.map +1 -0
- package/dist/lib/authorize.js +120 -0
- package/dist/lib/authorize.js.map +1 -0
- package/dist/lib/bootstrap.d.ts.map +1 -1
- package/dist/lib/bootstrap.js +35 -10
- package/dist/lib/bootstrap.js.map +1 -1
- package/dist/lib/credentials.d.ts +1 -0
- package/dist/lib/credentials.d.ts.map +1 -1
- package/dist/lib/credentials.js +0 -1
- package/dist/lib/credentials.js.map +1 -1
- package/dist/lib/fs.d.ts +15 -2
- package/dist/lib/fs.d.ts.map +1 -1
- package/dist/lib/fs.js +98 -6
- package/dist/lib/fs.js.map +1 -1
- package/dist/lib/pek.d.ts +3 -1
- package/dist/lib/pek.d.ts.map +1 -1
- package/dist/lib/pek.js +5 -1
- package/dist/lib/pek.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,20 +4,21 @@ CLI for [getmyenv](https://getmyenv.com) - encrypted environment variables for a
|
|
|
4
4
|
|
|
5
5
|
```bash
|
|
6
6
|
cd your-project
|
|
7
|
-
npx getmyenv run -- npm run dev #
|
|
7
|
+
npx getmyenv run -- npm run dev # opens browser on first run, then runs
|
|
8
8
|
```
|
|
9
9
|
|
|
10
|
-
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. No separate
|
|
10
|
+
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. Not a full account login.
|
|
11
11
|
|
|
12
|
-
- Development token: `run`, `push`, `pull`, `restore`. `push` skips `.env*` basenames containing `production`.
|
|
12
|
+
- Development token: `run`, `push`, `pull`, `remove`, `restore`. `push` skips `.env*` basenames containing `production`.
|
|
13
13
|
- Production token: read-only (`run`, `backup`). Set Production values in the dashboard.
|
|
14
14
|
- Environment comes from token scope. Omit `-e` day to day.
|
|
15
|
-
-
|
|
16
|
-
- Forget this folder: `npx getmyenv link --clear` (local token/link only; vault stays on the server).
|
|
15
|
+
- Forget this folder: `npx getmyenv delete` (local `.getmyenv/` only; vault stays on the server). Then re-run `run` or `push` to authorize again.
|
|
17
16
|
- Prefer `npx getmyenv@latest`. An outdated install asks you to update first.
|
|
18
17
|
- CI: set `GETMYENV_TOKEN`. API defaults to `https://getmyenv.com`; use `--api-url` for another origin.
|
|
19
18
|
|
|
20
|
-
|
|
19
|
+
Primary: `guest`, `run`, `push`, `remove`, `delete`, `claim`. Also: `pull`, `backup`, `restore`, `whoami`.
|
|
20
|
+
|
|
21
|
+
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.
|
|
21
22
|
|
|
22
23
|
License: MIT (see [LICENSE](./LICENSE)). The hosted service at getmyenv.com is governed by its Terms, not this file.
|
|
23
24
|
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"
|
|
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,CAiK1D"}
|
package/dist/cli.js
CHANGED
|
@@ -2,20 +2,22 @@ import { Command } from "commander";
|
|
|
2
2
|
import { backupCommand } from "./commands/backup.js";
|
|
3
3
|
import { restoreCommand } from "./commands/restore.js";
|
|
4
4
|
import { runCommand } from "./commands/run.js";
|
|
5
|
-
import { tokenCommand } from "./commands/token.js";
|
|
6
|
-
import { linkCommand } from "./commands/link.js";
|
|
7
5
|
import { pushCommand } from "./commands/push.js";
|
|
8
6
|
import { pullCommand } from "./commands/pull.js";
|
|
9
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";
|
|
10
12
|
import { normalizeEnvName } from "./lib/env-name.js";
|
|
11
13
|
import { CLI_VERSION, resolveApiUrl } from "./lib/api.js";
|
|
12
14
|
import { readProjectMeta } from "./lib/fs.js";
|
|
13
15
|
function envWasDefaultFromArgv() {
|
|
14
16
|
return !process.argv.includes("-e") && !process.argv.includes("--env");
|
|
15
17
|
}
|
|
16
|
-
function
|
|
18
|
+
function folderEnvOption() {
|
|
17
19
|
const meta = readProjectMeta();
|
|
18
|
-
return meta?.
|
|
20
|
+
return meta?.environment ?? "development";
|
|
19
21
|
}
|
|
20
22
|
const ENV_OPTION = [
|
|
21
23
|
"-e, --env <name>",
|
|
@@ -29,24 +31,33 @@ export async function runCli(argv) {
|
|
|
29
31
|
.description("Keep using environment variables. Stop managing them as files.")
|
|
30
32
|
.version(CLI_VERSION);
|
|
31
33
|
program
|
|
32
|
-
.command("
|
|
33
|
-
.description("
|
|
34
|
+
.command("guest")
|
|
35
|
+
.description("Create a guest project without an account (for AI code models). Claim within 30 days.")
|
|
36
|
+
.option("--name <name>", "Project name (default: folder name)")
|
|
34
37
|
.option("--api-url <url>", "API base URL to remember (default production)")
|
|
35
|
-
.
|
|
36
|
-
.action((opts) => tokenCommand(opts));
|
|
38
|
+
.action((opts) => guestCommand(opts));
|
|
37
39
|
program
|
|
38
|
-
.command("
|
|
39
|
-
.description("
|
|
40
|
-
.option(
|
|
41
|
-
.option("--expect <name>", "Alias for --name")
|
|
42
|
-
.option("--env <name>", "Set defaultEnv (must match token scope)")
|
|
43
|
-
.option("--force", "Replace an existing link without prompting")
|
|
44
|
-
.option("--clear", "Forget this folder: remove token, wrapped key, and link")
|
|
40
|
+
.command("run")
|
|
41
|
+
.description("Decrypt authorized secrets and run a command (opens browser on first use)")
|
|
42
|
+
.option(...ENV_OPTION)
|
|
45
43
|
.option("--api-url <url>", "API base URL", apiDefault)
|
|
46
|
-
.
|
|
44
|
+
.option("--vault-password-stdin", "Read vault password from stdin (non-interactive)")
|
|
45
|
+
.allowUnknownOption(true)
|
|
46
|
+
.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);
|
|
57
|
+
});
|
|
47
58
|
program
|
|
48
59
|
.command("push")
|
|
49
|
-
.description("Encrypt local secrets and upload to the linked
|
|
60
|
+
.description("Encrypt local secrets and upload to the linked project")
|
|
50
61
|
.option(...ENV_OPTION)
|
|
51
62
|
.option("-f, --file <path>", "Path to .env file to push")
|
|
52
63
|
.option("-k, --key <NAME=VALUE>", "Push a single secret (NAME or NAME=VALUE)")
|
|
@@ -58,9 +69,29 @@ export async function runCli(argv) {
|
|
|
58
69
|
.option("--vault-password-stdin", "Read vault password from stdin (non-interactive)")
|
|
59
70
|
.action((opts) => pushCommand({
|
|
60
71
|
...opts,
|
|
61
|
-
env: normalizeEnvName(opts.env ??
|
|
72
|
+
env: normalizeEnvName(opts.env ?? folderEnvOption()),
|
|
73
|
+
envWasDefault: envWasDefaultFromArgv(),
|
|
74
|
+
}));
|
|
75
|
+
program
|
|
76
|
+
.command("remove")
|
|
77
|
+
.description("Delete named secret(s) from the linked project")
|
|
78
|
+
.argument("<names...>", "Secret name(s) to remove")
|
|
79
|
+
.option(...ENV_OPTION)
|
|
80
|
+
.option("--api-url <url>", "API base URL", apiDefault)
|
|
81
|
+
.action((names, opts) => removeCommand(names, {
|
|
82
|
+
...opts,
|
|
83
|
+
env: normalizeEnvName(opts.env ?? folderEnvOption()),
|
|
62
84
|
envWasDefault: envWasDefaultFromArgv(),
|
|
63
85
|
}));
|
|
86
|
+
program
|
|
87
|
+
.command("delete")
|
|
88
|
+
.description("Forget this folder: remove .getmyenv/ locally (cloud project stays)")
|
|
89
|
+
.action(() => deleteCommand());
|
|
90
|
+
program
|
|
91
|
+
.command("claim")
|
|
92
|
+
.description("Claim a guest project from .getmyenv/claim.json (browser + Vault password)")
|
|
93
|
+
.option("--api-url <url>", "API base URL")
|
|
94
|
+
.action((opts) => claimCommand(opts));
|
|
64
95
|
program
|
|
65
96
|
.command("pull")
|
|
66
97
|
.description("Download secrets to a plaintext .env file")
|
|
@@ -75,7 +106,7 @@ export async function runCli(argv) {
|
|
|
75
106
|
.option("--vault-password-stdin", "Read vault password from stdin (non-interactive)")
|
|
76
107
|
.action((opts) => pullCommand({
|
|
77
108
|
...opts,
|
|
78
|
-
env: normalizeEnvName(opts.env ??
|
|
109
|
+
env: normalizeEnvName(opts.env ?? folderEnvOption()),
|
|
79
110
|
envWasDefault: envWasDefaultFromArgv(),
|
|
80
111
|
}));
|
|
81
112
|
program
|
|
@@ -91,31 +122,11 @@ export async function runCli(argv) {
|
|
|
91
122
|
.action(backupCommand);
|
|
92
123
|
program
|
|
93
124
|
.command("restore <file>")
|
|
94
|
-
.description("Restore from an encrypted .getmyenv backup into the
|
|
125
|
+
.description("Restore from an encrypted .getmyenv backup into the linked project")
|
|
95
126
|
.option("--api-url <url>", "API base URL", apiDefault)
|
|
96
127
|
.option("--into-linked", "Require a linked folder (restore still targets the token project)")
|
|
97
128
|
.option("--vault-password-stdin", "Read vault password from stdin (non-interactive)")
|
|
98
129
|
.action(restoreCommand);
|
|
99
|
-
program
|
|
100
|
-
.command("run")
|
|
101
|
-
.description("Decrypt authorized secrets and run a command (token picks Development or Production)")
|
|
102
|
-
.option(...ENV_OPTION)
|
|
103
|
-
.option("--api-url <url>", "API base URL", apiDefault)
|
|
104
|
-
.option("--vault-password-stdin", "Read vault password from stdin (non-interactive)")
|
|
105
|
-
.allowUnknownOption(true)
|
|
106
|
-
.allowExcessArguments(true)
|
|
107
|
-
.action(async (opts, cmd) => {
|
|
108
|
-
const args = cmd.args;
|
|
109
|
-
// Support: getmyenv run -- npm run dev
|
|
110
|
-
const dashIdx = process.argv.indexOf("--");
|
|
111
|
-
const childArgs = dashIdx >= 0 ? process.argv.slice(dashIdx + 1) : args;
|
|
112
|
-
await runCommand({
|
|
113
|
-
...opts,
|
|
114
|
-
env: normalizeEnvName(opts.env ?? defaultEnvOption()),
|
|
115
|
-
envWasDefault: envWasDefaultFromArgv(),
|
|
116
|
-
apiUrl: opts.apiUrl ?? apiDefault,
|
|
117
|
-
}, childArgs);
|
|
118
|
-
});
|
|
119
130
|
await program.parseAsync(argv);
|
|
120
131
|
}
|
|
121
132
|
//# 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":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,SAAS,qBAAqB;IAC5B,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,eAAe;IACtB,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;IAC/B,OAAO,IAAI,EAAE,WAAW,IAAI,aAAa,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,GAAG;IACjB,kBAAkB;IAClB,6DAA6D;CACrD,CAAC;AAEX,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAc;IACzC,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,OAAO;SACJ,IAAI,CAAC,UAAU,CAAC;SAChB,WAAW,CACV,gEAAgE,CACjE;SACA,OAAO,CAAC,WAAW,CAAC,CAAC;IAExB,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CACV,uFAAuF,CACxF;SACA,MAAM,CAAC,eAAe,EAAE,qCAAqC,CAAC;SAC9D,MAAM,CAAC,iBAAiB,EAAE,+CAA+C,CAAC;SAC1E,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IAExC,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CACV,2EAA2E,CAC5E;SACA,MAAM,CAAC,GAAG,UAAU,CAAC;SACrB,MAAM,CAAC,iBAAiB,EAAE,cAAc,EAAE,UAAU,CAAC;SACrD,MAAM,CACL,wBAAwB,EACxB,kDAAkD,CACnD;SACA,kBAAkB,CAAC,IAAI,CAAC;SACxB,oBAAoB,CAAC,IAAI,CAAC;SAC1B,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;QAC1B,MAAM,IAAI,GAAG,GAAG,CAAC,IAAgB,CAAC;QAClC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,SAAS,GACb,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACxD,MAAM,UAAU,CACd;YACE,GAAG,IAAI;YACP,GAAG,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,IAAI,eAAe,EAAE,CAAC;YACpD,aAAa,EAAE,qBAAqB,EAAE;YACtC,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,UAAU;SAClC,EACD,SAAS,CACV,CAAC;IACJ,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CACV,wDAAwD,CACzD;SACA,MAAM,CAAC,GAAG,UAAU,CAAC;SACrB,MAAM,CAAC,mBAAmB,EAAE,2BAA2B,CAAC;SACxD,MAAM,CAAC,wBAAwB,EAAE,2CAA2C,CAAC;SAC7E,MAAM,CACL,UAAU,EACV,4DAA4D,CAC7D;SACA,MAAM,CACL,SAAS,EACT,sDAAsD,CACvD;SACA,MAAM,CAAC,OAAO,EAAE,8CAA8C,CAAC;SAC/D,MAAM,CAAC,WAAW,EAAE,0CAA0C,CAAC;SAC/D,MAAM,CAAC,iBAAiB,EAAE,cAAc,EAAE,UAAU,CAAC;SACrD,MAAM,CACL,wBAAwB,EACxB,kDAAkD,CACnD;SACA,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACf,WAAW,CAAC;QACV,GAAG,IAAI;QACP,GAAG,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,IAAI,eAAe,EAAE,CAAC;QACpD,aAAa,EAAE,qBAAqB,EAAE;KACvC,CAAC,CACH,CAAC;IAEJ,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,gDAAgD,CAAC;SAC7D,QAAQ,CAAC,YAAY,EAAE,0BAA0B,CAAC;SAClD,MAAM,CAAC,GAAG,UAAU,CAAC;SACrB,MAAM,CAAC,iBAAiB,EAAE,cAAc,EAAE,UAAU,CAAC;SACrD,MAAM,CAAC,CAAC,KAAe,EAAE,IAAI,EAAE,EAAE,CAChC,aAAa,CAAC,KAAK,EAAE;QACnB,GAAG,IAAI;QACP,GAAG,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,IAAI,eAAe,EAAE,CAAC;QACpD,aAAa,EAAE,qBAAqB,EAAE;KACvC,CAAC,CACH,CAAC;IAEJ,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CACV,qEAAqE,CACtE;SACA,MAAM,CAAC,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC;IAEjC,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CACV,4EAA4E,CAC7E;SACA,MAAM,CAAC,iBAAiB,EAAE,cAAc,CAAC;SACzC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IAExC,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,2CAA2C,CAAC;SACxD,MAAM,CAAC,GAAG,UAAU,CAAC;SACrB,MAAM,CAAC,qBAAqB,EAAE,aAAa,EAAE,MAAM,CAAC;SACpD,MAAM,CAAC,aAAa,EAAE,oBAAoB,CAAC;SAC3C,MAAM,CAAC,UAAU,EAAE,mCAAmC,CAAC;SACvD,MAAM,CAAC,OAAO,EAAE,sDAAsD,CAAC;SACvE,MAAM,CAAC,SAAS,EAAE,2CAA2C,CAAC;SAC9D,MAAM,CAAC,WAAW,EAAE,wCAAwC,CAAC;SAC7D,MAAM,CAAC,iBAAiB,EAAE,cAAc,EAAE,UAAU,CAAC;SACrD,MAAM,CACL,wBAAwB,EACxB,kDAAkD,CACnD;SACA,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACf,WAAW,CAAC;QACV,GAAG,IAAI;QACP,GAAG,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,IAAI,eAAe,EAAE,CAAC;QACpD,aAAa,EAAE,qBAAqB,EAAE;KACvC,CAAC,CACH,CAAC;IAEJ,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,oDAAoD,CAAC;SACjE,MAAM,CAAC,iBAAiB,EAAE,cAAc,CAAC;SACzC,MAAM,CAAC,aAAa,CAAC,CAAC;IAEzB,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,8CAA8C,CAAC;SAC3D,MAAM,CAAC,qBAAqB,EAAE,aAAa,CAAC;SAC5C,MAAM,CAAC,iBAAiB,EAAE,cAAc,EAAE,UAAU,CAAC;SACrD,MAAM,CAAC,aAAa,CAAC,CAAC;IAEzB,OAAO;SACJ,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CACV,oEAAoE,CACrE;SACA,MAAM,CAAC,iBAAiB,EAAE,cAAc,EAAE,UAAU,CAAC;SACrD,MAAM,CACL,eAAe,EACf,mEAAmE,CACpE;SACA,MAAM,CACL,wBAAwB,EACxB,kDAAkD,CACnD;SACA,MAAM,CAAC,cAAc,CAAC,CAAC;IAE1B,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC"}
|
package/dist/commands/backup.js
CHANGED
|
@@ -31,8 +31,8 @@ export async function backupCommand(opts) {
|
|
|
31
31
|
path.join(process.cwd(), `${data.projectName.replace(/\s+/g, "-").toLowerCase()}.getmyenv`);
|
|
32
32
|
fs.writeFileSync(out, serializeBackup(envelope), { mode: 0o600 });
|
|
33
33
|
console.log(`${pc.green("✓")} Wrote encrypted backup: ${out}`);
|
|
34
|
-
if (meta?.
|
|
35
|
-
console.log(pc.dim(`Linked
|
|
34
|
+
if (meta?.environment) {
|
|
35
|
+
console.log(pc.dim(`Linked environment: ${meta.environment}`));
|
|
36
36
|
}
|
|
37
37
|
console.log(pc.dim("Portable. No plaintext. Usable offline with your vault password.\n"));
|
|
38
38
|
}
|
|
@@ -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,
|
|
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,CACT,EAAE,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAC7E,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { exec } from "node:child_process";
|
|
2
|
+
import pc from "picocolors";
|
|
3
|
+
import { parseWrappedKey, rewrapProjectKey, serializeWrappedKey, } from "@getmyenv/crypto";
|
|
4
|
+
import { clearClaimFile, ensureGitignoreHasEnv, promptHidden, readClaimFile, writeProjectMeta, } from "../lib/fs.js";
|
|
5
|
+
import { writeFolderToken } from "../lib/credentials.js";
|
|
6
|
+
import { writeCachedWrappedKey } from "../lib/pek.js";
|
|
7
|
+
import { ApiClient, resolveApiUrl } from "../lib/api.js";
|
|
8
|
+
function openBrowser(url) {
|
|
9
|
+
const platform = process.platform;
|
|
10
|
+
const cmd = platform === "win32"
|
|
11
|
+
? `start "" "${url}"`
|
|
12
|
+
: platform === "darwin"
|
|
13
|
+
? `open "${url}"`
|
|
14
|
+
: `xdg-open "${url}"`;
|
|
15
|
+
exec(cmd, () => undefined);
|
|
16
|
+
}
|
|
17
|
+
function sleep(ms) {
|
|
18
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Claim a guest project: browser ownership transfer, then rewrap vault password.
|
|
22
|
+
*/
|
|
23
|
+
export async function claimCommand(opts = {}) {
|
|
24
|
+
console.log(pc.bold("\ngetmyenv claim\n"));
|
|
25
|
+
const claim = readClaimFile();
|
|
26
|
+
if (!claim) {
|
|
27
|
+
throw new Error("No .getmyenv/claim.json in this folder. Run guest in the project that created it, or clone a repo that committed claim.json.");
|
|
28
|
+
}
|
|
29
|
+
const apiUrl = opts.apiUrl?.trim() ||
|
|
30
|
+
process.env.GETMYENV_API_URL?.trim() ||
|
|
31
|
+
resolveApiUrl(opts.apiUrl);
|
|
32
|
+
const claimUrl = `${apiUrl.replace(/\/$/, "")}/claim?code=${encodeURIComponent(claim.claimCode)}`;
|
|
33
|
+
console.log("Open this URL to claim the project:\n");
|
|
34
|
+
console.log(` ${claimUrl}\n`);
|
|
35
|
+
if (process.stdin.isTTY) {
|
|
36
|
+
openBrowser(claimUrl);
|
|
37
|
+
console.log(pc.dim("Opened in your browser. Waiting...\n"));
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
console.log(pc.dim("Waiting for claim approval...\n"));
|
|
41
|
+
}
|
|
42
|
+
const client = new ApiClient(apiUrl);
|
|
43
|
+
const deadline = Date.now() + 10 * 60 * 1000;
|
|
44
|
+
let newToken = null;
|
|
45
|
+
while (Date.now() < deadline) {
|
|
46
|
+
let poll;
|
|
47
|
+
try {
|
|
48
|
+
poll = await client.request("GET", `/api/claim/poll?claimCode=${encodeURIComponent(claim.claimCode)}`);
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
52
|
+
throw new Error(`Could not poll claim: ${msg}`);
|
|
53
|
+
}
|
|
54
|
+
if (poll.status === "approved" && poll.token) {
|
|
55
|
+
newToken = poll.token;
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
if (poll.status === "consumed") {
|
|
59
|
+
throw new Error("Claim already finished on this code. Run: npx getmyenv run -- <cmd>");
|
|
60
|
+
}
|
|
61
|
+
if (poll.status === "expired") {
|
|
62
|
+
throw new Error("Claim session expired. Open the claim URL again.");
|
|
63
|
+
}
|
|
64
|
+
const remaining = Math.max(0, Math.ceil((deadline - Date.now()) / 1000));
|
|
65
|
+
process.stdout.write(`\r${pc.dim(`Waiting... ${String(remaining).padStart(2, "0")}s`)} `);
|
|
66
|
+
await sleep(2000);
|
|
67
|
+
}
|
|
68
|
+
process.stdout.write("\n");
|
|
69
|
+
if (!newToken) {
|
|
70
|
+
throw new Error("Claim timed out. Open the URL and try again.");
|
|
71
|
+
}
|
|
72
|
+
writeFolderToken({
|
|
73
|
+
token: newToken,
|
|
74
|
+
apiUrl,
|
|
75
|
+
cliScope: "development",
|
|
76
|
+
projectId: claim.projectId,
|
|
77
|
+
projectName: claim.projectName,
|
|
78
|
+
});
|
|
79
|
+
writeProjectMeta({
|
|
80
|
+
projectId: claim.projectId,
|
|
81
|
+
projectName: claim.projectName,
|
|
82
|
+
apiUrl,
|
|
83
|
+
environment: "development",
|
|
84
|
+
});
|
|
85
|
+
const owned = new ApiClient(apiUrl, newToken);
|
|
86
|
+
if (!process.stdin.isTTY) {
|
|
87
|
+
clearClaimFile();
|
|
88
|
+
ensureGitignoreHasEnv();
|
|
89
|
+
console.log(`${pc.green("✓")} Claimed ${claim.projectName}. Set a Vault password with a TTY: npx getmyenv claim\n`);
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
console.log(pc.dim("Set a Vault password. This rewraps the project key. Secret ciphertext stays the same.\n"));
|
|
93
|
+
const password = await promptHidden("New Vault password: ");
|
|
94
|
+
if (!password) {
|
|
95
|
+
throw new Error("Vault password required to finish claim.");
|
|
96
|
+
}
|
|
97
|
+
const confirm = await promptHidden("Confirm Vault password: ");
|
|
98
|
+
if (password !== confirm) {
|
|
99
|
+
throw new Error("Passwords did not match.");
|
|
100
|
+
}
|
|
101
|
+
const exported = await owned.request("GET", `/api/cli/projects/${encodeURIComponent(claim.projectId)}/export?environment=development`);
|
|
102
|
+
const currentWrapped = typeof exported.wrappedProjectKey === "string"
|
|
103
|
+
? exported.wrappedProjectKey
|
|
104
|
+
: JSON.stringify(exported.wrappedProjectKey);
|
|
105
|
+
const rewrapped = await rewrapProjectKey(claim.passphrase, password, parseWrappedKey(currentWrapped));
|
|
106
|
+
const wrappedRaw = serializeWrappedKey(rewrapped);
|
|
107
|
+
await owned.request("POST", `/api/cli/projects/${encodeURIComponent(claim.projectId)}/vault`, { wrappedProjectKey: JSON.parse(wrappedRaw) });
|
|
108
|
+
writeCachedWrappedKey(wrappedRaw);
|
|
109
|
+
clearClaimFile();
|
|
110
|
+
ensureGitignoreHasEnv();
|
|
111
|
+
console.log(`\n${pc.green("✓")} Claimed ${pc.bold(claim.projectName)}. Vault password set.\n`);
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=claim.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claim.js","sourceRoot":"","sources":["../../src/commands/claim.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":"AAYA;;;GAGG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAsDnD"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import pc from "picocolors";
|
|
4
|
+
import { clearClaimFile, getGetenvDir, promptConfirm, readProjectMeta, } from "../lib/fs.js";
|
|
5
|
+
import { clearFolderToken, tokenFilePath } from "../lib/credentials.js";
|
|
6
|
+
import { clearWrappedKey, wrappedKeyPath } from "../lib/pek.js";
|
|
7
|
+
/**
|
|
8
|
+
* Forget this folder: wipe local .getmyenv/ auth files.
|
|
9
|
+
* Does not delete the cloud project or ciphertext.
|
|
10
|
+
*/
|
|
11
|
+
export async function deleteCommand() {
|
|
12
|
+
console.log(pc.bold("\ngetmyenv delete\n"));
|
|
13
|
+
const meta = readProjectMeta();
|
|
14
|
+
const hasToken = fs.existsSync(tokenFilePath());
|
|
15
|
+
const hasWrapped = fs.existsSync(wrappedKeyPath());
|
|
16
|
+
const hasClaim = fs.existsSync(path.join(getGetenvDir(), "claim.json"));
|
|
17
|
+
if (!meta?.projectId && !hasToken && !hasWrapped && !hasClaim) {
|
|
18
|
+
console.log(pc.dim("Nothing to clear in this folder.\n"));
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
if (process.stdin.isTTY) {
|
|
22
|
+
const label = meta?.projectName ?? meta?.projectId ?? "this folder";
|
|
23
|
+
const ok = await promptConfirm(`Forget ${label}? Removes .getmyenv/ in this folder. Cloud project and ciphertext stay.`, { defaultYes: false });
|
|
24
|
+
if (!ok) {
|
|
25
|
+
console.log(pc.dim("Kept.\n"));
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
if (clearFolderToken()) {
|
|
30
|
+
console.log(`${pc.green("✓")} Removed token`);
|
|
31
|
+
}
|
|
32
|
+
if (clearWrappedKey()) {
|
|
33
|
+
console.log(`${pc.green("✓")} Removed wrapped-key.json`);
|
|
34
|
+
}
|
|
35
|
+
if (meta?.projectId) {
|
|
36
|
+
const projectFile = path.join(getGetenvDir(), "project.json");
|
|
37
|
+
if (fs.existsSync(projectFile))
|
|
38
|
+
fs.unlinkSync(projectFile);
|
|
39
|
+
console.log(`${pc.green("✓")} Removed project.json`);
|
|
40
|
+
}
|
|
41
|
+
if (clearClaimFile()) {
|
|
42
|
+
console.log(`${pc.green("✓")} Removed claim.json`);
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
const dir = getGetenvDir();
|
|
46
|
+
const rest = fs.readdirSync(dir);
|
|
47
|
+
if (rest.length === 0)
|
|
48
|
+
fs.rmdirSync(dir);
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
/* ignore */
|
|
52
|
+
}
|
|
53
|
+
console.log(pc.dim("\nCloud project and ciphertext stay. Re-authorize: npx getmyenv run -- <cmd>\n"));
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=delete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type GuestOpts = {
|
|
2
|
+
name?: string;
|
|
3
|
+
apiUrl?: string;
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* Create an unclaimed guest project (AI scaffolding path).
|
|
7
|
+
* Writes token.json (gitignored), project.json + claim.json (safe to commit).
|
|
8
|
+
*/
|
|
9
|
+
export declare function guestCommand(opts?: GuestOpts): Promise<void>;
|
|
10
|
+
//# sourceMappingURL=guest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guest.d.ts","sourceRoot":"","sources":["../../src/commands/guest.ts"],"names":[],"mappings":"AAgBA,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAMF;;;GAGG;AACH,wBAAsB,YAAY,CAAC,IAAI,GAAE,SAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAgFtE"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { randomBytes } from "node:crypto";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import pc from "picocolors";
|
|
4
|
+
import { createWrappedProjectKey, serializeWrappedKey, } from "@getmyenv/crypto";
|
|
5
|
+
import { ensureGitignoreHasEnv, writeClaimFile, writeProjectMeta, } from "../lib/fs.js";
|
|
6
|
+
import { writeFolderToken } from "../lib/credentials.js";
|
|
7
|
+
import { writeCachedWrappedKey } from "../lib/pek.js";
|
|
8
|
+
import { ApiClient, resolveApiUrl } from "../lib/api.js";
|
|
9
|
+
function folderNameHint() {
|
|
10
|
+
return path.basename(process.cwd()) || "project";
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Create an unclaimed guest project (AI scaffolding path).
|
|
14
|
+
* Writes token.json (gitignored), project.json + claim.json (safe to commit).
|
|
15
|
+
*/
|
|
16
|
+
export async function guestCommand(opts = {}) {
|
|
17
|
+
console.log(pc.bold("\ngetmyenv guest\n"));
|
|
18
|
+
const apiUrl = opts.apiUrl?.trim() ||
|
|
19
|
+
process.env.GETMYENV_API_URL?.trim() ||
|
|
20
|
+
resolveApiUrl(opts.apiUrl);
|
|
21
|
+
const name = (opts.name?.trim() || folderNameHint()).slice(0, 120);
|
|
22
|
+
const passphrase = randomBytes(32).toString("base64url");
|
|
23
|
+
const { wrapped } = await createWrappedProjectKey(passphrase);
|
|
24
|
+
const wrappedRaw = serializeWrappedKey(wrapped);
|
|
25
|
+
const client = new ApiClient(apiUrl);
|
|
26
|
+
let created;
|
|
27
|
+
try {
|
|
28
|
+
created = await client.request("POST", "/api/anon-projects", {
|
|
29
|
+
name,
|
|
30
|
+
wrappedProjectKey: wrappedRaw,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
35
|
+
throw new Error(`Could not create guest project: ${msg}`);
|
|
36
|
+
}
|
|
37
|
+
writeFolderToken({
|
|
38
|
+
token: created.token,
|
|
39
|
+
apiUrl,
|
|
40
|
+
cliScope: "development",
|
|
41
|
+
projectId: created.projectId,
|
|
42
|
+
projectName: created.projectName,
|
|
43
|
+
});
|
|
44
|
+
writeProjectMeta({
|
|
45
|
+
projectId: created.projectId,
|
|
46
|
+
projectName: created.projectName,
|
|
47
|
+
apiUrl,
|
|
48
|
+
environment: "development",
|
|
49
|
+
});
|
|
50
|
+
writeClaimFile({
|
|
51
|
+
claimCode: created.claimCode,
|
|
52
|
+
passphrase,
|
|
53
|
+
projectId: created.projectId,
|
|
54
|
+
projectName: created.projectName,
|
|
55
|
+
guestExpiresAt: created.guestExpiresAt,
|
|
56
|
+
});
|
|
57
|
+
writeCachedWrappedKey(wrappedRaw);
|
|
58
|
+
ensureGitignoreHasEnv();
|
|
59
|
+
const daysLeft = Math.max(0, Math.ceil((new Date(created.guestExpiresAt).getTime() - Date.now()) /
|
|
60
|
+
(24 * 60 * 60 * 1000)));
|
|
61
|
+
console.log(`${pc.green("✓")} Guest project ${pc.bold(created.projectName)} (${created.projectId})`);
|
|
62
|
+
console.log(pc.dim(`Expires in ~${daysLeft} days. May be deleted any time after that.`));
|
|
63
|
+
console.log(pc.dim("Commit .getmyenv/project.json and .getmyenv/claim.json. Do not commit token.json."));
|
|
64
|
+
console.log(pc.yellow(`\nHuman takeover: npx getmyenv claim\n`));
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=guest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guest.js","sourceRoot":"","sources":["../../src/commands/guest.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/link.js
CHANGED
|
@@ -79,13 +79,13 @@ export async function linkCommand(_projectIdArg, opts) {
|
|
|
79
79
|
throw new Error(`Token project "${who.projectName}" (${who.projectId}) does not match --expect ${expectName}`);
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
|
-
let
|
|
82
|
+
let environment = who.cliScope === "production" ? "production" : "development";
|
|
83
83
|
if (opts.env?.trim()) {
|
|
84
84
|
const requested = normalizeEnvName(opts.env);
|
|
85
85
|
if (requested !== who.cliScope) {
|
|
86
86
|
throw new Error(`Token scope is ${who.cliScope}, but --env ${requested} was passed. Use a matching token or omit --env.`);
|
|
87
87
|
}
|
|
88
|
-
|
|
88
|
+
environment = requested;
|
|
89
89
|
}
|
|
90
90
|
const meta = readProjectMeta() ?? {};
|
|
91
91
|
if (meta.projectId && String(meta.projectId) !== String(who.projectId)) {
|
|
@@ -109,12 +109,12 @@ export async function linkCommand(_projectIdArg, opts) {
|
|
|
109
109
|
projectId: who.projectId,
|
|
110
110
|
projectName: who.projectName,
|
|
111
111
|
apiUrl,
|
|
112
|
-
|
|
112
|
+
environment,
|
|
113
113
|
});
|
|
114
114
|
ensureGitignoreHasEnv();
|
|
115
115
|
console.log(`${pc.green("✓")} Linked to ${pc.bold(who.projectName)} (${who.projectId})`);
|
|
116
116
|
console.log(pc.dim(`Token scope: ${who.cliScope}`));
|
|
117
|
-
console.log(pc.dim(`
|
|
117
|
+
console.log(pc.dim(`Environment: ${environment}`));
|
|
118
118
|
if (who.cliScope === "production") {
|
|
119
119
|
console.log(pc.dim("Next: npx getmyenv run -- <cmd> # start app with secrets as env vars (Production is read-only)\n"));
|
|
120
120
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link.js","sourceRoot":"","sources":["../../src/commands/link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EACL,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,eAAe,EACf,aAAa,GAEd,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAa7B,+FAA+F;AAC/F,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,EAAE,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;IAEnD,IAAI,CAAC,IAAI,EAAE,SAAS,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU,EAAE,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,CAAC;QAC1D,OAAO;IACT,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,IAAI,EAAE,WAAW,IAAI,IAAI,EAAE,SAAS,IAAI,aAAa,CAAC;QACpE,MAAM,EAAE,GAAG,MAAM,aAAa,CAC5B,UAAU,KAAK,yCAAyC,EACxD,EAAE,UAAU,EAAE,KAAK,EAAE,CACtB,CAAC;QACF,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;YAC/B,OAAO;QACT,CAAC;IACH,CAAC;IAED,IAAI,gBAAgB,EAAE,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,eAAe,EAAE,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,IAAI,EAAE,SAAS,EAAE,CAAC;QACpB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,cAAc,CAAC,CAAC;QAC9D,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;YAAE,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAC9D,CAAC;IAED,qCAAqC;IACrC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,YAAY;IACd,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,uEAAuE;AACvE,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,aAAiC,EACjC,IAAc;IAEd,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,SAAS,EAAE,CAAC;QAClB,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAE1C,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;QACvB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CACb,0EAA0E,CAC3E,CAAC;QACJ,CAAC;QACD,MAAM,YAAY,CAAC;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,kBAAkB,EAAE,CAAC;IACzC,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC5C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAiB,KAAK,EAAE,iBAAiB,CAAC,CAAC;IAE3E,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;IAC5D,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;QACxC,MAAM,OAAO,GACX,GAAG,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,MAAM;YACxC,GAAG,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC9C,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,UAAU,CAAC;QACvC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,kBAAkB,GAAG,CAAC,WAAW,MAAM,GAAG,CAAC,SAAS,6BAA6B,UAAU,EAAE,CAC9F,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,
|
|
1
|
+
{"version":3,"file":"link.js","sourceRoot":"","sources":["../../src/commands/link.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/pull.js
CHANGED
|
@@ -25,8 +25,8 @@ export async function pullCommand(opts) {
|
|
|
25
25
|
}
|
|
26
26
|
const meta = readProjectMeta();
|
|
27
27
|
let environment = normalizeEnvName(opts.env);
|
|
28
|
-
if (opts.envWasDefault && meta?.
|
|
29
|
-
environment = meta.
|
|
28
|
+
if (opts.envWasDefault && meta?.environment) {
|
|
29
|
+
environment = meta.environment;
|
|
30
30
|
}
|
|
31
31
|
if (environment !== who.cliScope) {
|
|
32
32
|
if (opts.envWasDefault) {
|