import { useQuery } from '@tanstack/react-query'; import { useAuth } from '@clerk/clerk-react'; import { getSubscriptionStatus } from '../api/client'; import { ME_QUERY_KEY } from '../api/queryKeys'; export interface MeData { clerk_id?: string; tier: 'free' | 'pro' | 'business' | string; wizard_iterations_today: number; tokens_used_month: number; limits: { max_wizard_iterations: number; max_tokens_monthly: number; }; } /** Fetches /api/me only when Clerk session is ready — avoids 401 redirect storms. */ export function useMe() { const { isLoaded, isSignedIn } = useAuth(); return useQuery({ queryKey: ME_QUERY_KEY, queryFn: getSubscriptionStatus, enabled: Boolean(isLoaded && isSignedIn), staleTime: 30_000, // One retry after token may have arrived (do not hammer 401) retry: (count, err: unknown) => { const status = (err as { response?: { status?: number } })?.response?.status; if (status === 401) return count < 1; return count < 1; }, retryDelay: 800, }); }