UNPKG

jsev

Version:

Environment for building Web API's.

59 lines 2.04 kB
"use strict"; var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result["default"] = mod; return result; }; Object.defineProperty(exports, "__esModule", { value: true }); const shortId = __importStar(require("shortid")); const errors_1 = require("../errors"); const utilities_1 = require("../utilities"); function handleError(log, response, error) { // Validation errors if (error instanceof errors_1.ValidationError) { log.warn(error); response.status = 400; response.body = error.message; return; } // Unauthorized errors if (error instanceof errors_1.UnauthorizedError) { log.warn(error); response.status = 401; response.body = error.message; return; } // Default error case log.error(error); if (response.status !== 500) { response.status = 500; response.body = error.message; } } async function handler(ctx, next) { const reqId = utilities_1.getPropertyByNameIgnoreCase(ctx.request.headers, "X-Request-Id") || shortId.generate(); ctx.set("X-Request-Id", reqId); // Using snake_case for req_id as per Koa's recommendation const log = ctx.env.log.child({ req_id: reqId }, true); ctx.log = log; const { request, response } = ctx; log.info(`Request for ${ctx.URL.href}`); log.debug(request.header, "Request headers"); try { await next(); } catch (err) { handleError(log, response, err); } const responseTime = utilities_1.getPropertyByNameIgnoreCase(ctx.response.headers, "X-Response-Time"); const responseTimeStr = responseTime ? ` in ${responseTime}` : ""; log.info({ res: ctx.res }, `Request for ${ctx.URL.href} completed${responseTimeStr}`); } exports.default = () => ({ func: handler, rank: 1, }); //# sourceMappingURL=requestLogger.js.map