feat(usage): implement timeout and error handling for antigravity usage and subscription requests

- Add a 10-second timeout for fetch requests in getAntigravityUsage and getAntigravitySubscriptionInfo functions.
- Include error logging for fetch failures in both functions.
- Update headers to include "x-request-source" for MITM bypass.
- Enhance proxyFetch with DNS resolution and MITM bypass capabilities.
- Ensure proxyFetch is loaded in the API route for proper fetch patching.
This commit is contained in:
decolua
2026-02-28 12:12:49 +07:00
parent 04ba66bc1e
commit 2f4b813c5b
5 changed files with 147 additions and 10 deletions
+18 -2
View File
@@ -214,7 +214,10 @@ async function getAntigravityUsage(accessToken, providerSpecificData) {
// First get project ID from subscription info
const projectId = await getAntigravityProjectId(accessToken);
// Fetch quota data
// Fetch quota data with timeout
const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(), 10000); // 10s timeout
const response = await fetch(ANTIGRAVITY_CONFIG.quotaApiUrl, {
method: "POST",
headers: {
@@ -223,11 +226,15 @@ async function getAntigravityUsage(accessToken, providerSpecificData) {
"Content-Type": "application/json",
"X-Client-Name": "antigravity",
"X-Client-Version": "1.107.0",
"x-request-source": "local", // MITM bypass
},
body: JSON.stringify({
...(projectId ? { project: projectId } : {})
}),
signal: controller.signal,
});
clearTimeout(timeoutId);
if (response.status === 403) {
return {
@@ -302,6 +309,7 @@ async function getAntigravityUsage(accessToken, providerSpecificData) {
subscriptionInfo,
};
} catch (error) {
console.error("[Antigravity Usage] Error:", error.message, error.cause);
return { message: `Antigravity error: ${error.message}` };
}
}
@@ -323,20 +331,28 @@ async function getAntigravityProjectId(accessToken) {
*/
async function getAntigravitySubscriptionInfo(accessToken) {
try {
const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(), 10000); // 10s timeout
const response = await fetch(ANTIGRAVITY_CONFIG.loadProjectApiUrl, {
method: "POST",
headers: {
"Authorization": `Bearer ${accessToken}`,
"User-Agent": ANTIGRAVITY_CONFIG.userAgent,
"Content-Type": "application/json",
"x-request-source": "local", // MITM bypass
},
body: JSON.stringify({ metadata: CLIENT_METADATA, mode: 1 }),
signal: controller.signal,
});
clearTimeout(timeoutId);
if (!response.ok) return null;
return await response.json();
} catch {
} catch (error) {
console.error("[Antigravity Subscription] Error:", error.message);
return null;
}
}