use async_trait::async_trait;
use axum::response::Response;
use super::context::{RequestContext, ResponseContext};
use crate::proxy::proxy_state::ProxyState;
pub mod health;
pub mod rewrite_url;
pub mod schema;
pub mod session;
pub mod sse;
pub mod upstream_url_map;
pub mod widget_overlay;
pub use health::McpHealthMiddleware;
pub use rewrite_url::UrlRewriteMiddleware;
pub use schema::{SchemaIngestMiddleware, StaleMarkMiddleware};
pub use session::{DeleteSessionEndMiddleware, SessionStartMiddleware, SessionTouchMiddleware};
pub use sse::{SseUnwrapMiddleware, SseWrapMiddleware};
pub use upstream_url_map::UpstreamUrlMapMiddleware;
pub use widget_overlay::WidgetOverlayMiddleware;
#[async_trait]
pub trait RequestMiddleware: Send + Sync {
async fn on_request(&self, state: &ProxyState, ctx: &mut RequestContext) -> Option<Response>;
}
#[async_trait]
pub trait ResponseMiddleware: Send + Sync {
async fn on_response(
&self,
state: &ProxyState,
req: &RequestContext,
resp: &mut ResponseContext,
);
}