pub mod error;
pub mod extension;
pub mod services;
pub mod sse;
use axum::response::sse::Event;
use std::future::Future;
use systemprompt_identifiers::{ConnectionId, UserId};
use tokio::sync::mpsc::Sender;
pub type EventSender = Sender<Result<Event, std::convert::Infallible>>;
pub const SSE_BUFFER: usize = 1024;
pub use error::{EventError, EventResult};
pub use sse::ToSse;
pub trait Broadcaster: Send + Sync {
type Event: Clone + Send;
fn register(
&self,
user_id: &UserId,
connection_id: &ConnectionId,
sender: EventSender,
) -> impl Future<Output = bool> + Send;
fn unregister(
&self,
user_id: &UserId,
connection_id: &ConnectionId,
) -> impl Future<Output = ()> + Send;
fn broadcast(&self, user_id: &UserId, event: Self::Event)
-> impl Future<Output = usize> + Send;
fn connection_count(&self, user_id: &UserId) -> impl Future<Output = usize> + Send;
fn total_connections(&self) -> impl Future<Output = usize> + Send;
}
pub use extension::EventsExtension;
pub use services::{
A2A_BROADCASTER, A2ABroadcaster, AGUI_BROADCASTER, ANALYTICS_BROADCASTER, AgUiBroadcaster,
AnalyticsBroadcaster, CONTEXT_BROADCASTER, ConnectionGuard, ContextBroadcaster, EventRouter,
GenericBroadcaster, HEARTBEAT_INTERVAL, HEARTBEAT_JSON, OUTBOX_CHANNEL, OutboxChannel,
PostgresEventBridge, standard_keep_alive,
};