Files
physical-expo/lib/storage.ts
2026-01-16 09:58:07 +08:00

49 lines
1.3 KiB
TypeScript

import AsyncStorage from "@react-native-async-storage/async-storage";
import type { UserProfile } from "@/types/api";
const STORAGE_KEYS = {
ACCESS_TOKEN: "access_token",
REFRESH_TOKEN: "refresh_token",
USER: "user",
};
export const storage = {
async setAccessToken(token: string): Promise<void> {
await AsyncStorage.setItem(STORAGE_KEYS.ACCESS_TOKEN, token);
},
async getAccessToken(): Promise<string | null> {
return await AsyncStorage.getItem(STORAGE_KEYS.ACCESS_TOKEN);
},
async setRefreshToken(token: string): Promise<void> {
await AsyncStorage.setItem(STORAGE_KEYS.REFRESH_TOKEN, token);
},
async getRefreshToken(): Promise<string | null> {
return await AsyncStorage.getItem(STORAGE_KEYS.REFRESH_TOKEN);
},
async setUser(user: UserProfile): Promise<void> {
await AsyncStorage.setItem(STORAGE_KEYS.USER, JSON.stringify(user));
},
async getUser(): Promise<UserProfile | null> {
const userStr = await AsyncStorage.getItem(STORAGE_KEYS.USER);
if (!userStr) return null;
try {
return JSON.parse(userStr) as UserProfile;
} catch {
return null;
}
},
async clear(): Promise<void> {
await AsyncStorage.multiRemove([
STORAGE_KEYS.ACCESS_TOKEN,
STORAGE_KEYS.REFRESH_TOKEN,
STORAGE_KEYS.USER,
]);
},
};