31 lines
940 B
TypeScript
31 lines
940 B
TypeScript
import 'server-only';
|
|
import { cache } from 'react';
|
|
import { headers } from 'next/headers';
|
|
import {
|
|
appRouter,
|
|
createCallerFactory,
|
|
createTRPCContext,
|
|
type AppRouter,
|
|
} from '@repo/api';
|
|
import type { inferRouterInputs, inferRouterOutputs } from '@trpc/server';
|
|
import { resolveUser } from '../auth';
|
|
|
|
/**
|
|
* RSC-side tRPC caller. Bypasses HTTP — runs the router directly inside the
|
|
* server component. Use this for reads in Server Components / Server Actions.
|
|
*
|
|
* For client-side reads/mutations, see `./client.ts` (TanStack Query hooks).
|
|
*/
|
|
const createContext = cache(async () => {
|
|
const user = await resolveUser();
|
|
const h = await headers();
|
|
return createTRPCContext({ user, headers: h });
|
|
});
|
|
|
|
const createCaller = createCallerFactory(appRouter);
|
|
|
|
export const api = createCaller(createContext);
|
|
|
|
export type RouterInputs = inferRouterInputs<AppRouter>;
|
|
export type RouterOutputs = inferRouterOutputs<AppRouter>;
|