@yhiot/utils
Version:
74 lines (61 loc) • 2.68 kB
JavaScript
;
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;
}();
}