fix(frontend): relax system import limits

This commit is contained in:
fawney19
2026-05-16 19:00:20 +08:00
parent 328ac721ce
commit 56994d4c29
4 changed files with 182 additions and 9 deletions

View File

@@ -0,0 +1,85 @@
import { beforeEach, describe, expect, it, vi } from 'vitest'
import type { AggregateImportRequest, ConfigImportRequest, UsersImportRequest } from '@/api/admin'
const { postMock } = vi.hoisted(() => ({
postMock: vi.fn(),
}))
vi.mock('@/api/client', () => ({
default: {
post: postMock,
},
}))
import { adminApi } from '@/api/admin'
const SYSTEM_DATA_IMPORT_TIMEOUT_MS = 10 * 60 * 1000
describe('adminApi system data import timeouts', () => {
beforeEach(() => {
postMock.mockReset()
postMock.mockResolvedValue({ data: {} })
})
it('uses a long timeout for config imports', async () => {
const payload = {
version: '1',
exported_at: '2026-01-01T00:00:00.000Z',
global_models: [],
providers: [],
merge_mode: 'skip',
} satisfies ConfigImportRequest
await adminApi.importConfig(payload)
expect(postMock).toHaveBeenCalledWith(
'/api/admin/system/config/import',
payload,
{ timeout: SYSTEM_DATA_IMPORT_TIMEOUT_MS }
)
})
it('uses a long timeout for user imports', async () => {
const payload = {
version: '1',
exported_at: '2026-01-01T00:00:00.000Z',
users: [],
merge_mode: 'skip',
} satisfies UsersImportRequest
await adminApi.importUsers(payload)
expect(postMock).toHaveBeenCalledWith(
'/api/admin/system/users/import',
payload,
{ timeout: SYSTEM_DATA_IMPORT_TIMEOUT_MS }
)
})
it('uses a long timeout for aggregate imports', async () => {
const payload = {
version: '1',
exported_at: '2026-01-01T00:00:00.000Z',
config_data: {
version: '1',
exported_at: '2026-01-01T00:00:00.000Z',
global_models: [],
providers: [],
},
user_data: {
version: '1',
exported_at: '2026-01-01T00:00:00.000Z',
users: [],
},
merge_mode: 'skip',
} satisfies AggregateImportRequest
await adminApi.importAggregateData(payload)
expect(postMock).toHaveBeenCalledWith(
'/api/admin/system/data/import',
payload,
{ timeout: SYSTEM_DATA_IMPORT_TIMEOUT_MS }
)
})
})

View File

@@ -4,6 +4,8 @@ import { cachedRequest, buildCacheKey } from '@/utils/cache'
import type { BillingSummary } from './auth'
import type { ApiKeyInstallSession, InstallSessionTargetSystem, InstallTargetCli } from './me'
const SYSTEM_DATA_IMPORT_TIMEOUT_MS = 10 * 60 * 1000
function extractConflictPayload(error: unknown): ManualUsageCleanupConflict | null {
if (!axios.isAxiosError(error) || error.response?.status !== 409) {
return null
@@ -854,7 +856,8 @@ export const adminApi = {
async importConfig(data: ConfigImportRequest): Promise<ConfigImportResponse> {
const response = await apiClient.post<ConfigImportResponse>(
'/api/admin/system/config/import',
data
data,
{ timeout: SYSTEM_DATA_IMPORT_TIMEOUT_MS }
)
return response.data
},
@@ -869,7 +872,8 @@ export const adminApi = {
async importUsers(data: UsersImportRequest): Promise<UsersImportResponse> {
const response = await apiClient.post<UsersImportResponse>(
'/api/admin/system/users/import',
data
data,
{ timeout: SYSTEM_DATA_IMPORT_TIMEOUT_MS }
)
return response.data
},
@@ -884,7 +888,8 @@ export const adminApi = {
async importAggregateData(data: AggregateImportRequest): Promise<AggregateImportResponse> {
const response = await apiClient.post<AggregateImportResponse>(
'/api/admin/system/data/import',
data
data,
{ timeout: SYSTEM_DATA_IMPORT_TIMEOUT_MS }
)
return response.data
},