assistant/electron/load-env.ts

38 lines
1.3 KiB
TypeScript

import fs from 'node:fs';
import path from 'node:path';
export const DEFAULT_API_PORT = 8788;
export const DEFAULT_CDP_PORT = 9333;
export const DEFAULT_CONTROL_PORT = 8797;
export interface EnvPorts {
apiPort: number;
cdpPort: number;
controlPort: number;
}
/** 从项目根目录 .env 读取端口配置(与 Python 后端一致),环境变量优先。 */
export function readPorts(rootDir: string): EnvPorts {
const values: Record<string, string> = {};
const envPath = path.join(rootDir, '.env');
if (fs.existsSync(envPath)) {
for (const line of fs.readFileSync(envPath, 'utf8').split(/\r?\n/)) {
const trimmed = line.trim();
if (!trimmed || trimmed.startsWith('#')) continue;
const eq = trimmed.indexOf('=');
if (eq <= 0) continue;
values[trimmed.slice(0, eq).trim()] = trimmed.slice(eq + 1).trim();
}
}
const pick = (key: string, fallback: number): number => {
const raw = process.env[key] ?? values[key];
const parsed = raw ? parseInt(raw, 10) : NaN;
return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;
};
return {
apiPort: pick('API_PORT', DEFAULT_API_PORT),
cdpPort: pick('CDP_PORT', DEFAULT_CDP_PORT),
controlPort: pick('ELECTRON_CTRL_PORT', DEFAULT_CONTROL_PORT),
};
}