first commit

This commit is contained in:
Mathieu BOURBON
2026-04-18 16:24:44 +02:00
commit fbb6138c28
72 changed files with 3509 additions and 0 deletions

44
src/config/env.ts Normal file
View File

@@ -0,0 +1,44 @@
import { z } from 'zod';
/**
* Schéma des variables d'environnement.
* Toute nouvelle variable doit passer par ce schéma → fail-fast au boot.
*/
const envSchema = z.object({
NODE_ENV: z.enum(['development', 'test', 'production']).default('development'),
// DB
DATABASE_PROVIDER: z.enum(['sqlite', 'postgresql']).default('sqlite'),
DATABASE_URL: z.string().min(1),
// App
PORT: z.coerce.number().int().positive().default(3000),
APP_URL: z.string().url().default('http://localhost:3000'),
// Discovery
DISCOVERY_DEFAULT_CIDRS: z.string().default('192.168.1.0/24'),
DISCOVERY_DEFAULT_PORTS: z.string().default('22,80,443,8080'),
DISCOVERY_PING_TIMEOUT: z.coerce.number().int().positive().default(1000),
DISCOVERY_PORT_TIMEOUT: z.coerce.number().int().positive().default(800),
DISCOVERY_CONCURRENCY: z.coerce.number().int().positive().default(32),
DISCOVERY_ENABLE_PING: z.coerce.boolean().default(true),
DISCOVERY_ENABLE_PORT_SCAN: z.coerce.boolean().default(true),
DISCOVERY_ENABLE_ARP: z.coerce.boolean().default(true),
DISCOVERY_ENABLE_MDNS: z.coerce.boolean().default(true),
// Logs
LOG_LEVEL: z.enum(['trace', 'debug', 'info', 'warn', 'error']).default('info'),
});
export type Env = z.infer<typeof envSchema>;
function loadEnv(): Env {
const parsed = envSchema.safeParse(process.env);
if (!parsed.success) {
console.error('❌ Variables d\'environnement invalides :', parsed.error.flatten().fieldErrors);
throw new Error('Configuration invalide');
}
return parsed.data;
}
export const env = loadEnv();