rwadurian/backend/services/mpc-service/src/main.ts

84 lines
2.4 KiB
TypeScript

/**
* MPC Party Service - Main Entry Point
*
* RWA Durian System - MPC Server Party Service
*/
import { NestFactory } from '@nestjs/core';
import { ValidationPipe, Logger } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';
import { AppModule } from './app.module';
async function bootstrap() {
const logger = new Logger('Bootstrap');
// Create application
const app = await NestFactory.create(AppModule, {
logger: ['error', 'warn', 'log', 'debug', 'verbose'],
});
// Enable graceful shutdown hooks (calls onModuleDestroy on SIGTERM/SIGINT)
// This ensures Kafka consumer disconnects properly, allowing fast rebalance on restart
app.enableShutdownHooks();
// Get config service
const configService = app.get(ConfigService);
const port = parseInt(process.env.APP_PORT || '3006', 10);
const apiPrefix = process.env.API_PREFIX || 'api/v1';
const env = process.env.NODE_ENV || 'development';
// Set global prefix
app.setGlobalPrefix(apiPrefix);
// Enable CORS
app.enableCors({
origin: true,
credentials: true,
});
// Global validation pipe
app.useGlobalPipes(
new ValidationPipe({
whitelist: true,
forbidNonWhitelisted: true,
transform: true,
transformOptions: {
enableImplicitConversion: true,
},
}),
);
// Swagger documentation (only in development)
if (env !== 'production') {
const swaggerConfig = new DocumentBuilder()
.setTitle('MPC Party Service')
.setDescription('RWA Durian System - MPC Server Party Service API')
.setVersion('1.0')
.addBearerAuth()
.addTag('MPC Party', 'MPC party operations')
.addTag('Health', 'Health check endpoints')
.build();
const document = SwaggerModule.createDocument(app, swaggerConfig);
SwaggerModule.setup('api/docs', app, document, {
swaggerOptions: {
persistAuthorization: true,
},
});
logger.log(`Swagger documentation available at /api/docs`);
}
// Start server
await app.listen(port);
logger.log(`MPC Party Service running on port ${port}`);
logger.log(`Environment: ${env}`);
logger.log(`API prefix: ${apiPrefix}`);
}
bootstrap().catch((error) => {
console.error('Failed to start application:', error);
process.exit(1);
});