import { ValidationPipe } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { NestFactory } from '@nestjs/core'; import { FastifyAdapter, NestFastifyApplication } from '@nestjs/platform-fastify'; import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger'; import fastifyCookie, { FastifyCookieOptions } from '@fastify/cookie'; import { AppModule } from './app.module'; async function bootstrap() { const app = await NestFactory.create( AppModule, new FastifyAdapter(), ); const configService = app.get(ConfigService); const corsOrigins = configService.get('CORS_ORIGINS', '*'); app.enableCors({ origin: corsOrigins === '*' ? '*' : corsOrigins.split(','), credentials: true, }); const cookieOptions: FastifyCookieOptions = { parseOptions: { sameSite: 'lax', }, }; await app.register(fastifyCookie as any, cookieOptions); app.useGlobalPipes( new ValidationPipe({ whitelist: true, transform: true, forbidNonWhitelisted: true, }), ); const swaggerConfig = new DocumentBuilder() .setTitle('SaveInMed Backend') .setDescription('API Gateway for users, inventory and payments') .setVersion('1.0') .addBearerAuth({ type: 'http', scheme: 'bearer', bearerFormat: 'JWT', description: 'Access token', }) .build(); const document = SwaggerModule.createDocument(app, swaggerConfig); SwaggerModule.setup('docs', app, document); const port = configService.get('PORT') || 3000; await app.listen(port, '0.0.0.0'); } bootstrap();