const logger = require("../shared/logger/src/main.js"); const config = require("../shared/config/src/main.js")(); const fs = require("fs"); const axios = require("axios"); const UAParser = require("ua-parser-js"); require("../shared/database/src/create_table.js")(); const fastify = require("fastify")({ logger: config["server"]["log"]["print"] ? logger : false, ...(config["server"]["ssl"]["work"] ? { https: { key: fs.readFileSync(config["server"]["ssl"]["private_key"], "utf8"), cert: fs.readFileSync(config["server"]["ssl"]["cert"], "utf8"), }, } : false), }); const getRateRoute = require("./routes/getRate.js"); const HomeRoute = require("./routes/home.js"); fastify.register(getRateRoute); fastify.register(HomeRoute); fastify.setNotFoundHandler(function (res, reply) { return reply.status(404).send({ status: 404, message: "Page not found!", documentation: "https://kekkai-docs.redume.su/", }); }); fastify.addHook("onResponse", async (request, reply) => { const routePart = request.raw.url.split("/"); const routePartFiltered = routePart .filter((part) => part !== "") .map((part) => `${part}/`); routePartFiltered.unshift("/"); if (!config?.["analytics"]["work"] ? config?.["analytics"]["work"] : false) return; else if (!fastify.printRoutes().includes(routePartFiltered.at(-1))) return; const userAgent = request.headers["user-agent"]; const parser = new UAParser(userAgent); const browser = parser.getBrowser(); const os = parser.getOS(); const formattedOS = os.name && os.version ? `${os.name} ${os.version}` : "N/A"; const formattedBrowser = browser.name && browser.version ? `${browser.name} ${browser.version}` : "N/A"; const event = { domain: config["analytics"]["plausible_domain"], name: request.routeOptions.url ? request.routeOptions.url : "404 - Not Found", url: request.raw.url, props: { method: request.method, statusCode: reply.statusCode, browser: formattedBrowser, os: formattedOS, source: request.headers["referer"] ? request.headers["referer"] : "direct", }, }; try { await axios.post(config["analytics"]["plausible_api"], event, { headers: { Authorization: `Bearer ${config["analytics"]["plausible_token"]}`, "Content-Type": "application/json", "User-Agent": userAgent, }, }); } catch (error) { fastify.log.error("Error sending event to Plausible:", error.message); } }); fastify.listen( { port: 3000, host: config["server"]["host"] ? config["server"]["host"] : "localhost", }, (err) => { if (err) { fastify.log.error(err); process.exit(1); } }, );