UNPKG

sessionize-auth

Version:

A flexible session management library for React, Next.js, Angular, and React Native

56 lines (46 loc) 1.64 kB
import { useCallback } from "react"; import { useStore } from "zustand"; import { AuthConfig } from "../../core/types"; import { createSessionManager, ReturnToManager } from "../../core/sessionManager"; // Global session manager instance let sessionManager: ReturnType<typeof createSessionManager> | null = null; /** * Hook for authentication state and actions */ export function useAuth<T = any>(config?: AuthConfig<T>) { // Initialize session manager if not already done if (!sessionManager && config) { sessionManager = createSessionManager<T>(config); } if (!sessionManager) { throw new Error("useAuth must be used within an AuthProvider or with config"); } const account = useStore(sessionManager as any, (state: any) => state.account); const isAuthenticated = useStore(sessionManager as any, (state: any) => state.isAuthenticated()); const startSession = useCallback((account: T) => { sessionManager!.startSession(account); }, []); const closeSession = useCallback(() => { sessionManager!.closeSession(); }, []); const login = useCallback((account: T, returnTo?: string) => { startSession(account); // Handle return-to functionality if (returnTo) { window.location.href = returnTo; } else { const savedReturnTo = ReturnToManager.getReturnTo(); if (savedReturnTo) { ReturnToManager.clearReturnTo(); window.location.href = savedReturnTo; } } }, [startSession]); return { account, isAuthenticated, startSession, closeSession, login }; }