export type AdminUser = { email: string; name: string; role?: string | null; }; type AdminCheckDependencies = { noAuthCheck: string | undefined; bypassUser: AdminUser; internalUser: AdminUser; getInternalAuth: () => Promise; getInternalToken: (token: string) => Promise; getSession: () => Promise<{ user: SessionUser } | null>; }; export async function checkAdmin({ noAuthCheck, bypassUser, internalUser, getInternalAuth, getInternalToken, getSession, }: AdminCheckDependencies): Promise< SessionUser | AdminUser | null > { if (noAuthCheck === "true") return bypassUser; const internalAuth = await getInternalAuth(); if (internalAuth) { try { if (await getInternalToken(internalAuth)) return internalUser; } catch { // Redis is optional for session authentication. } } const session = await getSession(); return session?.user.role === "admin" ? session.user : null; }