// server/utils/auth.ts import type { H3Event } from 'h3'; if (!process.env.SESSION_PASSWORD) { // Fail-fast if the session password is not configured throw new Error('FATAL ERROR: SESSION_PASSWORD environment variable is not set. Session management will not work securely.'); } /** * Gets the user ID from the event context. * The `server/middleware/auth.ts` middleware is responsible for populating `event.context.user`. * Throws a 401 Unauthorized error if no user is found in the context. * @param event The H3 event object. * @returns The user's ID. */ export function getAuthenticatedUserId(event: H3Event): number { const user = event.context.user; if (!user || typeof user.id !== 'number') { throw createError({ statusCode: 401, statusMessage: 'Unauthorized' }); } return user.id; } /** * @deprecated Use `getAuthenticatedUserId(event)` instead. This function relies on the old session-only check and is not compatible with anonymous sessions. * A helper function to safely get the authenticated user's ID from the session. * Throws a 401 Unauthorized error if the user is not authenticated. */ export async function getUserIdFromSession(event: H3Event): Promise { const user = event.context.user; if (!user || typeof user.id !== 'number' || user.isAnonymous) { throw createError({ statusCode: 401, statusMessage: 'Unauthorized' }); } return user.id; }