krexel 0.1.2 → 0.1.4
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/LICENSE +21 -0
- package/README.md +15 -14
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +24 -10
- package/dist/cli.js.map +1 -1
- package/dist/init.d.ts +2 -2
- package/dist/init.js +14 -11
- package/dist/init.js.map +1 -1
- package/dist/login.d.ts +8 -24
- package/dist/login.js +106 -91
- package/dist/login.js.map +1 -1
- package/dist/mcp-client.d.ts +6 -6
- package/dist/paths.d.ts +2 -2
- package/dist/paths.js +3 -3
- package/dist/paths.js.map +1 -1
- package/package.json +5 -2
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Saad Khaliq
|
|
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
|
@@ -8,10 +8,10 @@ Ship websites from your terminal. The `krexel` command talks to the Krexel MCP s
|
|
|
8
8
|
# Try it without installing
|
|
9
9
|
npx krexel --help
|
|
10
10
|
|
|
11
|
-
# Or install globally
|
|
12
|
-
npm i -g krexel
|
|
11
|
+
# Or install globally (includes the MCP server)
|
|
12
|
+
npm i -g krexel
|
|
13
13
|
|
|
14
|
-
# Log in
|
|
14
|
+
# Log in with a key from https://krexel.com/keys
|
|
15
15
|
krexel login
|
|
16
16
|
|
|
17
17
|
# Ship a folder
|
|
@@ -27,15 +27,15 @@ You need a Krexel account first — sign up at <https://krexel.com>. New account
|
|
|
27
27
|
|
|
28
28
|
## Subcommands
|
|
29
29
|
|
|
30
|
-
| Command
|
|
31
|
-
|
|
32
|
-
| `krexel login [--
|
|
33
|
-
| `krexel ship <folder> <domain> [--framework=auto\|nextjs\|astro\|vite\|static]` | Ship a built folder to a domain
|
|
34
|
-
| `krexel logs <deploy_id>`
|
|
35
|
-
| `krexel rollback <domain> <deploy_id>`
|
|
36
|
-
| `krexel whoami`
|
|
37
|
-
| `krexel version`
|
|
38
|
-
| `krexel --json ...`
|
|
30
|
+
| Command | What it does |
|
|
31
|
+
| ------------------------------------------------------------------------------- | ------------------------------------------ |
|
|
32
|
+
| `krexel login [--api-key=krx_…]` | Validate and securely save an API key |
|
|
33
|
+
| `krexel ship <folder> <domain> [--framework=auto\|nextjs\|astro\|vite\|static]` | Ship a built folder to a domain |
|
|
34
|
+
| `krexel logs <deploy_id>` | Print build logs for a deploy |
|
|
35
|
+
| `krexel rollback <domain> <deploy_id>` | Pin a previous deploy as current/last-good |
|
|
36
|
+
| `krexel whoami` | Print account + deploy count + state dir |
|
|
37
|
+
| `krexel version` | Print version |
|
|
38
|
+
| `krexel --json ...` | Global flag for machine-readable JSON |
|
|
39
39
|
|
|
40
40
|
## How it works under the hood
|
|
41
41
|
|
|
@@ -47,10 +47,11 @@ You need a Krexel account first — sign up at <https://krexel.com>. New account
|
|
|
47
47
|
|
|
48
48
|
For v1, account state lives at `$KREXEL_HOME` (defaults to `~/.krexel/`):
|
|
49
49
|
|
|
50
|
-
- `
|
|
50
|
+
- `auth.json` — API credential, mode 600
|
|
51
|
+
- `state.json` — local deploy and customer state
|
|
51
52
|
- `uploads/<deploy_id>/` — staged deploy folders (zipped + manifest)
|
|
52
53
|
|
|
53
|
-
The master key lives in `$KREXEL_MASTER_KEY` (32+ chars hex)
|
|
54
|
+
The optional master key lives in `$KREXEL_MASTER_KEY` (32+ chars hex) and encrypts domain environment variables.
|
|
54
55
|
|
|
55
56
|
## Errors
|
|
56
57
|
|
package/dist/cli.d.ts
CHANGED
package/dist/cli.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* cli.ts — Krexel CLI entry point.
|
|
4
4
|
*
|
|
5
5
|
* Subcommands:
|
|
6
|
-
* login [--
|
|
6
|
+
* login [--api-key=<key>]
|
|
7
7
|
* ship <folder> <domain> [--framework=auto|nextjs|astro|vite|static]
|
|
8
8
|
* logs <deploy_id>
|
|
9
9
|
* rollback <domain> <deploy_id>
|
|
@@ -93,13 +93,10 @@ program
|
|
|
93
93
|
});
|
|
94
94
|
program
|
|
95
95
|
.command("login")
|
|
96
|
-
.description("
|
|
97
|
-
.
|
|
98
|
-
.choices(["cloudflare", "vercel", "netlify"])
|
|
99
|
-
.default("cloudflare"))
|
|
100
|
-
.option("--api-key <key>", "Reuse an existing API key (skips re-minting)")
|
|
96
|
+
.description("Validate and securely save a Krexel API key")
|
|
97
|
+
.option("--api-key <key>", "API key from https://krexel.com/keys")
|
|
101
98
|
.action(safe(async (opts) => {
|
|
102
|
-
await runLogin({
|
|
99
|
+
await runLogin({ apiKey: opts.apiKey });
|
|
103
100
|
}));
|
|
104
101
|
program
|
|
105
102
|
.command("ship <folder> <domain>")
|
|
@@ -132,7 +129,10 @@ program
|
|
|
132
129
|
.option("--dry-run", "show what would change without writing any files", false)
|
|
133
130
|
.option("--skip-login", "skip the OAuth step (for CI / scripted installs)", false)
|
|
134
131
|
.action(safe(async (opts) => {
|
|
135
|
-
await runInit({
|
|
132
|
+
await runInit({
|
|
133
|
+
dryRun: Boolean(opts.dryRun),
|
|
134
|
+
skipLogin: Boolean(opts.skipLogin),
|
|
135
|
+
});
|
|
136
136
|
}));
|
|
137
137
|
// ---------------------------------------------------------------------------
|
|
138
138
|
// Pre-parse — turn on JSON mode if --json was passed before commander can see it
|
|
@@ -145,13 +145,27 @@ if (rawArgs.includes("--json")) {
|
|
|
145
145
|
// `version`/`help` overrides so we own their output rather than letting
|
|
146
146
|
// commander route the user off to the package.json version (which is fine but
|
|
147
147
|
// we'd rather be explicit and consistent).
|
|
148
|
-
if (rawArgs[0] === "version" ||
|
|
148
|
+
if (rawArgs[0] === "version" ||
|
|
149
|
+
rawArgs.includes("--version") ||
|
|
150
|
+
rawArgs.includes("-V")) {
|
|
149
151
|
// eslint-disable-next-line no-console
|
|
150
152
|
console.log(VERSION);
|
|
151
153
|
process.exit(0);
|
|
152
154
|
}
|
|
153
155
|
// Silence the commander `--version` route so our own `version` subcommand is canonical.
|
|
154
156
|
program.exitOverride();
|
|
157
|
+
// Replace commander's default outputError (which both writes to stderr
|
|
158
|
+
// AND triggers _exit / throw). We want commander's errors to go through
|
|
159
|
+
// OUR error() formatter exactly once. So: throw immediately on error,
|
|
160
|
+
// let the catch below handle formatting. writeOut stays as default
|
|
161
|
+
// (stdout) so --help / version still print normally.
|
|
162
|
+
program.configureOutput({
|
|
163
|
+
outputError: (str, write) => {
|
|
164
|
+
// Re-throw so the catch below formats it consistently. Strip the
|
|
165
|
+
// trailing newline commander adds.
|
|
166
|
+
throw new Error(str.replace(/\n$/, ""));
|
|
167
|
+
},
|
|
168
|
+
});
|
|
155
169
|
try {
|
|
156
170
|
await program.parseAsync(process.argv);
|
|
157
171
|
}
|
|
@@ -159,7 +173,7 @@ catch (err) {
|
|
|
159
173
|
// commander throws on parse failure (e.g. missing required arg). The error
|
|
160
174
|
// already contains a helpful message; surface it and exit non-zero.
|
|
161
175
|
const msg = err instanceof Error ? err.message : String(err);
|
|
162
|
-
//
|
|
176
|
+
// Help/usage exits are not errors — print and exit 0.
|
|
163
177
|
if (/help/i.test(msg) || /usage/i.test(msg)) {
|
|
164
178
|
// eslint-disable-next-line no-console
|
|
165
179
|
console.log(msg);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,8EAA8E;AAC9E,6EAA6E;AAC7E,8EAA8E;AAE9E,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,wFAAwF;AACxF,qGAAqG;AACrG,SAAS,WAAW;IAClB,sEAAsE;IACtE,kEAAkE;IAClE,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,iBAAiB,CAAC;QACrC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,oBAAoB,CAAC;KACzC,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAyB,CAAC;YACzE,IAAI,IAAI,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAC,OAAO,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,oBAAoB;QACtB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AACD,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;AAa9B,SAAS,IAAI,CAAC,EAAc;IAC1B,OAAO,KAAK,EAAE,GAAG,IAAe,EAAE,EAAE;QAClC,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QACpB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,UAAU,CAAC,GAAG,CAAC,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CACV,wFAAwF,CACzF;KACA,OAAO,CAAC,OAAO,CAAC;IACjB,wCAAwC;KACvC,WAAW,CAAC,gBAAgB,EAAE,0BAA0B,CAAC;IAC1D,wEAAwE;IACxE,qEAAqE;IACrE,gEAAgE;IAChE,2CAA2C;KAC1C,MAAM,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/init.d.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* 2. MCP server binary resolution (npm global OR monorepo dev path)
|
|
7
7
|
* 3. Master-key mint + persist to ~/.zshrc (and ~/.bashrc if present)
|
|
8
8
|
* 4. Patch every AI client's config (skip silently when absent)
|
|
9
|
-
* 5.
|
|
9
|
+
* 5. Validate and save the user's API key via `runLogin()`
|
|
10
10
|
* 6. Print an animated "you're set up" checklist
|
|
11
11
|
*
|
|
12
12
|
* Hard rule: a single bad client config must NOT abort the run. Each
|
|
@@ -19,7 +19,7 @@ import { type MasterKeyResult, type PatchResult } from "./config-patchers.js";
|
|
|
19
19
|
export interface InitOptions {
|
|
20
20
|
/** Don't write to disk — print the diffs and exit. */
|
|
21
21
|
dryRun?: boolean;
|
|
22
|
-
/** Skip the
|
|
22
|
+
/** Skip the API-key login step (for CI / scripted installs). */
|
|
23
23
|
skipLogin?: boolean;
|
|
24
24
|
/** Reuse a known master key instead of minting a fresh one. */
|
|
25
25
|
masterKey?: string;
|
package/dist/init.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* 2. MCP server binary resolution (npm global OR monorepo dev path)
|
|
7
7
|
* 3. Master-key mint + persist to ~/.zshrc (and ~/.bashrc if present)
|
|
8
8
|
* 4. Patch every AI client's config (skip silently when absent)
|
|
9
|
-
* 5.
|
|
9
|
+
* 5. Validate and save the user's API key via `runLogin()`
|
|
10
10
|
* 6. Print an animated "you're set up" checklist
|
|
11
11
|
*
|
|
12
12
|
* Hard rule: a single bad client config must NOT abort the run. Each
|
|
@@ -54,7 +54,7 @@ export async function resolveMcpBinary(opts = {}) {
|
|
|
54
54
|
};
|
|
55
55
|
}
|
|
56
56
|
// Dev path: monorepo checkout. Check BOTH the (possibly-overridden) home
|
|
57
|
-
// and the real os.homedir() — sandboxed smoke tests override
|
|
57
|
+
// and the real os.homedir() — sandboxed smoke tests override the config home
|
|
58
58
|
// but still want to find the actual built binary.
|
|
59
59
|
const effHome = effectiveHome();
|
|
60
60
|
const realHome = os.homedir();
|
|
@@ -197,7 +197,10 @@ export function renderChecklist(args) {
|
|
|
197
197
|
if (!row.spec.present)
|
|
198
198
|
continue; // skip silently
|
|
199
199
|
if (!row.ok) {
|
|
200
|
-
items.push({
|
|
200
|
+
items.push({
|
|
201
|
+
kind: "warn",
|
|
202
|
+
text: `${row.spec.label}: ${row.error ?? "unknown error"}`,
|
|
203
|
+
});
|
|
201
204
|
continue;
|
|
202
205
|
}
|
|
203
206
|
if (!row.result) {
|
|
@@ -212,7 +215,7 @@ export function renderChecklist(args) {
|
|
|
212
215
|
}
|
|
213
216
|
}
|
|
214
217
|
if (args.oauthDone) {
|
|
215
|
-
items.push({ kind: "ok", text: "
|
|
218
|
+
items.push({ kind: "ok", text: "Krexel API key validated and saved" });
|
|
216
219
|
}
|
|
217
220
|
return items;
|
|
218
221
|
}
|
|
@@ -227,7 +230,7 @@ export async function runInit(opts = {}) {
|
|
|
227
230
|
const platform = effectivePlatform();
|
|
228
231
|
const home = effectiveHome();
|
|
229
232
|
const version = readVersion();
|
|
230
|
-
const apiUrl = opts.apiUrl ?? process.env.KREXEL_API_URL ?? "
|
|
233
|
+
const apiUrl = opts.apiUrl ?? process.env.KREXEL_API_URL ?? "https://api.krexel.com";
|
|
231
234
|
if (!isJsonMode()) {
|
|
232
235
|
dim(`OS: ${platform}`);
|
|
233
236
|
dim(`Home: ${home}`);
|
|
@@ -246,29 +249,29 @@ export async function runInit(opts = {}) {
|
|
|
246
249
|
}
|
|
247
250
|
// 3. Patch every client config.
|
|
248
251
|
const rows = await patchAllClients(binary, env, opts);
|
|
249
|
-
// 4.
|
|
252
|
+
// 4. Validate and save an API key unless caller said skip / dry-run.
|
|
250
253
|
let oauthDone = false;
|
|
251
254
|
const shouldLogin = !opts.skipLogin && !opts.dryRun;
|
|
252
255
|
if (shouldLogin) {
|
|
253
256
|
try {
|
|
254
|
-
const runner = opts.loginRunner ?? (() => runLogin(
|
|
257
|
+
const runner = opts.loginRunner ?? (() => runLogin());
|
|
255
258
|
await runner();
|
|
256
259
|
oauthDone = true;
|
|
257
260
|
}
|
|
258
261
|
catch (err) {
|
|
259
262
|
// Non-fatal — we still print a successful-looking checklist so the
|
|
260
263
|
// user's MCP server is wired; they can run `krexel login` later.
|
|
261
|
-
warn(`
|
|
264
|
+
warn(`Login did not complete: ${err instanceof Error ? err.message : String(err)}. ` +
|
|
262
265
|
`Run \`krexel login\` to retry.`);
|
|
263
266
|
}
|
|
264
267
|
}
|
|
265
268
|
else if (opts.dryRun) {
|
|
266
269
|
if (!isJsonMode())
|
|
267
|
-
dim("Dry run — skipping
|
|
270
|
+
dim("Dry run — skipping login.");
|
|
268
271
|
}
|
|
269
272
|
else {
|
|
270
273
|
if (!isJsonMode())
|
|
271
|
-
dim("Skipping
|
|
274
|
+
dim("Skipping login (--skip-login).");
|
|
272
275
|
}
|
|
273
276
|
// 5. Final checklist.
|
|
274
277
|
const items = renderChecklist({
|
|
@@ -288,7 +291,7 @@ export async function runInit(opts = {}) {
|
|
|
288
291
|
if (!isJsonMode()) {
|
|
289
292
|
dim("");
|
|
290
293
|
dim("Restart Claude Desktop, then ask:");
|
|
291
|
-
dim(
|
|
294
|
+
dim(' "ship my site to example.com"');
|
|
292
295
|
dim("");
|
|
293
296
|
dim(`Dashboard: https://app.krexel.com`);
|
|
294
297
|
dim(`Advanced: npx krexel help`);
|
package/dist/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EACL,UAAU,EAEV,aAAa,EACb,iBAAiB,GAIlB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,UAAU,GAGX,MAAM,sBAAsB,CAAC;AA4B9B;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,qDAAqD;IACrD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;IAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;QAC1C,KAAK,CACH,wDAAwD,GAAG,IAAI;YAC7D,wFAAwF,CAC3F,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACxB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAoB,EAAE;IAEtB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,aAAa;YAC3B,IAAI,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE;YAC3B,OAAO,EAAE,KAAK;SACf,CAAC;IACJ,CAAC;IAED,yEAAyE;IACzE,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EACL,UAAU,EAEV,aAAa,EACb,iBAAiB,GAIlB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,UAAU,GAGX,MAAM,sBAAsB,CAAC;AA4B9B;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,qDAAqD;IACrD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;IAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;QAC1C,KAAK,CACH,wDAAwD,GAAG,IAAI;YAC7D,wFAAwF,CAC3F,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACxB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAoB,EAAE;IAEtB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,aAAa;YAC3B,IAAI,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE;YAC3B,OAAO,EAAE,KAAK;SACf,CAAC;IACJ,CAAC;IAED,yEAAyE;IACzE,6EAA6E;IAC7E,kDAAkD;IAClD,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC9B,MAAM,aAAa,GAAG;QACpB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,CAAC;QAC9D,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,CAAC;QAC/D,8CAA8C;QAC9C,OAAO,CAAC,GAAG,CAAC,mBAAmB;KAChC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;IAEpD,KAAK,MAAM,SAAS,IAAI,aAAa,EAAE,CAAC;QACtC,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACzE,CAAC;IACH,CAAC;IAED,6CAA6C;IAC7C,IAAI,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC7D,CAAC;IAED,KAAK,CACH,wDAAwD;QACtD,gEAAgE;QAChE,sEAAsE,CACzE,CAAC;AACJ,CAAC;AAED,8BAA8B;AAC9B,SAAS,YAAY,CAAC,IAAY;IAChC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;IACvC,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACrD,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACrC,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CACzB,GAAG,EACH,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CACpD,CAAC;QACF,IAAI,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,IAAI,CAAC;IACzC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAoB,EAAE;IAEtB,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;IACrC,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;IAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEtE,wEAAwE;IACxE,6CAA6C;IAC7C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,uEAAuE;IACvE,yEAAyE;IACzE,gBAAgB;IAChB,IAAI,QAAQ,GAAW,WAAW,CAAC;IAEnC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAE1C,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC/C,MAAM,GAAG,GAAG,MAAM,oBAAoB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC3D,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,IAAI,GAAG,CAAC,OAAO;YAAE,MAAM,GAAG,IAAI,CAAC;QAC/B,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC;IACvB,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,GAAG,GAAG,MAAM,oBAAoB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAC5D,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnB,IAAI,GAAG,CAAC,OAAO;YAAE,MAAM,GAAG,IAAI,CAAC;QAC/B,oEAAoE;QACpE,6CAA6C;QAC7C,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;YAC7B,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC5C,CAAC;AAcD,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAwB,EACxB,GAA2B,EAC3B,OAAoB,EAAE;IAEtB,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAe,EAAE,CAAC;IAE5B,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,SAAS;QAC/B,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,iEAAiE;YACjE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3D,SAAS;QACX,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,qEAAqE;IACrE,gDAAgD;IAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU;YAAE,SAAS;QAEhE,MAAM,KAAK,GAAG;YACZ,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU;YAC7B,aAAa,EAAE,MAAM,CAAC,OAAO;YAC7B,UAAU,EAAE,MAAM,CAAC,IAAI;YACvB,GAAG;YACH,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;SAC7B,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,MAAM,GACV,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,OAAO;gBACrB,CAAC,CAAC,MAAM,eAAe,CAAC,KAAK,CAAC;gBAC9B,CAAC,CAAC,MAAM,eAAe,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChD,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACzC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,CAAC,CAAC,GAAG;gBACR,GAAG,GAAG;gBACN,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACxD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAQD,MAAM,UAAU,eAAe,CAAC,IAM/B;IACC,MAAM,KAAK,GAAoB,EAAE,CAAC;IAClC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,IAAI,CAAC,OAAO,YAAY,EAAE,CAAC,CAAC;IACtE,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK;aACjC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;aAC5B,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,eAAe,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,cAAc,OAAO,EAAE;SAC7E,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,eAAe,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,gBAAgB;SACtE,CAAC,CAAC;IACL,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO;YAAE,SAAS,CAAC,gBAAgB;QACjD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,IAAI,eAAe,EAAE;aAC3D,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YAChB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,aAAa,EAAE,CAAC,CAAC;YACnE,SAAS;QACX,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,sBAAsB,EAAE,CAAC,CAAC;QAC5E,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IACD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,oCAAoC,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAoB,EAAE;IAClD,iBAAiB,EAAE,CAAC;IACpB,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;IACrC,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,MAAM,MAAM,GACV,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,wBAAwB,CAAC;IAExE,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;QAClB,GAAG,CAAC,OAAO,QAAQ,EAAE,CAAC,CAAC;QACvB,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IACvB,CAAC;IAED,6BAA6B;IAC7B,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAE5C,iCAAiC;IACjC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,GAAG,GAA2B;QAClC,cAAc,EAAE,MAAM;QACtB,iBAAiB,EAAE,MAAM,CAAC,KAAK;KAChC,CAAC;IAEF,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;QAClB,GAAG,CAAC,WAAW,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1D,GAAG,CACD,eAAe,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,WAAW,EAAE,CAC5F,CAAC;IACJ,CAAC;IAED,gCAAgC;IAChC,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAEtD,qEAAqE;IACrE,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IACpD,IAAI,WAAW,EAAE,CAAC;QAChB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;YACtD,MAAM,MAAM,EAAE,CAAC;YACf,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,mEAAmE;YACnE,iEAAiE;YACjE,IAAI,CACF,2BAA2B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI;gBAC7E,gCAAgC,CACnC,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,UAAU,EAAE;YAAE,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,UAAU,EAAE;YAAE,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAC3D,CAAC;IAED,sBAAsB;IACtB,MAAM,KAAK,GAAG,eAAe,CAAC;QAC5B,OAAO;QACP,SAAS,EAAE,MAAM;QACjB,IAAI;QACJ,SAAS;QACT,MAAM;KACP,CAAC,CAAC;IACH,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI;YAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;YACtC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAED,gCAAgC;IAChC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;QAClB,GAAG,CAAC,EAAE,CAAC,CAAC;QACR,GAAG,CAAC,mCAAmC,CAAC,CAAC;QACzC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QACvC,GAAG,CAAC,EAAE,CAAC,CAAC;QACR,GAAG,CAAC,sCAAsC,CAAC,CAAC;QAC5C,GAAG,CAAC,+BAA+B,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW;IAClB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAEpD,CAAC;QACF,OAAO,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC"}
|
package/dist/login.d.ts
CHANGED
|
@@ -1,29 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* error rather than silently no-oping.
|
|
6
|
-
*
|
|
7
|
-
* The flow:
|
|
8
|
-
* 1. Mint a one-shot API key locally with nanoid.
|
|
9
|
-
* 2. Open the browser to `${KREXEL_API_URL}/api/v1/auth/cloudflare/start?token=<key>`.
|
|
10
|
-
* 3. Poll the orchestrator's callback endpoint until it reports success,
|
|
11
|
-
* showing an ora spinner. The orchestrator exchanges its own cookie
|
|
12
|
-
* with us via the same key.
|
|
2
|
+
* `krexel login` validates an existing Krexel API key and stores it for the
|
|
3
|
+
* CLI and MCP server. The previous OAuth-shaped implementation called routes
|
|
4
|
+
* that do not exist and never persisted a credential.
|
|
13
5
|
*/
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
* has confirmed the callback.
|
|
18
|
-
*
|
|
19
|
-
* @param options.provider one of `cloudflare` (only real in Phase 1) | `vercel` | `netlify`
|
|
20
|
-
* @param options.apiKey optional — reused session token from previous login.
|
|
21
|
-
* If omitted, generate a fresh one-shot API key.
|
|
22
|
-
*/
|
|
23
|
-
export declare function runLogin(opts: {
|
|
24
|
-
provider?: string;
|
|
6
|
+
export declare const DEFAULT_API_URL = "https://api.krexel.com";
|
|
7
|
+
export declare function authFilePath(): string;
|
|
8
|
+
export declare function runLogin(opts?: {
|
|
25
9
|
apiKey?: string;
|
|
26
|
-
|
|
27
|
-
|
|
10
|
+
apiUrl?: string;
|
|
11
|
+
fetcher?: typeof fetch;
|
|
28
12
|
opener?: (url: string) => Promise<void>;
|
|
29
13
|
}): Promise<void>;
|
package/dist/login.js
CHANGED
|
@@ -1,106 +1,121 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* error rather than silently no-oping.
|
|
6
|
-
*
|
|
7
|
-
* The flow:
|
|
8
|
-
* 1. Mint a one-shot API key locally with nanoid.
|
|
9
|
-
* 2. Open the browser to `${KREXEL_API_URL}/api/v1/auth/cloudflare/start?token=<key>`.
|
|
10
|
-
* 3. Poll the orchestrator's callback endpoint until it reports success,
|
|
11
|
-
* showing an ora spinner. The orchestrator exchanges its own cookie
|
|
12
|
-
* with us via the same key.
|
|
2
|
+
* `krexel login` validates an existing Krexel API key and stores it for the
|
|
3
|
+
* CLI and MCP server. The previous OAuth-shaped implementation called routes
|
|
4
|
+
* that do not exist and never persisted a credential.
|
|
13
5
|
*/
|
|
6
|
+
import { promises as fs } from "node:fs";
|
|
7
|
+
import * as os from "node:os";
|
|
8
|
+
import * as path from "node:path";
|
|
9
|
+
import { createInterface } from "node:readline/promises";
|
|
14
10
|
import open from "open";
|
|
15
|
-
import {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
return process.env.KREXEL_API_URL ?? DEFAULT_API_URL;
|
|
11
|
+
import { dim, isJsonMode, success } from "./output.js";
|
|
12
|
+
export const DEFAULT_API_URL = "https://api.krexel.com";
|
|
13
|
+
export function authFilePath() {
|
|
14
|
+
const configuredHome = process.env.KREXEL_HOME?.trim();
|
|
15
|
+
const home = configuredHome
|
|
16
|
+
? path.resolve(configuredHome)
|
|
17
|
+
: path.join(os.homedir(), ".krexel");
|
|
18
|
+
return path.join(home, "auth.json");
|
|
24
19
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
* If omitted, generate a fresh one-shot API key.
|
|
33
|
-
*/
|
|
34
|
-
export async function runLogin(opts) {
|
|
35
|
-
const provider = (opts.provider ?? "cloudflare");
|
|
36
|
-
if (!PROVIDERS.includes(provider)) {
|
|
37
|
-
error(`Unknown provider "${provider}". Expected one of: ${PROVIDERS.join(", ")}`);
|
|
20
|
+
async function promptForApiKey(opener) {
|
|
21
|
+
const keysUrl = "https://krexel.com/keys";
|
|
22
|
+
try {
|
|
23
|
+
if (opener)
|
|
24
|
+
await opener(keysUrl);
|
|
25
|
+
else
|
|
26
|
+
await open(keysUrl, { wait: false });
|
|
38
27
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
`Today only --provider=cloudflare is wired (Cloudflare for SaaS pipeline).`);
|
|
28
|
+
catch {
|
|
29
|
+
dim(`Open ${keysUrl} to create or copy an API key.`);
|
|
42
30
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
const startUrl = `${baseUrl}/api/v1/auth/cloudflare/start?token=${encodeURIComponent(apiKey)}`;
|
|
46
|
-
const statusUrl = `${baseUrl}/api/v1/auth/status?token=${encodeURIComponent(apiKey)}`;
|
|
47
|
-
if (!isJsonMode()) {
|
|
48
|
-
dim(`API: ${baseUrl}`);
|
|
49
|
-
dim(`Provider: ${provider}`);
|
|
31
|
+
if (!process.stdin.isTTY) {
|
|
32
|
+
throw new Error("An API key is required. Run `krexel login --api-key krx_…` or set KREXEL_API_KEY.");
|
|
50
33
|
}
|
|
51
|
-
|
|
34
|
+
const prompt = createInterface({
|
|
35
|
+
input: process.stdin,
|
|
36
|
+
output: process.stdout,
|
|
37
|
+
});
|
|
52
38
|
try {
|
|
53
|
-
|
|
54
|
-
await opts.opener(startUrl);
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
await open(startUrl, { wait: false });
|
|
58
|
-
}
|
|
39
|
+
return (await prompt.question("Paste your Krexel API key: ")).trim();
|
|
59
40
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
dim(`Could not auto-open browser: ${err instanceof Error ? err.message : String(err)}. ` +
|
|
63
|
-
`Open this URL manually:\n ${startUrl}`);
|
|
41
|
+
finally {
|
|
42
|
+
prompt.close();
|
|
64
43
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
44
|
+
}
|
|
45
|
+
async function saveAuth(auth) {
|
|
46
|
+
const target = authFilePath();
|
|
47
|
+
const directory = path.dirname(target);
|
|
48
|
+
const temporary = `${target}.${process.pid}.tmp`;
|
|
49
|
+
await fs.mkdir(directory, { recursive: true, mode: 0o700 });
|
|
50
|
+
await fs.writeFile(temporary, `${JSON.stringify(auth, null, 2)}\n`, {
|
|
51
|
+
encoding: "utf8",
|
|
52
|
+
mode: 0o600,
|
|
69
53
|
});
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
dim(` ${apiKey}`);
|
|
74
|
-
}
|
|
54
|
+
await fs.rename(temporary, target);
|
|
55
|
+
await fs.chmod(target, 0o600);
|
|
56
|
+
return target;
|
|
75
57
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
58
|
+
export async function runLogin(opts = {}) {
|
|
59
|
+
const apiUrl = (opts.apiUrl ?? process.env.KREXEL_API_URL ?? DEFAULT_API_URL)
|
|
60
|
+
.trim()
|
|
61
|
+
.replace(/\/+$/, "");
|
|
62
|
+
const apiKey = (opts.apiKey ??
|
|
63
|
+
process.env.KREXEL_API_KEY ??
|
|
64
|
+
(await promptForApiKey(opts.opener))).trim();
|
|
65
|
+
if (!/^krx_[A-Za-z0-9_-]{20,}$/.test(apiKey)) {
|
|
66
|
+
throw new Error("That does not look like a valid Krexel API key (expected `krx_…`).");
|
|
67
|
+
}
|
|
68
|
+
const doFetch = opts.fetcher ?? globalThis.fetch;
|
|
69
|
+
let response;
|
|
70
|
+
try {
|
|
71
|
+
response = await doFetch(`${apiUrl}/api/v1/me`, {
|
|
72
|
+
headers: { Authorization: `Bearer ${apiKey}` },
|
|
73
|
+
signal: AbortSignal.timeout(15_000),
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
throw new Error(`Could not reach ${apiUrl}: ${error instanceof Error ? error.message : String(error)}`);
|
|
78
|
+
}
|
|
79
|
+
let body = null;
|
|
80
|
+
try {
|
|
81
|
+
body = await response.json();
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// The status below is still enough to produce a useful error.
|
|
85
|
+
}
|
|
86
|
+
if (!response.ok) {
|
|
87
|
+
const message = body && typeof body === "object" && "message" in body
|
|
88
|
+
? String(body.message)
|
|
89
|
+
: `HTTP ${response.status}`;
|
|
90
|
+
throw new Error(`Krexel rejected that API key: ${message}`);
|
|
91
|
+
}
|
|
92
|
+
if (!body ||
|
|
93
|
+
typeof body !== "object" ||
|
|
94
|
+
typeof body.email !== "string") {
|
|
95
|
+
throw new Error("Krexel returned an invalid account response; the key was not saved.");
|
|
96
|
+
}
|
|
97
|
+
const account = body;
|
|
98
|
+
const stored = {
|
|
99
|
+
api_key: apiKey,
|
|
100
|
+
api_url: apiUrl,
|
|
101
|
+
email: account.email,
|
|
102
|
+
...(account.plan ? { plan: account.plan } : {}),
|
|
103
|
+
saved_at: new Date().toISOString(),
|
|
104
|
+
};
|
|
105
|
+
const target = await saveAuth(stored);
|
|
106
|
+
if (isJsonMode()) {
|
|
107
|
+
// eslint-disable-next-line no-console
|
|
108
|
+
console.log(JSON.stringify({
|
|
109
|
+
ok: true,
|
|
110
|
+
email: account.email,
|
|
111
|
+
plan: account.plan,
|
|
112
|
+
auth_file: target,
|
|
113
|
+
}));
|
|
114
|
+
return;
|
|
104
115
|
}
|
|
116
|
+
success(`Logged in as ${account.email}.`);
|
|
117
|
+
if (account.plan)
|
|
118
|
+
dim(`Plan: ${account.plan}`);
|
|
119
|
+
dim(`Credential saved securely to ${target}.`);
|
|
105
120
|
}
|
|
106
121
|
//# sourceMappingURL=login.js.map
|
package/dist/login.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../src/login.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../src/login.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp-client.d.ts
CHANGED
|
@@ -29,14 +29,14 @@ declare const JsonRpcRequestSchema: z.ZodObject<{
|
|
|
29
29
|
method: z.ZodString;
|
|
30
30
|
params: z.ZodOptional<z.ZodUnknown>;
|
|
31
31
|
}, "strip", z.ZodTypeAny, {
|
|
32
|
-
method: string;
|
|
33
32
|
jsonrpc: "2.0";
|
|
34
33
|
id: string | number;
|
|
34
|
+
method: string;
|
|
35
35
|
params?: unknown;
|
|
36
36
|
}, {
|
|
37
|
-
method: string;
|
|
38
37
|
jsonrpc: "2.0";
|
|
39
38
|
id: string | number;
|
|
39
|
+
method: string;
|
|
40
40
|
params?: unknown;
|
|
41
41
|
}>;
|
|
42
42
|
export type JsonRpcRequest = z.infer<typeof JsonRpcRequestSchema>;
|
|
@@ -49,12 +49,12 @@ declare const JsonRpcResponseSchema: z.ZodObject<{
|
|
|
49
49
|
message: z.ZodString;
|
|
50
50
|
data: z.ZodOptional<z.ZodUnknown>;
|
|
51
51
|
}, "strip", z.ZodTypeAny, {
|
|
52
|
-
code: number;
|
|
53
52
|
message: string;
|
|
53
|
+
code: number;
|
|
54
54
|
data?: unknown;
|
|
55
55
|
}, {
|
|
56
|
-
code: number;
|
|
57
56
|
message: string;
|
|
57
|
+
code: number;
|
|
58
58
|
data?: unknown;
|
|
59
59
|
}>>;
|
|
60
60
|
}, "strip", z.ZodTypeAny, {
|
|
@@ -62,8 +62,8 @@ declare const JsonRpcResponseSchema: z.ZodObject<{
|
|
|
62
62
|
id: string | number;
|
|
63
63
|
result?: unknown;
|
|
64
64
|
error?: {
|
|
65
|
-
code: number;
|
|
66
65
|
message: string;
|
|
66
|
+
code: number;
|
|
67
67
|
data?: unknown;
|
|
68
68
|
} | undefined;
|
|
69
69
|
}, {
|
|
@@ -71,8 +71,8 @@ declare const JsonRpcResponseSchema: z.ZodObject<{
|
|
|
71
71
|
id: string | number;
|
|
72
72
|
result?: unknown;
|
|
73
73
|
error?: {
|
|
74
|
-
code: number;
|
|
75
74
|
message: string;
|
|
75
|
+
code: number;
|
|
76
76
|
data?: unknown;
|
|
77
77
|
} | undefined;
|
|
78
78
|
}>;
|
package/dist/paths.d.ts
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* agree on one source of truth.
|
|
6
6
|
*
|
|
7
7
|
* Override hooks:
|
|
8
|
-
* -
|
|
9
|
-
*
|
|
8
|
+
* - KREXEL_CONFIG_HOME overrides $HOME for init/config discovery. This is
|
|
9
|
+
* primarily a test hook; KREXEL_HOME remains the runtime state directory.
|
|
10
10
|
* - KREXEL_PLATFORM overrides `process.platform` ("darwin" | "linux" |
|
|
11
11
|
* "win32") — useful for CI matrices and tests.
|
|
12
12
|
*
|
package/dist/paths.js
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* agree on one source of truth.
|
|
6
6
|
*
|
|
7
7
|
* Override hooks:
|
|
8
|
-
* -
|
|
9
|
-
*
|
|
8
|
+
* - KREXEL_CONFIG_HOME overrides $HOME for init/config discovery. This is
|
|
9
|
+
* primarily a test hook; KREXEL_HOME remains the runtime state directory.
|
|
10
10
|
* - KREXEL_PLATFORM overrides `process.platform` ("darwin" | "linux" |
|
|
11
11
|
* "win32") — useful for CI matrices and tests.
|
|
12
12
|
*
|
|
@@ -16,7 +16,7 @@ import * as os from "node:os";
|
|
|
16
16
|
import * as path from "node:path";
|
|
17
17
|
/** Resolve the "effective" home/platform — honours overrides for tests. */
|
|
18
18
|
export function effectiveHome() {
|
|
19
|
-
return process.env.
|
|
19
|
+
return process.env.KREXEL_CONFIG_HOME ?? os.homedir();
|
|
20
20
|
}
|
|
21
21
|
export function effectivePlatform() {
|
|
22
22
|
const raw = process.env.KREXEL_PLATFORM ?? process.platform;
|
package/dist/paths.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAyBlC,2EAA2E;AAC3E,MAAM,UAAU,aAAa;IAC3B,OAAO,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAyBlC,2EAA2E;AAC3E,MAAM,UAAU,aAAa;IAC3B,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,QAAQ,CAAC;IAC5D,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,OAAO;QAAE,OAAO,GAAG,CAAC;IACvE,2EAA2E;IAC3E,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,IAAI,GAAG,aAAa,EAAE;IACnD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAI,GAAG,aAAa,EAAE;IAC/C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AAChD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,WAAqB,iBAAiB,EAAE,EACxC,IAAI,GAAG,aAAa,EAAE;IAEtB,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,qBAAqB,EAAE,QAAQ,EAAE,4BAA4B,CAAC,CAAC;QACnG,KAAK,OAAO;YACV,iEAAiE;YACjE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC;YAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,4BAA4B,CAAC,CAAC;QACpE,KAAK,OAAO;YACV,mDAAmD;YACnD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACtE,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,4BAA4B,CAAC,CAAC;IAClE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAI,GAAG,aAAa,EAAE;IACjD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;AACrD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,IAAI,GAAG,aAAa,EAAE;IAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;AAClD,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAC3B,WAAqB,iBAAiB,EAAE,EACxC,IAAI,GAAG,aAAa,EAAE,EACtB,OAAmC,EAAE;IAErC,mEAAmE;IACnE,MAAM,YAAY,GAChB,IAAI,CAAC,YAAY,IAAI,QAAQ,KAAK,OAAO,CAAC;IAE5C,uEAAuE;IACvE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IACpC,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACxC,sEAAsE;IACtE,mEAAmE;IACnE,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACnF,uEAAuE;IACvE,kCAAkC;IAClC,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,WAAqB,iBAAiB,EAAE;IACjE,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;IAC7B,OAAO;QACL,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE;QAC7E,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE;QAC/D;YACE,EAAE,EAAE,gBAAgB;YACpB,KAAK,EAAE,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,mBAAmB,QAAQ,GAAG;YACtF,UAAU,EAAE,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC;SAC9C;QACD,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE;QACrE,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE;KAC7D,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "krexel",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "Krexel CLI — login, ship, and manage deploys from the terminal. Spawns the Krexel MCP server over stdio.",
|
|
5
|
+
"license": "MIT",
|
|
5
6
|
"repository": {
|
|
6
7
|
"type": "git",
|
|
7
8
|
"url": "git+https://github.com/Syfer-web/Krexel.git"
|
|
@@ -15,7 +16,8 @@
|
|
|
15
16
|
"files": [
|
|
16
17
|
"bin",
|
|
17
18
|
"dist",
|
|
18
|
-
"README.md"
|
|
19
|
+
"README.md",
|
|
20
|
+
"LICENSE"
|
|
19
21
|
],
|
|
20
22
|
"scripts": {
|
|
21
23
|
"dev": "tsx src/cli.ts",
|
|
@@ -26,6 +28,7 @@
|
|
|
26
28
|
"dependencies": {
|
|
27
29
|
"chalk": "^5.3.0",
|
|
28
30
|
"commander": "^12.1.0",
|
|
31
|
+
"krexel-mcp": "^0.3.3",
|
|
29
32
|
"nanoid": "^5.0.9",
|
|
30
33
|
"open": "^10.1.0",
|
|
31
34
|
"ora": "^7.0.1",
|