diff --git a/src/db.rs b/src/db.rs index 9a68140..dc86a15 100644 --- a/src/db.rs +++ b/src/db.rs @@ -120,16 +120,46 @@ impl Database { Ok(()) } + pub async fn get_relayers(&self) -> eyre::Result> { + Ok(sqlx::query_as( + r#" + SELECT + id, + name, + chain_id, + key_id, + address, + nonce, + current_nonce, + max_inflight_txs, + gas_limits + FROM relayers + "#, + ) + .fetch_all(&self.pool) + .await?) + } + pub async fn get_relayer(&self, id: &str) -> eyre::Result { Ok(sqlx::query_as( r#" - SELECT id, name, chain_id, key_id, address, nonce, current_nonce, max_inflight_txs, gas_limits + SELECT + id, + name, + chain_id, + key_id, + address, + nonce, + current_nonce, + max_inflight_txs, + gas_limits FROM relayers WHERE id = $1 - "#) - .bind(id) - .fetch_one(&self.pool).await? + "#, ) + .bind(id) + .fetch_one(&self.pool) + .await?) } pub async fn create_transaction( diff --git a/src/server.rs b/src/server.rs index fb9a3dd..247a604 100644 --- a/src/server.rs +++ b/src/server.rs @@ -9,8 +9,8 @@ use thiserror::Error; use tower_http::validate_request::ValidateRequestHeaderLayer; use self::routes::relayer::{ - create_relayer, create_relayer_api_key, get_relayer, relayer_rpc, - update_relayer, + create_relayer, create_relayer_api_key, get_relayer, get_relayers, + relayer_rpc, update_relayer, }; use self::routes::transaction::{get_tx, get_txs, send_tx}; use crate::app::App; @@ -77,6 +77,7 @@ pub async fn spawn_server( let mut admin_routes = Router::new() .route("/relayer", post(create_relayer)) + .route("/relayers", get(get_relayers)) .route( "/relayer/:relayer_id", post(update_relayer).get(get_relayer), diff --git a/src/server/routes/relayer.rs b/src/server/routes/relayer.rs index 873facd..3573f8f 100644 --- a/src/server/routes/relayer.rs +++ b/src/server/routes/relayer.rs @@ -89,6 +89,16 @@ pub async fn update_relayer( Ok(()) } +#[tracing::instrument(skip(app))] +pub async fn get_relayers( + State(app): State>, + Path(relayer_id): Path, +) -> Result>, ApiError> { + let relayer_info = app.db.get_relayers().await?; + + Ok(Json(relayer_info)) +} + #[tracing::instrument(skip(app))] pub async fn get_relayer( State(app): State>,