| import { z } from 'zod'; |
| import dotenv from 'dotenv'; |
| import path from 'path'; |
|
|
| dotenv.config({ path: path.join(__dirname, '../../../../.env') }); |
|
|
| const envSchema = z.object({ |
| DATABASE_URL: z.string().url(), |
| REDIS_URL: z.string().url(), |
| ADMIN_API_KEY: z.string().min(32), |
| WHATSAPP_ACCESS_TOKEN: z.string().optional(), |
| WHATSAPP_PHONE_NUMBER_ID: z.string().optional(), |
| OPENAI_API_KEY: z.string().optional(), |
| GOOGLE_AI_API_KEY: z.string().optional(), |
| ANTHROPIC_API_KEY: z.string().optional(), |
| STRIPE_SECRET_KEY: z.string().optional(), |
| STRIPE_WEBHOOK_SECRET: z.string().optional(), |
| R2_ACCOUNT_ID: z.string().optional(), |
| R2_ACCESS_KEY_ID: z.string().optional(), |
| R2_SECRET_ACCESS_KEY: z.string().optional(), |
| R2_BUCKET: z.string().optional(), |
| PORT: z.string().default('3001').transform(Number), |
| NODE_ENV: z.enum(['development', 'production', 'test']).default('development'), |
| ENCRYPTION_SECRET: z.string().min(32, 'ENCRYPTION_SECRET must be at least 32 characters') |
| }); |
|
|
| const result = envSchema.safeParse(process.env); |
|
|
| if (!result.success) { |
| console.error('[CONFIG] ❌ Invalid environment variables:', result.error.format()); |
| throw new Error(`[CONFIG] Missing or invalid environment variables:\n${result.error.message}`); |
| } |
|
|
| export const config = result.data; |
|
|