use std::sync::Arc;
use axum::http::HeaderMap;
use axum::response::IntoResponse;
use systemprompt_events::AGUI_BROADCASTER;
use systemprompt_identifiers::{Actor, AgentName, ContextId, SessionId, TraceId};
use systemprompt_models::RequestContext;
use super::bridge_error::authenticate_bridge;
use crate::error::ApiHttpError;
use crate::routes::stream::create_sse_stream;
use crate::services::middleware::JwtContextExtractor;
pub async fn handle(
jwt_extractor: Arc<JwtContextExtractor>,
headers: HeaderMap,
) -> axum::response::Response {
let (_claims, user) = match authenticate_bridge(&jwt_extractor, &headers).await {
Ok(pair) => pair,
Err(e) => return ApiHttpError::from(e).into_response(),
};
let request_context = RequestContext::new(
SessionId::generate(),
TraceId::generate(),
ContextId::generate(),
AgentName::bridge(),
Actor::user(user.id),
);
create_sse_stream(request_context, &AGUI_BROADCASTER, "bridge")
.await
.into_response()
}