import { initTRPC, TRPCError } from "@trpc/server"; import type { getDbClient } from "../../database/postgres"; import type { getOpenrouter } from "@server/provider.js"; import type { JWT } from "@auth/core/jwt"; /** * Initialization of tRPC backend * Should be done only once per backend! */ const t = initTRPC .context< object & { dbClient: ReturnType; openrouter: ReturnType; jwt?: JWT | null; } >() .create(/*{ sse: { maxDurationMs: 5 * 60 * 1_000, // 5 minutes ping: { enabled: true, intervalMs: 3_000, }, client: { reconnectAfterInactivityMs: 5_000, }, }, }*/); /** * Export reusable router and procedure helpers * that can be used throughout the router */ export const router = t.router; export const publicProcedure = t.procedure; export const authProcedure = publicProcedure.use( async ({ ctx: { jwt }, next }) => { if (!jwt) { throw new TRPCError({ code: "UNAUTHORIZED", message: JSON.stringify(jwt), }); } if (!jwt.id) { throw new TRPCError({ code: "UNAUTHORIZED" }); } return await next({ ctx: { jwt }, }); } ); export const createCallerFactory = t.createCallerFactory;