import { apiClient } from '@/shared/api/client' import type { ApiResponse } from '@/shared/types/types' import type { RealnameStatusValue, RiskStatus, UserStatus } from '@/shared/types/status' export interface AuthUser { id: number phone: string nickname: string avatar_url: string realname_status: RealnameStatusValue risk_status: RiskStatus credit_score: number status: UserStatus } export interface TokenPair { access_token: string refresh_token: string token_type: string expires_in: number } export interface LoginData { user: AuthUser tokens: TokenPair } export interface AuthCaptcha { captcha_id: string image: string expires_in: number } export async function fetchAuthCaptcha() { const { data } = await apiClient.get>('/auth/captcha') return data.data } export async function sendSmsCode(phone: string, captchaId: string, captchaCode: string) { const { data } = await apiClient.post>( '/auth/sms/send', { phone, captcha_id: captchaId, captcha_code: captchaCode, } ) return data.data } export async function loginWithSms(phone: string, code: string) { const { data } = await apiClient.post>('/auth/sms/login', { phone, code }) return data.data } export async function fetchMe() { const { data } = await apiClient.get>('/me') return data.data } export async function updateMe(payload: Pick) { const { data } = await apiClient.put>('/me', payload) return data.data } /** Manually refresh user token (for store to call on app init) */ export async function refreshUserToken(refreshToken: string) { const { data } = await apiClient.post>('/auth/refresh', { refresh_token: refreshToken, }) return data.data }