Boundary the runtime subscribes to for session lifecycle.
Hosts supply an implementation that pushes events from their realtime
session source — the Angular host's RealtimeSessionsAdapter bridges
RealtimeSessionService's SessionStarted$ / ActiveChannels$ / SessionEnded$
observables; a Node CLI or React app would write a different implementation.
Single-observable contract. One SessionLifecycle$ stream carries all
three event kinds (a discriminated union). Subscribers narrow with the kind
tag.
// When a future video session service ships, merge it with voice — the // runtime contract doesn't change. classMultiModalSessionsAdapterimplementsISessionsAdapter { publicreadonlySessionLifecycle$ = merge( this.voice.SessionLifecycle$, this.video.SessionLifecycle$, ); constructor(privatevoice: RealtimeSessionsAdapter, privatevideo: VideoSessionsAdapter) {} }
Push stream of session lifecycle events. Subscribers are typically the
runtime's SessionsObserver, which re-broadcasts to widget consumers
via ConversationsRuntime.Instance.Sessions.SessionLifecycle$.
Boundary the runtime subscribes to for session lifecycle.
Hosts supply an implementation that pushes events from their realtime session source — the Angular host's
RealtimeSessionsAdapterbridgesRealtimeSessionService'sSessionStarted$/ActiveChannels$/SessionEnded$observables; a Node CLI or React app would write a different implementation.Single-observable contract. One
SessionLifecycle$stream carries all three event kinds (a discriminated union). Subscribers narrow with thekindtag.Example: Angular host bootstrap
Example: Multi-source adapter (future)