@cmsgov/request-version
Version:
CMS QPP specific express middleware to get version from Accept header and put it on the request object
50 lines (37 loc) • 1.26 kB
JavaScript
const versionRegEx = /application\/vnd\.qpp\.cms\.gov\.v(\d+)\+json/;
class requestVersion {
static setVersion (options) {
const defaultVersion = options ? options.defaultVersion : null;
const supportedVersions = options
? (Array.isArray(options.supportedVersions) ? options.supportedVersions : [options.supportedVersions])
: null;
return (req, res, next) => {
const acceptHeader = this.removeWhitespaces(req.headers.accept);
if (!versionRegEx.test(acceptHeader)) {
return this.setDefaultVersion(defaultVersion, req, next);
}
const version = acceptHeader.match(versionRegEx)[1];
if (supportedVersions) {
if (!supportedVersions.some(v => parseInt(v) === parseInt(version))) {
return this.setDefaultVersion(defaultVersion, req, next);
}
}
req.apiVersion = version;
return next();
};
}
static removeWhitespaces (str) {
if (typeof str === 'string') {
return str.replace(/\s/g, '');
}
return '';
}
static setDefaultVersion (defaultVersion, req, next) {
req.apiVersion = undefined;
if (defaultVersion) {
req.apiVersion = defaultVersion;
}
return next();
}
}
module.exports = requestVersion;