@daveyplate/better-auth-tanstack
Version:
Tanstack hooks for better-auth
37 lines (31 loc) • 1.29 kB
text/typescript
import { type QueryKey, skipToken } from "@tanstack/query-core"
import { type AnyUseQueryOptions, useQuery } from "@tanstack/react-query"
import type { BetterFetchOption, BetterFetchResponse } from "better-auth/react"
import { useContext } from "react"
import { AuthQueryContext } from "../../lib/auth-query-provider"
import type { AnyAuthClient } from "../../types/any-auth-client"
import { useSession } from "../session/use-session"
export type BetterFetchRequest<TData> = ({
fetchOptions
}: { fetchOptions: BetterFetchOption }) => Promise<BetterFetchResponse<TData>>
type UseAuthQueryProps<TData, TAuthClient> = {
authClient: TAuthClient
queryKey: QueryKey
queryFn: BetterFetchRequest<TData>
options?: Partial<AnyUseQueryOptions>
}
export function useAuthQuery<TData, TAuthClient extends AnyAuthClient = AnyAuthClient>({
authClient,
queryKey,
queryFn,
options
}: UseAuthQueryProps<TData, TAuthClient>) {
const { data: sessionData } = useSession(authClient)
const { queryOptions } = useContext(AuthQueryContext)
const mergedOptions = { ...queryOptions, ...options }
return useQuery<TData>({
queryKey,
queryFn: sessionData ? () => queryFn({ fetchOptions: { throw: true } }) : skipToken,
...mergedOptions
})
}