import type { QueryClient } from "@tanstack/react-query" import { cache } from "react" import type { BetterAuth } from "../types/better-auth" type GetSessionParams = Parameters[0] const getSession = cache( async (auth: TAuth, params: GetSessionParams) => { type SessionData = TAuth["$Infer"]["Session"] | null return (await auth.api.getSession(params)) as SessionData } ) export async function prefetchSession( auth: TAuth, queryClient: QueryClient, params: GetSessionParams, queryKey = ["session"] ) { type SessionData = TAuth["$Infer"]["Session"] | null type User = TAuth["$Infer"]["Session"]["user"] type Session = TAuth["$Infer"]["Session"]["session"] const queryFn = async () => (await getSession(auth, params)) as SessionData await queryClient.prefetchQuery({ queryKey, queryFn }) const data = await queryFn() return { data, session: data?.session as Session | undefined, user: data?.user as User | undefined } }