@@ -14,6 +14,7 @@ import {
1414 BaseKeyProvider ,
1515 RoomOptions ,
1616 ExternalE2EEKeyProvider ,
17+ type BaseE2EEManager ,
1718} from 'livekit-client' ;
1819import { 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
203216type 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