28 lines
789 B
TypeScript
28 lines
789 B
TypeScript
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<TrpcContext> {
|
|
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,
|
|
};
|
|
}
|