From 3f030e64ddd56d77b95757721fedd91943e36d00 Mon Sep 17 00:00:00 2001 From: Robin Date: Mon, 12 Oct 2026 10:04:47 +0200 Subject: [PATCH] Match LiveKit participants against all backend identities A member authenticated through the legacy JWT endpoint publishes under a `user:device` identity, while one authenticated through the default endpoint publishes under a hashed identity. Both are listed in the membership's backend identities, so match against the whole list rather than only the primary one. --- .../CallViewModel/remoteMembers/MatrixLivekitMembers.ts | 4 ++-- src/utils/test.ts | 7 ++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/state/CallViewModel/remoteMembers/MatrixLivekitMembers.ts b/src/state/CallViewModel/remoteMembers/MatrixLivekitMembers.ts index 6c9fff026..e7bd9e7ae 100644 --- a/src/state/CallViewModel/remoteMembers/MatrixLivekitMembers.ts +++ b/src/state/CallViewModel/remoteMembers/MatrixLivekitMembers.ts @@ -111,8 +111,8 @@ export function createRemoteMatrixLivekitMembers$({ const participants = transport ? managerData.getParticipantsForTransport(transport) : []; - const matches = participants.filter( - (p) => p.identity == membership.rtcBackendIdentity, + const matches = participants.filter((p) => + membership.backendIdentities.includes(p.identity), ); const participant = matches[0] ?? null; const connection = transport diff --git a/src/utils/test.ts b/src/utils/test.ts index 6af9fd8c7..32e5cce17 100644 --- a/src/utils/test.ts +++ b/src/utils/test.ts @@ -261,11 +261,12 @@ export function mockRtcMembership( content: data, }); - const membershipData = CallMembership.membershipDataFromMatrixEvent(event); + const backendIdentity = rtcBackendIdentity ?? `${userId}:${deviceId}`; const cms = new CallMembership( event, - membershipData, - rtcBackendIdentity ?? `${userId}:${deviceId}`, + CallMembership.membershipDataFromMatrixEvent(event), + [backendIdentity], + backendIdentity, ); vi.mocked(cms).getTransport = vi.fn().mockReturnValue(fociPreferred[0]);