All files / src/lib proxyAgentPool.ts

43.75% Statements 7/16
25% Branches 1/4
40% Functions 2/5
46.66% Lines 7/15

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46              7x       7x   7x       7x         7x   7x                                       7x  
import { ProxyURLBrand } from "@/brands/proxyURL";
import { ProxyAgent } from "undici";
 
class ProxyAgentPool {
    private proxyURLToAgent: Map<string, ProxyAgent>;
 
    constructor() {
        this.proxyURLToAgent = new Map<string, ProxyAgent>();
    }
 
    get(proxyURL: ProxyURLBrand) {
        const proxyAgent = this.proxyURLToAgent.get(proxyURL);
 
        Iif (proxyAgent) {
            return proxyAgent;
        }
 
        const newProxyAgent = new ProxyAgent({
            uri: proxyURL,
            connections: 20,
            keepAliveTimeout: 172_800_000 /* 2 days */,
        });
        this.proxyURLToAgent.set(proxyURL, newProxyAgent);
 
        return newProxyAgent;
    }
 
    async close(proxyURL: ProxyURLBrand) {
        const proxyAgent = this.proxyURLToAgent.get(proxyURL);
 
        if (!proxyAgent) {
            return;
        }
 
        await proxyAgent.close();
        this.proxyURLToAgent.delete(proxyURL);
    }
 
    async closeAll() {
        await Promise.all([...this.proxyURLToAgent.values()].map((proxyAgent) => proxyAgent.close()));
        this.proxyURLToAgent.clear();
    }
}
 
export const proxyAgentPool = new ProxyAgentPool();