UNPKG

yasui

Version:

Lightweight Express-based framework for REST and web APIs

44 lines 4.97 kB
import kleur from 'kleur'; import { ErrorResource } from './error.resource.js'; import { HttpCode } from '../enums/index.js'; import { LoggerService } from '../services/index.js'; export class AppService { appConfig; logger; constructor(appConfig) { this.appConfig = appConfig; this.logger = new LoggerService(); } auth(req, res, next) { if (req.headers['x-api-key'] === this.appConfig.apiKey) { return next(); } res.sendStatus(HttpCode.FORBIDDEN); this.logger.error(`Access denied (query attempt on ${kleur.italic(`${req.method} ${req.path}`)})`); } logRequest(req, res, next) { const logger = req.logger || this.logger; logger.debug(`request ${kleur.italic(`${req.method} ${req.path}`)}`); next(); } handleNotFound(req, res) { this.logger.error(`Cannot resolve ${req.method} ${req.path}`); res.sendStatus(HttpCode.NOT_FOUND); } handleErrors(err, req, res, next) { const regEx = new RegExp(`${process.cwd()}\\/(?!node_modules\\/)([\\/\\w-_\\.]+\\.js):(\\d*):(\\d*)`); const stack = err.stack || ''; const [, filename, line, column] = stack.match(regEx) || Array(0); const errResource = new ErrorResource(err, req); res.status(errResource.status).json(errResource); const isInternalServerError = errResource.status === HttpCode.INTERNAL_SERVER_ERROR; if (this.appConfig.debug || isInternalServerError) { const logger = req.logger || this.logger; logger.error((isInternalServerError ? 'Unexpected ' : '') + err.constructor.name, req.source + (this.appConfig.debug ? '(debug)' : '')); console.error(kleur.red(`source: ${filename ? `${filename} ${line}:${column}` : 'undefined'}\n` + errResource.toString())); } next(); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvYXBwLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBSXJELE1BQU0sT0FBTyxVQUFVO0lBR1E7SUFGckIsTUFBTSxDQUFnQjtJQUU5QixZQUE2QixTQUFzQjtRQUF0QixjQUFTLEdBQVQsU0FBUyxDQUFhO1FBQ2pELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBSU0sSUFBSSxDQUNULEdBQVksRUFDWixHQUFhLEVBQ2IsSUFBa0I7UUFFbEIsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdkQsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUNoQixDQUFDO1FBQ0QsR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsbUNBQW1DLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyRyxDQUFDO0lBRU0sVUFBVSxDQUNmLEdBQVksRUFDWixHQUFhLEVBQ2IsSUFBa0I7UUFFbEIsTUFBTSxNQUFNLEdBQWtCLEdBQUcsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN4RCxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLElBQUksRUFBRSxDQUFDO0lBQ1QsQ0FBQztJQUdNLGNBQWMsQ0FDbkIsR0FBWSxFQUNaLEdBQWE7UUFFYixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM5RCxHQUFHLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBR00sWUFBWSxDQUNqQixHQUFVLEVBQ1YsR0FBWSxFQUNaLEdBQWEsRUFDYixJQUFrQjtRQUVsQixNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsMkRBQTJELENBQUMsQ0FBQztRQUN0RyxNQUFNLEtBQUssR0FBVyxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUN0QyxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWxFLE1BQU0sV0FBVyxHQUFHLElBQUksYUFBYSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNoRCxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFakQsTUFBTSxxQkFBcUIsR0FBRyxXQUFXLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQztRQUVwRixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxJQUFJLHFCQUFxQixFQUFFLENBQUM7WUFDbEQsTUFBTSxNQUFNLEdBQWtCLEdBQUcsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUN4RCxNQUFNLENBQUMsS0FBSyxDQUNWLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQ25FLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FDckQsQ0FBQztZQUNGLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FDckIsV0FBVyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxJQUFJLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxJQUFJO2dCQUN2RSxXQUFXLENBQUMsUUFBUSxFQUFFLENBQ3ZCLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLEVBQUUsQ0FBQztJQUNULENBQUM7Q0FDRiJ9