Route Metadata
Route metadata allows you to add an optional route specific meta
property which will be available in all middleware
function parameters.
Create router with typed metadata
jsx
import * as trpc from '@trpc/server';// [...]interface Meta {hasAuth: boolean}export const appRouter = trpc.router<Context, Meta>();
jsx
import * as trpc from '@trpc/server';// [...]interface Meta {hasAuth: boolean}export const appRouter = trpc.router<Context, Meta>();
Example with per route authentication settings
server.tstsx
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 enabledif (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`,};},});
server.tstsx
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 enabledif (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`,};},});