Skip to main content

aiclient_api/server/
mod.rs

1pub mod middleware;
2pub mod state;
3
4use axum::middleware as axum_mw;
5use axum::Router;
6use state::AppState;
7use tower_http::catch_panic::CatchPanicLayer;
8
9pub fn build_router(state: AppState) -> Router {
10    use axum::routing::{delete, get, post};
11
12    // V1 API routes with auth & rate limiting middlewares
13    let v1_routes = Router::new()
14        .route("/chat/completions", post(crate::routes::openai::chat_completions))
15        .route("/models", get(crate::routes::openai::list_models))
16        .route("/messages", post(crate::routes::anthropic::messages))
17        .route("/usage", get(crate::routes::usage::get_usage))
18        .route("/usage", delete(crate::routes::usage::reset_usage))
19        .layer(axum_mw::from_fn_with_state(state.clone(), middleware::auth))
20        .layer(axum_mw::from_fn_with_state(state.clone(), middleware::rate_limit));
21
22    Router::new()
23        .route("/healthz", get(crate::routes::health::healthz))
24        .nest("/v1", v1_routes)
25        .layer(CatchPanicLayer::new())
26        .layer(middleware::cors_layer())
27        .with_state(state)
28}