import { eq } from "drizzle-orm"; import { fromNodeHeaders } from "better-auth/node"; import type { FastifyRequest } from "fastify"; import type { Auth } from "../auth"; import type { Db } from "../db/client"; import { players } from "../db/schema"; import { ApiError } from "./errors"; /** The signed-in player's id, or a 401 `unauthorized` error. */ export async function requirePlayerId( request: FastifyRequest, auth: Auth, db: Db, ): Promise { const session = await auth.api.getSession({ headers: fromNodeHeaders(request.headers) }); if (!session) throw new ApiError(401, "unauthorized", "Sign in to continue."); const [player] = await db .select({ id: players.id }) .from(players) .where(eq(players.userId, session.user.id)); if (!player) throw new ApiError(401, "unauthorized", "No player for this account."); return player.id; }