diff --git a/radicle-httpd/src/api/v1/node.rs b/radicle-httpd/src/api/v1/node.rs index e284726e..5da0dfdd 100644 --- a/radicle-httpd/src/api/v1/node.rs +++ b/radicle-httpd/src/api/v1/node.rs @@ -4,7 +4,7 @@ use axum::routing::get; use axum::{Json, Router}; use serde_json::json; -use radicle::node::Handle; +use radicle::node::{tracking, Handle}; use radicle::Node; use crate::api::error::Error; @@ -13,6 +13,7 @@ use crate::api::Context; pub fn router(ctx: Context) -> Router { Router::new() .route("/node", get(node_handler)) + .route("/node/tracking/repos", get(node_tracking_repos_handler)) .with_state(ctx) } @@ -41,3 +42,20 @@ async fn node_handler(State(ctx): State) -> impl IntoResponse { Ok::<_, Error>(Json(response)) } + +/// Return local tracking repos information. +/// `GET /node/tracking/repos` +async fn node_tracking_repos_handler(State(ctx): State) -> impl IntoResponse { + let tracking = ctx.profile.tracking()?; + let mut repos = Vec::new(); + + for tracking::Repo { id, scope, policy } in tracking.repo_policies()? { + repos.push(json!({ + "id": id, + "scope": scope, + "policy": policy, + })); + } + + Ok::<_, Error>(Json(repos)) +}