Skip to main content

ninox_server/
server.rs

1use crate::routes::{
2    brain::brain_router,
3    events::events_router,
4    orchestrators::orchestrators_router,
5    sessions::sessions_router,
6    terminal::terminal_router,
7};
8use ninox_core::{events::Engine, BrainIndex};
9use axum::Router;
10use std::{net::SocketAddr, sync::Arc};
11use tower_http::cors::CorsLayer;
12
13pub async fn start(engine: Arc<Engine>, brain: Arc<BrainIndex>, port: u16) -> anyhow::Result<()> {
14    let addr = SocketAddr::from(([127, 0, 0, 1], port));
15    let app = Router::new()
16        .nest("/api/v1/sessions", sessions_router(engine.clone()))
17        .nest("/api/v1/sessions", terminal_router(engine.clone()))
18        .nest("/api/v1/orchestrators", orchestrators_router(engine.clone()))
19        .nest("/api/v1/events", events_router(engine.clone()))
20        .nest("/api/brain", brain_router(brain))
21        .layer(CorsLayer::permissive());
22    tracing::info!("ninox listening on {addr}");
23    axum::serve(tokio::net::TcpListener::bind(addr).await?, app).await?;
24    Ok(())
25}