import AsyncStorage from '@react-native-async-storage/async-storage'; import * as Keychain from 'react-native-keychain'; import { KEYCHAIN_SERVICE, STORAGE_KEY_USER } from '../constants'; export interface StoredTokens { accessToken: string; idToken: string; refreshToken: string; expiresAt: string; } export interface StoredUser { id: string; email: string; displayName: string; role: 'Dispatcher' | 'Admin' | 'SysAdmin'; } export const tokenStorage = { save: async (tokens: StoredTokens): Promise => { await Keychain.setGenericPassword('tokens', JSON.stringify(tokens), { service: KEYCHAIN_SERVICE, }); }, get: async (): Promise => { const result = await Keychain.getGenericPassword({ service: KEYCHAIN_SERVICE, }); if (!result) return null; try { return JSON.parse(result.password); } catch { return null; } }, clear: async (): Promise => { await Keychain.resetGenericPassword({ service: KEYCHAIN_SERVICE }); }, isExpired: async (): Promise => { const tokens = await tokenStorage.get(); if (!tokens) return true; return new Date(tokens.expiresAt) <= new Date(); }, }; export const userStorage = { save: async (user: StoredUser): Promise => { await AsyncStorage.setItem(STORAGE_KEY_USER, JSON.stringify(user)); }, get: async (): Promise => { const data = await AsyncStorage.getItem(STORAGE_KEY_USER); if (!data) return null; try { return JSON.parse(data); } catch { return null; } }, clear: async (): Promise => { await AsyncStorage.removeItem(STORAGE_KEY_USER); }, };