| 123456789101112131415161718192021222324252627282930313233 |
- 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 <noreply@aitori.jp>'),
- BETA_APPLICATION_EMAIL_TO: z.string().email().default('info@aitori.jp'),
- });
- export function validateEnv(config: Record<string, unknown>) {
- return envSchema.parse(config);
- }
|