import { RequestMethod, ValidationPipe } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; async function bootstrap() { const app = await NestFactory.create(AppModule); const configService = app.get(ConfigService); const port = configService.get('PORT', 4500); const corsOrigin = configService.get( 'CORS_ORIGIN', 'http://localhost:5173,http://localhost:5174', ); app.setGlobalPrefix('api', { exclude: [ { path: 'health', method: RequestMethod.GET }, { path: 'health/db', method: RequestMethod.GET }, ], }); app.enableCors({ origin: resolveCorsOrigin(corsOrigin), credentials: true, }); app.useGlobalPipes( new ValidationPipe({ whitelist: true, transform: true, forbidNonWhitelisted: true, }), ); await app.listen(port, '0.0.0.0'); } void bootstrap(); function resolveCorsOrigin(corsOrigin: string) { if (corsOrigin === '*') { return true; } const allowedOrigins = corsOrigin.split(',').map((origin) => origin.trim()); return (origin: string | undefined, callback: (error: Error | null, allow?: boolean) => void) => { if (!origin) { callback(null, true); return; } if (allowedOrigins.includes(origin) || /^http:\/\/(localhost|127\.0\.0\.1):\d+$/.test(origin)) { callback(null, true); return; } callback(new Error(`CORS origin is not allowed: ${origin}`)); }; }