import { TRPCError, initTRPC } from '@trpc/server' import { Context } from './context' import { OpenApiMeta } from 'trpc-openapi' import superjson from 'superjson' import * as Sentry from '@sentry/nextjs' const t = initTRPC.context().meta().create({ transformer: superjson, }) const sentryMiddleware = t.middleware( Sentry.Handlers.trpcMiddleware({ attachRpcInput: true, }) ) const isAuthed = t.middleware(({ next, ctx }) => { if (!ctx.user?.id) { throw new TRPCError({ code: 'UNAUTHORIZED', }) } return next({ ctx: { user: ctx.user, }, }) }) const finalMiddleware = sentryMiddleware.unstable_pipe(isAuthed) export const middleware = t.middleware export const router = t.router export const publicProcedure = t.procedure.use(sentryMiddleware) export const authenticatedProcedure = t.procedure.use(finalMiddleware)