2020-02-02 11:43:56 +00:00
|
|
|
const constants = require("../constants")
|
|
|
|
const {request} = require("./request")
|
|
|
|
|
|
|
|
class TorSwitcher {
|
|
|
|
constructor() {
|
|
|
|
this.torManager = null
|
|
|
|
}
|
|
|
|
|
|
|
|
setManager(torManager) {
|
|
|
|
this.torManager = torManager
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Request from the URL.
|
|
|
|
* The test function will be called with the response object.
|
|
|
|
* If the test function succeeds, its return value will be returned here.
|
|
|
|
* If the test function fails, its error will be rejected here.
|
|
|
|
* Only include rate limit logic in the test function!
|
|
|
|
* @param {string} url
|
|
|
|
* @param {(res: import("node-fetch").Response) => Promise<T>} test
|
|
|
|
* @returns {Promise<T>}
|
|
|
|
* @template T the return value of the test function
|
|
|
|
*/
|
2020-02-02 13:24:14 +00:00
|
|
|
request(type, url, test) {
|
|
|
|
if (this.torManager && constants.tor.for[type]) {
|
2020-02-02 11:43:56 +00:00
|
|
|
return this.torManager.request(url, test)
|
|
|
|
} else {
|
|
|
|
return request(url).then(res => test(res))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
const switcher = new TorSwitcher()
|
|
|
|
|
2020-02-02 13:24:14 +00:00
|
|
|
if (constants.tor.enabled) {
|
2020-02-02 11:43:56 +00:00
|
|
|
require("./tor").then(torManager => {
|
|
|
|
if (torManager) switcher.setManager(torManager)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = switcher
|