Back to Trpc

Route Metadata

www/versioned_docs/version-9.x/server/metadata.md

11.16.01.1 KB
Original Source

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>();

Example with per route authentication settings

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