1import "server-only";2import { headers } from "next/headers";3import { redirect } from "next/navigation";4import { auth, type AuthUser } from "@/lib/auth";5import { isAdminEmail } from "@/lib/env";67export async function getSession() {8 return auth.api.getSession({ headers: await headers() });9}1011/** Server components / actions: redirect to login when not authenticated or unverified. */12export async function requireUser(): Promise<AuthUser> {13 const session = await getSession();14 if (!session) redirect("/login");15 if (!session.user.emailVerified) redirect("/verify-email");16 return session.user;17}1819/** Route handlers: return the user or null (no redirect). */20export async function getUserFromRequest(req: Request): Promise<AuthUser | null> {21 const session = await auth.api.getSession({ headers: req.headers });22 if (!session || !session.user.emailVerified) return null;23 return session.user;24}2526export function isAdmin(user: { email: string; role?: string | null }): boolean {27 return user.role === "admin" || isAdminEmail(user.email);28}2930export async function requireAdmin(): Promise<AuthUser> {31 const user = await requireUser();32 if (!isAdmin(user)) redirect("/app");33 return user;34}35