Skip to content

Commit f83d6ba

Browse files
authored
Add support for passing in RN e2eeManager (#1324)
1 parent 171d21a commit f83d6ba

2 files changed

Lines changed: 37 additions & 7 deletions

File tree

packages/react/etc/components-react.api.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import { AudioAnalyserOptions } from 'livekit-client';
88
import { AudioCaptureOptions } from 'livekit-client';
9+
import { BaseE2EEManager } from 'livekit-client';
910
import { BaseKeyProvider } from 'livekit-client';
1011
import { CaptureOptionsBySource } from '@livekit/components-core';
1112
import { ChatMessage } from '@livekit/components-core';

packages/react/src/hooks/useSession.ts

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import {
1414
BaseKeyProvider,
1515
RoomOptions,
1616
ExternalE2EEKeyProvider,
17+
type BaseE2EEManager,
1718
} from 'livekit-client';
1819
import { EventEmitter } from 'events';
1920

@@ -194,10 +195,22 @@ type UseSessionEncryptionOptions =
194195
/** An instance of the E2EE webworker, which must be constructed using your js build tool's
195196
* webworker construction mechanism. */
196197
worker: Worker;
198+
199+
e2eeManager?: undefined;
197200
}
198201
| {
199202
key?: undefined;
200203
worker?: undefined;
204+
/**
205+
* For React Native usage: Pass the e2eeManager obtained from the `useRNE2EEManager()` hook
206+
* in the `\@livekit/react-native` package.
207+
*/
208+
e2eeManager: BaseE2EEManager;
209+
}
210+
| {
211+
key?: undefined;
212+
worker?: undefined;
213+
e2eeManager?: undefined;
201214
};
202215

203216
type UseSessionWithoutRoomOptions = {
@@ -372,8 +385,18 @@ export function useSession(
372385
...unstableRestOptions
373386
} = options;
374387

375-
const encryptionKey = unstableEncryption?.key ?? null;
376-
const encryptionWorker = unstableEncryption?.worker ?? null;
388+
const encryptionE2eeManager =
389+
unstableEncryption && 'e2eeManager' in unstableEncryption
390+
? unstableEncryption.e2eeManager
391+
: null;
392+
const encryptionKey =
393+
unstableEncryption && !('e2eeManager' in unstableEncryption)
394+
? (unstableEncryption.key ?? null)
395+
: null;
396+
const encryptionWorker =
397+
unstableEncryption && !('e2eeManager' in unstableEncryption)
398+
? (unstableEncryption.worker ?? null)
399+
: null;
377400

378401
const roomFromContext = useMaybeRoomContext();
379402

@@ -397,25 +420,31 @@ export function useSession(
397420
return preGeneratedRoom;
398421
}
399422

400-
const encryptionEnabled = !!(keyProvider && encryptionWorker);
423+
const encryptionViaWorker = !!(keyProvider && encryptionWorker);
424+
const encryptionViaManager = !!encryptionE2eeManager;
425+
const encryptionEnabled = encryptionViaWorker || encryptionViaManager;
401426

402427
const roomOptions: RoomOptions = {};
403-
if (encryptionEnabled) {
428+
if (encryptionViaWorker) {
404429
roomOptions.encryption = {
405430
keyProvider,
406431
worker: encryptionWorker,
407432
};
408-
} else {
433+
} else if (encryptionViaManager) {
434+
roomOptions.encryption = {
435+
e2eeManager: encryptionE2eeManager,
436+
};
437+
} else if (unstableEncryption !== undefined) {
409438
log.warn(
410-
'useSession options encryption was set, but required keys encryption.key and encryption.worker were omitted.',
439+
'useSession options encryption was set, but neither encryption.key with encryption.worker nor encryption.e2eeManager was provided.',
411440
);
412441
}
413442
const room = new Room(roomOptions);
414443
if (encryptionEnabled) {
415444
room.setE2EEEnabled(true);
416445
}
417446
return room;
418-
}, [roomFromContext, optionsRoom, keyProvider, encryptionWorker]);
447+
}, [roomFromContext, optionsRoom, keyProvider, encryptionWorker, encryptionE2eeManager]);
419448

420449
React.useEffect(() => {
421450
return () => {

0 commit comments

Comments
 (0)