diegosouzapw/OmniRoute · error

Token exchange failed: ${error}

Error message

Token exchange failed: ${error}

What it means

Error "Token exchange failed: ${error}" thrown in diegosouzapw/OmniRoute.

Source

Thrown at src/lib/oauth/providers/claude.ts:130

    const response = await fetch(config.tokenUrl, {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
        Accept: "application/json",
      },
      body: JSON.stringify({
        code: authCode,
        state: codeState || state,
        grant_type: "authorization_code",
        client_id: config.clientId,
        redirect_uri: config.redirectUri,
        code_verifier: codeVerifier,
      }),
    });

    if (!response.ok) {
      const error = await response.text();
      throw new Error(`Token exchange failed: ${error}`);
    }

    return await response.json();
  },
  // Runs after exchangeToken; result is passed as `extra` to mapTokens.
  postExchange: async (tokens) => {
    if (!tokens?.access_token) return null;
    return await fetchClaudeBootstrap(tokens.access_token);
  },
  mapTokens: (tokens, extra) => {
    const plan = extractClaudePlan(tokens, extra);
    const bs = extra || {};
    const providerSpecificData: any = {
      // Generated once at provisioning; preserved across token refresh.
      cliUserID: crypto.randomBytes(32).toString("hex"),
    };
    if (bs.account_uuid) providerSpecificData.accountUUID = bs.account_uuid;
    if (bs.organization_uuid) providerSpecificData.organizationUUID = bs.organization_uuid;

View on GitHub (pinned to a179ffed5b)

When it happens

Trigger: Thrown at src/lib/oauth/providers/claude.ts:130 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of diegosouzapw/OmniRoute@a179ffed5b (2026-08-25). Data as JSON: /api/errors/7d2490d5a78e14f1. Report an issue: GitHub.