@creditkarma/consul-client
Version:
A client for Hashicorp Consul written in TypeScript
101 lines • 3.43 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.headersForRequest = exports.deepEqual = exports.deepMerge = exports.requestToPath = exports.cleanQueryParams = exports.splitQueryMap = exports.ensureProtocol = exports.removeLeadingTrailingSlash = exports.decodeBase64 = exports.defaultAddresses = void 0;
const url = require("url");
const lodash_1 = require("lodash");
const constants_1 = require("./constants");
function defaultAddresses() {
const envAddress = process.env[constants_1.CONSUL_ADDRESS];
if (envAddress !== undefined) {
return envAddress
.split(',')
.map((next) => {
return next.trim();
})
.filter((next) => {
return next !== '';
});
}
else {
return [constants_1.DEFAULT_HOST];
}
}
exports.defaultAddresses = defaultAddresses;
function decodeBase64(val) {
return JSON.parse(Buffer.from(val, 'base64').toString('utf-8'));
}
exports.decodeBase64 = decodeBase64;
function removeLeadingTrailingSlash(str) {
const tmp = str.charAt(0) === '/' ? str.substring(1, str.length) : str;
if (tmp.charAt(tmp.length - 1) === '/') {
return tmp.substring(0, tmp.length - 1);
}
else {
return tmp;
}
}
exports.removeLeadingTrailingSlash = removeLeadingTrailingSlash;
function ensureProtocol(urlVal) {
const protocols = ['http:', 'https:'];
const parsedUrl = url.parse(urlVal);
const hasProto = protocols.indexOf(parsedUrl.protocol || '') >= 0;
return hasProto ? urlVal : 'http://' + urlVal;
}
exports.ensureProtocol = ensureProtocol;
function splitQueryMap(raw) {
const result = {};
const parts = raw.split('?').filter((next) => next.trim() !== '');
if (parts.length > 1) {
const query = parts[1];
const pairs = query.split('&');
pairs.forEach((next) => {
const [key, value] = next.split('=');
result[key] = value;
});
}
return result;
}
exports.splitQueryMap = splitQueryMap;
function cleanQueryParams(raw) {
const cleaned = {};
raw.dc = raw.dc || process.env[constants_1.CONSUL_DC];
for (const key in raw) {
if (raw.hasOwnProperty(key)) {
const value = raw[key];
if (value !== undefined && value !== null && value !== 'false') {
cleaned[key] = value;
}
}
}
return cleaned;
}
exports.cleanQueryParams = cleanQueryParams;
function requestToPath(req) {
const tmp = req.subsection !== undefined
? `${req.apiVersion}/${req.section}/${req.subsection}/${req.key.path}`
: `${req.apiVersion}/${req.section}/${req.key.path}`;
return removeLeadingTrailingSlash(tmp);
}
exports.requestToPath = requestToPath;
function deepMerge(base, update) {
return (0, lodash_1.merge)({}, base, update);
}
exports.deepMerge = deepMerge;
function deepEqual(obj1, obj2) {
return (0, lodash_1.isEqual)(obj1, obj2);
}
exports.deepEqual = deepEqual;
function headersForRequest(req) {
const headers = {
host: constants_1.CONSUL_HOST_NAME,
};
if (req.index !== undefined) {
headers[constants_1.CONSUL_INDEX_HEADER] = (req.index + 1).toString();
}
if (req.token) {
headers[constants_1.CONSUL_TOKEN_HEADER] = req.token;
}
return headers;
}
exports.headersForRequest = headersForRequest;
//# sourceMappingURL=utils.js.map