|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import * as os from 'os'; |
|
|
import * as fs from 'fs'; |
|
|
import * as path from 'path'; |
|
|
import { randomUUID } from 'crypto'; |
|
|
import { GEMINI_DIR } from './paths.js'; |
|
|
|
|
|
const homeDir = os.homedir() ?? ''; |
|
|
const geminiDir = path.join(homeDir, GEMINI_DIR); |
|
|
const userIdFile = path.join(geminiDir, 'user_id'); |
|
|
|
|
|
function ensureGeminiDirExists() { |
|
|
if (!fs.existsSync(geminiDir)) { |
|
|
fs.mkdirSync(geminiDir, { recursive: true }); |
|
|
} |
|
|
} |
|
|
|
|
|
function readUserIdFromFile(): string | null { |
|
|
if (fs.existsSync(userIdFile)) { |
|
|
const userId = fs.readFileSync(userIdFile, 'utf-8').trim(); |
|
|
return userId || null; |
|
|
} |
|
|
return null; |
|
|
} |
|
|
|
|
|
function writeUserIdToFile(userId: string) { |
|
|
fs.writeFileSync(userIdFile, userId, 'utf-8'); |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export function getPersistentUserId(): string { |
|
|
try { |
|
|
ensureGeminiDirExists(); |
|
|
let userId = readUserIdFromFile(); |
|
|
|
|
|
if (!userId) { |
|
|
userId = randomUUID(); |
|
|
writeUserIdToFile(userId); |
|
|
} |
|
|
|
|
|
return userId; |
|
|
} catch (error) { |
|
|
console.error( |
|
|
'Error accessing persistent user ID file, generating ephemeral ID:', |
|
|
error, |
|
|
); |
|
|
return '123456789'; |
|
|
} |
|
|
} |
|
|
|