hanzo-api 1.1.11

Http Api for Hanzo AI platform
use crate::node_commands::NodeCommand;

use super::api_v2_handlers_ext_agent_offers::ext_agent_offers_routes;
use super::api_v2_handlers_general::general_routes;
use super::api_v2_handlers_jobs::job_routes;
use super::api_v2_handlers_mcp_servers::mcp_server_routes;
use super::api_v2_handlers_ngrok::ngrok_routes;
use super::api_v2_handlers_oauth::oauth_routes;
use super::api_v2_handlers_prompts::prompt_routes;
#[cfg(feature = "swagger-ui")]
use super::api_v2_handlers_swagger_ui::swagger_ui_routes;
use super::api_v2_handlers_tools::tool_routes;
use super::api_v2_handlers_vecfs::vecfs_routes;
use super::api_v2_handlers_wallets::wallet_routes;
use super::api_v2_handlers_cron::cron_routes;
use async_channel::Sender;
use serde::Serialize;
use serde_json::{json, Value};

use warp::Filter;

pub fn v2_routes(
    node_commands_sender: Sender<NodeCommand>,
    node_name: String,
) -> impl Filter<Extract = impl warp::Reply, Error = warp::Rejection> + Clone {
    let general_routes = general_routes(node_commands_sender.clone(), node_name.clone());
    let vecfs_routes = vecfs_routes(node_commands_sender.clone(), node_name.clone());
    let job_routes = job_routes(node_commands_sender.clone(), node_name.clone());
    let ext_agent_offers = ext_agent_offers_routes(node_commands_sender.clone());
    let wallet_routes = wallet_routes(node_commands_sender.clone());
    let custom_prompt = prompt_routes(node_commands_sender.clone());
    #[cfg(feature = "swagger-ui")]
    let swagger_ui_routes = swagger_ui_routes();
    let tool_routes = tool_routes(node_commands_sender.clone());
    let cron_routes = cron_routes(node_commands_sender.clone(), node_name.clone());
    let oauth_routes = oauth_routes(node_commands_sender.clone());
    let mcp_server_routes = mcp_server_routes(node_commands_sender.clone());
    let ngrok_routes = ngrok_routes(node_commands_sender.clone());

    #[cfg(feature = "swagger-ui")]
    return general_routes
        .or(vecfs_routes)
        .or(job_routes)
        .or(ext_agent_offers)
        .or(wallet_routes)
        .or(custom_prompt)
        .or(swagger_ui_routes)
        .or(tool_routes)
        .or(cron_routes)
        .or(oauth_routes)
        .or(mcp_server_routes)
        .or(ngrok_routes);

    #[cfg(not(feature = "swagger-ui"))]
    return general_routes
        .or(vecfs_routes)
        .or(job_routes)
        .or(ext_agent_offers)
        .or(wallet_routes)
        .or(custom_prompt)
        .or(tool_routes)
        .or(cron_routes)
        .or(oauth_routes)
        .or(mcp_server_routes)
        .or(ngrok_routes);
}

pub fn with_sender(
    sender: Sender<NodeCommand>,
) -> impl Filter<Extract = (Sender<NodeCommand>,), Error = std::convert::Infallible> + Clone {
    warp::any().map(move || sender.clone())
}

pub fn with_node_name(node_name: String) -> impl Filter<Extract = (String,), Error = std::convert::Infallible> + Clone {
    warp::any().map(move || node_name.clone())
}

pub fn create_success_response<T: Serialize>(data: T) -> Value {
    json!(data)
}