WIP! A BB-style forum, on the ATmosphere!
We're still working... we'll be back soon when we have something to show off!
node
typescript
hono
htmx
atproto
1import type { MiddlewareHandler } from "hono";
2import type { WebAppEnv } from "../lib/theme-resolution.js";
3import { resolveTheme, FALLBACK_THEME } from "../lib/theme-resolution.js";
4import { logger } from "../lib/logger.js";
5
6export function createThemeMiddleware(appviewUrl: string): MiddlewareHandler<WebAppEnv> {
7 return async (c, next) => {
8 const cookieHeader = c.req.header("Cookie");
9 const colorSchemeHint = c.req.header("Sec-CH-Prefers-Color-Scheme");
10 let theme;
11 try {
12 theme = await resolveTheme(appviewUrl, cookieHeader, colorSchemeHint);
13 } catch (error) {
14 logger.error("createThemeMiddleware: resolveTheme threw unexpectedly — using fallback", {
15 operation: "createThemeMiddleware",
16 error: error instanceof Error ? error.message : String(error),
17 });
18 theme = FALLBACK_THEME;
19 }
20 c.set("theme", theme);
21 await next();
22 };
23}