fix(oauth): align antigravity OAuth metadata with official client headers
Fixes #1226 The Antigravity OAuth flow sent inconsistent client metadata between the token acquisition phase and the API usage phase. String enum values (IDE_UNSPECIFIED, PLATFORM_UNSPECIFIED) were used during OAuth token exchange + loadCodeAssist + onboardUser, while numeric enums (ideType: 9, platform: <computed>, pluginType: 2) were used in runtime API calls. Google detected this fingerprint mismatch and blocked 9router accounts. Replace all string enum occurrences with the correct numeric values: - src/lib/oauth/constants/oauth.js: loadCodeAssistClientMetadata now uses getOAuthPlatformEnum() for platform and numeric 9/2 for ideType/pluginType, matching getOAuthClientMetadata() - src/lib/oauth/services/antigravity.js: getMetadata() now delegates to getOAuthClientMetadata() instead of returning hardcoded strings - src/lib/oauth/providers.js: postExchange metadata now uses getOAuthClientMetadata() instead of inline string enums - open-sse/services/usage.js: getGeminiSubscriptionInfo body now uses CLIENT_METADATA (already imported from appConstants.js) instead of inline string enums
This commit is contained in:
parent
5e1c126136
commit
8daa953ef6
4 changed files with 9 additions and 16 deletions
|
|
@ -305,11 +305,7 @@ async function getGeminiSubscriptionInfo(accessToken, proxyOptions = null) {
|
|||
"Content-Type": "application/json",
|
||||
},
|
||||
body: JSON.stringify({
|
||||
metadata: {
|
||||
ideType: "IDE_UNSPECIFIED",
|
||||
platform: "PLATFORM_UNSPECIFIED",
|
||||
pluginType: "GEMINI",
|
||||
},
|
||||
metadata: CLIENT_METADATA,
|
||||
}),
|
||||
signal: controller.signal,
|
||||
},
|
||||
|
|
|
|||
|
|
@ -108,8 +108,8 @@ export const ANTIGRAVITY_CONFIG = {
|
|||
onboardUserEndpoint: "https://cloudcode-pa.googleapis.com/v1internal:onboardUser",
|
||||
loadCodeAssistUserAgent: "google-api-nodejs-client/9.15.1",
|
||||
loadCodeAssistApiClient: "google-cloud-sdk vscode_cloudshelleditor/0.1",
|
||||
// String enum matches CLIProxyAPI Go source (internal/auth/antigravity/constants.go)
|
||||
loadCodeAssistClientMetadata: JSON.stringify({ ideType: "IDE_UNSPECIFIED", platform: "PLATFORM_UNSPECIFIED", pluginType: "GEMINI" }),
|
||||
// Numeric enums matching Antigravity binary ClientMetadata (see getOAuthClientMetadata below)
|
||||
loadCodeAssistClientMetadata: JSON.stringify({ ideType: 9, platform: getOAuthPlatformEnum(), pluginType: 2 }),
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import {
|
|||
CLINE_CONFIG,
|
||||
GITLAB_CONFIG,
|
||||
CODEBUDDY_CONFIG,
|
||||
getOAuthClientMetadata,
|
||||
} from "./constants/oauth";
|
||||
|
||||
const BASE64_BLOCK_SIZE = 4;
|
||||
|
|
@ -306,7 +307,7 @@ const PROVIDERS = {
|
|||
return await response.json();
|
||||
},
|
||||
postExchange: async (tokens) => {
|
||||
// Matches CLIProxyAPI Go source: string enum, no mode field
|
||||
// Numeric enums matching Antigravity binary ClientMetadata
|
||||
const loadHeaders = {
|
||||
"Authorization": `Bearer ${tokens.access_token}`,
|
||||
"Content-Type": "application/json",
|
||||
|
|
@ -315,7 +316,7 @@ const PROVIDERS = {
|
|||
"Client-Metadata": ANTIGRAVITY_CONFIG.loadCodeAssistClientMetadata,
|
||||
"x-request-source": "local",
|
||||
};
|
||||
const metadata = { ideType: "IDE_UNSPECIFIED", platform: "PLATFORM_UNSPECIFIED", pluginType: "GEMINI" };
|
||||
const metadata = getOAuthClientMetadata();
|
||||
|
||||
// Fetch user info
|
||||
const userInfoRes = await fetch(`${ANTIGRAVITY_CONFIG.userInfoUrl}?alt=json`, {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import crypto from "crypto";
|
||||
import open from "open";
|
||||
import { ANTIGRAVITY_CONFIG } from "../constants/oauth.js";
|
||||
import { ANTIGRAVITY_CONFIG, getOAuthClientMetadata } from "../constants/oauth.js";
|
||||
import { getServerCredentials } from "../config/index.js";
|
||||
import { startLocalServer } from "../utils/server.js";
|
||||
import { spinner as createSpinner } from "../utils/ui.js";
|
||||
|
|
@ -92,14 +92,10 @@ export class AntigravityService {
|
|||
|
||||
/**
|
||||
* Get metadata object for loadCodeAssist / onboardUser API calls.
|
||||
* Uses string enum values matching CLIProxyAPI Go source.
|
||||
* Uses numeric enum values matching Antigravity binary ClientMetadata.
|
||||
*/
|
||||
getMetadata() {
|
||||
return {
|
||||
ideType: "IDE_UNSPECIFIED",
|
||||
platform: "PLATFORM_UNSPECIFIED",
|
||||
pluginType: "GEMINI",
|
||||
};
|
||||
return getOAuthClientMetadata();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue