109 lines
3.1 KiB
JavaScript
109 lines
3.1 KiB
JavaScript
/**
|
|
* Google Provider - Auth
|
|
*
|
|
* Authentication resolution logic for Google quota providers.
|
|
* @module quota/providers/google/auth
|
|
*/
|
|
|
|
import {
|
|
ANTIGRAVITY_ACCOUNTS_PATHS,
|
|
readJsonFile,
|
|
getAuthEntry,
|
|
normalizeAuthEntry,
|
|
asObject,
|
|
asNonEmptyString,
|
|
toTimestamp
|
|
} from '../../utils/index.js';
|
|
import { readAuthFile } from '../../../opencode/auth.js';
|
|
import { parseGoogleRefreshToken } from './transforms.js';
|
|
|
|
const ANTIGRAVITY_GOOGLE_CLIENT_ID =
|
|
'1071006060591-tmhssin2h21lcre235vtolojh4g403ep.apps.googleusercontent.com';
|
|
const ANTIGRAVITY_GOOGLE_CLIENT_SECRET = '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';
|
|
const GEMINI_GOOGLE_CLIENT_ID =
|
|
'681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com';
|
|
const GEMINI_GOOGLE_CLIENT_SECRET = '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';
|
|
export const DEFAULT_PROJECT_ID = 'rising-fact-p41fc';
|
|
|
|
export const resolveGoogleOAuthClient = (sourceId) => {
|
|
if (sourceId === 'gemini') {
|
|
return {
|
|
clientId: GEMINI_GOOGLE_CLIENT_ID,
|
|
clientSecret: GEMINI_GOOGLE_CLIENT_SECRET
|
|
};
|
|
}
|
|
|
|
return {
|
|
clientId: ANTIGRAVITY_GOOGLE_CLIENT_ID,
|
|
clientSecret: ANTIGRAVITY_GOOGLE_CLIENT_SECRET
|
|
};
|
|
};
|
|
|
|
export const resolveGeminiCliAuth = (auth) => {
|
|
const entry = normalizeAuthEntry(getAuthEntry(auth, ['google', 'google.oauth']));
|
|
const entryObject = asObject(entry);
|
|
if (!entryObject) {
|
|
return null;
|
|
}
|
|
|
|
const oauthObject = asObject(entryObject.oauth) ?? entryObject;
|
|
const accessToken = asNonEmptyString(oauthObject.access) ?? asNonEmptyString(oauthObject.token);
|
|
const refreshParts = parseGoogleRefreshToken(oauthObject.refresh);
|
|
|
|
if (!accessToken && !refreshParts.refreshToken) {
|
|
return null;
|
|
}
|
|
|
|
return {
|
|
sourceId: 'gemini',
|
|
sourceLabel: 'Gemini',
|
|
accessToken,
|
|
refreshToken: refreshParts.refreshToken,
|
|
projectId: refreshParts.projectId ?? refreshParts.managedProjectId,
|
|
expires: toTimestamp(oauthObject.expires)
|
|
};
|
|
};
|
|
|
|
export const resolveAntigravityAuth = () => {
|
|
for (const filePath of ANTIGRAVITY_ACCOUNTS_PATHS) {
|
|
const data = readJsonFile(filePath);
|
|
const accounts = data?.accounts;
|
|
if (Array.isArray(accounts) && accounts.length > 0) {
|
|
const index = typeof data.activeIndex === 'number' ? data.activeIndex : 0;
|
|
const account = accounts[index] ?? accounts[0];
|
|
if (account?.refreshToken) {
|
|
const refreshParts = parseGoogleRefreshToken(account.refreshToken);
|
|
return {
|
|
sourceId: 'antigravity',
|
|
sourceLabel: 'Antigravity',
|
|
refreshToken: refreshParts.refreshToken,
|
|
projectId: asNonEmptyString(account.projectId)
|
|
?? asNonEmptyString(account.managedProjectId)
|
|
?? refreshParts.projectId
|
|
?? refreshParts.managedProjectId,
|
|
email: account.email
|
|
};
|
|
}
|
|
}
|
|
}
|
|
|
|
return null;
|
|
};
|
|
|
|
export const resolveGoogleAuthSources = () => {
|
|
const auth = readAuthFile();
|
|
const sources = [];
|
|
|
|
const geminiAuth = resolveGeminiCliAuth(auth);
|
|
if (geminiAuth) {
|
|
sources.push(geminiAuth);
|
|
}
|
|
|
|
const antigravityAuth = resolveAntigravityAuth();
|
|
if (antigravityAuth) {
|
|
sources.push(antigravityAuth);
|
|
}
|
|
|
|
return sources;
|
|
};
|