@tiktikimelbo7/extensions
Version:
Nodejs library that provides high-level APIs for obtaining information on various entertainment media such as books, movies, comic books, anime, manga, and so on.
67 lines • 2.91 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Proxy = void 0;
const axios_1 = __importDefault(require("axios"));
class Proxy {
/**
*
* @param proxyConfig The proxy config (optional)
* @param adapter The axios adapter (optional)
*/
constructor(proxyConfig, adapter) {
this.proxyConfig = proxyConfig;
this.adapter = adapter;
this.validUrl = /^https?:\/\/.+/;
this.rotateProxy = (proxy) => {
var _a;
setInterval(() => {
const url = proxy.urls.shift();
if (url)
proxy.urls.push(url);
this.setProxy({ url: proxy.urls[0], key: proxy.key });
}, (_a = proxy === null || proxy === void 0 ? void 0 : proxy.rotateInterval) !== null && _a !== void 0 ? _a : 5000);
};
this.toMap = (arr) => arr.map((v, i) => [i, v]);
this.client = axios_1.default.create();
if (proxyConfig)
this.setProxy(proxyConfig);
if (adapter)
this.setAxiosAdapter(adapter);
}
/**
* Set or Change the proxy config
*/
setProxy(proxyConfig) {
if (!(proxyConfig === null || proxyConfig === void 0 ? void 0 : proxyConfig.url))
return;
if (typeof (proxyConfig === null || proxyConfig === void 0 ? void 0 : proxyConfig.url) === 'string')
if (!this.validUrl.test(proxyConfig.url))
throw new Error('Proxy URL is invalid!');
if (Array.isArray(proxyConfig === null || proxyConfig === void 0 ? void 0 : proxyConfig.url)) {
for (const [i, url] of this.toMap(proxyConfig.url))
if (!this.validUrl.test(url))
throw new Error(`Proxy URL at index ${i} is invalid!`);
this.rotateProxy(Object.assign(Object.assign({}, proxyConfig), { urls: proxyConfig.url }));
}
this.client.interceptors.request.use(config => {
var _a;
if (proxyConfig === null || proxyConfig === void 0 ? void 0 : proxyConfig.url) {
config.headers = Object.assign(Object.assign({}, config.headers), { 'x-api-key': (_a = proxyConfig === null || proxyConfig === void 0 ? void 0 : proxyConfig.key) !== null && _a !== void 0 ? _a : '' });
config.url = `${proxyConfig.url}/${(config === null || config === void 0 ? void 0 : config.url) ? config === null || config === void 0 ? void 0 : config.url : ''}`;
}
return config;
});
}
/**
* Set or Change the axios adapter
*/
setAxiosAdapter(adapter) {
this.client.defaults.adapter = adapter;
}
}
exports.Proxy = Proxy;
exports.default = Proxy;
//# sourceMappingURL=proxy.js.map