MemberIdentity
data class MemberIdentity(val displayName: String, val sessionId: String, val deviceId: String? = null)
Stable identity for a room member, used for dedup across reconnects.
deviceId is a hardware-stable identifier (preferred for dedup — survives app restart). sessionId is a session-scoped identifier minted at join time (fallback when deviceId is absent, e.g. on platforms that don't expose a stable hardware id).