import type { UsAppBoundLocationDto } from '../types/usAppBound' import { usAppApiRequest } from '../utils/usAppApiRequest' export type { UsAppBoundLocationDto } export interface UsAppLoginInput { email: string password: string uuid?: string code?: string } export interface UsAppLoginOutputDto { token: string refreshToken: string locations: UsAppBoundLocationDto[] } function normalizeLocation(raw: Record): UsAppBoundLocationDto { return { id: String(raw.id ?? raw.Id ?? ''), locationCode: String(raw.locationCode ?? raw.LocationCode ?? ''), locationName: String(raw.locationName ?? raw.LocationName ?? ''), fullAddress: String(raw.fullAddress ?? raw.FullAddress ?? ''), state: raw.state !== false && raw.State !== false, } } function normalizeLoginOutput(raw: unknown): UsAppLoginOutputDto { const o = raw as Record const locs = o.locations ?? o.Locations const arr = Array.isArray(locs) ? locs : [] return { token: String(o.token ?? o.Token ?? ''), refreshToken: String(o.refreshToken ?? o.RefreshToken ?? ''), locations: arr.map((x) => normalizeLocation(x as Record)), } } function normalizeLocationList(raw: unknown): UsAppBoundLocationDto[] { const arr = Array.isArray(raw) ? raw : [] return arr.map((x) => normalizeLocation(x as Record)) } /** POST /api/app/us-app-auth/login(401 不触发全局跳转) */ export async function usAppLogin(input: UsAppLoginInput): Promise { const raw = await usAppApiRequest({ path: '/api/app/us-app-auth/login', method: 'POST', skipUnauthorizedRedirect: true, data: { email: input.email.trim(), password: input.password, ...(input.uuid ? { uuid: input.uuid } : {}), ...(input.code != null ? { code: input.code } : {}), }, }) return normalizeLoginOutput(raw) } /** GET /api/app/us-app-auth/my-locations */ export async function usAppFetchMyLocations(): Promise { const raw = await usAppApiRequest({ path: '/api/app/us-app-auth/my-locations', method: 'GET', auth: true, }) return normalizeLocationList(raw) }