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;
}