Files
mnote/rust/crates/mnote-web/src/routes/mod.rs
T

153 lines
5.6 KiB
Rust

mod bridge;
mod command_support;
mod compat;
mod documents;
mod editor;
mod gateway;
mod health;
mod hermes;
mod kernel;
mod local_folder_source;
mod local_folder_events;
mod local_markdown_parser;
mod media;
mod mindmap_shell;
mod onlyoffice;
mod query_support;
mod search;
mod session;
mod snapshot_support;
mod sse;
mod stream_support;
mod tree;
mod web_shell;
mod ws;
use crate::app::AppState;
use axum::routing::{any, get, post};
use axum::Router;
pub fn build_router(state: AppState) -> Router {
let hermes_base_path = state.config().hermes_base_path.clone();
let compat_next_base_path = state.config().compat_next_base_path.clone();
let enable_debug_shell_routes = state.config().enable_debug_shell_routes;
let mut router = Router::new()
.route("/health", get(health::health))
.route("/", get(gateway::root_entry))
.route("/favicon.ico", get(gateway::favicon))
.route("/auth", get(gateway::auth_entry).post(gateway::auth_entry))
.route("/search", get(search::shell))
.route(
"/mindmap/{doc_id}/{mindmap_id}",
get(mindmap_shell::mindmap_object_shell),
)
.route(
"/documents/{document_id}",
get(web_shell::document_page_shell),
)
.route(
"/api/page-aggregate/{document_id}",
get(web_shell::page_aggregate),
)
.route(
"/api/leptos-tiptap-runtime/manifest.json",
get(web_shell::leptos_tiptap_manifest),
)
.route(
"/api/leptos-tiptap-runtime/{*asset_path}",
get(web_shell::leptos_tiptap_asset),
)
.route(
"/api/editor/image-placeholder.svg",
get(web_shell::editor_image_placeholder_asset),
)
.route("/api/search/documents", post(search::documents))
.route("/api/gateway/health", get(gateway::gateway_health))
.route("/api/runtime/config", get(session::runtime_config))
.route("/api/auth", post(gateway::auth_api))
.route("/api/auth/session", get(session::session))
.route("/api/auth/whoami", get(session::session))
.route("/api/auth/mnote-web-token", get(session::session))
.route("/api/auth/session/refresh", post(session::refresh_session))
.route("/api/ai-agent/run", post(compat::next_ai_agent_run))
.route("/onlyoffice", get(onlyoffice::page))
.route("/onlyoffice-server/{*path}", any(onlyoffice::server_proxy))
.route("/cache/{*path}", any(onlyoffice::cache_proxy))
.route("/api/onlyoffice/sign", post(onlyoffice::sign))
.route("/api/onlyoffice/proxy", get(onlyoffice::proxy))
.route("/api/onlyoffice/callback", post(onlyoffice::callback))
.route("/api/onlyoffice/forcesave", post(onlyoffice::forcesave))
.route("/api/media/upload", post(media::upload))
.route("/api/media/sign", get(media::sign))
.route(
"/api/tree/filetree/upload-target-preflight",
post(media::filetree_upload_target_preflight),
)
.route("/api/documents/meta", get(documents::meta))
.route("/api/documents/content", get(documents::content))
.route("/api/documents/page", get(web_shell::documents_page_compat))
.route("/api/documents/purge", post(documents::purge))
.route("/api/documents/title", post(documents::title))
.route("/api/documents/options", post(documents::options))
.route("/api/documents/save", post(documents::save))
.route(
"/api/documents/runtime/transform",
post(editor::transform_runtime_snapshot),
)
.route(
"/api/tree/projections/sidebar",
get(kernel::project_tree_sidebar),
)
.route("/api/tree/projections/page", get(kernel::project_tree_page))
.route("/api/tree/projections/file", get(kernel::project_tree_file))
.route(
"/api/kernel/projections/sidebar",
get(kernel::project_sidebar),
)
.route("/api/kernel/subtree", get(kernel::subtree))
.route("/api/kernel/edges", get(kernel::edges))
.route("/api/kernel/graph", get(kernel::graph))
.route("/api/tree/commands", post(tree::tree_command))
.route(
"/api/tree/local-folder-watch",
get(tree::local_folder_watch),
)
.route(
"/api/local-folder/events",
get(local_folder_events::local_folder_events),
)
.route(
"/api/tree/runtime/reduce",
post(tree::reduce_tree_shell_runtime),
)
.route("/api/bridge/workspace", get(bridge::workspace))
.route("/api/bridge/request", get(bridge::request))
.route("/api/bridge/trace", get(bridge::trace))
.route("/api/tree/events", get(sse::tree_events))
.route("/api/stream/events", get(sse::events))
.route("/api/realtime/ws", get(ws::socket))
.nest(
&hermes_base_path,
Router::new()
.route("/health", get(hermes::health))
.route("/bridge", post(hermes::bridge_runtime)),
)
.nest(
&compat_next_base_path,
Router::new()
.route("/ai-agent/run", post(compat::next_ai_agent_run))
.route("/sidebar", get(compat::next_sidebar)),
)
.fallback(gateway::legacy_next_proxy);
if enable_debug_shell_routes {
router = router
.route("/tree", get(tree::tree_shell))
.route("/document-debug", get(editor::document_editor_shell))
.route("/document", get(editor::document_editor_shell));
}
router.with_state(state)
}