import { config as dotenvConfig } from 'dotenv'; // Load .env.local first (takes precedence), then .env as fallback dotenvConfig({ path: '../../.env.local', override: false }); dotenvConfig({ path: '../../.env', override: false }); function require(name: string): string { const val = process.env[name]; if (!val) throw new Error(`Missing required env var: ${name}`); return val; } function optional(name: string, fallback: string): string { return process.env[name] ?? fallback; } export const config = { PORT: parseInt(optional('PORT', '3001'), 10), NODE_ENV: optional('NODE_ENV', 'development'), DATABASE_PATH: optional('DATABASE_PATH', './data/oo.db'), SESSION_SECRET: require('SESSION_SECRET'), GOOGLE_CLIENT_ID: require('GOOGLE_CLIENT_ID'), GOOGLE_CLIENT_SECRET: require('GOOGLE_CLIENT_SECRET'), TODOIST_CLIENT_ID: require('TODOIST_CLIENT_ID'), TODOIST_CLIENT_SECRET: require('TODOIST_CLIENT_SECRET'), /** Absolute base URL of this API, e.g. http://localhost:3001 */ API_BASE_URL: optional('API_BASE_URL', 'http://localhost:3001'), /** Absolute base URL of the web app, e.g. http://localhost:3000 */ WEB_BASE_URL: optional('WEB_BASE_URL', 'http://localhost:3000'), ML_SERVING_URL: optional('ML_SERVING_URL', 'http://localhost:8000'), LITELLM_URL: optional('LITELLM_URL', 'http://localhost:4000'), VAPID_PUBLIC_KEY: optional('VAPID_PUBLIC_KEY', ''), VAPID_PRIVATE_KEY: optional('VAPID_PRIVATE_KEY', ''), VAPID_SUBJECT: optional('VAPID_SUBJECT', 'mailto:admin@localhost'), };