UNPKG

@contentstack/management

Version:

The Content Management API is used to manage the content of your Contentstack account

119 lines (118 loc) 4.86 kB
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; }