txtdot/src/app.ts
2023-09-21 13:51:25 +04:00

75 lines
1.7 KiB
TypeScript

import { ConfigService } from "./config/config.service";
import path from "path";
import Fastify from "fastify";
import fastifyStatic from "@fastify/static";
import fastifyView from "@fastify/view";
import fastifySwagger from "@fastify/swagger";
import fastifySwaggerUi from "@fastify/swagger-ui";
import ejs from "ejs";
import indexRoute from "./routes/browser/index";
import getRoute from "./routes/browser/get";
import proxyRoute from "./routes/browser/proxy";
import parseRoute from "./routes/api/parse";
import rawHtml from "./routes/api/raw-html";
import publicConfig from "./publicConfig";
import errorHandler from "./errors/handler";
class App {
config: ConfigService;
constructor() {
this.config = new ConfigService();
}
async init() {
const fastify = Fastify({
logger: true,
trustProxy: this.config.reverse_proxy,
});
fastify.register(fastifyStatic, {
root: path.join(process.cwd(), "static"),
prefix: "/static/",
});
fastify.register(fastifyView, {
engine: {
ejs: ejs,
},
});
await fastify.register(fastifySwagger, {
swagger: {
info: {
title: "TXTDot API",
description: publicConfig.description,
version: publicConfig.version,
},
}
});
await fastify.register(fastifySwaggerUi, { routePrefix: "/doc" });
fastify.register(indexRoute);
fastify.register(getRoute);
fastify.register(proxyRoute);
fastify.register(parseRoute);
fastify.register(rawHtml);
fastify.setErrorHandler(errorHandler);
fastify.listen(
{ host: this.config.host, port: this.config.port },
(err) => {
err && console.log(err);
}
);
}
}
const app = new App();
app.init();