import { create } from 'zustand' import { persist } from 'zustand/middleware' export interface User { id: string email: string display_name?: string is_verified: boolean } export interface AuthState { user: User | null accessToken: string | null refreshToken: string | null isAuthenticated: boolean // Actions setAuth: (user: User, accessToken: string, refreshToken: string) => void updateUser: (user: Partial) => void clearAuth: () => void } export const useAuthStore = create()( persist( (set) => ({ user: null, accessToken: null, refreshToken: null, isAuthenticated: false, setAuth: (user, accessToken, refreshToken) => { // Store tokens in localStorage for API client if (typeof window !== 'undefined') { localStorage.setItem('access_token', accessToken) localStorage.setItem('refresh_token', refreshToken) } set({ user, accessToken, refreshToken, isAuthenticated: true, }) }, updateUser: (updates) => { set((state) => ({ user: state.user ? { ...state.user, ...updates } : null, })) }, clearAuth: () => { // Clear tokens from localStorage if (typeof window !== 'undefined') { localStorage.removeItem('access_token') localStorage.removeItem('refresh_token') } set({ user: null, accessToken: null, refreshToken: null, isAuthenticated: false, }) }, }), { name: 'auth-storage', partialize: (state) => ({ user: state.user, // Don't persist tokens in zustand, only in localStorage }), } ) )