MarisUK's picture
Maris AI model sync
f440f03 verified
use axum::{
middleware,
routing::{get, post},
Router,
};
use tower_http::cors::{Any, CorsLayer};
use tower_http::trace::TraceLayer;
pub mod api;
pub mod app_state;
pub mod camera_auth;
pub mod config;
pub mod credential_crypto;
pub mod db;
pub mod event_bus;
pub mod event_narrator;
pub mod gpu_scheduler;
pub mod gpu_telemetry;
pub mod inference;
pub mod jwt_auth;
pub mod onvif_discovery;
pub mod orchestrator;
pub mod snapshot_store;
pub mod utils;
pub mod vendor_compat;
pub mod vision_runtime;
pub mod vision_store;
pub use app_state::AppState;
pub use config::Settings;
pub use jwt_auth::AuthClaims;
pub fn build_app(state: AppState) -> Router {
let cors = CorsLayer::new()
.allow_origin(Any)
.allow_methods(Any)
.allow_headers(Any);
let protected = Router::new()
.route("/api/system", get(api::system::system_info))
.route("/api/ops/console", get(api::ops::operations_console))
.route("/api/ops/evals", post(api::ops::submit_task_outcome))
.route("/api/admin/users", get(api::admin::list_users))
.route("/api/admin/users", post(api::admin::create_user))
.route("/api/admin/sessions", get(api::admin::list_sessions))
.route(
"/api/admin/sessions/:session_id/revoke",
post(api::admin::revoke_session),
)
.route(
"/api/admin/audit/credentials",
get(api::admin::list_credential_audit),
)
.route("/api/auth/me", get(api::auth::me))
.route("/api/auth/logout", post(api::auth::logout))
.route("/api/chat", post(api::chat::chat))
.route("/api/voice/synthesize", post(api::voice::synthesize))
.route("/api/voice/transcribe", post(api::voice::transcribe))
.route("/api/images", post(api::images::generate_image))
.route("/api/vision/analyze", post(api::vision::analyze_image))
.route("/api/vision/ocr", post(api::vision::ocr_image))
.route(
"/api/vision/pose-estimate",
post(api::vision::estimate_pose),
)
.route("/api/vision/segment", post(api::vision::segment_image))
.route(
"/api/vision/action-recognize",
post(api::vision::recognize_action),
)
.route("/api/vision/tracking", post(api::vision::track_objects))
.route(
"/api/vision/frame-analysis",
post(api::vision::analyze_frames),
)
.route(
"/api/vision/scene-timeline",
post(api::vision::scene_timeline),
)
.route("/api/vision/cameras", get(api::vision::list_live_cameras))
.route("/api/vision/dashboard", get(api::vision::vision_dashboard))
.route(
"/api/vision/onvif/discover",
post(api::vision::discover_onvif_devices),
)
.route(
"/api/vision/cameras/connect",
post(api::vision::connect_live_camera),
)
.route(
"/api/vision/cameras/:camera_id/start",
post(api::vision::start_live_camera),
)
.route(
"/api/vision/cameras/:camera_id/pause",
post(api::vision::pause_live_camera),
)
.route(
"/api/vision/cameras/:camera_id/stop",
post(api::vision::stop_live_camera),
)
.route(
"/api/vision/cameras/:camera_id/snapshot",
get(api::vision::live_camera_snapshot),
)
.route(
"/api/vision/cameras/:camera_id/state",
get(api::vision::live_camera_state),
)
.route(
"/api/vision/cameras/:camera_id/events",
get(api::vision::live_camera_events),
)
.route(
"/api/vision/cameras/:camera_id/config",
post(api::vision::update_live_camera_config),
)
.route(
"/api/vision/cameras/:camera_id/timeline/snapshots",
get(api::vision::camera_timeline_snapshots),
)
.route(
"/api/vision/cameras/:camera_id/snapshot/:frame_index",
get(api::vision::camera_frame_snapshot),
)
.route(
"/api/vision/cameras/:camera_id/access",
get(api::vision::list_camera_access),
)
.route(
"/api/vision/cameras/:camera_id/access/grant",
post(api::vision::grant_camera_access),
)
.route(
"/api/vision/cameras/:camera_id/access/:access_id/revoke",
post(api::vision::revoke_camera_access),
)
.route(
"/api/vision/credentials/rotate",
post(api::vision::rotate_camera_credentials),
)
.route(
"/api/vision/cameras/:camera_id/events/:event_id/narrate",
post(api::vision::generate_camera_event_narration),
)
.route(
"/api/vision/cameras/:camera_id/narrations",
get(api::vision::list_camera_narrations),
)
.route("/api/vision/gpu/jobs", get(api::vision::list_gpu_jobs))
.route(
"/api/vision/gpu/resources",
get(api::vision::list_gpu_resources),
)
.route("/api/vision/events/subscribe", get(api::events::subscribe))
.route(
"/api/vision/cameras/:camera_id/ws",
get(api::vision::live_camera_ws),
)
.route(
"/api/vision/cameras/:camera_id/events/ws",
get(api::vision::live_camera_ws),
)
.route("/api/music", post(api::music::generate_music))
.route(
"/api/music/providers/search",
post(api::music::search_music_providers),
)
.route("/api/video", post(api::video::generate_video))
.route("/api/code", post(api::code::generate_code))
.route("/api/code/fix", post(api::code::fix_code))
.route("/api/code/download", get(api::code::download_project_zip))
.route("/api/code/preview", get(api::code::preview_code_changes))
.route("/api/code/apply", post(api::code::apply_workspace_to_repo))
.route("/api/code/import", post(api::code::import_bundle_to_repo))
.route("/api/chat/stream", post(api::chat::chat_stream))
.route(
"/api/autonomous/start",
post(api::autonomous::start_session),
)
.route(
"/api/autonomous/status/:id",
get(api::autonomous::get_status),
)
.route(
"/api/autonomous/status/:id/stream",
get(api::autonomous::stream_status),
);
Router::new()
.route("/health", get(api::health::health_check))
.route("/ready", get(api::health::readiness_check))
.route("/api/auth/bootstrap", post(api::auth::bootstrap))
.route("/api/auth/login", post(api::auth::login))
.route("/api/auth/refresh", post(api::auth::refresh))
.merge(protected.route_layer(middleware::from_fn_with_state(
state.clone(),
app_state::jwt_auth_middleware,
)))
.layer(cors)
.layer(TraceLayer::new_for_http())
.with_state(state)
}