Route metadata allows you to add an optional route specific meta property which will be available in all middleware function parameters.
jsx
import * as trpc from '@trpc/server';
// [...]
interface Meta {
hasAuth: boolean
}
export const appRouter = trpc.router<Context, Meta>();
server.ts
tsx
import * as trpc from '@trpc/server';
// [...]
interface Meta {
hasAuth: boolean;
}
export const appRouter = trpc
.router<Context, Meta>()
.middleware(async ({ meta, next, ctx }) => {
`// only check authorization if enabled`
`if (meta?.hasAuth && !ctx.user) {`
`throw new TRPCError({ code: 'UNAUTHORIZED' });`
`}`
`return next();`
})
.query('hello', {
`meta: {`
`hasAuth: false,`
`},`
`resolve({ ctx }) {`
`return {`
``greeting: `hello world`,``
`};`
`},`
})
.query('protected-hello', {
`meta: {`
`hasAuth: true,`
`},`
`resolve({ ctx }) {`
`return {`
``greeting: `hello world`,``
`};`
`},`
});