import { Logger, ValidationPipe } from "@nestjs/common"; import { ConfigService } from "@nestjs/config"; import { NestFactory } from "@nestjs/core"; import * as Sentry from "@sentry/nestjs"; import { nodeProfilingIntegration } from "@sentry/profiling-node"; import helmet from "helmet"; import { AppModule } from "./app.module"; import { AllExceptionsFilter } from "./common/filters/http-exception.filter"; async function bootstrap() { const app = await NestFactory.create(AppModule); const configService = app.get(ConfigService); const logger = new Logger("Bootstrap"); const sentryDsn = configService.get("SENTRY_DSN"); if (sentryDsn) { Sentry.init({ dsn: sentryDsn, integrations: [nodeProfilingIntegration()], tracesSampleRate: 1.0, profilesSampleRate: 1.0, sendDefaultPii: false, // RGPD }); } // Sécurité app.use(helmet()); app.enableCors({ origin: configService.get("NODE_ENV") === "production" ? [configService.get("DOMAIN_NAME") as string] : true, credentials: true, }); // Validation Globale app.useGlobalPipes( new ValidationPipe({ whitelist: true, forbidNonWhitelisted: true, transform: true, }), ); // Filtre d'exceptions global app.useGlobalFilters(new AllExceptionsFilter()); const port = configService.get("PORT") || 3000; await app.listen(port); logger.log(`Application is running on: http://localhost:${port}`); } bootstrap();