diff options
| author | Bryan Morgan <[email protected]> | 2025-06-29 16:35:20 -0400 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-06-29 20:35:20 +0000 |
| commit | cdb803b9a431128a851a4da82edaa82494ac6215 (patch) | |
| tree | bb281f50f41ff68cde421f78de622e220eeefb6e /packages/core/src/utils/user_id.ts | |
| parent | dbe63e7234b0ea2577f84aab774ef011d300745f (diff) | |
Added obfuscated google account ID to clearcut log messages (#2593)
Diffstat (limited to 'packages/core/src/utils/user_id.ts')
| -rw-r--r-- | packages/core/src/utils/user_id.ts | 55 |
1 files changed, 39 insertions, 16 deletions
diff --git a/packages/core/src/utils/user_id.ts b/packages/core/src/utils/user_id.ts index 5db080a4..4f17bf96 100644 --- a/packages/core/src/utils/user_id.ts +++ b/packages/core/src/utils/user_id.ts @@ -12,7 +12,7 @@ import { GEMINI_DIR } from './paths.js'; const homeDir = os.homedir() ?? ''; const geminiDir = path.join(homeDir, GEMINI_DIR); -const userIdFile = path.join(geminiDir, 'user_id'); +const installationIdFile = path.join(geminiDir, 'installation_id'); function ensureGeminiDirExists() { if (!fs.existsSync(geminiDir)) { @@ -20,39 +20,62 @@ function ensureGeminiDirExists() { } } -function readUserIdFromFile(): string | null { - if (fs.existsSync(userIdFile)) { - const userId = fs.readFileSync(userIdFile, 'utf-8').trim(); - return userId || null; +function readInstallationIdFromFile(): string | null { + if (fs.existsSync(installationIdFile)) { + const installationid = fs.readFileSync(installationIdFile, 'utf-8').trim(); + return installationid || null; } return null; } -function writeUserIdToFile(userId: string) { - fs.writeFileSync(userIdFile, userId, 'utf-8'); +function writeInstallationIdToFile(installationId: string) { + fs.writeFileSync(installationIdFile, installationId, 'utf-8'); } /** - * Retrieves the persistent user ID from a file, creating it if it doesn't exist. - * This ID is used for unique user tracking. + * Retrieves the installation ID from a file, creating it if it doesn't exist. + * This ID is used for unique user installation tracking. * @returns A UUID string for the user. */ -export function getPersistentUserId(): string { +export function getInstallationId(): string { try { ensureGeminiDirExists(); - let userId = readUserIdFromFile(); + let installationId = readInstallationIdFromFile(); - if (!userId) { - userId = randomUUID(); - writeUserIdToFile(userId); + if (!installationId) { + installationId = randomUUID(); + writeInstallationIdToFile(installationId); } - return userId; + return installationId; } catch (error) { console.error( - 'Error accessing persistent user ID file, generating ephemeral ID:', + 'Error accessing installation ID file, generating ephemeral ID:', error, ); return '123456789'; } } + +/** + * Retrieves the obfuscated Google Account ID for the currently authenticated user. + * When OAuth is available, returns the user's cached Google Account ID. Otherwise, returns the installation ID. + * @returns A string ID for the user (Google Account ID if available, otherwise installation ID). + */ +export function getObfuscatedGoogleAccountId(): string { + // Try to get cached Google Account ID first + try { + // Dynamically import to avoid circular dependencies + // eslint-disable-next-line @typescript-eslint/no-require-imports, no-restricted-syntax + const { getCachedGoogleAccountId } = require('../code_assist/oauth2.js'); + const googleAccountId = getCachedGoogleAccountId(); + if (googleAccountId) { + return googleAccountId; + } + } catch (_error) { + // If there's any error accessing Google Account ID, fall back to installation ID + } + + // Fall back to installation ID when no Google Account ID is cached or on error + return getInstallationId(); +} |
