import type { CreateExpressContextOptions } from "@trpc/server/adapters/express"; import type { User } from "../../drizzle/schema"; 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; // Dev mode: auto-authenticate as dev user (no OAuth needed) if (process.env.DEV_MODE === "true" || !process.env.OAUTH_SERVER_URL) { user = (await db.getUserByOpenId("dev-user")) || null; if (!user) { await db.upsertUser({ openId: "dev-user", name: "Developer", email: "dev@claw.local", role: "admin", }); user = (await db.getUserByOpenId("dev-user")) || null; } } else { // Production mode: use OAuth SDK try { const { sdk } = await import("./sdk"); user = await sdk.authenticateRequest(opts.req); } catch { user = null; } } return { req: opts.req, res: opts.res, user, }; }