import { existsSync } from 'node:fs'; import path from 'node:path'; import dotenv from 'dotenv'; const projectEnvPath = path.resolve(process.cwd(), '.project-env'); const dotEnvPath = path.resolve(process.cwd(), '.env'); if (existsSync(projectEnvPath)) { dotenv.config({ path: projectEnvPath }); } else if (existsSync(dotEnvPath)) { dotenv.config({ path: dotEnvPath }); } export const env = { nodeEnv: process.env.NODE_ENV ?? 'development', port: Number(process.env.PORT ?? 3000), databaseUrl: process.env.DATABASE_URL, sessionSecret: process.env.SESSION_SECRET ?? 'dev-only-change-me', publicBaseUrl: process.env.ACS_PUBLIC_BASE_URL ?? 'http://localhost:3000', smsProvider: process.env.ACS_SMS_PROVIDER ?? 'dev', smsApiUrl: process.env.ACS_SMS_API_URL, smsApiKey: process.env.ACS_SMS_API_KEY, smsSender: process.env.ACS_SMS_SENDER, smsTimeoutMs: Number(process.env.ACS_SMS_TIMEOUT_MS ?? 10000), mailHost: process.env.ACS_MAIL_HOST, mailPort: Number(process.env.ACS_MAIL_PORT ?? 25), mailFrom: process.env.ACS_MAIL_FROM, mailUsername: process.env.ACS_MAIL_USERNAME, mailPassword: process.env.ACS_MAIL_PASSWORD, mailSmtpAuth: (process.env.ACS_MAIL_SMTP_AUTH ?? '').toLowerCase() === 'true', mailStartTls: (process.env.ACS_MAIL_STARTTLS ?? '').toLowerCase() === 'true', mailTimeoutMs: Number(process.env.ACS_MAIL_TIMEOUT_MS ?? 10000), cookieSecure: (process.env.ACS_COOKIE_SECURE ?? '').toLowerCase() === 'true' || (process.env.ACS_PUBLIC_BASE_URL ?? '').startsWith('https://'), }; export function requireDatabaseUrl(): string { if (!env.databaseUrl) { throw new Error('DATABASE_URL is required. In AI DEV it should be supplied by .project-env.'); } return env.databaseUrl; }