Repository Public
1import "./_env";2import { sql } from "../src/lib/db";3import { env } from "../src/lib/env";4import { issueSetupToken } from "../src/lib/auth";56/**7 * Recovery from the server's shell: prints a one-time link that enrols a new passkey.8 * tsx scripts/setup-token.ts → add a passkey (existing ones kept)9 * tsx scripts/setup-token.ts --recovery → replace every passkey and sign out every session10 */11async function main() {12 const recovery = process.argv.includes("--recovery");13 const [u] = await sql<{ id: string }[]>`SELECT id FROM users ORDER BY created_at LIMIT 1`;14 if (!u) throw new Error("No owner account: run scripts/bootstrap.ts first");15 const token = await issueSetupToken(u.id, recovery ? "recovery" : "setup", 30);16 console.log(`${env.appUrl}/admin/setup#${token}`);17 console.log(recovery ? "Valid 30 minutes, one use. Enrolling with it REMOVES the other passkeys and signs out every device." : "Valid 30 minutes, one use.");18 await sql.end();19}20main().catch((e) => { console.error(e.message); process.exit(1); });21