UNPKG

@yhiot/utils

Version:
40 lines (33 loc) 1.23 kB
import { v4 as uuidV4 } from 'uuid'; const debug = require('debug')('koa:X-Request-Id'); /** * Return middleware that gets an unique request id from a header or * generates a new id. * * @param {Object} [options={}] - Optional configuration. * @param {string} [options.query] - Request query name to get the forwarded request id. * @param {string} [options.header=X-Request-Id] - Request header name to get the forwarded request id. * @param {string} [options.exposeHeader=X-Request-Id] - Response header name. * @param {function} [options.generator=uuidV4] - Id generator function. * @return {function} Koa middleware. */ export default function xRequestIdCreator(options = {}) { const { query = null, header = 'X-Request-Id', exposeHeader = 'X-Request-Id', generator = uuidV4, } = options; debug('Create a middleware'); return async function xRequestId(ctx, next) { const reqId = (query && ctx.query[query]) || (header && ctx.get(header)) || generator(); debug(`reqId=${reqId}`); ctx.state.reqId = reqId; if (exposeHeader) { debug(`Expose the request id via headers['${exposeHeader}']`); ctx.set(exposeHeader, reqId); } await next(); }; }