2024-08-14 17:14:59 +03:00
|
|
|
const logger = require('../shared/logger/src/main.js');
|
|
|
|
const config = require('../shared/config/src/main.js')();
|
2024-10-15 17:40:37 +03:00
|
|
|
|
2024-08-02 21:51:54 +03:00
|
|
|
const fs = require('fs');
|
2024-10-15 17:40:37 +03:00
|
|
|
const axios= require("axios");
|
|
|
|
const UAParser = require('ua-parser-js');
|
2024-08-02 21:51:54 +03:00
|
|
|
|
2024-10-08 20:15:20 +03:00
|
|
|
require('../shared/database/src/create_table.js')();
|
|
|
|
|
2024-08-02 21:51:54 +03:00
|
|
|
const fastify = require('fastify')({
|
2024-08-11 19:46:07 +03:00
|
|
|
logger: config['server']['log']['print'] ? logger : false,
|
2024-08-17 16:40:20 +03:00
|
|
|
...(config['server']['ssl']['work']
|
|
|
|
? {
|
|
|
|
https: {
|
|
|
|
key: fs.readFileSync(
|
|
|
|
config['server']['ssl']['private_key'],
|
|
|
|
'utf8',
|
|
|
|
),
|
|
|
|
cert: fs.readFileSync(
|
|
|
|
config['server']['ssl']['cert'],
|
|
|
|
'utf8',
|
|
|
|
),
|
|
|
|
},
|
|
|
|
}
|
|
|
|
: false),
|
2024-08-02 21:51:54 +03:00
|
|
|
});
|
|
|
|
|
2024-10-02 22:35:49 +03:00
|
|
|
const getRateRoute = require('./routes/getRate.js');
|
2024-10-07 17:36:46 +03:00
|
|
|
const configurationRoutes = require('./routes/configuration.js');
|
2024-10-12 21:13:41 +03:00
|
|
|
const HomeRoute = require('./routes/home.js');
|
2024-07-30 18:06:21 +03:00
|
|
|
|
2024-10-02 22:35:49 +03:00
|
|
|
fastify.register(getRateRoute);
|
2024-10-07 17:36:46 +03:00
|
|
|
fastify.register(configurationRoutes);
|
2024-10-12 21:13:41 +03:00
|
|
|
fastify.register(HomeRoute);
|
2024-08-02 15:42:35 +03:00
|
|
|
|
2024-10-15 17:40:37 +03:00
|
|
|
fastify.addHook('onResponse', async (request, reply) => {
|
2024-10-17 20:57:21 +03:00
|
|
|
if (!config?.['analytics']['work'] ? config?.['analytics']['work'] : false) return;
|
2024-10-15 17:40:37 +03:00
|
|
|
|
|
|
|
const userAgent = request.headers['user-agent'];
|
|
|
|
const parser = new UAParser(userAgent);
|
|
|
|
const browser = parser.getBrowser();
|
|
|
|
const os = parser.getOS();
|
|
|
|
|
|
|
|
const event = {
|
|
|
|
domain: config['analytics']['plausible_domain'],
|
2024-10-16 23:19:20 +03:00
|
|
|
name: request.routeOptions.url ? request.routeOptions.url : '404 - Not Found',
|
2024-10-15 17:40:37 +03:00
|
|
|
url: request.raw.url,
|
|
|
|
props: {
|
|
|
|
method: request.method,
|
|
|
|
statusCode: reply.statusCode,
|
|
|
|
browser: `${browser.name} ${browser.version}`,
|
|
|
|
os: `${os.name} ${os.version}`,
|
2024-10-16 23:19:20 +03:00
|
|
|
source: request.headers['referer'] ? request.headers['referer'] : 'direct',
|
2024-10-15 17:40:37 +03:00
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
try {
|
2024-10-16 23:19:20 +03:00
|
|
|
await axios.post(config['analytics']['plausible_api'], event, {
|
|
|
|
headers: {
|
|
|
|
Authorization: `Bearer ${config['analytics']['plausible_token']}`,
|
|
|
|
'Content-Type': 'application/json',
|
|
|
|
'User-Agent': userAgent,
|
2024-10-15 17:40:37 +03:00
|
|
|
},
|
|
|
|
});
|
|
|
|
} catch (error) {
|
|
|
|
fastify.log.error('Error sending event to Plausible:', error.message);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2024-08-17 16:40:20 +03:00
|
|
|
fastify.listen(
|
|
|
|
{
|
2024-08-02 21:51:54 +03:00
|
|
|
port: 3000,
|
|
|
|
host: config['server']['host'] ? config['server']['host'] : 'localhost',
|
2024-08-17 16:40:20 +03:00
|
|
|
},
|
|
|
|
(err) => {
|
|
|
|
if (err) {
|
|
|
|
fastify.log.error(err);
|
|
|
|
process.exit(1);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
);
|