import * as SecureStore from 'expo-secure-store'; import { create } from 'zustand'; export type Role = 'user' | 'org'; export type Session = { userId: string; token: string; role: Role; } // Temporaire: bypass de l'auth pour avancer sur la navigation. const DEV_MOCK_SESSION_ENABLED = true; const DEV_MOCK_SESSION: Session = { userId: 'dev-user', token: 'dev-token', role: 'user', }; type AuthState = { session: Session | null; hydrated: boolean; // Le disque a été lu, la réponse est fiable hydrate: () => Promise; signIn: (session: Session) => Promise; signOut: () => Promise; }; const KEY = 'bahla.session'; export const useAuth = create((set) => ({ session: null, hydrated: false, hydrate: async () => { if (DEV_MOCK_SESSION_ENABLED) { set({ session: DEV_MOCK_SESSION, hydrated: true }); return; } const session = await SecureStore.getItemAsync(KEY); if (session) { set({ session: JSON.parse(session), hydrated: true }); return; } set({ session: null, hydrated: true }); }, signIn: async (s: Session) => { await SecureStore.setItemAsync(KEY, JSON.stringify(s)); set({ session: s }); }, signOut: async () => { await SecureStore.deleteItemAsync(KEY); set({ session: null }); }, }));