feat(antigravity-auth): add types and constants foundation
🤖 Generated with assistance of OhMyOpenCode
This commit is contained in:
1312
ai-todolist.md
1312
ai-todolist.md
File diff suppressed because it is too large
Load Diff
54
src/auth/antigravity/constants.ts
Normal file
54
src/auth/antigravity/constants.ts
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
/**
|
||||||
|
* Antigravity OAuth configuration constants.
|
||||||
|
* Values sourced from cliproxyapi/sdk/auth/antigravity.go
|
||||||
|
*/
|
||||||
|
|
||||||
|
// OAuth 2.0 Client Credentials
|
||||||
|
export const ANTIGRAVITY_CLIENT_ID =
|
||||||
|
"1071006060591-tmhssin2h21lcre235vtolojh4g403ep.apps.googleusercontent.com"
|
||||||
|
export const ANTIGRAVITY_CLIENT_SECRET = "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"
|
||||||
|
|
||||||
|
// OAuth Callback
|
||||||
|
export const ANTIGRAVITY_CALLBACK_PORT = 51121
|
||||||
|
export const ANTIGRAVITY_REDIRECT_URI = `http://localhost:${ANTIGRAVITY_CALLBACK_PORT}/oauth-callback`
|
||||||
|
|
||||||
|
// OAuth Scopes
|
||||||
|
export const ANTIGRAVITY_SCOPES = [
|
||||||
|
"https://www.googleapis.com/auth/cloud-platform",
|
||||||
|
"https://www.googleapis.com/auth/userinfo.email",
|
||||||
|
"https://www.googleapis.com/auth/userinfo.profile",
|
||||||
|
"https://www.googleapis.com/auth/cclog",
|
||||||
|
"https://www.googleapis.com/auth/experimentsandconfigs",
|
||||||
|
] as const
|
||||||
|
|
||||||
|
// API Endpoint Fallbacks (order: daily → autopush → prod)
|
||||||
|
export const ANTIGRAVITY_ENDPOINT_FALLBACKS = [
|
||||||
|
"https://daily-cloudcode-pa.sandbox.googleapis.com", // dev
|
||||||
|
"https://autopush-cloudcode-pa.sandbox.googleapis.com", // staging
|
||||||
|
"https://cloudcode-pa.googleapis.com", // prod
|
||||||
|
] as const
|
||||||
|
|
||||||
|
// API Version
|
||||||
|
export const ANTIGRAVITY_API_VERSION = "v1internal"
|
||||||
|
|
||||||
|
// Request Headers
|
||||||
|
export const ANTIGRAVITY_HEADERS = {
|
||||||
|
"User-Agent": "google-api-nodejs-client/9.15.1",
|
||||||
|
"X-Goog-Api-Client": "google-cloud-sdk vscode_cloudshelleditor/0.1",
|
||||||
|
"Client-Metadata": JSON.stringify({
|
||||||
|
ideType: "IDE_UNSPECIFIED",
|
||||||
|
platform: "PLATFORM_UNSPECIFIED",
|
||||||
|
pluginType: "GEMINI",
|
||||||
|
}),
|
||||||
|
} as const
|
||||||
|
|
||||||
|
// Default Project ID (fallback when loadCodeAssist API fails)
|
||||||
|
export const ANTIGRAVITY_DEFAULT_PROJECT_ID = ""
|
||||||
|
|
||||||
|
// Google OAuth endpoints
|
||||||
|
export const GOOGLE_AUTH_URL = "https://accounts.google.com/o/oauth2/v2/auth"
|
||||||
|
export const GOOGLE_TOKEN_URL = "https://oauth2.googleapis.com/token"
|
||||||
|
export const GOOGLE_USERINFO_URL = "https://www.googleapis.com/oauth2/v1/userinfo"
|
||||||
|
|
||||||
|
// Token refresh buffer (refresh 60 seconds before expiry)
|
||||||
|
export const ANTIGRAVITY_TOKEN_REFRESH_BUFFER_MS = 60_000
|
||||||
1
src/auth/antigravity/fetch.ts
Normal file
1
src/auth/antigravity/fetch.ts
Normal file
@@ -0,0 +1 @@
|
|||||||
|
// Antigravity fetch interceptor - to be implemented in Task 11
|
||||||
5
src/auth/antigravity/index.ts
Normal file
5
src/auth/antigravity/index.ts
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
// Antigravity auth module barrel export
|
||||||
|
// Types and constants will be populated by Task 1 and Task 2
|
||||||
|
|
||||||
|
export * from "./types"
|
||||||
|
export * from "./constants"
|
||||||
1
src/auth/antigravity/oauth.ts
Normal file
1
src/auth/antigravity/oauth.ts
Normal file
@@ -0,0 +1 @@
|
|||||||
|
// Antigravity OAuth flow - to be implemented in Task 4
|
||||||
1
src/auth/antigravity/plugin.ts
Normal file
1
src/auth/antigravity/plugin.ts
Normal file
@@ -0,0 +1 @@
|
|||||||
|
// Antigravity main plugin - to be implemented in Task 12
|
||||||
1
src/auth/antigravity/project.ts
Normal file
1
src/auth/antigravity/project.ts
Normal file
@@ -0,0 +1 @@
|
|||||||
|
// Antigravity project context - to be implemented in Task 6
|
||||||
1
src/auth/antigravity/request.ts
Normal file
1
src/auth/antigravity/request.ts
Normal file
@@ -0,0 +1 @@
|
|||||||
|
// Antigravity request transformer - to be implemented in Task 7
|
||||||
1
src/auth/antigravity/response.ts
Normal file
1
src/auth/antigravity/response.ts
Normal file
@@ -0,0 +1 @@
|
|||||||
|
// Antigravity response handler - to be implemented in Task 8
|
||||||
1
src/auth/antigravity/thinking.ts
Normal file
1
src/auth/antigravity/thinking.ts
Normal file
@@ -0,0 +1 @@
|
|||||||
|
// Antigravity thinking block handler - to be implemented in Task 10
|
||||||
1
src/auth/antigravity/token.ts
Normal file
1
src/auth/antigravity/token.ts
Normal file
@@ -0,0 +1 @@
|
|||||||
|
// Antigravity token management - to be implemented in Task 5
|
||||||
1
src/auth/antigravity/tools.ts
Normal file
1
src/auth/antigravity/tools.ts
Normal file
@@ -0,0 +1 @@
|
|||||||
|
// Antigravity tool normalization - to be implemented in Task 9
|
||||||
181
src/auth/antigravity/types.ts
Normal file
181
src/auth/antigravity/types.ts
Normal file
@@ -0,0 +1,181 @@
|
|||||||
|
/**
|
||||||
|
* Antigravity Auth Type Definitions
|
||||||
|
* Matches cliproxyapi/sdk/auth/antigravity.go token format exactly
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Token storage format for Antigravity authentication
|
||||||
|
* Matches Go metadata structure: type, access_token, refresh_token, expires_in, timestamp, email, project_id
|
||||||
|
*/
|
||||||
|
export interface AntigravityTokens {
|
||||||
|
/** Always "antigravity" for this auth type */
|
||||||
|
type: "antigravity"
|
||||||
|
/** OAuth access token from Google */
|
||||||
|
access_token: string
|
||||||
|
/** OAuth refresh token from Google */
|
||||||
|
refresh_token: string
|
||||||
|
/** Token expiration time in seconds */
|
||||||
|
expires_in: number
|
||||||
|
/** Unix timestamp in milliseconds when tokens were obtained */
|
||||||
|
timestamp: number
|
||||||
|
/** ISO 8601 formatted expiration datetime (optional, for display) */
|
||||||
|
expired?: string
|
||||||
|
/** User's email address from Google userinfo */
|
||||||
|
email?: string
|
||||||
|
/** GCP project ID from loadCodeAssist API */
|
||||||
|
project_id?: string
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Project context returned from loadCodeAssist API
|
||||||
|
* Used to get cloudaicompanionProject for API calls
|
||||||
|
*/
|
||||||
|
export interface AntigravityProjectContext {
|
||||||
|
/** GCP project ID for Cloud AI Companion */
|
||||||
|
cloudaicompanionProject?: string
|
||||||
|
/** Managed project ID for enterprise users (optional) */
|
||||||
|
managedProjectId?: string
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Metadata for loadCodeAssist API request
|
||||||
|
*/
|
||||||
|
export interface AntigravityClientMetadata {
|
||||||
|
/** IDE type identifier */
|
||||||
|
ideType: "IDE_UNSPECIFIED" | string
|
||||||
|
/** Platform identifier */
|
||||||
|
platform: "PLATFORM_UNSPECIFIED" | string
|
||||||
|
/** Plugin type - typically "GEMINI" */
|
||||||
|
pluginType: "GEMINI" | string
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Request body for loadCodeAssist API
|
||||||
|
*/
|
||||||
|
export interface AntigravityLoadCodeAssistRequest {
|
||||||
|
metadata: AntigravityClientMetadata
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Response from loadCodeAssist API
|
||||||
|
*/
|
||||||
|
export interface AntigravityLoadCodeAssistResponse {
|
||||||
|
/** Project ID - can be string or object with id field */
|
||||||
|
cloudaicompanionProject?: string | { id: string }
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Request body format for Antigravity API calls
|
||||||
|
* Wraps the actual request with project and model context
|
||||||
|
*/
|
||||||
|
export interface AntigravityRequestBody {
|
||||||
|
/** GCP project ID */
|
||||||
|
project: string
|
||||||
|
/** Model identifier (e.g., "gemini-3-pro-preview") */
|
||||||
|
model: string
|
||||||
|
/** The actual request payload */
|
||||||
|
request: Record<string, unknown>
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Response format from Antigravity API
|
||||||
|
* Follows OpenAI-compatible structure with Gemini extensions
|
||||||
|
*/
|
||||||
|
export interface AntigravityResponse {
|
||||||
|
/** Response ID */
|
||||||
|
id?: string
|
||||||
|
/** Object type (e.g., "chat.completion") */
|
||||||
|
object?: string
|
||||||
|
/** Creation timestamp */
|
||||||
|
created?: number
|
||||||
|
/** Model used for response */
|
||||||
|
model?: string
|
||||||
|
/** Response choices */
|
||||||
|
choices?: AntigravityResponseChoice[]
|
||||||
|
/** Token usage statistics */
|
||||||
|
usage?: AntigravityUsage
|
||||||
|
/** Error information if request failed */
|
||||||
|
error?: AntigravityError
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Single response choice in Antigravity response
|
||||||
|
*/
|
||||||
|
export interface AntigravityResponseChoice {
|
||||||
|
/** Choice index */
|
||||||
|
index: number
|
||||||
|
/** Message content */
|
||||||
|
message?: {
|
||||||
|
role: "assistant"
|
||||||
|
content?: string
|
||||||
|
tool_calls?: AntigravityToolCall[]
|
||||||
|
}
|
||||||
|
/** Delta for streaming responses */
|
||||||
|
delta?: {
|
||||||
|
role?: "assistant"
|
||||||
|
content?: string
|
||||||
|
tool_calls?: AntigravityToolCall[]
|
||||||
|
}
|
||||||
|
/** Finish reason */
|
||||||
|
finish_reason?: "stop" | "tool_calls" | "length" | "content_filter" | null
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tool call in Antigravity response
|
||||||
|
*/
|
||||||
|
export interface AntigravityToolCall {
|
||||||
|
id: string
|
||||||
|
type: "function"
|
||||||
|
function: {
|
||||||
|
name: string
|
||||||
|
arguments: string
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Token usage statistics
|
||||||
|
*/
|
||||||
|
export interface AntigravityUsage {
|
||||||
|
prompt_tokens: number
|
||||||
|
completion_tokens: number
|
||||||
|
total_tokens: number
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Error response from Antigravity API
|
||||||
|
*/
|
||||||
|
export interface AntigravityError {
|
||||||
|
message: string
|
||||||
|
type?: string
|
||||||
|
code?: string | number
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Token exchange result from Google OAuth
|
||||||
|
* Matches antigravityTokenResponse in Go
|
||||||
|
*/
|
||||||
|
export interface AntigravityTokenExchangeResult {
|
||||||
|
access_token: string
|
||||||
|
refresh_token: string
|
||||||
|
expires_in: number
|
||||||
|
token_type: string
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User info from Google userinfo API
|
||||||
|
*/
|
||||||
|
export interface AntigravityUserInfo {
|
||||||
|
email: string
|
||||||
|
name?: string
|
||||||
|
picture?: string
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parsed refresh token parts
|
||||||
|
* Format: refreshToken|projectId|managedProjectId
|
||||||
|
*/
|
||||||
|
export interface AntigravityRefreshParts {
|
||||||
|
refreshToken: string
|
||||||
|
projectId?: string
|
||||||
|
managedProjectId?: string
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user