Skip to main content
Version: 10.x

Route Metadata

Procedure metadata allows you to add an optional procedure specific meta property which will be available in all middleware function parameters.

Create router with typed metadata​

import { initTRPC } from '@trpc/server';

// [...]

interface Meta {
hasAuth: boolean;
}

export const t = initTRPC<{ ctx: Context; meta: Meta }>()();

export const appRouter = t.router({
// [...]
});

Example with per route authentication settings​

server.ts
import { initTRPC } from '@trpc/server';

// [...]

interface Meta {
hasAuth: boolean;
}

export const t = initTRPC<{ ctx: Context; meta: Meta }>()();

const isAuthed = t.middleware(async ({ meta, next, ctx }) => {
// only check authorization if enabled
if (meta?.hasAuth && !ctx.user) {
throw new TRPCError({ code: 'UNAUTHORIZED' });
}
return next();
});

export const authedProcedure = t.procedure.use(isAuthed);

export const appRouter = t.router({
hello: authedProcedure.meta({ hasAuth: false }).query(() => {
return {
greeting: 'hello world',
};
}),
protectedHello: authedProcedure.meta({ hasAuth: true }).query(() => {
return {
greeting: 'hello-world',
};
}),
});