Fix CLI hanging

This commit is contained in:
Dillon DuPont
2025-10-20 14:21:58 -07:00
parent be98606cb5
commit 789b7264b5
2 changed files with 28 additions and 9 deletions

View File

@@ -12,7 +12,6 @@ const c = {
yellow: "\x1b[33m",
};
// openInBrowser is imported from util
export async function loginViaBrowser(): Promise<string> {
let resolveToken!: (v: string) => void;
@@ -40,9 +39,17 @@ export async function loginViaBrowser(): Promise<string> {
console.log(`${c.yellow}${c.underline}${url}${c.reset}`);
await openInBrowser(url);
const timeout = new Promise<string>((_, reject) => setTimeout(() => reject(new Error("Timed out waiting for authorization")), 2 * 60 * 1000));
try { return await Promise.race([tokenPromise, timeout]); }
finally { try { server.stop(); } catch {} }
let timeoutId: ReturnType<typeof setTimeout> | undefined;
const timeout = new Promise<string>((_, reject) => {
timeoutId = setTimeout(() => reject(new Error("Timed out waiting for authorization")), 2 * 60 * 1000);
});
try {
const result = await Promise.race([tokenPromise, timeout]);
if (timeoutId) clearTimeout(timeoutId);
return result;
} finally {
try { server.stop(); } catch {}
}
}
export async function ensureApiKeyInteractive(): Promise<string> {

View File

@@ -10,17 +10,29 @@ function getDb(): Database {
export function setApiKey(token: string) {
const db = getDb();
const stmt = db.query("INSERT INTO kv (k, v) VALUES ('api_key', ?) ON CONFLICT(k) DO UPDATE SET v=excluded.v");
stmt.run(token);
try {
const stmt = db.query("INSERT INTO kv (k, v) VALUES ('api_key', ?) ON CONFLICT(k) DO UPDATE SET v=excluded.v");
stmt.run(token);
} finally {
db.close();
}
}
export function getApiKey(): string | null {
const db = getDb();
const row = db.query("SELECT v FROM kv WHERE k='api_key'").get() as { v: string } | undefined;
return row?.v ?? null;
try {
const row = db.query("SELECT v FROM kv WHERE k='api_key'").get() as { v: string } | undefined;
return row?.v ?? null;
} finally {
db.close();
}
}
export function clearApiKey() {
const db = getDb();
db.query("DELETE FROM kv WHERE k='api_key'").run();
try {
db.query("DELETE FROM kv WHERE k='api_key'").run();
} finally {
db.close();
}
}