mirror of
https://github.com/AutoMaker-Org/automaker.git
synced 2026-01-31 06:42:03 +00:00
Resolves merge conflicts: - apps/server/src/routes/terminal/common.ts: Keep randomBytes import, use @automaker/utils for createLogger - apps/ui/eslint.config.mjs: Use main's explicit globals list with XMLHttpRequest and MediaQueryListEvent additions - apps/ui/src/components/views/terminal-view.tsx: Keep our terminal improvements (killAllSessions, beforeunload, better error handling) - apps/ui/src/config/terminal-themes.ts: Keep our search highlight colors for all themes - apps/ui/src/store/app-store.ts: Keep our terminal settings persistence improvements (merge function) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
78 lines
1.9 KiB
TypeScript
78 lines
1.9 KiB
TypeScript
/**
|
|
* Common utilities and state for setup routes
|
|
*/
|
|
|
|
import { createLogger } from '@automaker/utils';
|
|
import path from 'path';
|
|
import fs from 'fs/promises';
|
|
import { getErrorMessage as getErrorMessageShared, createLogError } from '../common.js';
|
|
|
|
const logger = createLogger('Setup');
|
|
|
|
// Storage for API keys (in-memory cache) - private
|
|
const apiKeys: Record<string, string> = {};
|
|
|
|
/**
|
|
* Get an API key for a provider
|
|
*/
|
|
export function getApiKey(provider: string): string | undefined {
|
|
return apiKeys[provider];
|
|
}
|
|
|
|
/**
|
|
* Set an API key for a provider
|
|
*/
|
|
export function setApiKey(provider: string, key: string): void {
|
|
apiKeys[provider] = key;
|
|
}
|
|
|
|
/**
|
|
* Get all API keys (for read-only access)
|
|
*/
|
|
export function getAllApiKeys(): Record<string, string> {
|
|
return { ...apiKeys };
|
|
}
|
|
|
|
/**
|
|
* Helper to persist API keys to .env file
|
|
*/
|
|
export async function persistApiKeyToEnv(key: string, value: string): Promise<void> {
|
|
const envPath = path.join(process.cwd(), '.env');
|
|
|
|
try {
|
|
let envContent = '';
|
|
try {
|
|
envContent = await fs.readFile(envPath, 'utf-8');
|
|
} catch {
|
|
// .env file doesn't exist, we'll create it
|
|
}
|
|
|
|
// Parse existing env content
|
|
const lines = envContent.split('\n');
|
|
const keyRegex = new RegExp(`^${key}=`);
|
|
let found = false;
|
|
const newLines = lines.map((line) => {
|
|
if (keyRegex.test(line)) {
|
|
found = true;
|
|
return `${key}=${value}`;
|
|
}
|
|
return line;
|
|
});
|
|
|
|
if (!found) {
|
|
// Add the key at the end
|
|
newLines.push(`${key}=${value}`);
|
|
}
|
|
|
|
await fs.writeFile(envPath, newLines.join('\n'));
|
|
logger.info(`[Setup] Persisted ${key} to .env file`);
|
|
} catch (error) {
|
|
logger.error(`[Setup] Failed to persist ${key} to .env:`, error);
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
// Re-export shared utilities
|
|
export { getErrorMessageShared as getErrorMessage };
|
|
export const logError = createLogError(logger);
|