exchangeOAuthCode method

Future<void> exchangeOAuthCode({
  1. required String userId,
  2. required String provider,
  3. required String authCode,
})

Implementation

Future<void> exchangeOAuthCode(
    {required String userId,
    required String provider,
    required String authCode}) {
  return linkService
      // The Redirect URL here is just a placeholder value.
      // linkService.exchangeOAuthCode requests the API not to redirect.
      .createLink(userId, provider, "x-vital-noop://")
      .then((tokenResponse) {
        if (!tokenResponse.isSuccessful || tokenResponse.body == null) {
          throw VitalHTTPStatusException(
              tokenResponse.statusCode, "${tokenResponse.error}");
        }
        return tokenResponse.body!.linkToken;
      })
      .then((linkToken) {
        final request = IsLinkTokenValidRequest(linkToken: linkToken);
        return linkService
            .isTokenValid(request: request)
            .then((checkResponse) {
          if (!checkResponse.isSuccessful) {
            throw VitalHTTPStatusException(
                checkResponse.statusCode, "${checkResponse.error}");
          }
          return linkToken;
        });
      })
      .then((linkToken) => linkService.exchangeOAuthCode(
            provider: provider,
            code: authCode,
            linkToken: linkToken,
          ))
      .then((exchangeResponse) {
        if (!exchangeResponse.isSuccessful) {
          throw VitalHTTPStatusException(
              exchangeResponse.statusCode, "${exchangeResponse.error}");
        }
      });
}