UNPKG

@daveyplate/better-auth-tanstack

Version:

Tanstack hooks for better-auth

37 lines (31 loc) 1.29 kB
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 }) }