@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.
- package/dist/commands/apikey.js +17 -6
- package/dist/commands/apikey.js.map +1 -1
- package/dist/commands/auth.d.ts +5 -0
- package/dist/commands/auth.js +251 -87
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/config.js +11 -2
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/credit.js +64 -6
- package/dist/commands/credit.js.map +1 -1
- package/dist/commands/docs.js +10 -5
- package/dist/commands/docs.js.map +1 -1
- package/dist/commands/endpoints.js +6 -2
- package/dist/commands/endpoints.js.map +1 -1
- package/dist/commands/feedback.js +13 -7
- package/dist/commands/feedback.js.map +1 -1
- package/dist/lib/api.d.ts +15 -2
- package/dist/lib/api.js +104 -31
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/config.d.ts +4 -0
- package/dist/lib/config.js +98 -4
- package/dist/lib/config.js.map +1 -1
- package/dist/types.d.ts +15 -2
- package/package.json +4 -1
- package/skills/leaperone-cli/SKILL.md +14 -3
package/dist/commands/apikey.js
CHANGED
|
@@ -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
|
|
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("/
|
|
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
|
|
79
|
-
|
|
80
|
-
|
|
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":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"apikey.js","sourceRoot":"","sources":["../../src/commands/apikey.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/auth.d.ts
CHANGED
|
@@ -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;
|
package/dist/commands/auth.js
CHANGED
|
@@ -1,27 +1,137 @@
|
|
|
1
1
|
import http from "node:http";
|
|
2
|
-
import {
|
|
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,
|
|
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
|
|
10
|
-
|
|
11
|
-
|
|
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(
|
|
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
|
-
|
|
20
|
-
|
|
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(
|
|
132
|
+
res.end(`<html><body><h2>${callbackError.message}.</h2></body></html>`);
|
|
23
133
|
closeAndDeregister();
|
|
24
|
-
reject(
|
|
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
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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((
|
|
150
|
+
.then((token) => {
|
|
50
151
|
closeAndDeregister();
|
|
51
|
-
|
|
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
|
-
|
|
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(
|
|
199
|
+
async function deviceLogin(apiBaseUrl, dashboardUrl) {
|
|
98
200
|
// Step 1: Request device code
|
|
99
|
-
const codeRes = await fetch(new URL("/api/auth/device/code",
|
|
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({
|
|
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
|
-
|
|
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",
|
|
233
|
+
const tokenRes = await fetch(new URL("/api/auth/device/token", dashboardUrl), {
|
|
126
234
|
method: "POST",
|
|
127
|
-
headers: {
|
|
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
|
-
|
|
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
|
|
158
|
-
const
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
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
|
-
|
|
173
|
-
throw new Error(
|
|
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
|
|
334
|
+
jsonOutput({ success: true, user });
|
|
181
335
|
}
|
|
182
336
|
else {
|
|
183
|
-
success(`Authenticated as ${
|
|
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
|
|
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(
|
|
356
|
+
token = await deviceLogin(apiBaseUrl, dashboardUrl);
|
|
202
357
|
}
|
|
203
358
|
else {
|
|
204
359
|
// Browser-based login (default)
|
|
205
|
-
token = await browserLogin(
|
|
360
|
+
token = await browserLogin(apiBaseUrl, dashboardUrl);
|
|
206
361
|
}
|
|
207
|
-
await verifyAndSaveToken(token,
|
|
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("
|
|
222
|
-
.
|
|
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
|
|
420
|
+
const apiBaseUrl = getApiBaseUrl();
|
|
249
421
|
try {
|
|
250
422
|
const s = json ? null : spin("Checking status...");
|
|
251
|
-
const
|
|
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
|
|
426
|
+
jsonOutput({ authenticated: true, source, user, apiBaseUrl });
|
|
263
427
|
}
|
|
264
428
|
else {
|
|
265
429
|
console.log("Authenticated:");
|
|
266
430
|
keyValue([
|
|
267
|
-
["Name",
|
|
268
|
-
["Email",
|
|
269
|
-
["Role",
|
|
431
|
+
["Name", user.name || "-"],
|
|
432
|
+
["Email", user.email || "-"],
|
|
433
|
+
["Role", user.role],
|
|
270
434
|
["Source", source],
|
|
271
|
-
["API",
|
|
435
|
+
["API", apiBaseUrl],
|
|
272
436
|
]);
|
|
273
437
|
}
|
|
274
438
|
}
|
|
275
439
|
catch {
|
|
276
440
|
if (json) {
|
|
277
|
-
jsonOutput({ authenticated: true, source, verified: false,
|
|
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: ${
|
|
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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"}
|
package/dist/commands/config.js
CHANGED
|
@@ -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 = [
|
|
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
|
-
["
|
|
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)"],
|