49 lines
1.3 KiB
TypeScript
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,
|
|
]);
|
|
},
|
|
};
|