revokeGrant method

Future<void> revokeGrant(
  1. ConnectanumHttpAuthGrant grant, {
  2. ConnectanumHttpAuthTokenKind tokenKind = ConnectanumHttpAuthTokenKind.refreshToken,
  3. Map<String, String> headers = const <String, String>{},
})

Revokes one credential from grant at its exact issuing endpoint.

Use revokeToken only when deliberately working with an unbound raw credential.

Implementation

Future<void> revokeGrant(
  ConnectanumHttpAuthGrant grant, {
  ConnectanumHttpAuthTokenKind tokenKind =
      ConnectanumHttpAuthTokenKind.refreshToken,
  Map<String, String> headers = const <String, String>{},
}) {
  return _runTrackedOperation((openRequest) async {
    _validateGrantEndpoint(grant);
    final tokenType = _nonEmptyArgument(grant.tokenType, 'grant.tokenType');
    if (tokenType.toLowerCase() != 'bearer') {
      throw ArgumentError(
        'grant.tokenType must use the Bearer authentication scheme.',
      );
    }
    final token = switch (tokenKind) {
      ConnectanumHttpAuthTokenKind.accessToken => grant.accessToken,
      ConnectanumHttpAuthTokenKind.refreshToken => grant.refreshToken,
    };
    if (token == null) {
      throw ArgumentError(
        'grant does not contain the selected revocation credential.',
      );
    }
    final revokeToken = _nonEmptyToken(token, 'grant token');
    await _requestRevokeToken(
      revokeToken,
      tokenTypeHint: tokenKind.hint,
      headers: headers,
      openRequest: openRequest,
    );
  });
}