Skip to content
tRPC

Route Metadata

On this page

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

import * as trpc from '@trpc/server';

// [...]

interface Meta {
  hasAuth: boolean
}

export const appRouter = trpc.router<Context, Meta>();

Example with per route authentication settings

server.ts
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`,
      };
    },
  });