{"record":{"id":"5887c2b00f72bb04","repo":"diegosouzapw/OmniRoute","slug":"token-exchange-failed-error-5887c2","errorCode":null,"errorMessage":"Token exchange failed: ${error}","messagePattern":"Token exchange failed: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/lib/oauth/providers/qoder.ts","lineNumber":54,"sourceCode":"      grant_type: \"authorization_code\",\n      code: code,\n      redirect_uri: redirectUri,\n      client_id: config.clientId,\n    };\n\n    if (config.clientSecret) {\n      bodyParams.client_secret = config.clientSecret;\n    }\n\n    const response = await fetch(config.tokenUrl, {\n      method: \"POST\",\n      headers: headers,\n      body: new URLSearchParams(bodyParams),\n    });\n\n    if (!response.ok) {\n      const error = await response.text();\n      throw new Error(`Token exchange failed: ${error}`);\n    }\n\n    return await response.json();\n  },\n  postExchange: async (tokens) => {\n    if (!QODER_CONFIG.enabled || !QODER_CONFIG.userInfoUrl) {\n      throw new Error(\n        \"Qoder browser OAuth is experimental and disabled by default. Configure QODER_OAUTH_* environment variables or use a Personal Access Token.\"\n      );\n    }\n    const userInfoRes = await fetch(\n      `${QODER_CONFIG.userInfoUrl}?accessToken=${encodeURIComponent(tokens.access_token)}`,\n      { headers: { Accept: \"application/json\" } }\n    );\n    const result = userInfoRes.ok ? await userInfoRes.json() : {};\n    const userInfo = result.success ? result.data : {};\n    return { userInfo };\n  },","sourceCodeStart":36,"sourceCodeEnd":72,"githubUrl":"https://github.com/diegosouzapw/OmniRoute/blob/a179ffed5bb2e0b883b9ae7214ce8717b2a94c4d/src/lib/oauth/providers/qoder.ts#L36-L72","documentation":"Error \"Token exchange failed: ${error}\" thrown in diegosouzapw/OmniRoute.","triggerScenarios":"Thrown at src/lib/oauth/providers/qoder.ts:54 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"a179ffed5bb2e0b883b9ae7214ce8717b2a94c4d","analyzedAt":"2026-08-25T18:35:09.898Z","schemaVersion":2},"datasetVersion":"2026-08-25T21:54:21.419Z"}