UNPKG

@yhiot/utils

Version:
74 lines (61 loc) 2.68 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = xRequestIdCreator; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _uuid = require("uuid"); var 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. */ function xRequestIdCreator() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var _options$query = options.query, query = _options$query === void 0 ? null : _options$query, _options$header = options.header, header = _options$header === void 0 ? 'X-Request-Id' : _options$header, _options$exposeHeader = options.exposeHeader, exposeHeader = _options$exposeHeader === void 0 ? 'X-Request-Id' : _options$exposeHeader, _options$generator = options.generator, generator = _options$generator === void 0 ? _uuid.v4 : _options$generator; debug('Create a middleware'); return /*#__PURE__*/function () { var _xRequestId = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(ctx, next) { var reqId; return _regenerator.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: reqId = query && ctx.query[query] || header && ctx.get(header) || generator(); debug("reqId=".concat(reqId)); ctx.state.reqId = reqId; if (exposeHeader) { debug("Expose the request id via headers['".concat(exposeHeader, "']")); ctx.set(exposeHeader, reqId); } _context.next = 6; return next(); case 6: case "end": return _context.stop(); } } }, _callee); })); function xRequestId(_x, _x2) { return _xRequestId.apply(this, arguments); } return xRequestId; }(); }