use crate::operator::Operator;
use axum::routing::get;
use axum::{Json, Router};
use hennery_proto::rest::{CapabilitiesResponse, DeploymentMode};
use std::sync::Arc;
pub fn mode() -> DeploymentMode {
DeploymentMode::Full
}
pub fn features() -> Vec<String> {
vec![
"mcp_connections".to_owned(),
"mcp_stdio".to_owned(),
"mcp_oauth".to_owned(),
"web_push".to_owned(),
]
}
pub fn current() -> CapabilitiesResponse {
CapabilitiesResponse {
mode: mode(),
features: features(),
}
}
pub fn router(operator: Arc<Operator>) -> Router {
crate::auth::operator_only(
Router::new().route("/api/capabilities", get(|| async { Json(current()) })),
operator,
)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn the_collector_is_the_whole_cockpit_with_the_gateways_connections() {
assert_eq!(
serde_json::to_value(current()).unwrap(),
serde_json::json!({"mode": "full", "features": ["mcp_connections", "mcp_stdio", "mcp_oauth", "web_push"]})
);
}
#[test]
fn the_gateway_mode_is_named_gateway() {
assert_eq!(
serde_json::to_value(DeploymentMode::Gateway).unwrap(),
serde_json::json!("gateway")
);
}
}