import AsyncStorage from '@react-native-async-storage/async-storage' import { getConfig } from './config' const TOKEN_KEY = '@xuqm_sdk_token' const DEFAULT_API_URL = 'https://dev.xuqinmin.com' export async function getToken(): Promise { return AsyncStorage.getItem(TOKEN_KEY) } export async function saveToken(token: string): Promise { return AsyncStorage.setItem(TOKEN_KEY, token) } export async function clearToken(): Promise { return AsyncStorage.removeItem(TOKEN_KEY) } export async function apiRequest( path: string, options: { method?: string; body?: unknown; params?: Record } = {}, ): Promise { const config = getConfig() const token = await getToken() let url = DEFAULT_API_URL.replace(/\/$/, '') + path if (options.params) { const qs = new URLSearchParams(options.params).toString() url += (url.includes('?') ? '&' : '?') + qs } const res = await fetch(url, { method: options.method ?? 'GET', headers: { 'Content-Type': 'application/json', Accept: 'application/json', ...(token ? { Authorization: `Bearer ${token}` } : {}), }, body: options.body ? JSON.stringify(options.body) : undefined, }) if (!res.ok) { const err = await res.json().catch(() => ({ message: res.statusText })) throw new Error(err.message ?? `HTTP ${res.status}`) } const json = await res.json() return json.data ?? json }