SYMBOL INDEX (160 symbols across 20 files) FILE: public/admin/script.js function runAllGeminiKeysTest (line 84) | async function runAllGeminiKeysTest() { function testSingleKey (line 171) | async function testSingleKey(keyId, modelId) { function updateTestProgress (line 213) | function updateTestProgress(completed, total, statusMessage) { function showLoading (line 222) | function showLoading() { function hideLoading (line 226) | function hideLoading() { function updateAddModelFormState (line 231) | function updateAddModelFormState(hasGeminiKeys) { function showError (line 245) | function showError(message, element = errorTextSpan, container = errorMe... function hideError (line 254) | function hideError(container = errorMessageDiv) { function showSuccess (line 261) | function showSuccess(message, element = successTextSpan, container = suc... function hideSuccess (line 271) | function hideSuccess(container = successMessageDiv) { function apiFetch (line 279) | async function apiFetch(endpoint, options = {}, suppressGlobalError = fa... function formatQuota (line 380) | function formatQuota(quota) { function calculateRemainingPercentage (line 385) | function calculateRemainingPercentage(count, quota) { function getProgressColor (line 394) | function getProgressColor(percentage) { function renderGeminiKeys (line 401) | async function renderGeminiKeys(keys) { function renderWorkerKeys (line 870) | function renderWorkerKeys(keys) { function renderModels (line 945) | function renderModels(models) { function loadGeminiKeys (line 1006) | async function loadGeminiKeys() { function loadWorkerKeys (line 1017) | async function loadWorkerKeys() { function loadModels (line 1026) | async function loadModels() { function loadCategoryQuotas (line 1037) | async function loadCategoryQuotas() { function loadGeminiAvailableModels (line 1048) | async function loadGeminiAvailableModels(forceRefresh = false) { function updateModelIdDropdown (line 1086) | function updateModelIdDropdown(models) { function saveSafetySettingsToServer (line 1651) | async function saveSafetySettingsToServer(key, isEnabled) { function checkAuth (line 1981) | async function checkAuth() { function initialLoad (line 2030) | async function initialLoad() { function initDarkMode (line 2087) | function initDarkMode() { function setupAuthRefresh (line 2116) | function setupAuthRefresh() { function switchTab (line 2152) | function switchTab(tabName) { function loadVertexConfig (line 2180) | async function loadVertexConfig() { function renderVertexConfig (line 2194) | function renderVertexConfig(config) { function toggleAuthMode (line 2253) | function toggleAuthMode() { function saveVertexConfig (line 2267) | async function saveVertexConfig(configData) { function testVertexConfig (line 2294) | async function testVertexConfig() { function clearVertexConfig (line 2315) | async function clearVertexConfig() { function setupSettingsModal (line 2416) | function setupSettingsModal() { function loadSystemSettings (line 2453) | async function loadSystemSettings() { function saveSystemSettings (line 2484) | async function saveSystemSettings() { function compareVersions (line 2526) | function compareVersions(v1, v2) { function checkForUpdates (line 2540) | async function checkForUpdates() { function showVersionDisplay (line 2590) | function showVersionDisplay(version) { FILE: public/i18n.js class I18n (line 2) | class I18n { method constructor (line 3) | constructor() { method init (line 361) | init() { method detectLanguage (line 372) | detectLanguage() { method translate (line 384) | translate(key, ...args) { method applyTranslations (line 397) | applyTranslations() { method setupLanguageChangeListener (line 423) | setupLanguageChangeListener() { FILE: public/login.script.js function showLoading (line 9) | function showLoading() { function hideLoading (line 14) | function hideLoading() { function showError (line 19) | function showError(message) { function hideError (line 24) | function hideError() { FILE: src/db/index.js function validateDatabaseFile (line 54) | function validateDatabaseFile(filePath) { function initializeDatabase (line 80) | async function initializeDatabase() { function syncToGitHub (line 170) | async function syncToGitHub() { function initializeDatabaseSchemaInternal (line 236) | function initializeDatabaseSchemaInternal(callback) { function closeDatabase (line 259) | function closeDatabase() { method db (line 284) | get db() { return db; } FILE: src/middleware/adminAuth.js function requireAdminAuth (line 10) | async function requireAdminAuth(req, res, next) { FILE: src/middleware/workerAuth.js function requireWorkerAuth (line 10) | async function requireWorkerAuth(req, res, next) { FILE: src/routes/adminApi.js function parseBody (line 18) | function parseBody(req) { constant BASE_GEMINI_URL (line 92) | const BASE_GEMINI_URL = process.env.GEMINI_BASE_URL || 'https://generati... function shouldMark400Error (line 95) | function shouldMark400Error(responseBody) { FILE: src/routes/apiV1.js method read (line 162) | read() {} method read (line 367) | read() {} method transform (line 434) | transform(chunk, encoding, callback) { method flush (line 606) | flush(callback) { function processGeminiObject (line 689) | function processGeminiObject(geminiObj, stream) { FILE: src/routes/auth.js constant ADMIN_PASSWORD (line 7) | const ADMIN_PASSWORD = process.env.ADMIN_PASSWORD; FILE: src/services/batchTestService.js constant BASE_GEMINI_URL (line 7) | const BASE_GEMINI_URL = process.env.GEMINI_BASE_URL || 'https://generati... function shouldMark400Error (line 10) | function shouldMark400Error(responseBody) { function testSingleKey (line 34) | async function testSingleKey(keyId, modelId) { function runBatchTest (line 153) | async function runBatchTest() { FILE: src/services/configService.js function getSetting (line 111) | async function getSetting(key, defaultValue = null) { function setSetting (line 133) | async function setSetting(key, value, skipSync = false, useTransaction =... function getModelsConfig (line 174) | async function getModelsConfig() { function setModelConfig (line 196) | async function setModelConfig(modelId, category, dailyQuota, individualQ... function deleteModelConfig (line 239) | async function deleteModelConfig(modelId) { function getCategoryQuotas (line 270) | async function getCategoryQuotas() { function setCategoryQuotas (line 286) | async function setCategoryQuotas(proQuota, flashQuota) { function getAllWorkerKeys (line 325) | async function getAllWorkerKeys() { function getWorkerKeySafetySetting (line 340) | async function getWorkerKeySafetySetting(apiKey) { function addWorkerKey (line 353) | async function addWorkerKey(apiKey, description = '') { function updateWorkerKeySafety (line 389) | async function updateWorkerKeySafety(apiKey, safetyEnabled) { function deleteWorkerKey (line 420) | async function deleteWorkerKey(apiKey) { function getGitHubConfig (line 451) | async function getGitHubConfig() { function setGitHubConfig (line 463) | async function setGitHubConfig(repo, token, dbPath = './database.db', en... FILE: src/services/geminiKeyService.js function addGeminiKey (line 14) | async function addGeminiKey(apiKey, name) { function addMultipleGeminiKeys (line 95) | async function addMultipleGeminiKeys(apiKeys) { function deleteGeminiKey (line 223) | async function deleteGeminiKey(keyId) { function getAllGeminiKeysWithUsage (line 310) | async function getAllGeminiKeysWithUsage() { function getErrorKeys (line 397) | async function getErrorKeys() { function clearKeyError (line 412) | async function clearKeyError(keyId) { function deleteAllErrorKeys (line 454) | async function deleteAllErrorKeys() { function clearAllErrorKeys (line 532) | async function clearAllErrorKeys() { function recordKeyError (line 583) | async function recordKeyError(keyId, status) { function getNextAvailableGeminiKey (line 623) | async function getNextAvailableGeminiKey(requestedModelId, updateIndex =... function incrementKeyUsage (line 833) | async function incrementKeyUsage(keyId, modelId, category) { function forceSetQuotaToLimit (line 907) | async function forceSetQuotaToLimit(keyId, category, modelId, counterKey) { function handle429Error (line 1045) | async function handle429Error(keyId, category, modelId, errorDetails) { FILE: src/services/geminiProxyService.js constant BASE_GEMINI_URL (line 12) | const BASE_GEMINI_URL = process.env.GEMINI_BASE_URL || 'https://generati... function shouldMark400Error (line 15) | function shouldMark400Error(errorObject) { function proxyChatCompletions (line 33) | async function proxyChatCompletions(openAIRequestBody, workerApiKey, str... FILE: src/services/schedulerService.js class SchedulerService (line 5) | class SchedulerService { method constructor (line 6) | constructor() { method initialize (line 14) | async initialize() { method updateBatchTestSchedule (line 31) | async updateBatchTestSchedule() { method startBatchTestSchedule (line 50) | async startBatchTestSchedule() { method stopBatchTestSchedule (line 85) | async stopBatchTestSchedule() { method getStatus (line 96) | getStatus() { method triggerBatchTest (line 107) | async triggerBatchTest() { method shutdown (line 127) | async shutdown() { FILE: src/services/vertexProxyService.js constant VERTEX_SUPPORTED_MODELS (line 12) | const VERTEX_SUPPORTED_MODELS = [ constant DEFAULT_REGION (line 18) | const DEFAULT_REGION = 'us-central1'; constant VERTEX_JSON_STRING (line 24) | let VERTEX_JSON_STRING = null; function initializeVertexCredentials (line 33) | async function initializeVertexCredentials() { function createServiceAccountFile (line 114) | async function createServiceAccountFile(vertexJsonString) { function mapOpenaiRoleToVertex (line 145) | function mapOpenaiRoleToVertex(openaiRole) { function parseImageDataUri (line 160) | function parseImageDataUri(uri) { function convertOpenaiPartsToVertexParts (line 193) | async function convertOpenaiPartsToVertexParts(openAIContentParts) { function convertOpenaiMessagesToVertex (line 255) | async function convertOpenaiMessagesToVertex(messages) { function convertOpenaiToolsToVertex (line 355) | function convertOpenaiToolsToVertex(tools) { function convertVertexFinishReasonToOpenai (line 388) | function convertVertexFinishReasonToOpenai(reason) { function convertVertexToolCallToOpenai (line 409) | function convertVertexToolCallToOpenai(functionCall, index = 0) { function createSafetySettings (line 431) | function createSafetySettings(blockLevel = 'OFF') { function proxyVertexChatCompletions (line 455) | async function proxyVertexChatCompletions(openAIRequestBody, workerApiKe... function getVertexSupportedModels (line 976) | function getVertexSupportedModels() { function isVertexEnabled (line 985) | function isVertexEnabled() { function reinitializeWithDatabaseConfig (line 995) | async function reinitializeWithDatabaseConfig() { FILE: src/utils/githubSync.js class GitHubSync (line 6) | class GitHubSync { method constructor (line 7) | constructor(repoName, token, dbPath, encryptKey) { method isConfigured (line 43) | isConfigured() { method isEncryptionEnabled (line 48) | isEncryptionEnabled() { method validateSQLiteHeader (line 53) | validateSQLiteHeader(data) { method isEncryptedData (line 65) | isEncryptedData(data) { method encryptData (line 84) | async encryptData(data) { method decryptData (line 122) | async decryptData(data) { method downloadDatabase (line 158) | async downloadDatabase() { method scheduleSync (line 237) | scheduleSync() { method uploadDatabase (line 268) | async uploadDatabase() { FILE: src/utils/helpers.js function getTodayInLA (line 5) | function getTodayInLA() { function readRequestBody (line 23) | async function readRequestBody(req) { FILE: src/utils/proxyPool.js function initializeProxyPool (line 12) | function initializeProxyPool() { function getNextProxyAgent (line 42) | function getNextProxyAgent() { function getProxyPoolStatus (line 59) | function getProxyPoolStatus() { FILE: src/utils/session.js constant SESSION_COOKIE_NAME (line 3) | const SESSION_COOKIE_NAME = '__session'; constant SESSION_DURATION_SECONDS (line 4) | const SESSION_DURATION_SECONDS = 1 * 60 * 60; constant SESSION_SECRET_KEY (line 7) | const SESSION_SECRET_KEY = crypto.randomBytes(32).toString('hex'); function bufferToBase64Url (line 15) | function bufferToBase64Url(buffer) { function base64UrlToBuffer (line 27) | function base64UrlToBuffer(base64url) { function generateSessionToken (line 38) | async function generateSessionToken() { function verifySessionToken (line 62) | async function verifySessionToken(token) { function getSessionTokenFromCookie (line 108) | function getSessionTokenFromCookie(req) { function setSessionCookie (line 118) | function setSessionCookie(res, token) { function clearSessionCookie (line 133) | function clearSessionCookie(res) { function verifySessionCookie (line 148) | async function verifySessionCookie(req) { FILE: src/utils/transform.js function parseDataUri (line 8) | function parseDataUri(dataUri) { function transformOpenAiToGemini (line 22) | function transformOpenAiToGemini(requestBody, requestedModelId, isSafety... function transformGeminiStreamChunk (line 190) | function transformGeminiStreamChunk(geminiChunk, modelId) { function transformGeminiResponseToOpenAI (line 311) | function transformGeminiResponseToOpenAI(geminiResponse, modelId) {