anchor.diff:          }
         } else if (extensionGrants.containsKey(grantType)) {
           response = await extensionGrants[grantType](req, res);
  +      } else if (grantType == null) {
  +        // This is a device code grant.
  +        var scopes = await _getScopes(req, body: true);
  +        var deviceCodeResponse = await deviceCodeGrant(client, scopes, req, res);
  +        return deviceCodeResponse.toJson();
         }
   
         if (response != null) {
  
positive.code:     );
    }
  
    FutureOr<DeviceCodeResponse> deviceCodeGrant(Client client,
        Iterable<String> scopes, RequestContext req, ResponseContext res) async {
      var body = await req.parseBody().then((_) => req.bodyAsMap);
  
negative.code: 
    var value = data.containsKey(name) ? data[name]?.toString() : null;
  
    if (value?.isNotEmpty != true && throwIfEmpty) {
      throw new AuthorizationException(
        new ErrorResponse(
          ErrorResponse.invalidRequest,
  