83        std::optional<std::string> ledgerHash;
 
   84        std::optional<uint32_t> ledgerIndex;
 
   87        std::optional<std::string> index;
 
   90        ripple::LedgerEntryType expectedType = ripple::ltANY;
 
   92        std::optional<std::string> accountRoot;
 
   94        std::optional<std::string> did;
 
   96        std::optional<std::string> mptIssuance;
 
   98        std::optional<boost::json::object> directory;
 
   99        std::optional<boost::json::object> offer;
 
  100        std::optional<boost::json::object> rippleStateAccount;
 
  101        std::optional<boost::json::object> escrow;
 
  102        std::optional<boost::json::object> depositPreauth;
 
  103        std::optional<boost::json::object> ticket;
 
  104        std::optional<boost::json::object> amm;
 
  105        std::optional<boost::json::object> mptoken;
 
  106        std::optional<boost::json::object> permissionedDomain;
 
  107        std::optional<boost::json::object> vault;
 
  108        std::optional<ripple::STXChainBridge> bridge;
 
  109        std::optional<std::string> bridgeAccount;
 
  110        std::optional<uint32_t> chainClaimId;
 
  111        std::optional<uint32_t> createAccountClaimId;
 
  112        std::optional<ripple::uint256> oracleNode;
 
  113        std::optional<ripple::uint256> credential;
 
  114        std::optional<boost::json::object> delegate;
 
  115        bool includeDeleted = 
false;
 
 
  136    spec([[maybe_unused]] uint32_t apiVersion)
 
  141        static auto const kRIPPLE_STATE_ACCOUNTS_CHECK =
 
  143                if (!value.is_array() || value.as_array().size() != 2 || !value.as_array()[0].is_string() ||
 
  144                    !value.as_array()[1].is_string() ||
 
  145                    value.as_array()[0].as_string() == value.as_array()[1].as_string()) {
 
  146                    return Error{
Status{RippledError::rpcINVALID_PARAMS, 
"malformedAccounts"}};
 
  150                    boost::json::value_to<std::string>(value.as_array()[0])
 
  153                    boost::json::value_to<std::string>(value.as_array()[1])
 
  157                    return Error{
Status{ClioError::RpcMalformedAddress, 
"malformedAddresses"}};
 
  166        static auto const kMALFORMED_REQUEST_INT_VALIDATOR =
 
  171                {ripple::sfLockingChainDoor.getJsonName().c_str(),
 
  174                {ripple::sfIssuingChainDoor.getJsonName().c_str(),
 
  177                {ripple::sfLockingChainIssue.getJsonName().c_str(),
 
  180                {ripple::sfIssuingChainIssue.getJsonName().c_str(),
 
  184            Status(ClioError::RpcMalformedRequest)
 
  187        static auto const kRPC_SPEC = 
RpcSpec{
 
  191            {JS(index), kMALFORMED_REQUEST_HEX_STRING_VALIDATOR},
 
  194            {JS(check), kMALFORMED_REQUEST_HEX_STRING_VALIDATOR},
 
  195            {JS(deposit_preauth),
 
  215                 {JS(sub_index), kMALFORMED_REQUEST_INT_VALIDATOR}
 
  239            {JS(payment_channel), kMALFORMED_REQUEST_HEX_STRING_VALIDATOR},
 
  255            {JS(nft_page), kMALFORMED_REQUEST_HEX_STRING_VALIDATOR},
 
  277             kBRIDGE_JSON_VALIDATOR},
 
  282            {JS(xchain_owned_claim_id),
 
  287             kBRIDGE_JSON_VALIDATOR,
 
  292                 Status(ClioError::RpcMalformedRequest)
 
  294            {JS(xchain_owned_create_account_claim_id),
 
  299             kBRIDGE_JSON_VALIDATOR,
 
  304                 Status(ClioError::RpcMalformedRequest)
 
  320                 {JS(oracle_document_id),
 
  367                             Status(ClioError::RpcMalformedAddress)
 
  375                             Status(ClioError::RpcMalformedRequest)
 
  380            {JS(permissioned_domain),
 
  431            {JS(amendments), kMALFORMED_REQUEST_HEX_STRING_VALIDATOR},
 
  432            {JS(fee), kMALFORMED_REQUEST_HEX_STRING_VALIDATOR},
 
  433            {JS(hashes), kMALFORMED_REQUEST_HEX_STRING_VALIDATOR},
 
  434            {JS(nft_offer), kMALFORMED_REQUEST_HEX_STRING_VALIDATOR},
 
  435            {JS(nunl), kMALFORMED_REQUEST_HEX_STRING_VALIDATOR},
 
  436            {JS(signer_list), kMALFORMED_REQUEST_HEX_STRING_VALIDATOR},