From ee00f82a50b3cf2924e64ad591d8c482c1071f17 Mon Sep 17 00:00:00 2001 From: tarun Date: Sat, 9 May 2026 08:28:52 +0530 Subject: [PATCH] Refactor connection proxy configuration logic (#970) --- src/lib/network/connectionProxy.js | 158 ++++++++++++++++++++++------- 1 file changed, 123 insertions(+), 35 deletions(-) diff --git a/src/lib/network/connectionProxy.js b/src/lib/network/connectionProxy.js index 72430338..e7836dd8 100644 --- a/src/lib/network/connectionProxy.js +++ b/src/lib/network/connectionProxy.js @@ -1,14 +1,25 @@ import { getProxyPoolById } from "@/models"; +// Safely normalize any value into a trimmed string. function normalizeString(value) { if (value === undefined || value === null) return ""; return String(value).trim(); } +/** + * Normalize legacy proxy configuration. + */ function normalizeLegacyProxy(providerSpecificData = {}) { - const connectionProxyEnabled = providerSpecificData?.connectionProxyEnabled === true; - const connectionProxyUrl = normalizeString(providerSpecificData?.connectionProxyUrl); - const connectionNoProxy = normalizeString(providerSpecificData?.connectionNoProxy); + const connectionProxyEnabled = + providerSpecificData?.connectionProxyEnabled === true; + + const connectionProxyUrl = normalizeString( + providerSpecificData?.connectionProxyUrl + ); + + const connectionNoProxy = normalizeString( + providerSpecificData?.connectionNoProxy + ); return { connectionProxyEnabled, @@ -17,56 +28,133 @@ function normalizeLegacyProxy(providerSpecificData = {}) { }; } -export async function resolveConnectionProxyConfig(providerSpecificData = {}) { - const proxyPoolIdRaw = normalizeString(providerSpecificData?.proxyPoolId); - const proxyPoolId = proxyPoolIdRaw === "__none__" ? "" : proxyPoolIdRaw; - const legacy = normalizeLegacyProxy(providerSpecificData); +/** + * Resolve final proxy configuration. + * + * Priority: + * 1. Proxy Pool + * 2. Legacy Proxy + * 3. No Proxy + */ +export async function resolveConnectionProxyConfig( + providerSpecificData = {} +) { + try { + const proxyPoolIdRaw = normalizeString( + providerSpecificData?.proxyPoolId + ); - if (proxyPoolId) { - const proxyPool = await getProxyPoolById(proxyPoolId); - const proxyUrl = normalizeString(proxyPool?.proxyUrl); - const noProxy = normalizeString(proxyPool?.noProxy); + // "__none__" means explicitly disabled + const proxyPoolId = + proxyPoolIdRaw === "__none__" ? "" : proxyPoolIdRaw; - if (proxyPool && proxyPool.isActive === true && proxyUrl) { - // Vercel relay: rewrite base URL instead of using HTTP_PROXY - if (proxyPool.type === "vercel") { + const legacy = normalizeLegacyProxy(providerSpecificData); + + /** + * ----------------------------- + * Proxy Pool Resolution + * ----------------------------- + */ + if (proxyPoolId) { + const proxyPool = await getProxyPoolById(proxyPoolId); + + const proxyUrl = normalizeString(proxyPool?.proxyUrl); + const noProxy = normalizeString(proxyPool?.noProxy); + + const isValidPool = + proxyPool && + proxyPool.isActive === true && + proxyUrl; + + if (isValidPool) { + /** + * Vercel relay proxies use base URL rewriting + * instead of HTTP_PROXY environment variables. + */ + if (proxyPool.type === "vercel") { + return { + source: "vercel", + + proxyPoolId, + proxyPool, + + connectionProxyEnabled: false, + connectionProxyUrl: "", + connectionNoProxy: noProxy, + + strictProxy: proxyPool.strictProxy === true, + + vercelRelayUrl: proxyUrl, + }; + } + + /** + * Standard proxy pool + */ return { - source: "vercel", + source: "pool", + proxyPoolId, proxyPool, - connectionProxyEnabled: false, - connectionProxyUrl: "", + + connectionProxyEnabled: true, + connectionProxyUrl: proxyUrl, connectionNoProxy: noProxy, + strictProxy: proxyPool.strictProxy === true, - vercelRelayUrl: proxyUrl, }; } + } + /** + * ----------------------------- + * Legacy Proxy Fallback + * ----------------------------- + */ + if ( + legacy.connectionProxyEnabled && + legacy.connectionProxyUrl + ) { return { - source: "pool", - proxyPoolId, - proxyPool, - connectionProxyEnabled: true, - connectionProxyUrl: proxyUrl, - connectionNoProxy: noProxy, - strictProxy: proxyPool.strictProxy === true, + source: "legacy", + + proxyPoolId: proxyPoolId || null, + proxyPool: null, + + ...legacy, }; } - } - if (legacy.connectionProxyEnabled && legacy.connectionProxyUrl) { + /** + * ----------------------------- + * No Proxy Config + * ----------------------------- + */ return { - source: "legacy", + source: "none", + proxyPoolId: proxyPoolId || null, proxyPool: null, + ...legacy, }; - } + } catch (error) { + console.error( + "[resolveConnectionProxyConfig] Failed to resolve proxy config:", + error + ); - return { - source: "none", - proxyPoolId: proxyPoolId || null, - proxyPool: null, - ...legacy, - }; + return { + source: "error", + + proxyPoolId: null, + proxyPool: null, + + connectionProxyEnabled: false, + connectionProxyUrl: "", + connectionNoProxy: "", + + strictProxy: false, + }; + } }