exchangeCode method
Exchange authorization code for tokens.
Implementation
Future<OAuthTokens> exchangeCode({
required String code,
required String codeVerifier,
required String state,
String? redirectUri,
}) async {
final response = await _httpClient.post(
Uri.parse(config.tokenUrl),
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: {
'grant_type': 'authorization_code',
'code': code,
'redirect_uri': redirectUri ?? config.redirectUrl,
'client_id': config.clientId,
'code_verifier': codeVerifier,
'state': state,
},
);
if (response.statusCode != 200) {
throw OAuthException(
'Token exchange failed (${response.statusCode}): ${response.body}',
);
}
return _parseTokenResponse(response.body);
}