feat(proxy): add outbound HTTP proxy support for OAuth + provider requests
- Patch Node fetch via undici ProxyAgent when HTTP_PROXY/HTTPS_PROXY/ALL_PROXY is set - Ensure proxy patch is loaded for both chat pipeline and OAuth token exchange - Add Dashboard Settings → Network to edit outbound proxy and apply immediately - Persist outbound proxy settings in local db and initialize on server startup - Move proxy helpers to src/lib/network/ for better structure - Rename src/proxy.js → src/dashboardGuard.js to avoid naming confusion - Re-apply proxy env after DB import - Fix: close old dispatcher on proxy URL change to prevent connection pool leak - Fix: idempotency guard to avoid patching globalThis.fetch multiple times Made-with: Cursor
This commit is contained in:
1 parent
833069caac
commit
5a015e5b4d
14 files changed
+450
-29
No files matched your search
@@ -0,0 +1,23 @@
|
||||
import { NextResponse } from "next/server";
|
||||
import { testProxyUrl } from "@/lib/network/proxyTest";
|
||||
|
||||
export async function POST(request) {
|
||||
try {
|
||||
const body = await request.json();
|
||||
const result = await testProxyUrl({
|
||||
proxyUrl: body?.proxyUrl,
|
||||
testUrl: body?.testUrl,
|
||||
timeoutMs: body?.timeoutMs,
|
||||
});
|
||||
|
||||
if (result?.ok) {
|
||||
return NextResponse.json(result);
|
||||
}
|
||||
|
||||
const status = typeof result?.status === "number" ? result.status : 500;
|
||||
return NextResponse.json({ ok: false, error: result?.error || "Proxy test failed" }, { status });
|
||||
} catch (err) {
|
||||
const message = err?.name === "AbortError" ? "Proxy test timed out" : (err?.message || String(err));
|
||||
return NextResponse.json({ ok: false, error: message }, { status: 500 });
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user