import { z } from 'zod'; // Schéma de validation pour les variables d'environnement const envSchema = z.object({ VITE_API_BASE_URL: z.string().url().default('http://localhost:8080/api/v1'), VITE_WS_BASE_URL: z.string().url().default('ws://localhost:8081'), VITE_STREAM_URL: z.string().url().default('http://localhost:8082'), VITE_UPLOAD_URL: z.string().url().default('http://localhost:8080/upload'), VITE_APP_NAME: z.string().default('Veza'), VITE_DEBUG: z .string() .transform(val => val === 'true' || val === '1') .default('false'), VITE_USE_MSW: z .string() .transform(val => val === '1' || val === 'true') .default('0'), VITE_FCM_VAPID_KEY: z.string().optional(), }); // Validation et parsing des variables d'environnement const parseEnv = () => { try { return envSchema.parse({ VITE_API_BASE_URL: import.meta.env.VITE_API_BASE_URL, VITE_WS_BASE_URL: import.meta.env.VITE_WS_BASE_URL, VITE_STREAM_URL: import.meta.env.VITE_STREAM_URL, VITE_UPLOAD_URL: import.meta.env.VITE_UPLOAD_URL, VITE_APP_NAME: import.meta.env.VITE_APP_NAME, VITE_DEBUG: import.meta.env.VITE_DEBUG, VITE_USE_MSW: import.meta.env.VITE_USE_MSW, VITE_FCM_VAPID_KEY: import.meta.env.VITE_FCM_VAPID_KEY, }); } catch (error) { if (error instanceof z.ZodError) { console.error('❌ Invalid environment variables:', error.errors); throw new Error( `Environment variables validation failed: ${error.errors .map(e => `${e.path.join('.')}: ${e.message}`) .join(', ')}` ); } throw error; } }; // Variables d'environnement validées const validatedEnv = parseEnv(); // Export de l'objet env avec types export const env = { API_URL: validatedEnv.VITE_API_BASE_URL, WS_URL: validatedEnv.VITE_WS_BASE_URL, STREAM_URL: validatedEnv.VITE_STREAM_URL, UPLOAD_URL: validatedEnv.VITE_UPLOAD_URL, APP_NAME: validatedEnv.VITE_APP_NAME, DEBUG: validatedEnv.VITE_DEBUG, USE_MSW: validatedEnv.VITE_USE_MSW, FCM_VAPID_KEY: validatedEnv.VITE_FCM_VAPID_KEY, } as const; // Type pour les variables d'environnement export type Env = typeof env;