@daveyplate/better-auth-tanstack
Version:
Tanstack hooks for better-auth
37 lines (28 loc) • 1.11 kB
text/typescript
import type { QueryClient } from "@tanstack/react-query"
import { cache } from "react"
import type { BetterAuth } from "../types/better-auth"
type GetSessionParams = Parameters<BetterAuth["api"]["getSession"]>[0]
const getSession = cache(
async <TAuth extends BetterAuth>(auth: TAuth, params: GetSessionParams) => {
type SessionData = TAuth["$Infer"]["Session"] | null
return (await auth.api.getSession(params)) as SessionData
}
)
export async function prefetchSession<TAuth extends BetterAuth>(
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
}
}