import type { CreateExpressContextOptions } from "@trpc/server/adapters/express"; import { authenticateRequest } from "./auth"; import { withEffectiveInternalAccess, type AuthenticatedPortalUser } from "../internalAccess"; export type TrpcContext = { req: CreateExpressContextOptions["req"]; res: CreateExpressContextOptions["res"]; user: AuthenticatedPortalUser | null; }; export async function createContext( opts: CreateExpressContextOptions ): Promise { let user: AuthenticatedPortalUser | null = null; try { user = await withEffectiveInternalAccess(await authenticateRequest(opts.req)); } catch (error) { // Authentication is optional for public procedures. user = null; } return { req: opts.req, res: opts.res, user, }; }