veza/apps/web/src/config/env.ts

70 lines
2.4 KiB
TypeScript
Raw Normal View History

import { z } from 'zod';
// Schéma de validation pour les variables d'environnement
// Aligné avec FRONTEND_INTEGRATION.md
const envSchema = z.object({
2025-12-17 13:07:35 +00:00
VITE_API_URL: z.string().url().default('http://127.0.0.1:8080/api/v1'),
VITE_WS_URL: z.string().url().default('ws://127.0.0.1:8081/ws'),
VITE_STREAM_URL: z.string().url().default('ws://127.0.0.1:8082/stream'),
VITE_UPLOAD_URL: z.string().url().default('http://127.0.0.1:8080/upload'),
VITE_APP_NAME: z.string().default('Veza'),
VITE_DEBUG: z
.string()
2025-12-13 02:34:34 +00:00
.transform((val) => val === 'true' || val === '1')
.default('false'),
VITE_USE_MSW: z
.string()
2025-12-13 02:34:34 +00:00
.transform((val) => val === '1' || val === 'true')
.default('0'),
VITE_FCM_VAPID_KEY: z.string().optional(),
// FIX #20: Configuration Sentry pour error tracking
VITE_SENTRY_DSN: z.string().url().optional(),
});
// Validation et parsing des variables d'environnement
const parseEnv = () => {
try {
return envSchema.parse({
VITE_API_URL: import.meta.env.VITE_API_URL,
VITE_WS_URL: import.meta.env.VITE_WS_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,
VITE_SENTRY_DSN: import.meta.env.VITE_SENTRY_DSN,
});
} catch (error) {
if (error instanceof z.ZodError) {
console.error('❌ Invalid environment variables:', error.errors);
throw new Error(
`Environment variables validation failed: ${error.errors
2025-12-13 02:34:34 +00:00
.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_URL,
WS_URL: validatedEnv.VITE_WS_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,
// FIX #20: Configuration Sentry
SENTRY_DSN: validatedEnv.VITE_SENTRY_DSN,
} as const;
// Type pour les variables d'environnement
export type Env = typeof env;