import { create } from 'zustand'; import { persist } from 'zustand/middleware'; import type { UserInfo } from '@horux/shared'; interface AuthState { user: UserInfo | null; isAuthenticated: boolean; _hasHydrated: boolean; setUser: (user: UserInfo | null) => void; setTokens: (accessToken: string, refreshToken: string) => void; logout: () => void; setHasHydrated: (state: boolean) => void; } export const useAuthStore = create()( persist( (set) => ({ user: null, isAuthenticated: false, _hasHydrated: false, setUser: (user) => set({ user, isAuthenticated: !!user }), setTokens: (accessToken, refreshToken) => { localStorage.setItem('accessToken', accessToken); localStorage.setItem('refreshToken', refreshToken); }, logout: () => { localStorage.removeItem('accessToken'); localStorage.removeItem('refreshToken'); set({ user: null, isAuthenticated: false }); }, setHasHydrated: (state) => set({ _hasHydrated: state }), }), { name: 'horux-auth', partialize: (state) => ({ user: state.user, isAuthenticated: state.isAuthenticated }), onRehydrateStorage: () => (state) => { state?.setHasHydrated(true); }, } ) );