mirror of
https://github.com/Nezumi-2711/9router.git
synced 2026-09-22 13:38:31 +00:00
Refactor connection proxy configuration logic (#970)
This commit is contained in:
@@ -1,14 +1,25 @@
|
|||||||
import { getProxyPoolById } from "@/models";
|
import { getProxyPoolById } from "@/models";
|
||||||
|
|
||||||
|
// Safely normalize any value into a trimmed string.
|
||||||
function normalizeString(value) {
|
function normalizeString(value) {
|
||||||
if (value === undefined || value === null) return "";
|
if (value === undefined || value === null) return "";
|
||||||
return String(value).trim();
|
return String(value).trim();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Normalize legacy proxy configuration.
|
||||||
|
*/
|
||||||
function normalizeLegacyProxy(providerSpecificData = {}) {
|
function normalizeLegacyProxy(providerSpecificData = {}) {
|
||||||
const connectionProxyEnabled = providerSpecificData?.connectionProxyEnabled === true;
|
const connectionProxyEnabled =
|
||||||
const connectionProxyUrl = normalizeString(providerSpecificData?.connectionProxyUrl);
|
providerSpecificData?.connectionProxyEnabled === true;
|
||||||
const connectionNoProxy = normalizeString(providerSpecificData?.connectionNoProxy);
|
|
||||||
|
const connectionProxyUrl = normalizeString(
|
||||||
|
providerSpecificData?.connectionProxyUrl
|
||||||
|
);
|
||||||
|
|
||||||
|
const connectionNoProxy = normalizeString(
|
||||||
|
providerSpecificData?.connectionNoProxy
|
||||||
|
);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
connectionProxyEnabled,
|
connectionProxyEnabled,
|
||||||
@@ -17,56 +28,133 @@ function normalizeLegacyProxy(providerSpecificData = {}) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function resolveConnectionProxyConfig(providerSpecificData = {}) {
|
/**
|
||||||
const proxyPoolIdRaw = normalizeString(providerSpecificData?.proxyPoolId);
|
* Resolve final proxy configuration.
|
||||||
const proxyPoolId = proxyPoolIdRaw === "__none__" ? "" : proxyPoolIdRaw;
|
*
|
||||||
const legacy = normalizeLegacyProxy(providerSpecificData);
|
* Priority:
|
||||||
|
* 1. Proxy Pool
|
||||||
|
* 2. Legacy Proxy
|
||||||
|
* 3. No Proxy
|
||||||
|
*/
|
||||||
|
export async function resolveConnectionProxyConfig(
|
||||||
|
providerSpecificData = {}
|
||||||
|
) {
|
||||||
|
try {
|
||||||
|
const proxyPoolIdRaw = normalizeString(
|
||||||
|
providerSpecificData?.proxyPoolId
|
||||||
|
);
|
||||||
|
|
||||||
if (proxyPoolId) {
|
// "__none__" means explicitly disabled
|
||||||
const proxyPool = await getProxyPoolById(proxyPoolId);
|
const proxyPoolId =
|
||||||
const proxyUrl = normalizeString(proxyPool?.proxyUrl);
|
proxyPoolIdRaw === "__none__" ? "" : proxyPoolIdRaw;
|
||||||
const noProxy = normalizeString(proxyPool?.noProxy);
|
|
||||||
|
|
||||||
if (proxyPool && proxyPool.isActive === true && proxyUrl) {
|
const legacy = normalizeLegacyProxy(providerSpecificData);
|
||||||
// Vercel relay: rewrite base URL instead of using HTTP_PROXY
|
|
||||||
if (proxyPool.type === "vercel") {
|
/**
|
||||||
|
* -----------------------------
|
||||||
|
* 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 {
|
return {
|
||||||
source: "vercel",
|
source: "pool",
|
||||||
|
|
||||||
proxyPoolId,
|
proxyPoolId,
|
||||||
proxyPool,
|
proxyPool,
|
||||||
connectionProxyEnabled: false,
|
|
||||||
connectionProxyUrl: "",
|
connectionProxyEnabled: true,
|
||||||
|
connectionProxyUrl: proxyUrl,
|
||||||
connectionNoProxy: noProxy,
|
connectionNoProxy: noProxy,
|
||||||
|
|
||||||
strictProxy: proxyPool.strictProxy === true,
|
strictProxy: proxyPool.strictProxy === true,
|
||||||
vercelRelayUrl: proxyUrl,
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* -----------------------------
|
||||||
|
* Legacy Proxy Fallback
|
||||||
|
* -----------------------------
|
||||||
|
*/
|
||||||
|
if (
|
||||||
|
legacy.connectionProxyEnabled &&
|
||||||
|
legacy.connectionProxyUrl
|
||||||
|
) {
|
||||||
return {
|
return {
|
||||||
source: "pool",
|
source: "legacy",
|
||||||
proxyPoolId,
|
|
||||||
proxyPool,
|
proxyPoolId: proxyPoolId || null,
|
||||||
connectionProxyEnabled: true,
|
proxyPool: null,
|
||||||
connectionProxyUrl: proxyUrl,
|
|
||||||
connectionNoProxy: noProxy,
|
...legacy,
|
||||||
strictProxy: proxyPool.strictProxy === true,
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (legacy.connectionProxyEnabled && legacy.connectionProxyUrl) {
|
/**
|
||||||
|
* -----------------------------
|
||||||
|
* No Proxy Config
|
||||||
|
* -----------------------------
|
||||||
|
*/
|
||||||
return {
|
return {
|
||||||
source: "legacy",
|
source: "none",
|
||||||
|
|
||||||
proxyPoolId: proxyPoolId || null,
|
proxyPoolId: proxyPoolId || null,
|
||||||
proxyPool: null,
|
proxyPool: null,
|
||||||
|
|
||||||
...legacy,
|
...legacy,
|
||||||
};
|
};
|
||||||
}
|
} catch (error) {
|
||||||
|
console.error(
|
||||||
|
"[resolveConnectionProxyConfig] Failed to resolve proxy config:",
|
||||||
|
error
|
||||||
|
);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
source: "none",
|
source: "error",
|
||||||
proxyPoolId: proxyPoolId || null,
|
|
||||||
proxyPool: null,
|
proxyPoolId: null,
|
||||||
...legacy,
|
proxyPool: null,
|
||||||
};
|
|
||||||
|
connectionProxyEnabled: false,
|
||||||
|
connectionProxyUrl: "",
|
||||||
|
connectionNoProxy: "",
|
||||||
|
|
||||||
|
strictProxy: false,
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user