diff --git a/ci/ios/Podfile.lock b/ci/ios/Podfile.lock index 6cf112ab..182920df 100644 --- a/ci/ios/Podfile.lock +++ b/ci/ios/Podfile.lock @@ -7,7 +7,7 @@ PODS: - hermes-engine (0.74.2): - hermes-engine/Pre-built (= 0.74.2) - hermes-engine/Pre-built (0.74.2) - - livekit-react-native (2.8.0): + - livekit-react-native (2.9.1): - DoubleConversion - glog - hermes-engine @@ -29,9 +29,9 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - livekit-react-native-webrtc (137.0.0): + - livekit-react-native-webrtc (137.0.2): - React-Core - - WebRTC-SDK (= 137.7151.02) + - WebRTC-SDK (= 137.7151.04) - RCT-Folly (2024.01.01.00): - boost - DoubleConversion @@ -1190,7 +1190,7 @@ PODS: - React-perflogger (= 0.74.2) - React-utils (= 0.74.2) - SocketRocket (0.7.0) - - WebRTC-SDK (137.7151.02) + - WebRTC-SDK (137.7151.04) - Yoga (0.0.0) DEPENDENCIES: @@ -1380,8 +1380,8 @@ SPEC CHECKSUMS: fmt: 4c2741a687cc09f0634a2e2c72a838b99f1ff120 glog: c5d68082e772fa1c511173d6b30a9de2c05a69a2 hermes-engine: 01d3e052018c2a13937aca1860fbedbccd4a41b7 - livekit-react-native: f5555a11014ee4d00ff52e7d8d2148ac6c1eb3c5 - livekit-react-native-webrtc: 323f7edcea8d64e5abf1455d8c552b69cd2599b1 + livekit-react-native: 22180f283c63416a81f8765555fccc7a33f0a044 + livekit-react-native-webrtc: 3bb1be767c4e489f69bca662eba1c5e7b1e1be0d RCT-Folly: 02617c592a293bd6d418e0a88ff4ee1f88329b47 RCTDeprecation: b03c35057846b685b3ccadc9bfe43e349989cdb2 RCTRequired: 194626909cfa8d39ca6663138c417bc6c431648c @@ -1430,7 +1430,7 @@ SPEC CHECKSUMS: React-utils: 4476b7fcbbd95cfd002f3e778616155241d86e31 ReactCommon: ecad995f26e0d1e24061f60f4e5d74782f003f12 SocketRocket: abac6f5de4d4d62d24e11868d7a2f427e0ef940d - WebRTC-SDK: d20de357dcbf7c9696b124b39f3ff62125107e4b + WebRTC-SDK: 40d4f5ba05cadff14e4db5614aec402a633f007e Yoga: ae3c32c514802d30f687a04a6a35b348506d411f PODFILE CHECKSUM: 7e787510e5e3fbe259a5a7507ea2e7e1b1ff65ef diff --git a/ci/package.json b/ci/package.json index 43bbd365..5ba5b9f5 100644 --- a/ci/package.json +++ b/ci/package.json @@ -12,8 +12,8 @@ }, "dependencies": { "@livekit/react-native": "*", - "@livekit/react-native-webrtc": "^137.0.1", - "livekit-client": "^2.15.4", + "@livekit/react-native-webrtc": "^137.0.2", + "livekit-client": "^2.15.8", "react": "18.2.0", "react-native": "0.74.2" }, diff --git a/ci/yarn.lock b/ci/yarn.lock index 270823c7..b5fb7545 100644 --- a/ci/yarn.lock +++ b/ci/yarn.lock @@ -2165,25 +2165,25 @@ __metadata: languageName: node linkType: hard -"@livekit/protocol@npm:1.39.3": - version: 1.39.3 - resolution: "@livekit/protocol@npm:1.39.3" +"@livekit/protocol@npm:1.42.0": + version: 1.42.0 + resolution: "@livekit/protocol@npm:1.42.0" dependencies: "@bufbuild/protobuf": ^1.10.0 - checksum: 72aa3b9e82203ccec039047518d841d65b10dcc11ab9d661f269eab8a8672aed7b2d072f4f09cc6fb94a2579542b0a9216d7f66476d34cd1675c13e1ebcc119f + checksum: 6b1b194c69aa85c1d86b94eacc6ef163a85c56e66532c39737c2f9d1c6a2037c7fe499e474a823f4a332c7e87f4631be04e67bab57e12cdbba00bdcea202b7e9 languageName: node linkType: hard -"@livekit/react-native-webrtc@npm:^137.0.1": - version: 137.0.1 - resolution: "@livekit/react-native-webrtc@npm:137.0.1" +"@livekit/react-native-webrtc@npm:^137.0.2": + version: 137.0.2 + resolution: "@livekit/react-native-webrtc@npm:137.0.2" dependencies: base64-js: 1.5.1 debug: 4.3.4 event-target-shim: 6.0.2 peerDependencies: react-native: ">=0.60.0" - checksum: 3341aafe7d9d1deb345e47247faa020b2cb5f1adbded135a244f0f9285eed720c9f62325bbce0e21c1da755ae24ae6c69eb07728cece709560f615908bde43a9 + checksum: c23467701c7dfb74e3b223dd955b20ba1586c2186383f5b2595fff9b65a36b2db0b660de9935e009b69bc5e0bbff047d0f598495f8464daae8db5f8d9f9b7c24 languageName: node linkType: hard @@ -3872,7 +3872,7 @@ __metadata: "@babel/preset-env": ^7.20.0 "@babel/runtime": ^7.20.0 "@livekit/react-native": "*" - "@livekit/react-native-webrtc": ^137.0.1 + "@livekit/react-native-webrtc": ^137.0.2 "@react-native/babel-preset": 0.74.84 "@react-native/eslint-config": 0.74.84 "@react-native/metro-config": 0.74.84 @@ -3883,7 +3883,7 @@ __metadata: eslint: ^8.19.0 install-local: ^3.0.1 jest: ^29.6.3 - livekit-client: ^2.15.4 + livekit-client: ^2.15.8 prettier: 2.8.8 react: 18.2.0 react-native: 0.74.2 @@ -6715,6 +6715,13 @@ __metadata: languageName: node linkType: hard +"jose@npm:^6.1.0": + version: 6.1.0 + resolution: "jose@npm:6.1.0" + checksum: f9596a3161b5dabfdd0b7d490f2710f2cc8d460b0a2e1f3262fd2f90652abbb535e4f80e80d3854e7264c9526dcdac5e28693b4d4b1803f622728d7dcde02010 + languageName: node + linkType: hard + "js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" @@ -6956,13 +6963,14 @@ __metadata: languageName: node linkType: hard -"livekit-client@npm:^2.15.4": - version: 2.15.4 - resolution: "livekit-client@npm:2.15.4" +"livekit-client@npm:^2.15.8": + version: 2.15.8 + resolution: "livekit-client@npm:2.15.8" dependencies: "@livekit/mutex": 1.1.1 - "@livekit/protocol": 1.39.3 + "@livekit/protocol": 1.42.0 events: ^3.3.0 + jose: ^6.1.0 loglevel: ^1.9.2 sdp-transform: ^2.15.0 ts-debounce: ^4.0.0 @@ -6971,7 +6979,7 @@ __metadata: webrtc-adapter: ^9.0.1 peerDependencies: "@types/dom-mediacapture-record": ^1 - checksum: 7ae2e2f5326c8f7925b359277fd12ddeefb0bc5069b0563a9e184f2b860351bf91733c1fa5fd7b65467b643776368058d485af888e2771fd68c61c409b950e05 + checksum: d12b81ad5640dc383ab3eca241d0b064387e15df0e8cda616fa4a6aa3c0af46ac202f8cb8a4fd19bd3980531a852784f87d21d27062b95b8581ae110f933c744 languageName: node linkType: hard diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index b13aa6ee..d8fb705e 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -29,9 +29,9 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - livekit-react-native-webrtc (137.0.1): + - livekit-react-native-webrtc (137.0.2): - React-Core - - WebRTC-SDK (= 137.7151.02) + - WebRTC-SDK (= 137.7151.04) - RCT-Folly (2024.01.01.00): - boost - DoubleConversion @@ -1220,7 +1220,7 @@ PODS: - ReactCommon/turbomodule/core - Yoga - SocketRocket (0.7.0) - - WebRTC-SDK (137.7151.02) + - WebRTC-SDK (137.7151.04) - Yoga (0.0.0) DEPENDENCIES: @@ -1426,7 +1426,7 @@ SPEC CHECKSUMS: glog: fdfdfe5479092de0c4bdbebedd9056951f092c4f hermes-engine: 01d3e052018c2a13937aca1860fbedbccd4a41b7 livekit-react-native: 1320867758f718760eb868c537876ceb007d95ca - livekit-react-native-webrtc: 0ffe5a13d196f65d717f958a111399f4f6383102 + livekit-react-native-webrtc: 3bb1be767c4e489f69bca662eba1c5e7b1e1be0d RCT-Folly: 02617c592a293bd6d418e0a88ff4ee1f88329b47 RCTDeprecation: b03c35057846b685b3ccadc9bfe43e349989cdb2 RCTRequired: 194626909cfa8d39ca6663138c417bc6c431648c @@ -1480,7 +1480,7 @@ SPEC CHECKSUMS: RNCAsyncStorage: 0c357f3156fcb16c8589ede67cc036330b6698ca RNScreens: b32a9ff15bea7fcdbe5dff6477bc503f792b1208 SocketRocket: abac6f5de4d4d62d24e11868d7a2f427e0ef940d - WebRTC-SDK: d20de357dcbf7c9696b124b39f3ff62125107e4b + WebRTC-SDK: 40d4f5ba05cadff14e4db5614aec402a633f007e Yoga: ae3c32c514802d30f687a04a6a35b348506d411f PODFILE CHECKSUM: b5aad0c7d12b2ea501eb822f98f00ca01d154bd9 diff --git a/example/package.json b/example/package.json index b6fa8297..4a4aabfb 100644 --- a/example/package.json +++ b/example/package.json @@ -10,12 +10,12 @@ "postinstall": "patch-package" }, "dependencies": { - "@livekit/react-native-webrtc": "^137.0.1", + "@livekit/react-native-webrtc": "^137.0.2", "@react-native-async-storage/async-storage": "^1.17.10", "@react-navigation/native": "^6.0.8", "@react-navigation/native-stack": "^6.5.0", "@supersami/rn-foreground-service": "^2.2.5", - "livekit-client": "^2.15.4", + "livekit-client": "^2.15.8", "react": "18.2.0", "react-native": "0.74.2", "react-native-callkeep": "^4.3.14", diff --git a/example/src/RoomPage.tsx b/example/src/RoomPage.tsx index a4b14b0e..b114f5b3 100644 --- a/example/src/RoomPage.tsx +++ b/example/src/RoomPage.tsx @@ -20,12 +20,10 @@ import { AudioSession, useLocalParticipant, LiveKitRoom, - useDataChannel, useRoomContext, useVisualStableUpdate, useTracks, type TrackReferenceOrPlaceholder, - type ReceivedDataMessage, AndroidAudioTypePresets, useIOSAudioManagement, useRNE2EEManager, @@ -67,7 +65,9 @@ export const RoomPage = ({ }; }, []); - let { e2eeManager } = useRNE2EEManager({ sharedKey: e2eeKey }); + let { e2eeManager } = useRNE2EEManager({ + sharedKey: e2eeKey, + }); let e2eeOptions = e2ee ? { e2eeManager } : undefined; return ( @@ -79,7 +79,7 @@ export const RoomPage = ({ adaptiveStream: { pixelDensity: 'screen' }, e2ee: e2eeOptions, }} - audio={true} + audio={false} video={true} > @@ -107,24 +107,22 @@ const RoomView = ({ navigation, e2ee }: RoomViewProps) => { }, [room, e2ee]); useIOSAudioManagement(room, true); - // Setup room listeners - const { send } = useDataChannel( - (dataMessage: ReceivedDataMessage) => { - //@ts-ignore - let decoder = new TextDecoder('utf-8'); - let message = decoder.decode(dataMessage.payload); + // Setup room listeners + useEffect(() => { + room.registerTextStreamHandler('lk.chat', async (reader, participant) => { + let message = await reader.readAll(); let title = 'Received Message'; - if (dataMessage.from != null) { - title = 'Received Message from ' + dataMessage.from?.identity; + if (participant != null) { + title = 'Received Message from ' + participant.identity; } Toast.show({ type: 'success', text1: title, text2: message, }); - } - ); + }); + }, [room]); const tracks = useTracks( [ @@ -229,17 +227,14 @@ const RoomView = ({ navigation, e2ee }: RoomViewProps) => { localParticipant.setScreenShareEnabled(enabled); } }} - sendData={(message: string) => { + sendData={async (message: string) => { Toast.show({ type: 'success', text1: 'Sending Message', text2: message, }); - //@ts-ignore - let encoder = new TextEncoder(); - let encodedData = encoder.encode(message); - send(encodedData, { reliable: true }); + room.localParticipant.sendText(message, { topic: 'lk.chat' }); }} onSimulate={(scenario) => { room.simulateScenario(scenario); diff --git a/example/yarn.lock b/example/yarn.lock index e2da58a4..fe2f43e1 100644 --- a/example/yarn.lock +++ b/example/yarn.lock @@ -2163,25 +2163,25 @@ __metadata: languageName: node linkType: hard -"@livekit/protocol@npm:1.39.3": - version: 1.39.3 - resolution: "@livekit/protocol@npm:1.39.3" +"@livekit/protocol@npm:1.42.0": + version: 1.42.0 + resolution: "@livekit/protocol@npm:1.42.0" dependencies: "@bufbuild/protobuf": ^1.10.0 - checksum: 72aa3b9e82203ccec039047518d841d65b10dcc11ab9d661f269eab8a8672aed7b2d072f4f09cc6fb94a2579542b0a9216d7f66476d34cd1675c13e1ebcc119f + checksum: 6b1b194c69aa85c1d86b94eacc6ef163a85c56e66532c39737c2f9d1c6a2037c7fe499e474a823f4a332c7e87f4631be04e67bab57e12cdbba00bdcea202b7e9 languageName: node linkType: hard -"@livekit/react-native-webrtc@npm:^137.0.1": - version: 137.0.1 - resolution: "@livekit/react-native-webrtc@npm:137.0.1" +"@livekit/react-native-webrtc@npm:^137.0.2": + version: 137.0.2 + resolution: "@livekit/react-native-webrtc@npm:137.0.2" dependencies: base64-js: 1.5.1 debug: 4.3.4 event-target-shim: 6.0.2 peerDependencies: react-native: ">=0.60.0" - checksum: 3341aafe7d9d1deb345e47247faa020b2cb5f1adbded135a244f0f9285eed720c9f62325bbce0e21c1da755ae24ae6c69eb07728cece709560f615908bde43a9 + checksum: c23467701c7dfb74e3b223dd955b20ba1586c2186383f5b2595fff9b65a36b2db0b660de9935e009b69bc5e0bbff047d0f598495f8464daae8db5f8d9f9b7c24 languageName: node linkType: hard @@ -5892,6 +5892,13 @@ __metadata: languageName: node linkType: hard +"jose@npm:^6.1.0": + version: 6.1.0 + resolution: "jose@npm:6.1.0" + checksum: f9596a3161b5dabfdd0b7d490f2710f2cc8d460b0a2e1f3262fd2f90652abbb535e4f80e80d3854e7264c9526dcdac5e28693b4d4b1803f622728d7dcde02010 + languageName: node + linkType: hard + "js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" @@ -6102,13 +6109,14 @@ __metadata: languageName: node linkType: hard -"livekit-client@npm:^2.15.4": - version: 2.15.4 - resolution: "livekit-client@npm:2.15.4" +"livekit-client@npm:^2.15.8": + version: 2.15.8 + resolution: "livekit-client@npm:2.15.8" dependencies: "@livekit/mutex": 1.1.1 - "@livekit/protocol": 1.39.3 + "@livekit/protocol": 1.42.0 events: ^3.3.0 + jose: ^6.1.0 loglevel: ^1.9.2 sdp-transform: ^2.15.0 ts-debounce: ^4.0.0 @@ -6117,7 +6125,7 @@ __metadata: webrtc-adapter: ^9.0.1 peerDependencies: "@types/dom-mediacapture-record": ^1 - checksum: 7ae2e2f5326c8f7925b359277fd12ddeefb0bc5069b0563a9e184f2b860351bf91733c1fa5fd7b65467b643776368058d485af888e2771fd68c61c409b950e05 + checksum: d12b81ad5640dc383ab3eca241d0b064387e15df0e8cda616fa4a6aa3c0af46ac202f8cb8a4fd19bd3980531a852784f87d21d27062b95b8581ae110f933c744 languageName: node linkType: hard @@ -6128,7 +6136,7 @@ __metadata: "@babel/core": ^7.20.0 "@babel/preset-env": ^7.20.0 "@babel/runtime": ^7.20.0 - "@livekit/react-native-webrtc": ^137.0.1 + "@livekit/react-native-webrtc": ^137.0.2 "@react-native-async-storage/async-storage": ^1.17.10 "@react-native/babel-preset": 0.74.84 "@react-native/eslint-config": 0.74.84 @@ -6140,7 +6148,7 @@ __metadata: "@types/fastestsmallesttextencoderdecoder": ^1.0.0 "@types/react": ^18.2.6 babel-plugin-module-resolver: ^4.1.0 - livekit-client: ^2.15.4 + livekit-client: ^2.15.8 patch-package: ^8.0.0 react: 18.2.0 react-native: 0.74.2 diff --git a/package.json b/package.json index 6d75fbfb..b6f38d1a 100644 --- a/package.json +++ b/package.json @@ -43,12 +43,13 @@ ], "dependencies": { "@livekit/components-react": "^2.8.1", + "@livekit/mutex": "^1.1.1", "array.prototype.at": "^1.1.1", "event-target-shim": "6.0.2", "events": "^3.3.0", "loglevel": "^1.8.0", "promise.allsettled": "^1.0.5", - "react-native-quick-base64": "2.1.1", + "react-native-quick-base64": "^2.2.1", "react-native-url-polyfill": "^1.3.0", "typed-emitter": "^2.1.0", "web-streams-polyfill": "^4.1.0", @@ -59,7 +60,7 @@ "@babel/preset-env": "^7.20.0", "@babel/runtime": "^7.20.0", "@commitlint/config-conventional": "^16.2.1", - "@livekit/react-native-webrtc": "^137.0.1", + "@livekit/react-native-webrtc": "^137.0.2", "@react-native/babel-preset": "0.74.84", "@react-native/eslint-config": "0.74.84", "@react-native/metro-config": "0.74.84", @@ -75,7 +76,7 @@ "eslint-plugin-prettier": "^4.2.1", "husky": "^7.0.4", "jest": "^29.6.3", - "livekit-client": "^2.15.4", + "livekit-client": "^2.15.8", "pod-install": "^0.2.2", "prettier": "2.8.8", "react": "18.2.0", @@ -86,8 +87,8 @@ "typescript": "5.0.4" }, "peerDependencies": { - "@livekit/react-native-webrtc": "^137.0.1", - "livekit-client": "^2.15.4", + "@livekit/react-native-webrtc": "^137.0.2", + "livekit-client": "^2.15.8", "react": "*", "react-native": "*" }, diff --git a/src/e2ee/RNE2EEManager.ts b/src/e2ee/RNE2EEManager.ts index b7c0eef1..7b140ddc 100644 --- a/src/e2ee/RNE2EEManager.ts +++ b/src/e2ee/RNE2EEManager.ts @@ -1,7 +1,10 @@ import { + RTCDataPacketCryptor, + RTCDataPacketCryptorFactory, RTCFrameCryptorAlgorithm, RTCFrameCryptorFactory, RTCRtpReceiver, + type RTCEncryptedPacket, type RTCFrameCryptor, type RTCRtpSender, } from '@livekit/react-native-webrtc'; @@ -16,6 +19,9 @@ import { type BaseE2EEManager, type E2EEManagerCallbacks, EncryptionEvent, + type DecryptDataResponseMessage, + type EncryptDataResponseMessage, + Mutex, } from 'livekit-client'; import type RNKeyProvider from './RNKeyProvider'; import type RTCEngine from 'livekit-client/dist/src/room/RTCEngine'; @@ -36,11 +42,28 @@ export default class RNE2EEManager RTCFrameCryptorAlgorithm.kAesGcm; private encryptionEnabled: boolean = false; + private dataChannelEncryptionEnabled: boolean = false; - constructor(keyProvider: RNKeyProvider) { + private dataPacketCryptorLock = new Mutex(); + private dataPacketCryptor: RTCDataPacketCryptor | undefined = undefined; + constructor( + keyProvider: RNKeyProvider, + dcEncryptionEnabled: boolean = false + ) { super(); this.keyProvider = keyProvider; this.encryptionEnabled = false; + this.dataChannelEncryptionEnabled = dcEncryptionEnabled; + } + + get isEnabled(): boolean { + return this.encryptionEnabled; + } + get isDataChannelEncryptionEnabled(): boolean { + return this.isEnabled && this.dataChannelEncryptionEnabled; + } + set isDataChannelEncryptionEnabled(value: boolean) { + this.dataChannelEncryptionEnabled = value; } setup(room: Room) { @@ -78,7 +101,16 @@ export default class RNE2EEManager await frameCryptor.dispose(); } } - ); + ) + .on(RoomEvent.SignalConnected, () => { + if (!this.room) { + throw new TypeError(`expected room to be present on signal connect`); + } + this.setParticipantCryptorEnabled( + this.room.localParticipant.isE2EEEnabled, + this.room.localParticipant.identity + ); + }); } private async setupE2EESender( @@ -133,6 +165,89 @@ export default class RNE2EEManager this.keyProvider.setSifTrailer(trailer); } + private async getDataPacketCryptor(): Promise { + let dataPacketCryptor = this.dataPacketCryptor; + if (dataPacketCryptor) { + return dataPacketCryptor; + } + + let unlock = await this.dataPacketCryptorLock.lock(); + + try { + dataPacketCryptor = this.dataPacketCryptor; + if (dataPacketCryptor) { + return dataPacketCryptor; + } + + dataPacketCryptor = + await RTCDataPacketCryptorFactory.createDataPacketCryptor( + this.algorithm, + this.keyProvider.rtcKeyProvider + ); + + this.dataPacketCryptor = dataPacketCryptor; + return dataPacketCryptor; + } finally { + unlock(); + } + } + async encryptData( + data: Uint8Array + ): Promise { + let room = this.room; + if (!room) { + throw new Error("e2eemanager isn't setup with room!"); + } + + let participantId = room.localParticipant.identity; + + let dataPacketCryptor = await this.getDataPacketCryptor(); + + let encryptedPacket = await dataPacketCryptor.encrypt( + participantId, + this.keyProvider.getLatestKeyIndex(participantId), + data + ); + + if (!encryptedPacket) { + throw new Error('encryption for packet failed'); + } + return { + uuid: '', //not used + payload: encryptedPacket.payload, + iv: encryptedPacket.iv, + keyIndex: encryptedPacket.keyIndex, + }; + } + + async handleEncryptedData( + payload: Uint8Array, + iv: Uint8Array, + participantIdentity: string, + keyIndex: number + ): Promise { + let packet = { + payload, + iv, + keyIndex, + } satisfies RTCEncryptedPacket; + + let dataPacketCryptor = await this.getDataPacketCryptor(); + let decryptedData = await dataPacketCryptor.decrypt( + participantIdentity, + packet + ); + + if (!decryptedData) { + throw new Error('decryption for packet failed'); + } + + return { + uuid: '', //not used + payload: decryptedData, + } satisfies DecryptDataResponseMessage['data']; + } + // Utility methods ////////////////////// diff --git a/src/hooks/useE2EEManager.ts b/src/hooks/useE2EEManager.ts index 49b551e0..cc918ec6 100644 --- a/src/hooks/useE2EEManager.ts +++ b/src/hooks/useE2EEManager.ts @@ -2,6 +2,7 @@ import RNE2EEManager from '../e2ee/RNE2EEManager'; import { log, RNKeyProvider } from '..'; import { useEffect, useState } from 'react'; import type { RNKeyProviderOptions } from '../e2ee/RNKeyProvider'; +import type { BaseE2EEManager } from 'livekit-client'; export type UseRNE2EEManagerOptions = { keyProviderOptions?: RNKeyProviderOptions; @@ -10,7 +11,7 @@ export type UseRNE2EEManagerOptions = { export interface RNE2EEManagerState { keyProvider: RNKeyProvider; - e2eeManager: RNE2EEManager; + e2eeManager: BaseE2EEManager; } /** @@ -22,7 +23,7 @@ export function useRNE2EEManager( let [keyProvider] = useState( () => new RNKeyProvider(options.keyProviderOptions ?? {}) ); - let [e2eeManager] = useState(() => new RNE2EEManager(keyProvider)); + let [e2eeManager] = useState(() => new RNE2EEManager(keyProvider, false)); useEffect(() => { let setup = async () => { diff --git a/yarn.lock b/yarn.lock index 0cdc1e5d..5fc97d92 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2417,32 +2417,32 @@ __metadata: languageName: node linkType: hard -"@livekit/mutex@npm:1.1.1": +"@livekit/mutex@npm:1.1.1, @livekit/mutex@npm:^1.1.1": version: 1.1.1 resolution: "@livekit/mutex@npm:1.1.1" checksum: 44a31eb7a913357ffb57d04eaa20f7507c0a659638c6dfaba9a413c21a3397aa351497f7c77bca3c06a29ac2cbe83698a5f96b9230012a24b86ac8366e9b8666 languageName: node linkType: hard -"@livekit/protocol@npm:1.39.3": - version: 1.39.3 - resolution: "@livekit/protocol@npm:1.39.3" +"@livekit/protocol@npm:1.42.0": + version: 1.42.0 + resolution: "@livekit/protocol@npm:1.42.0" dependencies: "@bufbuild/protobuf": ^1.10.0 - checksum: 72aa3b9e82203ccec039047518d841d65b10dcc11ab9d661f269eab8a8672aed7b2d072f4f09cc6fb94a2579542b0a9216d7f66476d34cd1675c13e1ebcc119f + checksum: 6b1b194c69aa85c1d86b94eacc6ef163a85c56e66532c39737c2f9d1c6a2037c7fe499e474a823f4a332c7e87f4631be04e67bab57e12cdbba00bdcea202b7e9 languageName: node linkType: hard -"@livekit/react-native-webrtc@npm:^137.0.1": - version: 137.0.1 - resolution: "@livekit/react-native-webrtc@npm:137.0.1" +"@livekit/react-native-webrtc@npm:^137.0.2": + version: 137.0.2 + resolution: "@livekit/react-native-webrtc@npm:137.0.2" dependencies: base64-js: 1.5.1 debug: 4.3.4 event-target-shim: 6.0.2 peerDependencies: react-native: ">=0.60.0" - checksum: 3341aafe7d9d1deb345e47247faa020b2cb5f1adbded135a244f0f9285eed720c9f62325bbce0e21c1da755ae24ae6c69eb07728cece709560f615908bde43a9 + checksum: c23467701c7dfb74e3b223dd955b20ba1586c2186383f5b2595fff9b65a36b2db0b660de9935e009b69bc5e0bbff047d0f598495f8464daae8db5f8d9f9b7c24 languageName: node linkType: hard @@ -2455,7 +2455,8 @@ __metadata: "@babel/runtime": ^7.20.0 "@commitlint/config-conventional": ^16.2.1 "@livekit/components-react": ^2.8.1 - "@livekit/react-native-webrtc": ^137.0.1 + "@livekit/mutex": ^1.1.1 + "@livekit/react-native-webrtc": ^137.0.2 "@react-native/babel-preset": 0.74.84 "@react-native/eslint-config": 0.74.84 "@react-native/metro-config": 0.74.84 @@ -2474,7 +2475,7 @@ __metadata: events: ^3.3.0 husky: ^7.0.4 jest: ^29.6.3 - livekit-client: ^2.15.4 + livekit-client: ^2.15.8 loglevel: ^1.8.0 pod-install: ^0.2.2 prettier: 2.8.8 @@ -2482,7 +2483,7 @@ __metadata: react: 18.2.0 react-native: 0.74.2 react-native-builder-bob: ^0.18.2 - react-native-quick-base64: 2.1.1 + react-native-quick-base64: ^2.2.1 react-native-url-polyfill: ^1.3.0 release-it: ^14.2.2 typed-emitter: ^2.1.0 @@ -2491,8 +2492,8 @@ __metadata: web-streams-polyfill: ^4.1.0 well-known-symbols: ^4.1.0 peerDependencies: - "@livekit/react-native-webrtc": ^137.0.1 - livekit-client: ^2.15.4 + "@livekit/react-native-webrtc": ^137.0.2 + livekit-client: ^2.15.8 react: "*" react-native: "*" languageName: unknown @@ -8498,6 +8499,13 @@ __metadata: languageName: node linkType: hard +"jose@npm:^6.1.0": + version: 6.1.0 + resolution: "jose@npm:6.1.0" + checksum: f9596a3161b5dabfdd0b7d490f2710f2cc8d460b0a2e1f3262fd2f90652abbb535e4f80e80d3854e7264c9526dcdac5e28693b4d4b1803f622728d7dcde02010 + languageName: node + linkType: hard + "js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" @@ -8799,13 +8807,14 @@ __metadata: languageName: node linkType: hard -"livekit-client@npm:^2.15.4": - version: 2.15.4 - resolution: "livekit-client@npm:2.15.4" +"livekit-client@npm:^2.15.8": + version: 2.15.8 + resolution: "livekit-client@npm:2.15.8" dependencies: "@livekit/mutex": 1.1.1 - "@livekit/protocol": 1.39.3 + "@livekit/protocol": 1.42.0 events: ^3.3.0 + jose: ^6.1.0 loglevel: ^1.9.2 sdp-transform: ^2.15.0 ts-debounce: ^4.0.0 @@ -8814,7 +8823,7 @@ __metadata: webrtc-adapter: ^9.0.1 peerDependencies: "@types/dom-mediacapture-record": ^1 - checksum: 7ae2e2f5326c8f7925b359277fd12ddeefb0bc5069b0563a9e184f2b860351bf91733c1fa5fd7b65467b643776368058d485af888e2771fd68c61c409b950e05 + checksum: d12b81ad5640dc383ab3eca241d0b064387e15df0e8cda616fa4a6aa3c0af46ac202f8cb8a4fd19bd3980531a852784f87d21d27062b95b8581ae110f933c744 languageName: node linkType: hard @@ -10730,15 +10739,13 @@ __metadata: languageName: node linkType: hard -"react-native-quick-base64@npm:2.1.1": - version: 2.1.1 - resolution: "react-native-quick-base64@npm:2.1.1" - dependencies: - base64-js: ^1.5.1 +"react-native-quick-base64@npm:^2.2.1": + version: 2.2.2 + resolution: "react-native-quick-base64@npm:2.2.2" peerDependencies: react: "*" react-native: "*" - checksum: 13c374b20153418de7c89001ba9c1313aa0e6f1cbb4a829077bd8d4ed88b159e31f3be9a1ed96ac9d1c647be6fafca00aceaf59379bdf2e8ea029907f944dd4c + checksum: 51cd8df0b7f78d4c10996f157927cc075b8a9e85f7d0e48790a4247a033ca335e440c96572969fb6f6b49135d51dbf87c6d659fba509b51b9237957d41a6c580 languageName: node linkType: hard