From b7b4ac55927e43df4613862a99f276ccde1c1542 Mon Sep 17 00:00:00 2001 From: decolua Date: Fri, 6 Mar 2026 09:59:15 +0700 Subject: [PATCH] Fix bug --- README.md | 62 +++++++++---------- package.json | 2 +- public/providers/chutes.png | Bin 1621 -> 4730 bytes public/providers/kilocode.png | Bin 314 -> 3334 bytes public/providers/siliconflow.png | Bin 47179 -> 7250 bytes src/app/api/provider-nodes/validate/route.js | 58 +++++++++++++++-- src/mitm/manager.js | 4 +- 7 files changed, 86 insertions(+), 40 deletions(-) diff --git a/README.md b/README.md index 0e2e8d9f..b7c13a48 100644 --- a/README.md +++ b/README.md @@ -145,7 +145,7 @@ Default URLs: Claude Code
- Claude Code + Claude-Code OpenClaw
@@ -193,7 +193,36 @@ Default URLs: ## 🌐 Supported Providers -### 🆓 Free Providers (Unlimited) +### 🔐 OAuth Providers + +
+ + + + + + + + +
+ Claude Code
+ Claude-Code +
+ Antigravity
+ Antigravity +
+ Codex
+ Codex +
+ GitHub
+ GitHub +
+ Cursor
+ Cursor +
+
+ +### 🆓 Free Providers
@@ -222,35 +251,6 @@ Default URLs:
-### 🔐 OAuth Providers - -
- - - - - - - - -
- Claude Code
- Claude Code -
- Antigravity
- Antigravity -
- Codex
- Codex -
- GitHub
- GitHub -
- Cursor
- Cursor -
-
- ### 🔑 API Key Providers (40+)
diff --git a/package.json b/package.json index d2547dc2..26b6e015 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "9router-app", - "version": "0.3.32", + "version": "0.3.33", "description": "9Router web dashboard", "private": true, "scripts": { diff --git a/public/providers/chutes.png b/public/providers/chutes.png index 07e4d1db7eb80e64ab506525f6063c816b903d12..f39a6c21c2181413d41b3ecc67b09690aa545bff 100644 GIT binary patch literal 4730 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 literal 1621 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 literal 314 zcmV-A0mc4_P)|nM+kY1!826vZWJk6mW28!L8IUMM5T!$G7890Pqmh zNpkT&005lhfU{=zMK7v-UVonhlR`@1<;+q%jtzYStrZJk7YE9!!#G+wfE)-mz(ut) zt2q#BB5PnxVV=XClMA^y1vz==RhJIxZkeq zm%JkqpsqC=V(1(4-gJggwUev?E`-)936YX`D;D1cGY5{AxC7z<53%-z3Z%7wa{vGU M07*qoM6N<$f}|LD5dZ)H diff --git a/public/providers/siliconflow.png b/public/providers/siliconflow.png index a73581450d79e1bc312eb7f6c1972fe907e2cee6..d599df2e7a45d4d5c3d2d51b46993e8c7c064664 100644 GIT binary patch delta 6910 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 { + return Promise.race([ + fetch(url, options), + new Promise((_, reject) => + setTimeout(() => reject(new Error("Request timeout")), timeout) + ) + ]); +}; + +// Validate URL format +const isValidUrl = (url) => { + try { + new URL(url); + return true; + } catch { + return false; + } +}; + +// Parse error details for user-friendly messages +const getErrorMessage = (error) => { + if (error.cause?.code === "ECONNREFUSED") return "Connection refused - provider node offline or unreachable"; + if (error.cause?.code === "ENOTFOUND") return "DNS lookup failed - invalid domain or network issue"; + if (error.cause?.code === "ETIMEDOUT") return "Connection timeout - provider node too slow"; + if (error.message.includes("timeout")) return "Request timeout (>10s) - provider node not responding"; + if (error.cause?.code === "CERT_HAS_EXPIRED") return "SSL certificate expired"; + if (error.cause?.code === "UNABLE_TO_VERIFY_LEAF_SIGNATURE") return "SSL certificate verification failed"; + if (error.cause?.code) return `Network error: ${error.cause.code}`; + return "Network connection failed - check URL and network connectivity"; +}; + // POST /api/provider-nodes/validate - Validate API key against base URL export async function POST(request) { try { @@ -10,6 +42,11 @@ export async function POST(request) { return NextResponse.json({ error: "Base URL and API key required" }, { status: 400 }); } + // Validate URL format + if (!isValidUrl(baseUrl)) { + return NextResponse.json({ error: "Invalid URL format" }, { status: 400 }); + } + // Anthropic Compatible Validation if (type === "anthropic-compatible") { // Robustly construct URL: remove trailing slash, and remove trailing /messages if user added it @@ -21,7 +58,7 @@ export async function POST(request) { // Use /models endpoint for validation as many compatible providers support it (like OpenAI) const modelsUrl = `${normalizedBase}/models`; - const res = await fetch(modelsUrl, { + const res = await fetchWithTimeout(modelsUrl, { method: "GET", headers: { "x-api-key": apiKey, @@ -30,18 +67,27 @@ export async function POST(request) { } }); - return NextResponse.json({ valid: res.ok, error: res.ok ? null : "Invalid API key" }); + return NextResponse.json({ valid: res.ok, error: res.ok ? null : "Invalid API key or unauthorized" }); } // OpenAI Compatible Validation (Default) const modelsUrl = `${baseUrl.replace(/\/$/, "")}/models`; - const res = await fetch(modelsUrl, { + const res = await fetchWithTimeout(modelsUrl, { headers: { "Authorization": `Bearer ${apiKey}` }, }); - return NextResponse.json({ valid: res.ok, error: res.ok ? null : "Invalid API key" }); + return NextResponse.json({ valid: res.ok, error: res.ok ? null : "Invalid API key or unauthorized" }); } catch (error) { - console.log("Error validating provider node:", error); - return NextResponse.json({ error: "Validation failed" }, { status: 500 }); + const errorMessage = getErrorMessage(error); + console.error("Error validating provider node:", { + message: error.message, + cause: error.cause, + code: error.cause?.code, + userMessage: errorMessage + }); + return NextResponse.json({ + valid: false, + error: errorMessage + }, { status: 500 }); } } diff --git a/src/mitm/manager.js b/src/mitm/manager.js index 168d51f6..5a68d5d5 100644 --- a/src/mitm/manager.js +++ b/src/mitm/manager.js @@ -374,7 +374,7 @@ async function startServer(apiKey, sudoPassword) { ].join("\r\n"); const tmpVbs = path.join(os.tmpdir(), `mitm_uac_${Date.now()}.vbs`); fs.writeFileSync(tmpVbs, vbs, "utf8"); - spawn("wscript.exe", [tmpVbs], { stdio: "ignore", windowsHide: false, detached: true }).unref(); + spawn("wscript.exe", [tmpVbs], { stdio: "ignore", windowsHide: true, detached: true }).unref(); await new Promise((resolve, reject) => { const deadline = Date.now() + 90000; @@ -511,7 +511,7 @@ async function stopServer(sudoPassword) { ].join("\r\n"); const tmpVbs = path.join(os.tmpdir(), "mitm_stop_uac.vbs"); fs.writeFileSync(tmpVbs, vbs, "utf8"); - spawn("wscript.exe", [tmpVbs], { stdio: "ignore", windowsHide: false, detached: true }).unref(); + spawn("wscript.exe", [tmpVbs], { stdio: "ignore", windowsHide: true, detached: true }).unref(); await new Promise((resolve) => { const deadline = Date.now() + 30000;