Files
memegoat/backend/src/main.ts
Mathis HERRIOT 65b7cba6b1 feat: enhance bootstrap with Sentry, security middleware, and global configurations
Integrated Sentry for error monitoring and profiling. Added security improvements using Helmet and CORS. Implemented global validation pipes and exception filters for consistent request handling. Dynamically configured app PORT and logging for startup information.
2026-01-08 15:28:16 +01:00

53 lines
1.4 KiB
TypeScript

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<string>("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<number>("PORT") || 3000;
await app.listen(port);
logger.log(`Application is running on: http://localhost:${port}`);
}
bootstrap();