Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | import { AppModule } from "@/app.module";
import fastifyCookie from "@fastify/cookie";
import fastifyHelmet from "@fastify/helmet";
import { Logger, 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 { name } from "../package.json";
import { AxiosInterceptor } from "./common/interceptors/Axios.interceptor";
import { CommandInterceptor } from "./common/interceptors/Command.interceptor";
import { ShardingManager, TopGGAutoPoster } from "./lib";
import { Config } from "./modules/shared/config/types";
async function bootstrap() {
const logger = new Logger("Main");
const app = await NestFactory.create<NestFastifyApplication>(AppModule, new FastifyAdapter());
const configService = app.get<ConfigService>(ConfigService);
const Port = configService.get<number>("PORT");
const fastifyInstance = app.getHttpAdapter().getInstance();
fastifyInstance
.addHook("onRequest", async (req, res) => {
req.socket["encrypted"] = process.env.NODE_ENV === "production";
})
.decorateReply("setHeader", function (name: string, value: unknown) {
this.header(name, value);
})
.decorateReply("end", function () {
this.send("");
});
app.register(fastifyHelmet);
app.register(fastifyCookie, {
secret: configService.getOrThrow<Config["API"]>("API").CookieSecret,
hook: "onRequest",
});
app.useGlobalInterceptors(new CommandInterceptor(), new AxiosInterceptor());
app.setGlobalPrefix("api");
app.useGlobalPipes(
new ValidationPipe({
always: true,
forbidNonWhitelisted: true,
transform: true,
}),
);
const ShardManager = new ShardingManager(configService);
const TopGGPoster = new TopGGAutoPoster(configService.getOrThrow<Config["TopGGToken"]>("TopGGToken"), ShardManager);
const SwaggerConfig = new DocumentBuilder()
.setTitle("N-D-B API Docs")
.setDescription("View and test all routes and functions of N-D-B API")
.setVersion("1.0")
.build();
const SwaggerDocument = SwaggerModule.createDocument(app, SwaggerConfig);
SwaggerModule.setup("docs", app, SwaggerDocument);
try {
await app.listen(Port, "0.0.0.0");
await ShardManager.init();
await TopGGPoster.init();
logger.log(`${name} Running on Port: ${Port} in ${process.env.ENVIRONMENT} mode | URL: ${await app.getUrl()}`);
} catch (error) {
logger.error("An error occurred when starting: ", (error as Error).message);
}
}
bootstrap();
|