import type { NextFunction, Request, Response } from "express"; import { supabaseAdmin } from "../config/supabase"; import { HttpError } from "../utils/httpError"; export async function requireAuth(req: Request, _res: Response, next: NextFunction): Promise { try { const header = req.header("authorization") ?? ""; const [scheme, token] = header.split(" "); if (scheme?.toLowerCase() !== "bearer" || !token) { throw new HttpError(401, "auth_missing", "A Supabase bearer token is required"); } const { data, error } = await supabaseAdmin.auth.getUser(token); if (error || !data.user) { throw new HttpError(401, "auth_invalid", "The Supabase bearer token is invalid"); } req.authUser = data.user; req.accessToken = token; next(); } catch (error) { next(error); } }