import type { YogaInitialContext } from "graphql-yoga"; import type { Context } from "./builder.js"; import { getSession } from "../lib/auth.js"; import { db } from "../db/connection.js"; import { redis } from "../lib/auth.js"; export async function buildContext(ctx: YogaInitialContext & { request: Request; reply: unknown; db: typeof db; redis: typeof redis }): Promise { const request = ctx.request; const cookieHeader = request.headers.get("cookie") || ""; // Parse session_token from cookies const cookies = Object.fromEntries( cookieHeader.split(";").map((c) => { const [k, ...v] = c.trim().split("="); return [k.trim(), v.join("=")]; }), ); const token = cookies["session_token"]; const currentUser = token ? await getSession(token) : null; return { db: ctx.db || db, redis: ctx.redis || redis, currentUser, request, reply: ctx.reply, }; }