2022-05-06 02:01:19 +03:00
|
|
|
const fastify = require('fastify')();
|
2022-05-06 02:12:38 +03:00
|
|
|
const { short } = require('leeks.js');
|
2022-05-06 02:01:19 +03:00
|
|
|
const { join } = require('path');
|
2022-05-06 02:12:38 +03:00
|
|
|
const { readFiles } = require('node-dir');
|
2022-05-06 02:01:19 +03:00
|
|
|
|
|
|
|
module.exports = client => {
|
2022-05-06 02:12:38 +03:00
|
|
|
fastify.addHook('onResponse', (req, res, done) => {
|
|
|
|
done();
|
|
|
|
const status = (res.statusCode >= 500
|
|
|
|
? '&4'
|
|
|
|
: res.statusCode >= 400
|
|
|
|
? '&6'
|
|
|
|
: res.statusCode >= 300
|
|
|
|
? '&3'
|
|
|
|
: res.statusCode >= 200
|
|
|
|
? '&2'
|
|
|
|
: '&f') + res.statusCode;
|
|
|
|
let response_time = res.getResponseTime().toFixed(2);
|
|
|
|
response_time = (response_time >= 20
|
|
|
|
? '&c'
|
|
|
|
: response_time >= 5
|
|
|
|
? '&e'
|
|
|
|
: '&a') + response_time + 'ms';
|
|
|
|
client.log.info.http(short(`${req.ip} ${req.method} ${req.routerPath ?? '*'} &m-+>&r ${status}&b in ${response_time}`));
|
|
|
|
});
|
|
|
|
|
2022-05-06 02:01:19 +03:00
|
|
|
const dir = join(__dirname, '/routes');
|
|
|
|
|
|
|
|
readFiles(dir,
|
|
|
|
{
|
|
|
|
exclude: /^\./,
|
|
|
|
match: /.js$/,
|
|
|
|
},
|
|
|
|
(err, content, next) => next(),
|
|
|
|
(err, files) => {
|
|
|
|
if (err) throw err;
|
|
|
|
|
|
|
|
for (const file of files) {
|
|
|
|
const path = file
|
|
|
|
.substring(0, file.length - 3) // remove `.js`
|
|
|
|
.substring(dir.length) // remove higher directories
|
|
|
|
.replace(/\[(\w+)\]/gi, ':$1') // convert [] to :
|
|
|
|
.replace('/index', '') || '/'; // remove index
|
|
|
|
const route = require(file);
|
|
|
|
|
|
|
|
Object.keys(route).forEach(method => fastify[method](path, {
|
|
|
|
config: { client },
|
|
|
|
...route[method],
|
|
|
|
})); // register route
|
|
|
|
}
|
|
|
|
|
|
|
|
fastify.listen(process.env.HTTP_BIND, (err, addr) => {
|
|
|
|
if (err) client.log.error.http(err);
|
|
|
|
else client.log.success.http(`Listening at ${addr}`);
|
|
|
|
});
|
|
|
|
},
|
|
|
|
);
|
|
|
|
};
|