Chat-With-AI / src /config /index.ts
NathMen12's picture
Upload 56 files
ef73937 verified
Raw
History Blame Contribute Delete
2.02 kB
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,
};