//! WebSocket subsystem: the browser bidirectional path //! (ADR-067, `docs/architecture/decisions`). //! //! A WS session carries the **channels protocol**: the 8-byte chunk //! header multiplexes N logical channels over the WS binary message //! stream; channel 0 is pre-negotiated as `alk/call` and dispatched by //! the shared `Dispatcher`. The WS↔byte-stream adapter (`byte_adapter`) //! is the single seam between axum's WS and //! alkcall's byte-oriented channels machinery — shared with the //! `from_wss` consumer path ([ADR-070]). pub mod byte_adapter; pub mod upgrade; pub use byte_adapter::{ split_ws_to_bytes, split_ws_to_bytes_idle, WsByteStream, WsPumps, DEFAULT_WS_IDLE_TIMEOUT, DEFAULT_WS_WRITE_TIMEOUT, INBOUND_WS_FRAME_CAP, INBOUND_WS_MESSAGE_CAP, MAX_CHUNK_LEN, PENDING_BUFFER_CAP, WS_GOING_AWAY, WS_MESSAGE_CAP, WS_PROTOCOL_ERROR, }; #[cfg(any(test, feature = "wss"))] pub use byte_adapter::split_tungstenite_to_bytes; #[cfg(any(test, feature = "wss"))] #[allow(unused_imports)] pub(crate) use upgrade::adapter_install_channel_zero; pub use upgrade::{ run_channels_session, ws_bearer_auth, ws_upgrade_handler, ChannelsPolicy, SessionState, WsSessions, DEFAULT_WS_MAX_SESSIONS, }; #[cfg(any(test, feature = "test-support"))] pub use upgrade::test_support::{frame_channel0_chunk, ChunkAssembler, FrameAssembler, WsClient};