Преглед изворни кода

fix: send `mcpName` as state if authUrl doesn't have `state` (#5681)

Paolo Ricciuti пре 2 месеци
родитељ
комит
57c3cf1f8b
1 измењених фајлова са 10 додато и 3 уклоњено
  1. 10 3
      packages/opencode/src/mcp/index.ts

+ 10 - 3
packages/opencode/src/mcp/index.ts

@@ -494,11 +494,18 @@ export namespace MCP {
     // Extract state from authorization URL to use as callback key
     // Extract state from authorization URL to use as callback key
     // If no state parameter, use mcpName as fallback
     // If no state parameter, use mcpName as fallback
     const authUrl = new URL(authorizationUrl)
     const authUrl = new URL(authorizationUrl)
-    const oauthState = authUrl.searchParams.get("state") ?? mcpName
+    let oauthState = mcpName
+
+    if (authUrl.searchParams.has("state")) {
+      oauthState = authUrl.searchParams.get("state")!
+    } else {
+      log.info("no state parameter in authorization URL, using mcpName as state", { mcpName })
+      authUrl.searchParams.set("state", oauthState)
+    }
 
 
     // Open browser
     // Open browser
-    log.info("opening browser for oauth", { mcpName, url: authorizationUrl, state: oauthState })
-    await open(authorizationUrl)
+    log.info("opening browser for oauth", { mcpName, url: authUrl.toString(), state: oauthState })
+    await open(authUrl.toString())
 
 
     // Wait for callback using the OAuth state parameter (or mcpName as fallback)
     // Wait for callback using the OAuth state parameter (or mcpName as fallback)
     const code = await McpOAuthCallback.waitForCallback(oauthState)
     const code = await McpOAuthCallback.waitForCallback(oauthState)