@leaperone/cli 0.1.9 → 0.1.11

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.
@@ -1,4 +1,4 @@
1
- import { request } from "../lib/api.js";
1
+ import { request, requestAllPages } from "../lib/api.js";
2
2
  import { jsonOutput, table, success, error, warn } from "../lib/output.js";
3
3
  import { spin } from "../lib/spinner.js";
4
4
  export function registerApiKeyCommand(program) {
@@ -10,7 +10,9 @@ export function registerApiKeyCommand(program) {
10
10
  const json = program.opts().json;
11
11
  try {
12
12
  const s = json ? null : spin("Fetching API keys...");
13
- const keys = await request("/apikeys");
13
+ const keys = await requestAllPages("/api/v1/api-keys", {
14
+ legacyPath: "/api/v1/cli/apikeys",
15
+ });
14
16
  s?.stop();
15
17
  if (json) {
16
18
  jsonOutput(keys);
@@ -44,9 +46,10 @@ export function registerApiKeyCommand(program) {
44
46
  const json = program.opts().json;
45
47
  try {
46
48
  const s = json ? null : spin("Creating API key...");
47
- const result = await request("/apikeys", {
49
+ const result = await request("/api/v1/api-keys", {
48
50
  method: "POST",
49
51
  body: { name: opts.name },
52
+ legacyPath: "/api/v1/cli/apikeys",
50
53
  });
51
54
  s?.stop();
52
55
  if (json) {
@@ -75,9 +78,17 @@ export function registerApiKeyCommand(program) {
75
78
  const json = program.opts().json;
76
79
  try {
77
80
  const s = json ? null : spin("Revoking API key...");
78
- const result = await request(`/apikeys/revoke`, {
79
- method: "POST",
80
- body: { name: opts.name },
81
+ const keys = await requestAllPages("/api/v1/api-keys", {
82
+ legacyPath: "/api/v1/cli/apikeys",
83
+ });
84
+ const key = keys.find((candidate) => candidate.name === opts.name && !candidate.revokedAt);
85
+ if (!key)
86
+ throw new Error(`Active API key not found: ${opts.name}`);
87
+ const result = await request(`/api/v1/api-keys/${key.id}`, {
88
+ method: "DELETE",
89
+ legacyPath: "/api/v1/cli/apikeys/revoke",
90
+ legacyMethod: "POST",
91
+ legacyBody: { name: opts.name },
81
92
  });
82
93
  s?.stop();
83
94
  if (json) {
@@ -1 +1 @@
1
- {"version":3,"file":"apikey.js","sourceRoot":"","sources":["../../src/commands/apikey.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"apikey.js","sourceRoot":"","sources":["../../src/commands/apikey.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,7 @@
1
1
  import { Command } from "commander";
2
+ import type { UserInfo } from "../types.js";
3
+ export declare function idempotentFetch(url: URL, init: RequestInit): Promise<Response>;
4
+ export declare function revokeCurrentControlToken(apiBaseUrl: string, token: string): Promise<void>;
5
+ export declare function authorizationCallbackCode(url: URL, expectedState: string): string;
6
+ export declare function fetchCurrentUser(token: string, apiBaseUrl: string): Promise<UserInfo>;
2
7
  export declare function registerAuthCommand(program: Command): void;
@@ -1,27 +1,137 @@
1
1
  import http from "node:http";
2
- import { exec } from "node:child_process";
2
+ import { spawn } from "node:child_process";
3
+ import { createHash, randomBytes, randomUUID } from "node:crypto";
3
4
  import chalk from "chalk";
4
- import { loadConfig, saveConfig, clearAuth, getCredential, getBaseUrl, CONFIG_FILE } from "../lib/config.js";
5
+ import { loadConfig, saveConfig, clearAuth, getCredential, getApiBaseUrl, getDashboardUrl, CONFIG_FILE, } from "../lib/config.js";
6
+ import { prefersLegacyRoutes, USER_AGENT } from "../lib/api.js";
5
7
  import { jsonOutput, keyValue, success, error } from "../lib/output.js";
6
8
  import { spin } from "../lib/spinner.js";
7
9
  import { onCleanup, removeCleanup } from "../lib/cleanup.js";
8
10
  function openBrowser(url) {
9
- const cmd = process.platform === "darwin" ? "open" :
10
- process.platform === "win32" ? "start" : "xdg-open";
11
- exec(`${cmd} "${url}"`);
11
+ const command = process.platform === "darwin" ? "open" : process.platform === "win32" ? "cmd" : "xdg-open";
12
+ const args = process.platform === "win32" ? ["/c", "start", "", url] : [url];
13
+ const child = spawn(command, args, { detached: true, stdio: "ignore" });
14
+ child.on("error", () => undefined);
15
+ child.unref();
16
+ }
17
+ const CLI_CONTROL_SCOPES = [
18
+ "profile:read",
19
+ "api_keys:read",
20
+ "api_keys:write",
21
+ "credits:read",
22
+ "usage:read",
23
+ "tickets:read",
24
+ "tickets:write",
25
+ "orgs:read",
26
+ "orgs:write",
27
+ "endpoints:read",
28
+ ];
29
+ function createPkcePair() {
30
+ const verifier = randomBytes(32).toString("base64url");
31
+ const challenge = createHash("sha256").update(verifier).digest("base64url");
32
+ return { verifier, challenge };
33
+ }
34
+ export async function idempotentFetch(url, init) {
35
+ const headers = new Headers(init.headers);
36
+ if (!headers.has("Idempotency-Key"))
37
+ throw new Error("Idempotency-Key is required");
38
+ let lastError;
39
+ for (let attempt = 0; attempt < 3; attempt += 1) {
40
+ try {
41
+ const response = await fetch(url, { ...init, headers });
42
+ if (![408, 425, 429, 500, 502, 503, 504].includes(response.status) || attempt === 2) {
43
+ return response;
44
+ }
45
+ await response.body?.cancel();
46
+ }
47
+ catch (error) {
48
+ lastError = error;
49
+ if (attempt === 2)
50
+ throw error;
51
+ }
52
+ await new Promise((resolve) => setTimeout(resolve, 250 * 2 ** attempt));
53
+ }
54
+ throw lastError instanceof Error ? lastError : new Error("Request failed");
55
+ }
56
+ export async function revokeCurrentControlToken(apiBaseUrl, token) {
57
+ const response = await idempotentFetch(new URL("/api/v1/control-tokens/current", apiBaseUrl), {
58
+ method: "DELETE",
59
+ headers: {
60
+ Authorization: `Bearer ${token}`,
61
+ "Idempotency-Key": randomUUID(),
62
+ "User-Agent": USER_AGENT,
63
+ },
64
+ });
65
+ if (response.ok || response.status === 401)
66
+ return;
67
+ const body = (await response.json().catch(() => ({})));
68
+ const message = typeof body.error === "string" ? body.error : body.error?.message;
69
+ throw new Error(message || `Remote logout failed (HTTP ${response.status})`);
70
+ }
71
+ export function authorizationCallbackCode(url, expectedState) {
72
+ if (url.searchParams.get("state") !== expectedState) {
73
+ throw new Error("Authorization state mismatch");
74
+ }
75
+ const code = url.searchParams.get("code");
76
+ if (!code)
77
+ throw new Error("No authorization code received");
78
+ return code;
79
+ }
80
+ async function exchangeAuthorizationCode(input) {
81
+ const canonicalResponse = await idempotentFetch(new URL("/api/v1/auth/cli/exchange", input.apiBaseUrl), {
82
+ method: "POST",
83
+ headers: {
84
+ "Content-Type": "application/json",
85
+ "Idempotency-Key": randomUUID(),
86
+ "User-Agent": USER_AGENT,
87
+ },
88
+ body: JSON.stringify({
89
+ code: input.code,
90
+ codeVerifier: input.verifier,
91
+ redirectUri: input.redirectUri,
92
+ }),
93
+ });
94
+ if (![404, 405, 501].includes(canonicalResponse.status)) {
95
+ const data = (await canonicalResponse.json().catch(() => ({})));
96
+ if (canonicalResponse.ok && data.success && data.data?.token) {
97
+ return data.data.token;
98
+ }
99
+ const message = typeof data.error === "string" ? data.error : data.error?.message;
100
+ throw new Error(message || `Authorization exchange failed (HTTP ${canonicalResponse.status})`);
101
+ }
102
+ const legacyResponse = await fetch(new URL("/api/v1/cli/auth/exchange", input.apiBaseUrl), {
103
+ method: "PUT",
104
+ headers: {
105
+ "Content-Type": "application/json",
106
+ "User-Agent": USER_AGENT,
107
+ },
108
+ body: JSON.stringify({ code: input.code }),
109
+ });
110
+ const legacyData = (await legacyResponse.json().catch(() => ({})));
111
+ if (!legacyResponse.ok || !legacyData.success || !legacyData.data?.token) {
112
+ throw new Error(legacyData.error ||
113
+ `Legacy authorization exchange failed (HTTP ${legacyResponse.status})`);
114
+ }
115
+ return legacyData.data.token;
12
116
  }
13
117
  // ── Browser-based login (localhost callback) ──────────────────────────────
14
- function browserLogin(baseUrl) {
118
+ function browserLogin(apiBaseUrl, dashboardUrl) {
119
+ const pkce = createPkcePair();
120
+ const state = randomBytes(24).toString("base64url");
121
+ let redirectUri = "";
15
122
  return new Promise((resolve, reject) => {
16
123
  const server = http.createServer((req, res) => {
17
124
  const url = new URL(req.url, `http://localhost`);
18
125
  if (url.pathname === "/callback") {
19
- const code = url.searchParams.get("code");
20
- if (!code) {
126
+ let code;
127
+ try {
128
+ code = authorizationCallbackCode(url, state);
129
+ }
130
+ catch (callbackError) {
21
131
  res.writeHead(400, { "Content-Type": "text/html; charset=utf-8" });
22
- res.end("<html><body><h2>Missing authorization code.</h2></body></html>");
132
+ res.end(`<html><body><h2>${callbackError.message}.</h2></body></html>`);
23
133
  closeAndDeregister();
24
- reject(new Error("No authorization code received"));
134
+ reject(callbackError);
25
135
  return;
26
136
  }
27
137
  res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
@@ -31,29 +141,15 @@ function browserLogin(baseUrl) {
31
141
  <p>You can close this tab and return to your terminal.</p>
32
142
  </div>
33
143
  </body></html>`);
34
- // Exchange code for session token
35
- fetch(new URL("/api/v1/cli/auth/exchange", baseUrl), {
36
- method: "PUT",
37
- headers: { "Content-Type": "application/json" },
38
- body: JSON.stringify({ code }),
39
- })
40
- .then(async (r) => {
41
- const text = await r.text();
42
- try {
43
- return JSON.parse(text);
44
- }
45
- catch {
46
- throw new Error(`Exchange API returned non-JSON (HTTP ${r.status}): ${text.slice(0, 200)}`);
47
- }
144
+ exchangeAuthorizationCode({
145
+ apiBaseUrl,
146
+ code,
147
+ verifier: pkce.verifier,
148
+ redirectUri,
48
149
  })
49
- .then((data) => {
150
+ .then((token) => {
50
151
  closeAndDeregister();
51
- if (data.success && data.data?.token) {
52
- resolve(data.data.token);
53
- }
54
- else {
55
- reject(new Error(data.error || "Failed to exchange code"));
56
- }
152
+ resolve(token);
57
153
  })
58
154
  .catch((err) => {
59
155
  closeAndDeregister();
@@ -80,11 +176,17 @@ function browserLogin(baseUrl) {
80
176
  return;
81
177
  }
82
178
  const port = addr.port;
83
- const authUrl = `${baseUrl}/auth/cli?port=${port}`;
179
+ redirectUri = `http://127.0.0.1:${port}/callback`;
180
+ const authUrl = new URL("/auth/cli", dashboardUrl);
181
+ authUrl.searchParams.set("port", String(port));
182
+ authUrl.searchParams.set("code_challenge", pkce.challenge);
183
+ authUrl.searchParams.set("code_challenge_method", "S256");
184
+ authUrl.searchParams.set("scope", CLI_CONTROL_SCOPES.join(" "));
185
+ authUrl.searchParams.set("state", state);
84
186
  console.log(`Opening browser to authorize...`);
85
- console.log(` ${chalk.underline(authUrl)}`);
187
+ console.log(` ${chalk.underline(authUrl.toString())}`);
86
188
  console.log();
87
- openBrowser(authUrl);
189
+ openBrowser(authUrl.toString());
88
190
  });
89
191
  // Timeout after 3 minutes
90
192
  const timer = setTimeout(() => {
@@ -94,24 +196,30 @@ function browserLogin(baseUrl) {
94
196
  });
95
197
  }
96
198
  // ── Device Flow login ─────────────────────────────────────────────────────
97
- async function deviceLogin(baseUrl) {
199
+ async function deviceLogin(apiBaseUrl, dashboardUrl) {
98
200
  // Step 1: Request device code
99
- const codeRes = await fetch(new URL("/api/auth/device/code", baseUrl), {
201
+ const codeRes = await fetch(new URL("/api/auth/device/code", dashboardUrl), {
100
202
  method: "POST",
101
- headers: { "Content-Type": "application/json" },
102
- body: JSON.stringify({ client_id: "leaperone-cli" }),
203
+ headers: { "Content-Type": "application/json", "User-Agent": USER_AGENT },
204
+ body: JSON.stringify({
205
+ client_id: "leaperone-cli",
206
+ scope: CLI_CONTROL_SCOPES.join(" "),
207
+ }),
103
208
  });
104
209
  if (!codeRes.ok) {
105
- const body = await codeRes.json().catch(() => ({}));
210
+ const body = (await codeRes.json().catch(() => ({})));
106
211
  throw new Error(body.message || `Failed to request device code (HTTP ${codeRes.status})`);
107
212
  }
108
- const codeData = await codeRes.json();
213
+ const codeData = (await codeRes.json());
109
214
  // Step 2: Show code to user
110
215
  console.log();
111
216
  console.log(` Your device code: ${chalk.bold(codeData.user_code)}`);
112
217
  console.log();
113
- const verifyUrl = codeData.verification_uri_complete
114
- || `${baseUrl}${codeData.verification_uri}?user_code=${encodeURIComponent(codeData.user_code)}`;
218
+ const verifyUrl = codeData.verification_uri_complete || (() => {
219
+ const url = new URL(codeData.verification_uri, dashboardUrl);
220
+ url.searchParams.set("user_code", codeData.user_code);
221
+ return url.toString();
222
+ })();
115
223
  console.log(` Open this URL to authorize:`);
116
224
  console.log(` ${chalk.underline(verifyUrl)}`);
117
225
  console.log();
@@ -122,19 +230,45 @@ async function deviceLogin(baseUrl) {
122
230
  const deadline = Date.now() + codeData.expires_in * 1000;
123
231
  while (Date.now() < deadline) {
124
232
  await new Promise((r) => setTimeout(r, interval));
125
- const tokenRes = await fetch(new URL("/api/auth/device/token", baseUrl), {
233
+ const tokenRes = await fetch(new URL("/api/auth/device/token", dashboardUrl), {
126
234
  method: "POST",
127
- headers: { "Content-Type": "application/json" },
235
+ headers: {
236
+ "Content-Type": "application/json",
237
+ "User-Agent": USER_AGENT,
238
+ },
128
239
  body: JSON.stringify({
129
240
  grant_type: "urn:ietf:params:oauth:grant-type:device_code",
130
241
  device_code: codeData.device_code,
131
242
  client_id: "leaperone-cli",
132
243
  }),
133
244
  });
134
- const tokenData = await tokenRes.json();
245
+ const tokenData = (await tokenRes.json());
135
246
  if (tokenData.access_token) {
136
247
  s.stop();
137
- return tokenData.access_token;
248
+ const exchangeRes = await idempotentFetch(new URL("/api/v1/auth/session/exchange", apiBaseUrl), {
249
+ method: "POST",
250
+ headers: {
251
+ Authorization: `Bearer ${tokenData.access_token}`,
252
+ "Content-Type": "application/json",
253
+ "Idempotency-Key": randomUUID(),
254
+ "User-Agent": USER_AGENT,
255
+ },
256
+ body: JSON.stringify({
257
+ scopes: CLI_CONTROL_SCOPES,
258
+ tokenName: "LEAPERone CLI",
259
+ }),
260
+ });
261
+ if ([404, 405, 501].includes(exchangeRes.status)) {
262
+ return tokenData.access_token;
263
+ }
264
+ const exchangeData = (await exchangeRes.json().catch(() => ({})));
265
+ if (!exchangeRes.ok || !exchangeData.success || !exchangeData.data?.token) {
266
+ const message = typeof exchangeData.error === "string"
267
+ ? exchangeData.error
268
+ : exchangeData.error?.message;
269
+ throw new Error(message || `Session exchange failed (HTTP ${exchangeRes.status})`);
270
+ }
271
+ return exchangeData.data.token;
138
272
  }
139
273
  if (tokenData.error === "authorization_pending" || tokenData.error === "slow_down") {
140
274
  continue;
@@ -154,33 +288,53 @@ async function deviceLogin(baseUrl) {
154
288
  throw new Error("Device code expired. Please try again.");
155
289
  }
156
290
  // ── Verify token and save ─────────────────────────────────────────────────
157
- async function verifyAndSaveToken(token, baseUrl, json) {
158
- const s = json ? null : spin("Verifying...");
159
- const res = await fetch(new URL("/api/v1/cli/me", baseUrl), {
160
- headers: {
161
- Authorization: `Bearer ${token}`,
162
- "User-Agent": "@leaperone/cli",
163
- },
164
- });
165
- if (!res.ok) {
166
- s?.stop();
167
- const body = await res.json().catch(() => ({}));
168
- throw new Error(body.error || `Verification failed (HTTP ${res.status})`);
291
+ export async function fetchCurrentUser(token, apiBaseUrl) {
292
+ const fetchPath = async (path) => {
293
+ return fetch(new URL(path, apiBaseUrl), {
294
+ headers: {
295
+ Authorization: `Bearer ${token}`,
296
+ "User-Agent": USER_AGENT,
297
+ },
298
+ });
299
+ };
300
+ const preferLegacy = prefersLegacyRoutes(token);
301
+ const initialPath = preferLegacy ? "/api/v1/cli/me" : "/api/v1/me";
302
+ const fallbackPath = preferLegacy ? "/api/v1/me" : "/api/v1/cli/me";
303
+ let res = await fetchPath(initialPath);
304
+ if ([404, 405, 501].includes(res.status)) {
305
+ res = await fetchPath(fallbackPath);
169
306
  }
170
- const data = (await res.json());
171
- if (!data.success) {
172
- s?.stop();
173
- throw new Error("Verification failed");
307
+ const data = (await res.json().catch(() => ({})));
308
+ if (!res.ok || !data.success || !data.data) {
309
+ const message = typeof data.error === "string" ? data.error : data.error?.message;
310
+ throw new Error(message || `Verification failed (HTTP ${res.status})`);
174
311
  }
312
+ return data.data;
313
+ }
314
+ async function verifyAndSaveToken(token, apiBaseUrl, json) {
315
+ const s = json ? null : spin("Verifying...");
316
+ const user = await fetchCurrentUser(token, apiBaseUrl);
175
317
  const config = loadConfig();
318
+ if (config.token?.startsWith("lpc_") && config.token !== token) {
319
+ try {
320
+ await revokeCurrentControlToken(config.apiBaseUrl, config.token);
321
+ }
322
+ catch (revokeError) {
323
+ if (token.startsWith("lpc_")) {
324
+ await revokeCurrentControlToken(apiBaseUrl, token).catch(() => undefined);
325
+ }
326
+ throw new Error(`Previous control token could not be revoked; credentials were not overwritten. ${revokeError.message}`);
327
+ }
328
+ }
176
329
  config.token = token;
330
+ config.apiBaseUrl = apiBaseUrl;
177
331
  saveConfig(config);
178
332
  s?.stop();
179
333
  if (json) {
180
- jsonOutput({ success: true, user: data.data });
334
+ jsonOutput({ success: true, user });
181
335
  }
182
336
  else {
183
- success(`Authenticated as ${data.data.name || data.data.email || data.data.id}`);
337
+ success(`Authenticated as ${user.name || user.email || user.id}`);
184
338
  console.log(` Config saved to ${chalk.dim(CONFIG_FILE)}`);
185
339
  }
186
340
  }
@@ -193,18 +347,19 @@ export function registerAuthCommand(program) {
193
347
  .option("--device", "Use device flow (no localhost server needed)")
194
348
  .action(async (opts) => {
195
349
  const json = program.opts().json;
196
- const baseUrl = getBaseUrl();
350
+ const apiBaseUrl = getApiBaseUrl();
351
+ const dashboardUrl = getDashboardUrl();
197
352
  try {
198
353
  let token;
199
354
  if (opts.device) {
200
355
  // Device flow
201
- token = await deviceLogin(baseUrl);
356
+ token = await deviceLogin(apiBaseUrl, dashboardUrl);
202
357
  }
203
358
  else {
204
359
  // Browser-based login (default)
205
- token = await browserLogin(baseUrl);
360
+ token = await browserLogin(apiBaseUrl, dashboardUrl);
206
361
  }
207
- await verifyAndSaveToken(token, baseUrl, json);
362
+ await verifyAndSaveToken(token, apiBaseUrl, json);
208
363
  }
209
364
  catch (err) {
210
365
  if (json) {
@@ -218,9 +373,26 @@ export function registerAuthCommand(program) {
218
373
  });
219
374
  auth
220
375
  .command("logout")
221
- .description("Remove stored credentials")
222
- .action(() => {
376
+ .description("Revoke the stored control token and remove local credentials")
377
+ .option("--local-only", "Remove local credentials without remote revocation")
378
+ .action(async (opts) => {
223
379
  const json = program.opts().json;
380
+ const config = loadConfig();
381
+ if (!opts.localOnly && config.token?.startsWith("lpc_")) {
382
+ try {
383
+ await revokeCurrentControlToken(config.apiBaseUrl, config.token);
384
+ }
385
+ catch (err) {
386
+ const message = `Remote logout failed; local credentials were retained. ${err.message}`;
387
+ if (json)
388
+ jsonOutput({ success: false, error: message });
389
+ else {
390
+ error(message);
391
+ console.error("Use --local-only only if you accept leaving the server token active.");
392
+ }
393
+ process.exit(1);
394
+ }
395
+ }
224
396
  clearAuth();
225
397
  if (json) {
226
398
  jsonOutput({ success: true });
@@ -245,40 +417,32 @@ export function registerAuthCommand(program) {
245
417
  return;
246
418
  }
247
419
  const source = process.env.LEAPERONE_API_KEY ? "api-key (env)" : "session token";
248
- const baseUrl = getBaseUrl();
420
+ const apiBaseUrl = getApiBaseUrl();
249
421
  try {
250
422
  const s = json ? null : spin("Checking status...");
251
- const res = await fetch(new URL("/api/v1/cli/me", baseUrl), {
252
- headers: {
253
- Authorization: `Bearer ${credential}`,
254
- "User-Agent": "@leaperone/cli",
255
- },
256
- });
257
- if (!res.ok)
258
- throw new Error(`HTTP ${res.status}`);
259
- const data = (await res.json());
423
+ const user = await fetchCurrentUser(credential, apiBaseUrl);
260
424
  s?.stop();
261
425
  if (json) {
262
- jsonOutput({ authenticated: true, source, user: data.data, baseUrl });
426
+ jsonOutput({ authenticated: true, source, user, apiBaseUrl });
263
427
  }
264
428
  else {
265
429
  console.log("Authenticated:");
266
430
  keyValue([
267
- ["Name", data.data.name || "-"],
268
- ["Email", data.data.email || "-"],
269
- ["Role", data.data.role],
431
+ ["Name", user.name || "-"],
432
+ ["Email", user.email || "-"],
433
+ ["Role", user.role],
270
434
  ["Source", source],
271
- ["API", baseUrl],
435
+ ["API", apiBaseUrl],
272
436
  ]);
273
437
  }
274
438
  }
275
439
  catch {
276
440
  if (json) {
277
- jsonOutput({ authenticated: true, source, verified: false, baseUrl });
441
+ jsonOutput({ authenticated: true, source, verified: false, apiBaseUrl });
278
442
  }
279
443
  else {
280
444
  console.log(`Credential configured (${source}) but could not verify.`);
281
- console.log(` API: ${baseUrl}`);
445
+ console.log(` API: ${apiBaseUrl}`);
282
446
  }
283
447
  }
284
448
  });
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,12 @@
1
1
  import { loadConfig, setConfigValue, CONFIG_FILE } from "../lib/config.js";
2
2
  import { jsonOutput, keyValue } from "../lib/output.js";
3
- const ALLOWED_KEYS = ["baseUrl", "outputFormat"];
3
+ const ALLOWED_KEYS = [
4
+ "apiBaseUrl",
5
+ "dashboardUrl",
6
+ "siteUrl",
7
+ "outputFormat",
8
+ "baseUrl",
9
+ ];
4
10
  export function registerConfigCommand(program) {
5
11
  const config = program.command("config").description("Manage CLI configuration");
6
12
  config
@@ -21,7 +27,10 @@ export function registerConfigCommand(program) {
21
27
  }
22
28
  console.log(`Config file: ${CONFIG_FILE}`);
23
29
  keyValue([
24
- ["baseUrl", cfg.baseUrl],
30
+ ["apiBaseUrl", cfg.apiBaseUrl],
31
+ ["dashboardUrl", cfg.dashboardUrl],
32
+ ["siteUrl", cfg.siteUrl],
33
+ ["baseUrl (deprecated)", cfg.baseUrl || "(not set)"],
25
34
  ["outputFormat", cfg.outputFormat],
26
35
  ["token", cfg.token ? cfg.token.slice(0, 8) + "..." : "(not set)"],
27
36
  ["LEAPERONE_API_KEY", envApiKey ? envApiKey.slice(0, 8) + "..." : "(not set)"],