import { createMiddleware } from "@tanstack/react-start"; import { notFound } from "@tanstack/react-router"; import { sessionViewer } from "~/server/auth"; import { HttpError, unauthorized } from "~/server/errors"; import type { Viewer } from "~/lib/types"; const HTTP_NOT_FOUND = 404; /** Resolves the session viewer for every server function and maps 404s onto router not-found handling. */ export const viewerMiddleware = createMiddleware({ type: "function" }).server(async ({ next }) => { const viewer = await sessionViewer(); try { return await next({ context: { viewer } }); } catch (error) { if (error instanceof HttpError && error.status === HTTP_NOT_FOUND) throw notFound(); throw error; } }); export function requireViewer(viewer: Viewer | null): Viewer { if (!viewer) throw unauthorized("You must be signed in"); return viewer; }