Skip to main content

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

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