@serenity-js/rest
Version:
Serenity/JS Screenplay Pattern library for interacting with REST and other HTTP-based services, supporting comprehensive API testing and blended testing scenarios
40 lines • 1.44 kB
JavaScript
import { Duration } from '@serenity-js/core';
import axios, { Axios } from 'axios';
import { axiosProxyOverridesFor } from './proxy.js';
/**
* Creates an Axios instance with desired configuration and proxy support.
*
* @param axiosInstanceOrConfig
*/
export function createAxios(axiosInstanceOrConfig = {}) {
const axiosInstanceGiven = isAxiosInstance(axiosInstanceOrConfig);
const axiosInstance = axiosInstanceGiven
? axiosInstanceOrConfig
: axios.create({
timeout: Duration.ofSeconds(10).inMilliseconds(),
...omit(axiosInstanceOrConfig, 'proxy'),
});
const proxyConfig = axiosInstanceGiven
? axiosInstanceOrConfig.defaults.proxy
: axiosInstanceOrConfig.proxy;
const proxyOverrides = axiosProxyOverridesFor({
...axiosInstance.defaults,
proxy: proxyConfig || undefined,
});
return withOverrides(axiosInstance, proxyOverrides);
}
function isAxiosInstance(axiosInstanceOrConfig) {
return axiosInstanceOrConfig
&& (axiosInstanceOrConfig instanceof Axios || axiosInstanceOrConfig.defaults);
}
function withOverrides(axiosInstance, overrides) {
for (const [key, override] of Object.entries(overrides)) {
axiosInstance.defaults[key] = override;
}
return axiosInstance;
}
function omit(record, key) {
const { [key]: omitted_, ...rest } = record;
return rest;
}
//# sourceMappingURL=createAxios.js.map