import log from './services/log' import {NextFunction, Request, Response} from 'express'; import {getUserAgent} from "./services/sessions"; import {controllerV1} from "./controllers/v1"; const express = require('express'); const app = express(); const bodyParser = require('body-parser'); const version: string = 'v' + require('../package.json').version // Convert request objects to JSON app.use(bodyParser.json({ limit: '50mb', verify(req: Request, res: Response, buf: any) { req.body = buf; } })); // Access log app.use(function(req: Request, res: Response, next: NextFunction) { if (req.url != '/health') { // count the request for the log prefix log.incRequests() // build access message let body = ""; if (req.method == 'POST' && req.body) { body += " body: " try { body += JSON.stringify(req.body) } catch(e) { body += req.body } } log.info(`Incoming request => ${req.method} ${req.url}${body}`); } next(); }); // ********************************************************************************************************************* // Routes // Show welcome message app.get("/", ( req: Request, res: Response ) => { res.send({ "msg": "FlareSolverr is ready!", "version": version, "userAgent": getUserAgent() }); }); // Health endpoint. this endpoint is special because it doesn't print traces app.get("/health", ( req: Request, res: Response ) => { res.send({ "status": "ok" }); }); // Controller v1 app.post("/v1", async( req: Request, res: Response ) => { await controllerV1(req, res); }); // ********************************************************************************************************************* // Unknown paths or verbs app.use(function (req : Request, res : Response) { res.status(404) .send({"error": "Unknown resource or HTTP verb"}) }) // Errors app.use(function (err: any, req: Request, res: Response, next: NextFunction) { if (err) { let msg = 'Invalid request: ' + err; msg = msg.replace("\n", "").replace("\r", "") log.error(msg) res.send({"error": msg}) } else { next() } }) module.exports = app;