import { z } from 'zod'; export const envSchema = z.object({ PORT: z.coerce.number().int().positive().default(3000), APP_BASE_URL: z.string().default('http://localhost:3000'), DATABASE_URL: z.string().default('mysql://root:root@localhost:3306/aitori_backend'), REDIS_URL: z.string().default('redis://localhost:6379'), AI_SIMULATION_BASE_URL: z.string().url().default('http://localhost:8084'), AI_SIMULATION_REFRESH_INTERVAL_MS: z.coerce.number().int().positive().default(10000), AI_SIMULATION_HTTP_TIMEOUT_MS: z.coerce.number().int().positive().default(15000), JWT_SECRET: z.string().default('replace-me'), JWT_EXPIRES_IN: z.string().default('7d'), CORS_ORIGIN: z.string().default('http://127.0.0.1:5173'), NODE_ENV: z.enum(['development', 'test', 'production']).default('development'), STORAGE_DRIVER: z.enum(['gcs']).default('gcs'), GCS_BUCKET: z.string().min(1), GCS_PROJECT_ID: z.string().min(1), GCS_CLIENT_EMAIL: z.string().email(), GCS_PRIVATE_KEY: z.string().min(1), CUSTOMER_DEFAULT_AVATAR_URL: z .string() .url() .default( 'https://storage.googleapis.com/aitori-public/style/sample/066c7ba22ea149268444bc2d919d5b97.png', ), RESEND_API_KEY: z.string().optional(), BETA_APPLICATION_EMAIL_FROM: z.string().default('Aitori Stylist '), BETA_APPLICATION_EMAIL_TO: z.string().email().default('info@aitori.jp'), }); export function validateEnv(config: Record) { return envSchema.parse(config); }