{"record":{"id":"8a52e54cccc65357","repo":"diegosouzapw/OmniRoute","slug":"grok-build-token-exchange-failed-error","errorCode":null,"errorMessage":"Grok Build token exchange failed: ${error}","messagePattern":"Grok Build token exchange failed: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/lib/oauth/providers/grok-cli-oauth.ts","lineNumber":61,"sourceCode":"): Promise<Record<string, unknown>> {\n  const response = await fetch(config.tokenUrl, {\n    method: \"POST\",\n    headers: {\n      \"Content-Type\": \"application/x-www-form-urlencoded\",\n      Accept: \"application/json\",\n    },\n    body: new URLSearchParams({\n      grant_type: \"authorization_code\",\n      client_id: config.clientId,\n      code,\n      redirect_uri: redirectUri,\n      code_verifier: codeVerifier,\n    }),\n  });\n\n  if (!response.ok) {\n    const error = await response.text();\n    throw new Error(`Grok Build token exchange failed: ${error}`);\n  }\n\n  return response.json();\n}\n\n/**\n * Detect an OAuth token-endpoint response (browser PKCE exchange output),\n * which uses snake_case `access_token`, as opposed to the paste-token import\n * shape (`{ accessToken: <JWT string or auth.json blob> }`).\n */\nexport function isGrokBuildBrowserTokens(tokens: unknown): tokens is Record<string, unknown> {\n  return (\n    !!tokens &&\n    typeof tokens === \"object\" &&\n    typeof (tokens as Record<string, unknown>).access_token === \"string\"\n  );\n}\n","sourceCodeStart":43,"sourceCodeEnd":79,"githubUrl":"https://github.com/diegosouzapw/OmniRoute/blob/a179ffed5bb2e0b883b9ae7214ce8717b2a94c4d/src/lib/oauth/providers/grok-cli-oauth.ts#L43-L79","documentation":"Error \"Grok Build token exchange failed: ${error}\" thrown in diegosouzapw/OmniRoute.","triggerScenarios":"Thrown at src/lib/oauth/providers/grok-cli-oauth.ts:61 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"}