From c1e458ddbdfbe0dad3f0b13a6cc660708ff7ac70 Mon Sep 17 00:00:00 2001 From: Timo K Date: Tue, 13 Feb 2024 19:00:27 +0100 Subject: [PATCH 1/6] ignore memberships of users that are not in the call Signed-off-by: Timo K --- src/matrixrtc/MatrixRTCSession.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/matrixrtc/MatrixRTCSession.ts b/src/matrixrtc/MatrixRTCSession.ts index b8ee6626fd0..0872760ef24 100644 --- a/src/matrixrtc/MatrixRTCSession.ts +++ b/src/matrixrtc/MatrixRTCSession.ts @@ -152,9 +152,11 @@ export class MatrixRTCSession extends TypedEventEmitter Date: Wed, 14 Feb 2024 12:10:32 +0100 Subject: [PATCH 2/6] recompute memberships on room member change. Signed-off-by: Timo K --- src/matrixrtc/MatrixRTCSession.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/matrixrtc/MatrixRTCSession.ts b/src/matrixrtc/MatrixRTCSession.ts index 0872760ef24..b740c9194d6 100644 --- a/src/matrixrtc/MatrixRTCSession.ts +++ b/src/matrixrtc/MatrixRTCSession.ts @@ -22,7 +22,7 @@ import { MatrixClient } from "../client"; import { EventType } from "../@types/event"; import { CallMembership, CallMembershipData } from "./CallMembership"; import { Focus } from "./focus"; -import { MatrixError, MatrixEvent } from "../matrix"; +import { MatrixError, MatrixEvent, RoomEvent } from "../matrix"; import { randomString, secureRandomBase64Url } from "../randomstring"; import { EncryptionKeysEventContent } from "./types"; import { decodeBase64, encodeUnpaddedBase64 } from "../base64"; @@ -193,6 +193,7 @@ export class MatrixRTCSession extends TypedEventEmitter Date: Wed, 14 Feb 2024 12:24:57 +0100 Subject: [PATCH 3/6] fix Tests and add test for left member Signed-off-by: Timo K --- spec/unit/matrixrtc/MatrixRTCSession.spec.ts | 9 +++++++++ spec/unit/matrixrtc/mocks.ts | 3 +++ 2 files changed, 12 insertions(+) diff --git a/spec/unit/matrixrtc/MatrixRTCSession.spec.ts b/spec/unit/matrixrtc/MatrixRTCSession.spec.ts index c1faa5ac0c3..34db746c53e 100644 --- a/spec/unit/matrixrtc/MatrixRTCSession.spec.ts +++ b/spec/unit/matrixrtc/MatrixRTCSession.spec.ts @@ -74,6 +74,13 @@ describe("MatrixRTCSession", () => { expect(sess?.memberships[0].deviceId).toEqual("AAAAAAA"); }); + it("ignores memberships events of members not in the room", () => { + const mockRoom = makeMockRoom([membershipTemplate]); + mockRoom.hasMembershipState = (state) => state === "join"; + sess = MatrixRTCSession.roomSessionForRoom(client, mockRoom); + expect(sess?.memberships.length).toEqual(0); + }); + it("honours created_ts", () => { const expiredMembership = Object.assign({}, membershipTemplate); expiredMembership.created_ts = 500; @@ -91,6 +98,7 @@ describe("MatrixRTCSession", () => { it("safely ignores events with no memberships section", () => { const mockRoom = { + ...makeMockRoom([]), roomId: randomString(8), getLiveTimeline: jest.fn().mockReturnValue({ getState: jest.fn().mockReturnValue({ @@ -112,6 +120,7 @@ describe("MatrixRTCSession", () => { it("safely ignores events with junk memberships section", () => { const mockRoom = { + ...makeMockRoom([]), roomId: randomString(8), getLiveTimeline: jest.fn().mockReturnValue({ getState: jest.fn().mockReturnValue({ diff --git a/spec/unit/matrixrtc/mocks.ts b/spec/unit/matrixrtc/mocks.ts index e342eb2dc63..ac5d48a1363 100644 --- a/spec/unit/matrixrtc/mocks.ts +++ b/spec/unit/matrixrtc/mocks.ts @@ -24,6 +24,9 @@ export function makeMockRoom(memberships: CallMembershipData[], localAge: number const roomState = makeMockRoomState(memberships, roomId, localAge); return { roomId: roomId, + on: jest.fn(), + off: jest.fn(), + hasMembershipState: jest.fn().mockReturnValue(true), getLiveTimeline: jest.fn().mockReturnValue({ getState: jest.fn().mockReturnValue(roomState), }), From c7f9665fc4a9e46afb9641b33f15916d81e9ae81 Mon Sep 17 00:00:00 2001 From: Timo K Date: Wed, 14 Feb 2024 12:29:44 +0100 Subject: [PATCH 4/6] fix event type Signed-off-by: Timo K --- src/matrixrtc/MatrixRTCSession.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/matrixrtc/MatrixRTCSession.ts b/src/matrixrtc/MatrixRTCSession.ts index b740c9194d6..59af67c8cb3 100644 --- a/src/matrixrtc/MatrixRTCSession.ts +++ b/src/matrixrtc/MatrixRTCSession.ts @@ -22,7 +22,7 @@ import { MatrixClient } from "../client"; import { EventType } from "../@types/event"; import { CallMembership, CallMembershipData } from "./CallMembership"; import { Focus } from "./focus"; -import { MatrixError, MatrixEvent, RoomEvent } from "../matrix"; +import { MatrixError, MatrixEvent, RoomStateEvent } from "../matrix"; import { randomString, secureRandomBase64Url } from "../randomstring"; import { EncryptionKeysEventContent } from "./types"; import { decodeBase64, encodeUnpaddedBase64 } from "../base64"; @@ -193,7 +193,7 @@ export class MatrixRTCSession extends TypedEventEmitter Date: Wed, 14 Feb 2024 13:02:24 +0100 Subject: [PATCH 5/6] fix import desaster Signed-off-by: Timo K --- src/matrixrtc/MatrixRTCSession.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/matrixrtc/MatrixRTCSession.ts b/src/matrixrtc/MatrixRTCSession.ts index 59af67c8cb3..99e2c561193 100644 --- a/src/matrixrtc/MatrixRTCSession.ts +++ b/src/matrixrtc/MatrixRTCSession.ts @@ -21,8 +21,9 @@ import { Room } from "../models/room"; import { MatrixClient } from "../client"; import { EventType } from "../@types/event"; import { CallMembership, CallMembershipData } from "./CallMembership"; +import { RoomStateEvent } from "../models/room-state"; import { Focus } from "./focus"; -import { MatrixError, MatrixEvent, RoomStateEvent } from "../matrix"; +import { MatrixError, MatrixEvent } from "../matrix"; import { randomString, secureRandomBase64Url } from "../randomstring"; import { EncryptionKeysEventContent } from "./types"; import { decodeBase64, encodeUnpaddedBase64 } from "../base64"; @@ -193,7 +194,8 @@ export class MatrixRTCSession extends TypedEventEmitter Date: Wed, 14 Feb 2024 13:06:33 +0100 Subject: [PATCH 6/6] fix mocks Signed-off-by: Timo K --- spec/unit/matrixrtc/MatrixRTCSession.spec.ts | 4 ++++ spec/unit/matrixrtc/mocks.ts | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/spec/unit/matrixrtc/MatrixRTCSession.spec.ts b/spec/unit/matrixrtc/MatrixRTCSession.spec.ts index 34db746c53e..2c40e9a2230 100644 --- a/spec/unit/matrixrtc/MatrixRTCSession.spec.ts +++ b/spec/unit/matrixrtc/MatrixRTCSession.spec.ts @@ -102,6 +102,8 @@ describe("MatrixRTCSession", () => { roomId: randomString(8), getLiveTimeline: jest.fn().mockReturnValue({ getState: jest.fn().mockReturnValue({ + on: jest.fn(), + off: jest.fn(), getStateEvents: (_type: string, _stateKey: string) => [ { getType: jest.fn().mockReturnValue(EventType.GroupCallMemberPrefix), @@ -124,6 +126,8 @@ describe("MatrixRTCSession", () => { roomId: randomString(8), getLiveTimeline: jest.fn().mockReturnValue({ getState: jest.fn().mockReturnValue({ + on: jest.fn(), + off: jest.fn(), getStateEvents: (_type: string, _stateKey: string) => [ { getType: jest.fn().mockReturnValue(EventType.GroupCallMemberPrefix), diff --git a/spec/unit/matrixrtc/mocks.ts b/spec/unit/matrixrtc/mocks.ts index ac5d48a1363..84496e657da 100644 --- a/spec/unit/matrixrtc/mocks.ts +++ b/spec/unit/matrixrtc/mocks.ts @@ -24,8 +24,6 @@ export function makeMockRoom(memberships: CallMembershipData[], localAge: number const roomState = makeMockRoomState(memberships, roomId, localAge); return { roomId: roomId, - on: jest.fn(), - off: jest.fn(), hasMembershipState: jest.fn().mockReturnValue(true), getLiveTimeline: jest.fn().mockReturnValue({ getState: jest.fn().mockReturnValue(roomState), @@ -36,6 +34,8 @@ export function makeMockRoom(memberships: CallMembershipData[], localAge: number export function makeMockRoomState(memberships: CallMembershipData[], roomId: string, localAge: number | null = null) { const event = mockRTCEvent(memberships, roomId, localAge); return { + on: jest.fn(), + off: jest.fn(), getStateEvents: (_: string, stateKey: string) => { if (stateKey !== undefined) return event; return [event];