Spaces:
Build error
Build error
| import { z } from 'zod'; | |
| import dotenv from 'dotenv'; | |
| dotenv.config(); | |
| const envSchema = z.object({ | |
| NODE_ENV: z.enum(['development', 'production', 'test']).default('development'), | |
| PORT: z.coerce.number().default(3000), | |
| APP_URL: z.string().url().default('http://localhost:3000'), | |
| SESSION_SECRET: z.string().min(32), | |
| SESSION_TTL_DAYS: z.coerce.number().default(30), | |
| CSRF_SECRET: z.string().min(32), | |
| ARGON2_MEMORY: z.coerce.number().default(65536), | |
| ARGON2_ITERATIONS: z.coerce.number().default(3), | |
| ARGON2_PARALLELISM: z.coerce.number().default(4), | |
| GROQ_API_KEY: z.string().min(1), | |
| GROQ_MODELS: z.string().default('llama-3.1-70b-versatile,llama-3.1-8b-instant,gemma2-9b-it'), | |
| SCRAPER_RATE_LIMIT: z.coerce.number().default(10), | |
| SCRAPER_INTERVAL_MS: z.coerce.number().default(6000), | |
| WHATSAPP_CHANNEL_REGEX: z.string().default('^https://chat\\.whatsapp\\.com/[A-Za-z0-9]{22}$'), | |
| IPAPI_KEY: z.string().optional(), | |
| VPN_DETECTION_ENABLED: z.coerce.boolean().default(true), | |
| CAPTCHA_PROVIDER: z.enum(['hcaptcha', 'turnstile']).default('hcaptcha'), | |
| CAPTCHA_SECRET_KEY: z.string().optional(), | |
| CAPTCHA_SITE_KEY: z.string().optional(), | |
| ADMIN_INIT_USERNAME: z.string().default('admin'), | |
| ADMIN_INIT_PASSWORD: z.string().default('changeme'), | |
| LOG_LEVEL: z.enum(['trace', 'debug', 'info', 'warn', 'error']).default('info'), | |
| LOG_DIR: z.string().default('./data/logs'), | |
| DATA_DIR: z.string().default('./data'), | |
| }); | |
| export type Env = z.infer<typeof envSchema>; | |
| let env: Env; | |
| try { | |
| env = envSchema.parse(process.env); | |
| } catch (error) { | |
| if (error instanceof z.ZodError) { | |
| console.error('❌ Invalid environment variables:'); | |
| error.errors.forEach(e => console.error(` ${e.path.join('.')}: ${e.message}`)); | |
| process.exit(1); | |
| } | |
| throw error; | |
| } | |
| export const config = { | |
| ...env, | |
| groqModels: env.GROQ_MODELS.split(',').map(m => m.trim()), | |
| whatsappChannelRegex: new RegExp(env.WHATSAPP_CHANNEL_REGEX), | |
| sessionTtlMs: env.SESSION_TTL_DAYS * 24 * 60 * 60 * 1000, | |
| }; |