import type { CreateExpressContextOptions } from "@trpc/server/adapters/express"; import type { User } from "../../drizzle/schema"; import { sdk } from "./sdk"; import * as db from "../db"; export type TrpcContext = { req: CreateExpressContextOptions["req"]; res: CreateExpressContextOptions["res"]; user: User | null; }; export async function createContext( opts: CreateExpressContextOptions ): Promise { let user: User | null = null; try { user = await sdk.authenticateRequest(opts.req); } catch (error) { // Authentication is optional for public procedures. user = null; } // If no user is authenticated, use the guest user to bypass login if (!user) { try { user = (await db.getOrCreateGuestUser()) || null; } catch (error) { console.error("[Context] Failed to get guest user", error); } } return { req: opts.req, res: opts.res, user, }; }