use alloy_rpc_client::ReqwestClient;
use alloy_transport::{RpcError, TransportErrorKind};
use op_alloy_rpc_types_engine::OpExecutionPayloadEnvelope;
use url::Url;
#[derive(Debug, Clone)]
pub struct ConductorClient {
rpc: ReqwestClient,
}
impl ConductorClient {
pub fn new_http(url: Url) -> Self {
let rpc = ReqwestClient::new_http(url);
Self { rpc }
}
pub async fn leader(&self) -> Result<bool, ConductorError> {
let result: bool = self.rpc.request("conductor_leader", ()).await?;
Ok(result)
}
pub async fn conductor_active(&self) -> Result<bool, ConductorError> {
let result: bool = self.rpc.request("conductor_active", ()).await?;
Ok(result)
}
pub async fn override_leader(&self) -> Result<(), ConductorError> {
let _result: () = self.rpc.request("conductor_overrideLeader", ()).await?;
Ok(())
}
pub async fn commit_unsafe_payload(
&self,
payload: &OpExecutionPayloadEnvelope,
) -> Result<(), ConductorError> {
let _result: () = self.rpc.request("conductor_commitUnsafePayload", [payload]).await?;
Ok(())
}
}
#[derive(Debug, thiserror::Error)]
pub enum ConductorError {
#[error("RPC error: {0}")]
Rpc(#[from] RpcError<TransportErrorKind>),
}