const https = require("https"); const http = require("http"); const CacheableLookup = require("cacheable-lookup"); class CacheableDnsHttpAgent { static cacheable = new CacheableLookup(); static httpAgentList = {}; static httpsAgentList = {}; /** * Register cacheable to global agents */ static registerGlobalAgent() { this.cacheable.install(http.globalAgent); this.cacheable.install(https.globalAgent); } static install(agent) { this.cacheable.install(agent); } /** * @var {https.AgentOptions} agentOptions * @return {https.Agent} */ static getHttpsAgent(agentOptions) { let key = JSON.stringify(agentOptions); if (!(key in this.httpsAgentList)) { this.httpsAgentList[key] = new https.Agent(agentOptions); this.cacheable.install(this.httpsAgentList[key]); } return this.httpsAgentList[key]; } /** * @var {http.AgentOptions} agentOptions * @return {https.Agents} */ static getHttpAgent(agentOptions) { let key = JSON.stringify(agentOptions); if (!(key in this.httpAgentList)) { this.httpAgentList[key] = new http.Agent(agentOptions); this.cacheable.install(this.httpAgentList[key]); } return this.httpAgentList[key]; } } module.exports = { CacheableDnsHttpAgent, };