XuqmGroup-Web/tenant-platform/src/api/update.ts

144 行
3.7 KiB
TypeScript

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' },
})
},
}