import axios from 'axios' const updateClient = axios.create({ baseURL: 'http://192.168.116.9:8084', timeout: 30000, }) if (import.meta.env.DEV) { updateClient.interceptors.request.use((config) => { console.debug('[tenant-platform][UPDATE] request', { method: config.method?.toUpperCase(), url: config.baseURL ? `${config.baseURL}${config.url ?? ''}` : config.url, params: config.params, }) return config }) updateClient.interceptors.response.use((res) => { console.debug('[tenant-platform][UPDATE] response', { status: res.status, url: res.config.url, }) return res }) } updateClient.interceptors.request.use((config) => { const token = localStorage.getItem('token') if (token) config.headers.Authorization = `Bearer ${token}` return config }) export interface AppVersion { id: string appId: string platform: 'ANDROID' | 'IOS' versionName: string versionCode: number downloadUrl?: string changeLog?: string forceUpdate: boolean publishStatus: 'DRAFT' | 'PUBLISHED' | 'DEPRECATED' grayEnabled: boolean grayPercent: number appStoreUrl?: string marketUrl?: string createdAt: string } export interface RnBundle { id: string appId: string moduleId: string platform: 'ANDROID' | 'IOS' version: string md5: string minCommonVersion?: string note?: string publishStatus: 'DRAFT' | 'PUBLISHED' | 'DEPRECATED' grayEnabled: boolean grayPercent: number createdAt: string } export interface UnifiedAppUploadItem { fileKey: string platform: 'ANDROID' | 'IOS' versionName: string versionCode: number changeLog?: string forceUpdate: boolean appStoreUrl?: string marketUrl?: string } export interface UnifiedRnUploadItem { fileKey: string moduleId: string platform: 'ANDROID' | 'IOS' version: string minCommonVersion?: string note?: string } export interface UnifiedReleaseManifest { appVersions: UnifiedAppUploadItem[] rnBundles: UnifiedRnUploadItem[] } export const updateAdminApi = { listAppVersions(appId: string, platform: 'ANDROID' | 'IOS') { return updateClient.get<{ data: AppVersion[] }>('/api/v1/updates/app/list', { params: { appId, platform }, }) }, publishAppVersion(id: string) { return updateClient.post(`/api/v1/updates/app/${id}/publish`) }, unpublishAppVersion(id: string) { return updateClient.post(`/api/v1/updates/app/${id}/unpublish`) }, grayAppVersion(id: string, enabled: boolean, percent: number) { return updateClient.post(`/api/v1/updates/app/${id}/gray`, { enabled, percent }) }, uploadAppVersion(formData: FormData) { return updateClient.post<{ data: AppVersion }>('/api/v1/updates/app/upload', formData, { headers: { 'Content-Type': 'multipart/form-data' }, }) }, listRnBundles(appId: string, moduleId?: string, platform?: string) { return updateClient.get<{ data: RnBundle[] }>('/api/v1/rn/list', { params: { appId, ...(moduleId && { moduleId }), ...(platform && { platform }) }, }) }, publishRnBundle(id: string) { return updateClient.post(`/api/v1/rn/${id}/publish`) }, unpublishRnBundle(id: string) { return updateClient.post(`/api/v1/rn/${id}/unpublish`) }, grayRnBundle(id: string, enabled: boolean, percent: number) { return updateClient.post(`/api/v1/rn/${id}/gray`, { enabled, percent }) }, uploadRnBundle(formData: FormData) { return updateClient.post<{ data: RnBundle }>('/api/v1/rn/upload', formData, { headers: { 'Content-Type': 'multipart/form-data' }, }) }, uploadUnifiedRelease(formData: FormData) { return updateClient.post('/api/v1/updates/unified/upload', formData, { headers: { 'Content-Type': 'multipart/form-data' }, }) }, }