docs: async function __send_token_for_authorization_code(request_params, request, h) {
  
      function __process_authorization_code(request_params) {
          return authorization_endpoint
              .authorization_request_registrar_module
              .get_authorization_request(request_params.code);
      }
  
      try {
          const authorization_request_record = await promiseSequencer([
              __process_authorization_header_for_client, __process_authorization_code
          ], request_params);
  
          if (authorization_request_record.granted) {
              if ((authorization_request_record.client_id === request_params.client_id) && (authorization_request_record.redirect_uri === request_params.redirect_uri)) {
  
                  //send token for authorization_code grant_type
                  let oidc_claims = {
                      audience: [authorization_request_record.client_id],
                      subject: authorization_request_record.subject
                  };
  
                  if (authorization_request_record.nonce) {
                      oidc_claims.nonce = authorization_request_record.nonce;
                  }
  
                  return __send_oidc_token(request, h, oidc_claims, token_endpoint.authorization_code_grant_type.token_duration_seconds);
              }
          }
  
          /**
               * if we get here, then either the authorization_code has expired,
               * invalid, or used already
               */
          return h
              .response({"error": "access_denied", "error_description": "Invalid, denied, or expired authorization code"})
              .type("application/json")
              .code(401);
      } catch (err) {
          return h
              .response({"error": "access_denied", "error_description": "Invalid, denied, expired authorization code, or incorrect Basic authorization header"})
              .type("application/json")
              .code(401);
      }
  }