Spaces:
Sleeping
Sleeping
| 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<TrpcContext> { | |
| 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, | |
| }; | |
| } | |