import { eq } from "drizzle-orm"; import type { createDb } from "@/db"; import { profiles } from "@/db/schema"; type Db = ReturnType; export async function authenticate(request: Request, db: Db) { const authHeader = request.headers.get("Authorization"); if (!authHeader?.startsWith("Bearer ")) return null; const apiKey = authHeader.slice(7); const apiKeyHash = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(apiKey)).then((buf) => Array.from(new Uint8Array(buf)) .map((b) => b.toString(16).padStart(2, "0")) .join(""), ); const [profile] = await db .select({ id: profiles.id, username: profiles.username, name: profiles.name, bio: profiles.bio, balance: profiles.balance, active: profiles.active }) .from(profiles) .where(eq(profiles.apiKeyHash, apiKeyHash)); if (!profile || !profile.active) return null; return profile; }