mcpr_core/proxy/mod.rs
1//! # mcpr-proxy
2//!
3//! Proxy engine for mcpr: request routing, upstream forwarding, SSE streaming,
4//! and widget CSP rewriting.
5//!
6//! This crate contains the core proxy logic that sits between clients and
7//! upstream MCP servers. It handles request classification, HTTP forwarding,
8//! SSE stream management, and response rewriting for widget security (CSP).
9//!
10//! ## Responsibilities
11//!
12//! - **Request routing** (`router`): Classify incoming HTTP requests into typed
13//! variants: MCP JSON-RPC POST, MCP SSE GET, widget HTML, widget assets,
14//! OAuth callbacks, or passthrough.
15//!
16//! - **Upstream forwarding** (`forwarding`): HTTP client with connection pooling,
17//! semaphore-based concurrency limiting, configurable timeouts, and header
18//! forwarding (auth, content-type, MCP session ID).
19//!
20//! - **SSE handling** (`sse`): Extract JSON from SSE-wrapped responses, re-wrap
21//! JSON as SSE, and split upstream URLs into (base, path) components.
22//!
23//! - **Widget CSP rewriting** (`csp`, `rewrite`): Rewrite MCP response metadata
24//! to inject proxy domains into widget CSP arrays and `widgetDomain` fields.
25//! Supports both OpenAI and Claude widget metadata formats, with `Extend` and
26//! `Override` CSP modes.
27//!
28//! - **Proxy state** (`state`): Shared runtime state tracking MCP upstream
29//! health, tunnel status, widget discovery, cloud sync, and request counters.
30//! Used by the admin API, health checks, and future `mcpr proxy view` TUI.
31//!
32//! ## Module Structure
33//!
34//! ```text
35//! mcpr-proxy/src/
36//! +-- lib.rs # Crate root, re-exports
37//! +-- router.rs # ClassifiedRequest enum, classify() dispatcher
38//! +-- forwarding.rs # UpstreamClient, forward_request(), build_response()
39//! +-- sse.rs # SSE extract/wrap helpers, split_upstream()
40//! +-- csp.rs # CspMode enum, parse_csp_mode()
41//! +-- rewrite.rs # RewriteConfig, rewrite_response() for widget metadata
42//! +-- state.rs # ProxyState, ConnectionStatus, SharedProxyState
43//! ```
44
45pub mod csp;
46pub mod forwarding;
47pub mod rewrite;
48pub mod router;
49pub mod sse;
50pub mod state;
51
52pub use csp::{CspMode, parse_csp_mode};
53pub use rewrite::{RewriteConfig, rewrite_response};
54pub use state::{ConnectionStatus, ProxyState, SharedProxyState, lock_state, new_shared_state};