import { ClassSerializerInterceptor, Logger, ValidationPipe, } from "@nestjs/common"; import { NestFactory, Reflector } from "@nestjs/core"; import { NestExpressApplication } from "@nestjs/platform-express"; import { DocumentBuilder, SwaggerModule } from "@nestjs/swagger"; import * as bodyParser from "body-parser"; import * as cookieParser from "cookie-parser"; import { NextFunction, Request, Response } from "express"; import * as fs from "fs"; import { AppModule } from "./app.module"; import { ConfigService } from "./config/config.service"; import { DATA_DIRECTORY } from "./constants"; async function bootstrap() { const app = await NestFactory.create(AppModule); app.useGlobalPipes(new ValidationPipe({ whitelist: true })); app.useGlobalInterceptors(new ClassSerializerInterceptor(app.get(Reflector))); const config = app.get(ConfigService); app.use((req: Request, res: Response, next: NextFunction) => { const chunkSize = config.get("share.chunkSize"); bodyParser.raw({ type: "application/octet-stream", limit: `${chunkSize}B`, })(req, res, next); }); app.use(cookieParser()); app.set("trust proxy", true); await fs.promises.mkdir(`${DATA_DIRECTORY}/uploads/_temp`, { recursive: true, }); app.setGlobalPrefix("api"); // Setup Swagger in development mode if (process.env.NODE_ENV == "development") { const config = new DocumentBuilder() .setTitle("Pingvin Share API") .setVersion("1.0") .build(); const document = SwaggerModule.createDocument(app, config); SwaggerModule.setup("api/swagger", app, document); } await app.listen(parseInt(process.env.PORT) || 8080); const logger = new Logger("UnhandledAsyncError"); process.on("unhandledRejection", (e) => logger.error(e)); } bootstrap();