35 lines
No EOL
788 B
TypeScript
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
|
|
}
|
|
})
|
|
}) |