import { and, eq, isNull, desc } from "drizzle-orm"; import { db, schema } from "@/db"; import { requireUser, jsonError } from "@/lib/auth/guard"; import { revokeSession, revokeOtherSessions } from "@/lib/auth/session"; export async function GET() { try { const s = await requireUser(); const rows = await db.select({ id: schema.sessions.id, ip: schema.sessions.ip, userAgent: schema.sessions.userAgent, createdAt: schema.sessions.createdAt, lastSeenAt: schema.sessions.lastSeenAt }).from(schema.sessions).where(and(eq(schema.sessions.userId, s.id), isNull(schema.sessions.revokedAt))).orderBy(desc(schema.sessions.lastSeenAt)); return Response.json(rows.map((r) => ({ ...r, current: r.id === s.sessionId }))); } catch (e) { return jsonError(e); } } export async function DELETE(req: Request) { try { const s = await requireUser(req); const { id, others } = await req.json(); if (others) await revokeOtherSessions(s.id, s.sessionId); else if (id && id !== s.sessionId) await revokeSession(String(id)); return Response.json({ ok: true }); } catch (e) { return jsonError(e); } }