diff --git a/src/components/quota/quotaConfigs.ts b/src/components/quota/quotaConfigs.ts index f1870e3..e36b050 100644 --- a/src/components/quota/quotaConfigs.ts +++ b/src/components/quota/quotaConfigs.ts @@ -116,6 +116,11 @@ const resolveAntigravityProjectId = async (file: AuthFileItem): Promise return DEFAULT_ANTIGRAVITY_PROJECT_ID; }; +const isAntigravityUnknownFieldError = (message: string): boolean => { + const normalized = message.toLowerCase(); + return normalized.includes('unknown name') && normalized.includes('cannot find field'); +}; + const fetchAntigravityQuota = async ( file: AuthFileItem, t: TFunction @@ -127,7 +132,7 @@ const fetchAntigravityQuota = async ( } const projectId = await resolveAntigravityProjectId(file); - const requestBody = JSON.stringify({ project_id: projectId }); + const requestBodies = [JSON.stringify({ projectId }), JSON.stringify({ project: projectId })]; let lastError = ''; let lastStatus: number | undefined; @@ -135,46 +140,55 @@ const fetchAntigravityQuota = async ( let hadSuccess = false; for (const url of ANTIGRAVITY_QUOTA_URLS) { - try { - const result = await apiCallApi.request({ - authIndex, - method: 'POST', - url, - header: { ...ANTIGRAVITY_REQUEST_HEADERS }, - data: requestBody - }); + for (let attempt = 0; attempt < requestBodies.length; attempt++) { + try { + const result = await apiCallApi.request({ + authIndex, + method: 'POST', + url, + header: { ...ANTIGRAVITY_REQUEST_HEADERS }, + data: requestBodies[attempt] + }); - if (result.statusCode < 200 || result.statusCode >= 300) { - lastError = getApiCallErrorMessage(result); - lastStatus = result.statusCode; - if (result.statusCode === 403 || result.statusCode === 404) { - priorityStatus ??= result.statusCode; + if (result.statusCode < 200 || result.statusCode >= 300) { + lastError = getApiCallErrorMessage(result); + lastStatus = result.statusCode; + if (result.statusCode === 403 || result.statusCode === 404) { + priorityStatus ??= result.statusCode; + } + if ( + result.statusCode === 400 && + isAntigravityUnknownFieldError(lastError) && + attempt < requestBodies.length - 1 + ) { + continue; + } + break; } - continue; - } - hadSuccess = true; - const payload = parseAntigravityPayload(result.body ?? result.bodyText); - const models = payload?.models; - if (!models || typeof models !== 'object' || Array.isArray(models)) { - lastError = t('antigravity_quota.empty_models'); - continue; - } + hadSuccess = true; + const payload = parseAntigravityPayload(result.body ?? result.bodyText); + const models = payload?.models; + if (!models || typeof models !== 'object' || Array.isArray(models)) { + lastError = t('antigravity_quota.empty_models'); + continue; + } - const groups = buildAntigravityQuotaGroups(models as AntigravityModelsPayload); - if (groups.length === 0) { - lastError = t('antigravity_quota.empty_models'); - continue; - } + const groups = buildAntigravityQuotaGroups(models as AntigravityModelsPayload); + if (groups.length === 0) { + lastError = t('antigravity_quota.empty_models'); + continue; + } - return groups; - } catch (err: unknown) { - lastError = err instanceof Error ? err.message : t('common.unknown_error'); - const status = getStatusFromError(err); - if (status) { - lastStatus = status; - if (status === 403 || status === 404) { - priorityStatus ??= status; + return groups; + } catch (err: unknown) { + lastError = err instanceof Error ? err.message : t('common.unknown_error'); + const status = getStatusFromError(err); + if (status) { + lastStatus = status; + if (status === 403 || status === 404) { + priorityStatus ??= status; + } } } }