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 = ({ fetchOptions }: { fetchOptions: BetterFetchOption }) => Promise> type UseAuthQueryProps = { authClient: TAuthClient queryKey: QueryKey queryFn: BetterFetchRequest options?: Partial } export function useAuthQuery({ authClient, queryKey, queryFn, options }: UseAuthQueryProps) { const { data: sessionData } = useSession(authClient) const { queryOptions } = useContext(AuthQueryContext) const mergedOptions = { ...queryOptions, ...options } return useQuery({ queryKey, queryFn: sessionData ? () => queryFn({ fetchOptions: { throw: true } }) : skipToken, ...mergedOptions }) }