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
jsximport * as trpc from '@trpc/server';// [...]interface Meta {hasAuth: boolean}export const appRouter = trpc.router<Context, Meta>();
jsximport * as trpc from '@trpc/server';// [...]interface Meta {hasAuth: boolean}export const appRouter = trpc.router<Context, Meta>();
Example with per route authentication settings
server.tstsximport * 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.tstsximport * 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`,};},});