The channel to join.
The channel to leave.
Every current member's nick.
The room's kind, present only for a $ channel.
The role granted to us specifically, present only for a $ channel.
Who currently publishes, for a $ channel.
Hints mapping media lines to the members they belong to.
The TURN credentials for this call.
Set when this frame is one of several chunks sharing an id.
The offer SDP, or one slice of it when chunk is set.
Track-attribution hints, carried only on chunk 0 or an unchunked offer.
Set when this frame is one of several chunks sharing an id.
The answer SDP, or one slice of it when chunk is set.
The candidate string.
The media line it applies to.
The media line's index, when mid is absent.
Which toggle, when state is [PresenceState::On] or [PresenceState::Off].
Who this is about.
The role granted, when state is [PresenceState::Joined] in a $ room.
What changed.
The new state.
The new state.
The new state.
The new state.
The new state.
The emoji.
Who reacted, present only on the inbound broadcast.
The member to promote.
The member to demote.
Whose role changed.
Their new role.
A human-readable reason, when the server gave one.
One
+obsidianirc/rtcsignalling frame.Every variant is one JSON object's
type. The published https://github.com/obbyworld/extensions/blob/main/voice.md documents only 9 of these, the wire carries 19, and this enum follows the wire. Outbound intent and inbound notification are modelled as distinct shapes where the wire actually distinguishes them (mic/video/screen/hand/speaking/silent/deafversus thepresencethey get rebroadcast as;promote/demoteversusrole), rather than collapsed into one type as the published table's prose implies.