| |
| |
| |
| |
|
|
| import * as dotenv from 'dotenv' |
|
|
| |
| dotenv.config() |
|
|
| |
| |
| |
| export const appConfig = { |
| |
| port: parseInt(process.env.PORT || '3000', 10), |
| host: process.env.HOST || '0.0.0.0', |
| nodeEnv: process.env.NODE_ENV || 'development', |
|
|
| |
| cors: { |
| origin: process.env.CORS_ORIGIN || '*', |
| credentials: true |
| }, |
|
|
| |
| timeout: { |
| request: parseInt(process.env.REQUEST_TIMEOUT || '600000', 10), |
| job: parseInt(process.env.JOB_TIMEOUT || '600000', 10) |
| }, |
|
|
| |
| logging: { |
| level: process.env.LOG_LEVEL || 'info', |
| pretty: process.env.NODE_ENV === 'development' |
| }, |
|
|
| |
| ai: { |
| temperature: parseFloat(process.env.AI_TEMPERATURE || '0.7'), |
| maxTokens: parseInt(process.env.AI_MAX_TOKENS || '12000', 10), |
| thinkingTokens: parseInt(process.env.AI_THINKING_TOKENS || '20000', 10) |
| }, |
|
|
| |
| manim: { |
| quality: { |
| low: '-ql', |
| medium: '-qm', |
| high: '-qh' |
| }, |
| timeout: parseInt(process.env.MANIM_TIMEOUT || '600000', 10) |
| }, |
|
|
| |
| paths: { |
| videos: process.env.VIDEO_OUTPUT_DIR || 'public/videos', |
| temp: process.env.TEMP_DIR || 'temp' |
| } |
| } as const |
|
|
| export function validateConfig(): void { |
| const routeKeys = process.env.MANIMCAT_ROUTE_KEYS?.trim() |
| const routeApiUrls = process.env.MANIMCAT_ROUTE_API_URLS?.trim() |
| const routeApiKeys = process.env.MANIMCAT_ROUTE_API_KEYS?.trim() |
| const routeModels = process.env.MANIMCAT_ROUTE_MODELS?.trim() |
| const hasRouteBasedUpstream = Boolean(routeKeys && routeApiUrls && routeApiKeys && routeModels) |
|
|
| if (!hasRouteBasedUpstream) { |
| console.warn( |
| '[Config] No MANIMCAT_ROUTE_* upstream mapping found. AI requests need customApiConfig per request.' |
| ) |
| } |
| } |
|
|
| export function isDevelopment(): boolean { |
| return appConfig.nodeEnv === 'development' |
| } |
|
|
| export function isProduction(): boolean { |
| return appConfig.nodeEnv === 'production' |
| } |
|
|
| export function printConfig(): void { |
| console.log('📋 Application Configuration:') |
| console.log(` - Environment: ${appConfig.nodeEnv}`) |
| console.log(` - Port: ${appConfig.port}`) |
| console.log(` - Host: ${appConfig.host}`) |
| console.log(` - CORS Origin: ${appConfig.cors.origin}`) |
| console.log(` - LOG_LEVEL: ${process.env.LOG_LEVEL || 'info'}`) |
| console.log(` - PROD_SUMMARY_LOG_ONLY: ${process.env.PROD_SUMMARY_LOG_ONLY ?? '(unset, defaults to true in production)'}`) |
| console.log(` - ENABLE_HISTORY_DB: ${process.env.ENABLE_HISTORY_DB || 'false'}`) |
| console.log(` - ENABLE_STUDIO_DB: ${process.env.ENABLE_STUDIO_DB || 'false'}`) |
| }
|
|
|