diff --git a/src/livekit/useLiveKit.ts b/src/livekit/useLiveKit.ts index 3e6f6397..991a4440 100644 --- a/src/livekit/useLiveKit.ts +++ b/src/livekit/useLiveKit.ts @@ -56,11 +56,11 @@ interface UseLivekitResult { export function useLiveKit( rtcSession: MatrixRTCSession, muteStates: MuteStates, - sfuConfig?: SFUConfig, - e2eeConfig?: E2EEConfig, + sfuConfig: SFUConfig | undefined, + e2eeConfig: E2EEConfig, ): UseLivekitResult { const e2eeOptions = useMemo((): E2EEOptions | undefined => { - if (!e2eeConfig || e2eeConfig.mode === E2eeType.NONE) return undefined; + if (e2eeConfig.mode === E2eeType.NONE) return undefined; if (e2eeConfig.mode === E2eeType.PER_PARTICIPANT) { return { @@ -79,7 +79,7 @@ export function useLiveKit( }, [e2eeConfig]); useEffect(() => { - if (!e2eeConfig || !e2eeOptions) return; + if (e2eeConfig.mode === E2eeType.NONE || !e2eeOptions) return; if (e2eeConfig.mode === E2eeType.PER_PARTICIPANT) { (e2eeOptions.keyProvider as MatrixKeyProvider).setRTCSession(rtcSession); @@ -137,7 +137,11 @@ export function useLiveKit( // We have to create the room manually here due to a bug inside // @livekit/components-react. JSON.stringify() is used in deps of a // useEffect() with an argument that references itself, if E2EE is enabled - const roomWithoutProps = useMemo(() => new Room(roomOptions), [roomOptions]); + const roomWithoutProps = useMemo(() => { + const r = new Room(roomOptions); + r.setE2EEEnabled(e2eeConfig.mode !== E2eeType.NONE); + return r; + }, [roomOptions, e2eeConfig]); const { room } = useLiveKitRoom({ token: sfuConfig?.jwt, serverUrl: sfuConfig?.url, diff --git a/src/room/GroupCallView.tsx b/src/room/GroupCallView.tsx index 69f466f2..e4f65d2e 100644 --- a/src/room/GroupCallView.tsx +++ b/src/room/GroupCallView.tsx @@ -249,11 +249,13 @@ export const GroupCallView: FC = ({ } }, [isJoined, rtcSession]); - const e2eeConfig = useMemo((): E2EEConfig | undefined => { + const e2eeConfig = useMemo((): E2EEConfig => { if (perParticipantE2EE) { return { mode: E2eeType.PER_PARTICIPANT }; } else if (e2eeSharedKey) { return { mode: E2eeType.SHARED_KEY, sharedKey: e2eeSharedKey }; + } else { + return { mode: E2eeType.NONE }; } }, [perParticipantE2EE, e2eeSharedKey]); diff --git a/src/room/InCallView.tsx b/src/room/InCallView.tsx index ac0bbf9b..a6cd5ffa 100644 --- a/src/room/InCallView.tsx +++ b/src/room/InCallView.tsx @@ -95,7 +95,7 @@ const POST_FOCUS_PARTICIPANT_UPDATE_DELAY_MS = 3000; export interface ActiveCallProps extends Omit { - e2eeConfig?: E2EEConfig; + e2eeConfig: E2EEConfig; } export const ActiveCall: FC = (props) => { @@ -111,10 +111,6 @@ export const ActiveCall: FC = (props) => { return null; } - if (props.e2eeConfig && !livekitRoom.isE2EEEnabled) { - livekitRoom.setE2EEEnabled(!!props.e2eeConfig); - } - return (