{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "use-next-auth",
  "title": "UseNextAuth",
  "description": "Enhanced wrapper for NextAuth.js session management.",
  "files": [
    {
      "path": "registry/hooks/use-next-auth.tsx",
      "content": "'use client';\n\nimport { useCallback, useEffect, useRef } from 'react';\n\nimport type { Session } from 'next-auth';\nimport { signIn, signOut, useSession } from 'next-auth/react';\n\nexport interface UseNextAuthReturn<T extends Session = Session> {\n  session: T | null;\n  status: 'authenticated' | 'unauthenticated' | 'loading';\n  isAuthenticated: boolean;\n  signIn: typeof signIn;\n  signOut: typeof signOut;\n  refresh: () => Promise<void>;\n}\n\nexport interface UseNextAuthOptions<T extends Session = Session> {\n  onSessionChange?: (\n    session: T | null,\n    status: 'authenticated' | 'unauthenticated' | 'loading',\n  ) => void;\n  /** Interval in milliseconds to refresh the session automatically */\n  refreshInterval?: number;\n  onError?: (error: Error) => void;\n}\n\n/**\n * Enhanced hook for NextAuth.js session management with additional features\n *\n * @template T - Custom session interface extending NextAuth Session\n * @param options - Configuration options for the hook\n * @returns Enhanced session object with additional utilities\n */\nexport function useNextAuth<T extends Session = Session>(\n  options: UseNextAuthOptions<T> = {},\n): UseNextAuthReturn<T> {\n  const { onSessionChange, refreshInterval, onError } = options;\n  const { data, status, update } = useSession();\n  const previousRef = useRef<T | null>(null);\n\n  const safeSignIn = useCallback<typeof signIn>(\n    async (...args) => {\n      try {\n        return await signIn(...args);\n      } catch (err) {\n        onError?.(err as Error);\n        throw err;\n      }\n    },\n    [onError],\n  );\n\n  const safeSignOut = useCallback<typeof signOut>(\n    async (...args) => {\n      try {\n        return await signOut(...args);\n      } catch (err) {\n        onError?.(err as Error);\n        throw err;\n      }\n    },\n    [onError],\n  );\n\n  const refresh = useCallback(async () => {\n    await update();\n  }, [update]);\n\n  // Auto-refresh session at specified intervals\n  useEffect(() => {\n    if (!refreshInterval) return;\n    const id = setInterval(refresh, refreshInterval);\n    return () => clearInterval(id);\n  }, [refreshInterval, refresh]);\n\n  // Session change detection and callbacks\n  useEffect(() => {\n    if (onSessionChange && previousRef.current !== data) {\n      onSessionChange(data as T | null, status);\n      previousRef.current = data as T | null;\n    }\n  }, [data, status, onSessionChange]);\n\n  // Debug logging in development mode\n  useEffect(() => {\n    if (process.env.NODE_ENV === 'development') {\n      console.log('[useNextAuth] Session:', data);\n      console.log('[useNextAuth] Status:', status);\n    }\n  }, [data, status]);\n\n  return {\n    session: data as T | null,\n    status,\n    isAuthenticated: status === 'authenticated',\n    signIn: safeSignIn,\n    signOut: safeSignOut,\n    refresh,\n  };\n}\n",
      "type": "registry:hook",
      "target": "hooks/guarahooks/use-next-auth.tsx"
    }
  ],
  "categories": [
    "auth"
  ],
  "type": "registry:hook"
}