diff --git a/package.json b/package.json index 14f4cd4c8..014ce025b 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "livekit-client": "^2.0.2", "lodash": "^4.17.21", "loglevel": "^1.9.1", - "matrix-js-sdk": "matrix-org/matrix-js-sdk#baa6d135065637c9769c61325c69709d3618f5f1", + "matrix-js-sdk": "^34.7.0", "matrix-widget-api": "^1.8.2", "normalize.css": "^8.0.1", "observable-hooks": "^4.2.3", diff --git a/src/e2ee/matrixKeyProvider.test.ts b/src/e2ee/matrixKeyProvider.test.ts new file mode 100644 index 000000000..e5b4015f3 --- /dev/null +++ b/src/e2ee/matrixKeyProvider.test.ts @@ -0,0 +1,72 @@ +/* +Copyright 2024 New Vector Ltd. + +SPDX-License-Identifier: AGPL-3.0-only +Please see LICENSE in the repository root for full details. +*/ + +import { describe, expect, test, vi } from "vitest"; +import { + MatrixRTCSession, + MatrixRTCSessionEvent, +} from "matrix-js-sdk/src/matrixrtc"; +import { KeyProviderEvent } from "livekit-client"; + +import { MatrixKeyProvider } from "./matrixKeyProvider"; + +function mockRTCSession(): MatrixRTCSession { + return { + on: vi.fn(), + off: vi.fn(), + reemitEncryptionKeys: vi.fn(), + } as unknown as MatrixRTCSession; +} + +describe("matrixKeyProvider", () => { + test("initializes", () => { + const keyProvider = new MatrixKeyProvider(); + expect(keyProvider).toBeTruthy(); + }); + + test("listens for key requests and emits existing keys", () => { + const keyProvider = new MatrixKeyProvider(); + + const session = mockRTCSession(); + + keyProvider.setRTCSession(session); + + expect(session.on).toHaveBeenCalledWith( + MatrixRTCSessionEvent.EncryptionKeyChanged, + expect.any(Function), + ); + expect(session.off).not.toHaveBeenCalled(); + }); + + test("stops listening when session changes", () => { + const keyProvider = new MatrixKeyProvider(); + + const session1 = mockRTCSession(); + const session2 = mockRTCSession(); + + keyProvider.setRTCSession(session1); + expect(session1.off).not.toHaveBeenCalled(); + + keyProvider.setRTCSession(session2); + expect(session1.off).toHaveBeenCalledWith( + MatrixRTCSessionEvent.EncryptionKeyChanged, + expect.any(Function), + ); + }); + + test("emits existing keys", () => { + const keyProvider = new MatrixKeyProvider(); + const setKeyListener = vi.fn(); + keyProvider.on(KeyProviderEvent.SetKey, setKeyListener); + + const session = mockRTCSession(); + + keyProvider.setRTCSession(session); + + expect(session.reemitEncryptionKeys).toHaveBeenCalled(); + }); +}); diff --git a/src/e2ee/matrixKeyProvider.ts b/src/e2ee/matrixKeyProvider.ts index d84c3684c..c25be5cd5 100644 --- a/src/e2ee/matrixKeyProvider.ts +++ b/src/e2ee/matrixKeyProvider.ts @@ -35,15 +35,8 @@ export class MatrixKeyProvider extends BaseKeyProvider { ); // The new session could be aware of keys of which the old session wasn't, - // so emit a key changed event. - for (const [ - participant, - encryptionKeys, - ] of this.rtcSession.getEncryptionKeys()) { - for (const [index, encryptionKey] of encryptionKeys.entries()) { - this.onEncryptionKeyChanged(encryptionKey, index, participant); - } - } + // so emit key changed events + this.rtcSession.reemitEncryptionKeys(); } private onEncryptionKeyChanged = ( diff --git a/yarn.lock b/yarn.lock index e0accfbad..ff0f3c2f3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5890,9 +5890,10 @@ matrix-events-sdk@0.0.1: resolved "https://registry.yarnpkg.com/matrix-events-sdk/-/matrix-events-sdk-0.0.1.tgz#c8c38911e2cb29023b0bbac8d6f32e0de2c957dd" integrity sha512-1QEOsXO+bhyCroIe2/A5OwaxHvBm7EsSQ46DEDn8RBIfQwN5HWBpFvyWWR4QY0KHPPnnJdI99wgRiAl7Ad5qaA== -matrix-js-sdk@matrix-org/matrix-js-sdk#baa6d135065637c9769c61325c69709d3618f5f1: - version "34.6.0" - resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/baa6d135065637c9769c61325c69709d3618f5f1" +matrix-js-sdk@^34.7.0: + version "34.7.0" + resolved "https://registry.yarnpkg.com/matrix-js-sdk/-/matrix-js-sdk-34.7.0.tgz#243e4eacbedd98a1096135a75765756cda910b7b" + integrity sha512-epauE/ZwksDyadm+0vg+g1keRUo600H/b1MzDZbaIrCY9fELzq3fIWctq9IxMQE/EEPe9jjLiNDooGJT5JJ2Ag== dependencies: "@babel/runtime" "^7.12.5" "@matrix-org/matrix-sdk-crypto-wasm" "^9.0.0"