import { NestFactory } from "@nestjs/core"; import { ConfigService } from "@nestjs/config"; import { AppConfig } from "./config/app.config"; import { ValidationPipe } from "@nestjs/common"; import { TraceLogger } from "./common/trace-logger"; import { DocumentBuilder, SwaggerModule } from "@nestjs/swagger"; import { AppModule } from "./app.module"; import { HttpExceptionFilter } from "./filters/http-exception.filter"; import { TraceInterceptor } from "./interceptors/trace.interceptor"; import { LoggingInterceptor } from "./interceptors/logging.interceptor"; import { name as pkgName, version as pkgVersion } from "../package.json"; async function bootstrap() { const logger = new TraceLogger("Bootstrap"); const app = await NestFactory.create(AppModule, { logger: new TraceLogger("Bootstrap", { timestamp: true }), }); app.useGlobalPipes(new ValidationPipe({ transform: true })); app.useGlobalFilters(new HttpExceptionFilter()); app.useGlobalInterceptors(new TraceInterceptor(), new LoggingInterceptor()); const config = app.get>(ConfigService); const port = config.get("PORT"); const nodeEnv = config.get("NODE_ENV"); const swaggerConfig = new DocumentBuilder() .setTitle(pkgName) .setDescription(`${pkgName} API`) .setVersion(pkgVersion) .build(); const document = SwaggerModule.createDocument(app, swaggerConfig); SwaggerModule.setup("api", app, document); await app.listen(port); logger.log( `Application "${pkgName}" v${pkgVersion} running on port ${port} [${nodeEnv}]`, ); logger.log(`Swagger UI available at http://localhost:${port}/api`); logger.log(`MCP endpoint available at http://localhost:${port}/mcp`); } bootstrap();