fetchOAuthProfile function

Future<OAuthProfileResponse?> fetchOAuthProfile({
  1. required String accessToken,
  2. HttpClient? httpClient,
})

Fetch profile info from the OAuth profile endpoint.

Implementation

Future<OAuthProfileResponse?> fetchOAuthProfile({
  required String accessToken,
  HttpClient? httpClient,
}) async {
  final config = getOauthConfig();
  final client = httpClient ?? HttpClient();
  try {
    final request = await client.getUrl(Uri.parse(config.profileUrl));
    request.headers.set('Authorization', 'Bearer $accessToken');
    final response = await request.close().timeout(const Duration(seconds: 15));

    if (response.statusCode != 200) return null;

    final responseBody = await response.transform(utf8.decoder).join();
    return OAuthProfileResponse.fromJson(
      jsonDecode(responseBody) as Map<String, dynamic>,
    );
  } catch (_) {
    return null;
  } finally {
    if (httpClient == null) client.close();
  }
}