twenty-one/backend/trpc/base.ts

35 lines
No EOL
788 B
TypeScript

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<Context> {
let user: Context["user"] = null
if (authenticationToken !== null && authenticationToken.length > 0) {
user = usersByToken.get(authenticationToken) ?? null
}
return {
user,
res
}
}
export const t = initTRPC.context<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
}
})
})