nsite-ts/src/proxy.ts
2024-10-01 12:56:54 -05:00

58 lines
1.1 KiB
TypeScript

import { ProxyAgent } from "proxy-agent";
import { PacProxyAgent } from "pac-proxy-agent";
import { I2P_PROXY, PAC_PROXY, TOR_PROXY } from "./env.js";
function buildPacURI() {
const statements: string[] = [];
if (I2P_PROXY) {
statements.push(
`
if (shExpMatch(host, "*.i2p"))
{
return "SOCKS5 ${I2P_PROXY}";
}
`.trim(),
);
}
if (TOR_PROXY) {
statements.push(
`
if (shExpMatch(host, "*.onion"))
{
return "SOCKS5 ${TOR_PROXY}";
}
`.trim(),
);
}
statements.push('return "DIRECT";');
const PACFile = `
// SPDX-License-Identifier: CC0-1.0
function FindProxyForURL(url, host)
{
${statements.join("\n")}
}
`.trim();
return "pac+data:application/x-ns-proxy-autoconfig;base64," + btoa(PACFile);
}
function buildProxy() {
if (PAC_PROXY) {
console.log(`Using PAC proxy file`);
return new PacProxyAgent(PAC_PROXY);
} else if (TOR_PROXY || I2P_PROXY) {
if (TOR_PROXY) console.log("Tor connection enabled");
if (I2P_PROXY) console.log("I2P connection enabled");
return new PacProxyAgent(buildPacURI());
} else return new ProxyAgent({ keepAlive: true });
}
const agent = buildProxy();
export default agent;