import "server-only"; import type { AppRouter } from "@openstatus/api"; import { HydrationBoundary } from "@tanstack/react-query"; import { dehydrate } from "@tanstack/react-query"; import { createTRPCClient, loggerLink } from "@trpc/client"; import { type TRPCQueryOptions, createTRPCOptionsProxy, } from "@trpc/tanstack-react-query"; import { cookies } from "next/headers"; import { cache } from "react"; import { makeQueryClient } from "./query-client"; import { endingLink } from "./shared"; // 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({ queryClient: getQueryClient, client: createTRPCClient({ links: [ loggerLink({ enabled: (opts) => process.env.NODE_ENV === "development" || (opts.direction === "down" && opts.result instanceof Error), }), endingLink({ headers: { "x-trpc-source": "server", }, fetch: async (url, options) => { const cookieStore = await cookies(); return fetch(url, { ...options, credentials: "include", headers: { ...options?.headers, cookie: cookieStore.toString(), }, }); }, }), ], }), }); export function HydrateClient(props: { children: React.ReactNode }) { const queryClient = getQueryClient(); return ( {props.children} ); } // biome-ignore lint/suspicious/noExplicitAny: FIXME: remove any export function prefetch>>( queryOptions: T, ) { const queryClient = getQueryClient(); if (queryOptions.queryKey[1]?.type === "infinite") { // biome-ignore lint/suspicious/noExplicitAny: FIXME: remove any void queryClient.prefetchInfiniteQuery(queryOptions as any); } else { void queryClient.prefetchQuery(queryOptions); } } // biome-ignore lint/suspicious/noExplicitAny: FIXME: remove any export function batchPrefetch>>( queryOptionsArray: T[], ) { const queryClient = getQueryClient(); for (const queryOptions of queryOptionsArray) { if (queryOptions.queryKey[1]?.type === "infinite") { // biome-ignore lint/suspicious/noExplicitAny: FIXME: remove any void queryClient.prefetchInfiniteQuery(queryOptions as any); } else { void queryClient.prefetchQuery(queryOptions); } } }