import { initTRPC, TRPCError } from "@trpc/server" import type { Response } from "express" import { type User, usersByToken } from "../user" export interface Context { user: User | null res?: Response } export async function createContext(authenticationToken: string | null, res: Response | undefined): Promise { let user: Context["user"] = null if (authenticationToken !== null && authenticationToken.length > 0) { user = usersByToken.get(authenticationToken) ?? null } return { user, res } } export const t = initTRPC.context().create() export const requireAuthentication = t.middleware(({ ctx, next }) => { let user = ctx.user if (user === null) throw new TRPCError({ code: "UNAUTHORIZED" }) return next({ ctx: { ...ctx, user } }) })