import { isUserSuspended } from "@minikura/db"; import { Elysia } from "elysia"; import { auth } from "./auth"; async function getSessionFromHeaders(headers: Headers | Record) { const headersObj = headers instanceof Headers ? headers : new Headers(headers as Record); return auth.api.getSession({ headers: headersObj, }); } export const authPlugin = new Elysia({ name: "auth" }) .mount(auth.handler) .derive({ as: "scoped" }, async ({ request }) => { const session = await getSessionFromHeaders(request.headers); if ( session?.user && isUserSuspended( session.user as unknown as Pick< { isSuspended: boolean; suspendedUntil: Date | null }, "isSuspended" | "suspendedUntil" > ) ) { return { user: null, session: null, isAuthenticated: false, isSuspended: true, }; } return { user: session?.user || null, session: session?.session || null, isAuthenticated: Boolean(session?.user), isSuspended: false, }; }); export type AuthPlugin = typeof authPlugin;