mirror of
https://github.com/trycua/computer.git
synced 2026-01-09 06:50:17 -06:00
Fix CLI hanging
This commit is contained in:
@@ -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> {
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user