Something went wrong. Try again.
Atproto AMA app
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103import { randomUUID } from "node:crypto";
import { createMiddleware } from "@solidjs/start/middleware";
import { createDbReadDebugContext, isDbReadDebugEnabled, logDbReadDebug, type DbReadDebugContext,} from "~/lib/db-read-debug";import { logError, logWarn } from "~/lib/log";import { getSession, parseSessionCookie } from "~/lib/session";
type RequestLocals = { requestId: string; dbReadDebug?: DbReadDebugContext; user?: { handle?: string };};
export default createMiddleware({ onRequest: [ async (event) => { const locals = event.locals as RequestLocals; locals.requestId = randomUUID().slice(0, 8); event.response.headers.set("X-Request-Id", locals.requestId);
if (isDbReadDebugEnabled()) { const context = createDbReadDebugContext(event.request); locals.dbReadDebug = context; logDbReadDebug("http-request-start", { requestId: context.requestId, method: context.method, path: context.path, queryKeys: context.queryKeys, userAgent: context.userAgent, clientHash: context.clientHash, }); }
const sessionId = parseSessionCookie(event.request.headers.get("cookie")); if (!sessionId) return;
try { const row = await getSession(sessionId); if (row?.user) { locals.user = row.user; const url = new URL(event.request.url); if (url.pathname === "/") { event.response.headers.set("Location", `/${row.user.handle}`); } } } catch (error) { // Session lookup failed — log it (a legit user with a broken session // is exactly the kind of 403 this logging exists to explain) and // continue unauthenticated. if (!isDbReadDebugEnabled() && error instanceof Error && error.name !== "SessionError") { logWarn("session-lookup-failed", { requestId: locals.requestId, err: error.message, }); } } }, ], onBeforeResponse: [ (event) => { const locals = event.locals as RequestLocals; const context = locals.dbReadDebug as DbReadDebugContext | undefined; if (context) { logDbReadDebug("http-request-end", { requestId: context.requestId, method: context.method, path: context.path, status: event.response.status, durationMs: Date.now() - context.startedAt, dbQueries: context.queryCount, }); }
const status = event.response.status ?? 0; if (status >= 400) { const url = new URL(event.request.url); const details = { requestId: locals.requestId, status, method: event.request.method, path: url.pathname, handle: locals.user?.handle, }; const err = (event.locals as { error?: unknown }).error; if (status >= 500) { logError("http-request-failed", { ...details, ...(err !== undefined ? { err: err } : {}), }); } else { logWarn("http-request-rejected", details); } } }, ],});