@contentstack/management
Version:
The Content Management API is used to manage the content of your Contentstack account
119 lines (118 loc) • 4.86 kB
JavaScript
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
import _defineProperty from "@babel/runtime/helpers/defineProperty";
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
import axios from 'axios';
import clonedeep from 'lodash/cloneDeep';
import Qs from 'qs';
import { ConcurrencyQueue } from './concurrency-queue';
import { isHost } from './Util';
export default function contentstackHttpClient(options) {
var _uiHostName, _developerHubBaseUrl;
var defaultConfig = {
insecure: false,
retryOnError: true,
logHandler: function logHandler(level, data) {
if (level === 'error' && data) {
var title = [data.name, data.message].filter(function (a) {
return a;
}).join(' - ');
console.error("[error] ".concat(title));
return;
}
console.log("[".concat(level, "] ").concat(data));
},
retryCondition: function retryCondition(error) {
if (error.response && error.response.status === 429) {
return true;
}
return false;
},
headers: {},
basePath: '',
proxy: false,
httpAgent: false,
httpsAgent: false,
adapter: false,
timeout: 30000
};
var config = _objectSpread(_objectSpread({}, defaultConfig), clonedeep(options));
if (config.apiKey) {
config.headers['apiKey'] = config.apiKey;
}
if (config.accessToken) {
config.headers['accessToken'] = config.accessToken;
}
if (config.early_access) {
config.headers['x-header-ea'] = config.early_access;
}
var protocol = config.insecure ? 'http' : 'https';
var hostname = config.defaultHostName;
var port = config.port || 443;
var version = config.version || 'v3';
if (config.region) {
config.host = config.defaultHostName; // set region on priority
}
if (isHost(config.host)) {
var parsed = config.host.split(':');
if (parsed.length === 2) {
var _parsed = _slicedToArray(parsed, 2);
hostname = _parsed[0];
port = _parsed[1];
} else {
hostname = parsed[0];
}
}
if (config.basePath) {
config.basePath = "/".concat(config.basePath.split('/').filter(Boolean).join('/'));
}
var baseURL = config.endpoint || "".concat(protocol, "://").concat(hostname, ":").concat(port).concat(config.basePath, "/{api-version}");
var uiHostName = hostname;
var developerHubBaseUrl = hostname;
if ((_uiHostName = uiHostName) !== null && _uiHostName !== void 0 && _uiHostName.endsWith('io')) {
uiHostName = uiHostName.replace('io', 'com');
}
if (uiHostName) {
uiHostName = uiHostName.replace('api', 'app');
}
var uiBaseUrl = config.endpoint || "".concat(protocol, "://").concat(uiHostName);
developerHubBaseUrl = (_developerHubBaseUrl = developerHubBaseUrl) === null || _developerHubBaseUrl === void 0 ? void 0 : _developerHubBaseUrl.replace('api', 'developerhub-api').replace(/^dev\d+/, 'dev') // Replaces any 'dev1', 'dev2', etc. with 'dev'
.replace('io', 'com').replace(/^http/, '') // Removing `http` if already present
.replace(/^/, 'https://'); // Adds 'https://' at the start if not already there
// set ui host name
var axiosOptions = _objectSpread(_objectSpread({
// Axios
baseURL: baseURL,
uiBaseUrl: uiBaseUrl,
developerHubBaseUrl: developerHubBaseUrl
}, config), {}, {
paramsSerializer: function paramsSerializer(params) {
var query = params.query;
delete params.query;
var qs = Qs.stringify(params, {
arrayFormat: 'brackets'
});
if (query) {
qs = qs + "&query=".concat(encodeURIComponent(JSON.stringify(query)));
}
params.query = query;
return qs;
},
versioningStrategy: 'path'
});
var instance = axios.create(axiosOptions);
instance.httpClientParams = options;
instance.concurrencyQueue = new ConcurrencyQueue({
axios: instance,
config: config
});
instance.interceptors.request.use(function (request) {
if (request.versioningStrategy && request.versioningStrategy === 'path') {
request.baseURL = request.baseURL.replace('{api-version}', version);
} else {
request.baseURL = request.baseURL.replace('/{api-version}', '');
}
return request;
});
return instance;
}