pub mod auth;
pub mod auth_handlers;
pub mod error;
pub mod graphql;
pub mod grpc;
pub mod handlers;
pub mod jwt;
pub mod metrics_middleware;
pub mod middleware;
pub mod rate_limit;
pub mod rbac;
pub mod responses;
pub mod routes;
pub use auth::{AuthState, AuthUser, optional_auth, require_auth, require_role};
pub use auth_handlers::{AuthHandlerState, LoginRequest, LoginResponse, RefreshTokenRequest};
pub use error::{ApiError, ApiResult, ErrorResponse};
pub use graphql::{
build_schema, graphql_handler, graphql_playground, AppSchema, Mutation as GraphQLMutation,
Query as GraphQLQuery,
};
pub use grpc::{build_grpc_server, serve_grpc, RegistryServiceImpl, RegistryServiceServer};
pub use handlers::{AppState, VersionInfo};
pub use jwt::{Claims, JwtConfig, JwtManager, TokenPair};
pub use middleware::{CorsConfig, MiddlewareConfig, UuidRequestIdGenerator};
pub use rate_limit::{rate_limit, RateLimitConfig, RateLimiterState};
pub use rbac::{Permission, RbacPolicy, Role};
pub use responses::{
created, deleted, no_content, ok, ApiResponse, ComponentHealth, EmptyResponse, HealthResponse,
HealthStatus, PaginatedResponse, ResponseMeta,
};
pub use routes::{build_router, build_router_with_auth, build_router_with_graphql, RouteConfig};
use axum::Router;
use llm_registry_service::ServiceRegistry;
pub fn build_api_server(services: ServiceRegistry) -> Router {
let state = AppState::new(services);
let router = build_router(state);
router
.layer(middleware::cors_layer())
.layer(tower_http::compression::CompressionLayer::new())
.layer(middleware::trace_layer())
.layer(tower_http::request_id::SetRequestIdLayer::x_request_id(
middleware::UuidRequestIdGenerator::default(),
))
.layer(tower_http::request_id::PropagateRequestIdLayer::x_request_id())
}
pub fn build_api_server_with_config(
services: ServiceRegistry,
middleware_config: MiddlewareConfig,
) -> Router {
let state = AppState::new(services);
let mut router = build_router(state);
router = router.layer(middleware_config.cors.into_layer());
if middleware_config.enable_compression {
router = router.layer(tower_http::compression::CompressionLayer::new());
}
if middleware_config.enable_tracing {
router = router.layer(
tower_http::trace::TraceLayer::new_for_http()
.make_span_with(
tower_http::trace::DefaultMakeSpan::new()
.include_headers(true)
.level(tracing::Level::INFO),
)
.on_response(
tower_http::trace::DefaultOnResponse::new()
.include_headers(true)
.latency_unit(tower_http::LatencyUnit::Millis)
.level(tracing::Level::INFO),
),
);
}
router = router
.layer(tower_http::request_id::SetRequestIdLayer::x_request_id(
middleware::UuidRequestIdGenerator::default(),
))
.layer(tower_http::request_id::PropagateRequestIdLayer::x_request_id());
router
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_library_compiles() {
}
}