import { Platform } from "react-native"; // Token persistence: localStorage on web, SecureStore on native. const KEY = "campscan.token"; const OPERATOR_KEY = "campscan.operator"; export async function saveToken(token: string): Promise { if (Platform.OS === "web") { try { window.localStorage.setItem(KEY, token); } catch { /* ignore */ } return; } const SecureStore = await import("expo-secure-store"); await SecureStore.setItemAsync(KEY, token); } export async function loadToken(): Promise { if (Platform.OS === "web") { try { return window.localStorage.getItem(KEY); } catch { return null; } } const SecureStore = await import("expo-secure-store"); return SecureStore.getItemAsync(KEY); } export async function clearToken(): Promise { if (Platform.OS === "web") { try { window.localStorage.removeItem(KEY); } catch { /* ignore */ } return; } const SecureStore = await import("expo-secure-store"); await SecureStore.deleteItemAsync(KEY); } // Operator (gate staff) name — plain persistence, not sensitive. Kept in // localStorage on both platforms for simplicity (SecureStore is overkill here; // on native we still use localStorage-less AsyncStorage-free approach below). export async function saveOperator(name: string): Promise { if (Platform.OS === "web") { try { window.localStorage.setItem(OPERATOR_KEY, name); } catch { /* ignore */ } return; } const SecureStore = await import("expo-secure-store"); await SecureStore.setItemAsync(OPERATOR_KEY, name); } export async function loadOperator(): Promise { if (Platform.OS === "web") { try { return window.localStorage.getItem(OPERATOR_KEY); } catch { return null; } } const SecureStore = await import("expo-secure-store"); return SecureStore.getItemAsync(OPERATOR_KEY); } export async function clearOperator(): Promise { if (Platform.OS === "web") { try { window.localStorage.removeItem(OPERATOR_KEY); } catch { /* ignore */ } return; } const SecureStore = await import("expo-secure-store"); await SecureStore.deleteItemAsync(OPERATOR_KEY); }