import { ValidationPipe } from '@nestjs/common'; import { NestFactory } from '@nestjs/core'; import { ConfigService } from '@nestjs/config'; import { raw } from 'express'; import { AppModule } from './app.module'; async function bootstrap() { const app = await NestFactory.create(AppModule); const configService = app.get(ConfigService); const port = configService.get('PORT', 4200); const corsOrigin = configService.get('CORS_ORIGIN', '*'); const configuredOrigins = corsOrigin .split(',') .map((origin) => origin.trim()) .filter(Boolean); const isLocalDevelopmentOrigin = (origin: string): boolean => { try { const url = new URL(origin); return ['localhost', '127.0.0.1'].includes(url.hostname); } catch { return false; } }; app.enableCors({ origin: (origin, callback) => { if (!origin || corsOrigin === '*' || configuredOrigins.includes(origin) || isLocalDevelopmentOrigin(origin)) { callback(null, true); return; } callback(new Error(`CORS origin not allowed: ${origin}`)); }, credentials: true, }); app.use('/api/auth/profile/avatar', raw({ type: ['image/webp', 'image/png', 'image/jpeg'], limit: '80kb' })); app.useGlobalPipes( new ValidationPipe({ whitelist: true, transform: true, forbidNonWhitelisted: true, }), ); await app.listen(port); } void bootstrap();