import { cache } from "react"; import { headers } from "next/headers"; import { createTRPCOptionsProxy } from "@trpc/tanstack-react-query"; import { appRouter, createCaller, createTRPCContext } from "@homarr/api"; import { auth } from "@homarr/auth/next"; import { makeQueryClient } from "./shared"; /** * This wraps the `createTRPCContext` helper and provides the required context for the tRPC API when * handling a tRPC call from a React Server Component. */ const createContext = cache(async () => { const heads = new Headers(await headers()); heads.set("x-trpc-source", "rsc"); return createTRPCContext({ session: await auth(), headers: heads, }); }); export const api = createCaller(createContext); // IMPORTANT: Create a stable getter for the query client that // will return the same client during the same request. export const getQueryClient = cache(makeQueryClient); export const trpc = createTRPCOptionsProxy({ ctx: createContext, router: appRouter, queryClient: getQueryClient, });