diff --git a/.changeset/bump-livekit-client-peer.md b/.changeset/bump-livekit-client-peer.md new file mode 100644 index 00000000..f463edd3 --- /dev/null +++ b/.changeset/bump-livekit-client-peer.md @@ -0,0 +1,5 @@ +--- +'@livekit/react-native': patch +--- + +Require `livekit-client` ^2.20.0. Earlier 2.19.x releases pre-allocate media sections in single peer connection mode, which React Native's libwebrtc doesn't support, causing remote tracks to never be subscribed or render black (livekit/client-sdk-js#1977, livekit/client-sdk-js#2113). diff --git a/ci/package.json b/ci/package.json index 74694831..211fcbcb 100644 --- a/ci/package.json +++ b/ci/package.json @@ -14,7 +14,7 @@ "@livekit/react-native": "*", "@livekit/react-native-webrtc": "^144.2.0", "@react-native/new-app-screen": "0.82.1", - "livekit-client": "^2.19.0", + "livekit-client": "^2.20.0", "react": "19.1.1", "react-native": "0.82.1", "react-native-safe-area-context": "^5.5.2" diff --git a/ci/yarn.lock b/ci/yarn.lock index 6815603a..9ffe3a7b 100644 --- a/ci/yarn.lock +++ b/ci/yarn.lock @@ -1943,12 +1943,12 @@ __metadata: languageName: node linkType: hard -"@livekit/protocol@npm:1.45.8": - version: 1.45.8 - resolution: "@livekit/protocol@npm:1.45.8" +"@livekit/protocol@npm:1.50.4": + version: 1.50.4 + resolution: "@livekit/protocol@npm:1.50.4" dependencies: "@bufbuild/protobuf": "npm:^1.10.0" - checksum: 10/53144553718a4fd71b85298201c8548b9a5d814a2f61a7b5d930442444f05a4e27c5f4cf29e0d7221fbda9209684a670ffba8d092d9aaf6b413396e036dd8500 + checksum: 10/314539aeb0b2e7e638f0458b4992bb30f0885b39b7b25e99ba6650a73c28df3765fabc469122a19b94d373db2d7310671660a0aac80a900b15656db9462fb4d9 languageName: node linkType: hard @@ -3565,7 +3565,7 @@ __metadata: eslint: "npm:^8.19.0" install-local: "npm:^3.0.1" jest: "npm:^29.6.3" - livekit-client: "npm:^2.19.0" + livekit-client: "npm:^2.20.0" prettier: "npm:2.8.8" react: "npm:19.1.1" react-native: "npm:0.82.1" @@ -6394,22 +6394,23 @@ __metadata: languageName: node linkType: hard -"livekit-client@npm:^2.19.0": - version: 2.19.2 - resolution: "livekit-client@npm:2.19.2" +"livekit-client@npm:^2.20.0": + version: 2.22.3 + resolution: "livekit-client@npm:2.22.3" dependencies: "@livekit/mutex": "npm:1.1.1" - "@livekit/protocol": "npm:1.45.8" + "@livekit/protocol": "npm:1.50.4" events: "npm:^3.3.0" jose: "npm:^6.1.0" loglevel: "npm:^1.9.2" + machina: "npm:^7.0.0" sdp-transform: "npm:^2.15.0" tslib: "npm:2.8.1" typed-emitter: "npm:^2.1.0" - webrtc-adapter: "npm:9.0.5" + webrtc-adapter: "npm:9.0.6" peerDependencies: "@types/dom-mediacapture-record": ^1 - checksum: 10/a28eee26e17e3e586e4a7f1c017b6025289d188cf25d24aad2cf3ae8dd73a0f46471325859d36fad43a5975d0220d430640e96da8c5b5b082837872b09bee7f2 + checksum: 10/b906339dc47db37c3f29f741f1243595e7a955df4958bc24f7456304e1edecce11653290d44468a791477fc1ec43877b749223f419f36aa54cdb322e25a907e6 languageName: node linkType: hard @@ -6523,6 +6524,13 @@ __metadata: languageName: node linkType: hard +"machina@npm:^7.0.0": + version: 7.0.1 + resolution: "machina@npm:7.0.1" + checksum: 10/f870eb6a84f71675c0114ecf6e17ebf70e53e7f050d89d5a6581bfb392b5d4ca4258f56947eb236acb934d696c98fe8255e987fd99223778e6b2f58d9fb8cd89 + languageName: node + linkType: hard + "make-dir@npm:^4.0.0": version: 4.0.0 resolution: "make-dir@npm:4.0.0" @@ -8874,12 +8882,12 @@ __metadata: languageName: node linkType: hard -"webrtc-adapter@npm:9.0.5": - version: 9.0.5 - resolution: "webrtc-adapter@npm:9.0.5" +"webrtc-adapter@npm:9.0.6": + version: 9.0.6 + resolution: "webrtc-adapter@npm:9.0.6" dependencies: sdp: "npm:^3.2.0" - checksum: 10/23c87b78b689b542ad52723c61c71aead3e07d8ddb4479daafa3fd9490ae3a199859149bb9fb4a16c7e9d13a9e0527e684e781791a221391c21781be2fb5c2e9 + checksum: 10/f9bbaf85122205a507e63e3bfb033029ff27440f1f17a82c9f476082cf180edc90756ba7a87668dcd5e5122a70110313da2b226b9c274a018e4dd3c1c65667a2 languageName: node linkType: hard diff --git a/example/package.json b/example/package.json index 5f35ed79..35bebf30 100644 --- a/example/package.json +++ b/example/package.json @@ -15,7 +15,7 @@ "@react-navigation/native": "^7.1.18", "@react-navigation/native-stack": "^7.3.27", "@supersami/rn-foreground-service": "^2.2.5", - "livekit-client": "^2.19.0", + "livekit-client": "^2.20.0", "react": "19.1.1", "react-native": "0.82.1", "react-native-callkeep": "^4.3.14", diff --git a/package.json b/package.json index 05769395..33904f65 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,7 @@ "eslint-config-prettier": "^10.1.8", "eslint-plugin-prettier": "^5.5.4", "jest": "^30.4.2", - "livekit-client": "^2.19.0", + "livekit-client": "^2.20.0", "pod-install": "^1.0.19", "prettier": "^3.8.3", "react": "19.2.0", @@ -94,7 +94,7 @@ }, "peerDependencies": { "@livekit/react-native-webrtc": "^144.2.0", - "livekit-client": "^2.19.0", + "livekit-client": "^2.20.0", "react": "*", "react-native": "*" }, diff --git a/src/e2ee/RNE2EEManager.ts b/src/e2ee/RNE2EEManager.ts index 7b140ddc..ca843bcb 100644 --- a/src/e2ee/RNE2EEManager.ts +++ b/src/e2ee/RNE2EEManager.ts @@ -27,6 +27,7 @@ import type RNKeyProvider from './RNKeyProvider'; import type RTCEngine from 'livekit-client/dist/src/room/RTCEngine'; import EventEmitter from 'events'; import type TypedEventEmitter from 'typed-emitter'; +import type { NonSharedUint8Array } from '../utils/types'; /** * @experimental @@ -212,10 +213,11 @@ export default class RNE2EEManager if (!encryptedPacket) { throw new Error('encryption for packet failed'); } + // Buffers from the native cryptor are never shared. return { uuid: '', //not used - payload: encryptedPacket.payload, - iv: encryptedPacket.iv, + payload: encryptedPacket.payload as NonSharedUint8Array, + iv: encryptedPacket.iv as NonSharedUint8Array, keyIndex: encryptedPacket.keyIndex, }; } @@ -244,7 +246,8 @@ export default class RNE2EEManager return { uuid: '', //not used - payload: decryptedData, + // Buffers from the native cryptor are never shared. + payload: decryptedData as NonSharedUint8Array, } satisfies DecryptDataResponseMessage['data']; } diff --git a/src/utils/types.ts b/src/utils/types.ts new file mode 100644 index 00000000..cb33d06e --- /dev/null +++ b/src/utils/types.ts @@ -0,0 +1,3 @@ +// Resolves to `Uint8Array` on TS 5.7+ and plain `Uint8Array` on +// older versions. Matches the alias livekit-client uses for its e2ee types. +export type NonSharedUint8Array = ReturnType; diff --git a/yarn.lock b/yarn.lock index 1663f733..c91af92e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3603,12 +3603,12 @@ __metadata: languageName: node linkType: hard -"@livekit/protocol@npm:1.45.8": - version: 1.45.8 - resolution: "@livekit/protocol@npm:1.45.8" +"@livekit/protocol@npm:1.50.4": + version: 1.50.4 + resolution: "@livekit/protocol@npm:1.50.4" dependencies: "@bufbuild/protobuf": "npm:^1.10.0" - checksum: 10/53144553718a4fd71b85298201c8548b9a5d814a2f61a7b5d930442444f05a4e27c5f4cf29e0d7221fbda9209684a670ffba8d092d9aaf6b413396e036dd8500 + checksum: 10/314539aeb0b2e7e638f0458b4992bb30f0885b39b7b25e99ba6650a73c28df3765fabc469122a19b94d373db2d7310671660a0aac80a900b15656db9462fb4d9 languageName: node linkType: hard @@ -3647,7 +3647,7 @@ __metadata: eslint-plugin-prettier: "npm:^5.5.4" events: "npm:^3.3.0" jest: "npm:^30.4.2" - livekit-client: "npm:^2.19.0" + livekit-client: "npm:^2.20.0" loglevel: "npm:^1.8.0" pod-install: "npm:^1.0.19" prettier: "npm:^3.8.3" @@ -3663,7 +3663,7 @@ __metadata: well-known-symbols: "npm:^4.1.0" peerDependencies: "@livekit/react-native-webrtc": ^144.2.0 - livekit-client: ^2.19.0 + livekit-client: ^2.20.0 react: "*" react-native: "*" languageName: unknown @@ -9512,22 +9512,23 @@ __metadata: languageName: node linkType: hard -"livekit-client@npm:^2.19.0": - version: 2.19.2 - resolution: "livekit-client@npm:2.19.2" +"livekit-client@npm:^2.20.0": + version: 2.22.3 + resolution: "livekit-client@npm:2.22.3" dependencies: "@livekit/mutex": "npm:1.1.1" - "@livekit/protocol": "npm:1.45.8" + "@livekit/protocol": "npm:1.50.4" events: "npm:^3.3.0" jose: "npm:^6.1.0" loglevel: "npm:^1.9.2" + machina: "npm:^7.0.0" sdp-transform: "npm:^2.15.0" tslib: "npm:2.8.1" typed-emitter: "npm:^2.1.0" - webrtc-adapter: "npm:9.0.5" + webrtc-adapter: "npm:9.0.6" peerDependencies: "@types/dom-mediacapture-record": ^1 - checksum: 10/a28eee26e17e3e586e4a7f1c017b6025289d188cf25d24aad2cf3ae8dd73a0f46471325859d36fad43a5975d0220d430640e96da8c5b5b082837872b09bee7f2 + checksum: 10/b906339dc47db37c3f29f741f1243595e7a955df4958bc24f7456304e1edecce11653290d44468a791477fc1ec43877b749223f419f36aa54cdb322e25a907e6 languageName: node linkType: hard @@ -9552,7 +9553,7 @@ __metadata: "@types/fastestsmallesttextencoderdecoder": "npm:^1.0.0" "@types/react": "npm:^19.2.0" babel-plugin-module-resolver: "npm:^5.0.2" - livekit-client: "npm:^2.19.0" + livekit-client: "npm:^2.20.0" patch-package: "npm:^8.0.0" react: "npm:19.1.1" react-native: "npm:0.82.1" @@ -9701,6 +9702,13 @@ __metadata: languageName: node linkType: hard +"machina@npm:^7.0.0": + version: 7.0.1 + resolution: "machina@npm:7.0.1" + checksum: 10/f870eb6a84f71675c0114ecf6e17ebf70e53e7f050d89d5a6581bfb392b5d4ca4258f56947eb236acb934d696c98fe8255e987fd99223778e6b2f58d9fb8cd89 + languageName: node + linkType: hard + "make-dir@npm:^4.0.0": version: 4.0.0 resolution: "make-dir@npm:4.0.0" @@ -13046,12 +13054,12 @@ __metadata: languageName: node linkType: hard -"webrtc-adapter@npm:9.0.5": - version: 9.0.5 - resolution: "webrtc-adapter@npm:9.0.5" +"webrtc-adapter@npm:9.0.6": + version: 9.0.6 + resolution: "webrtc-adapter@npm:9.0.6" dependencies: sdp: "npm:^3.2.0" - checksum: 10/23c87b78b689b542ad52723c61c71aead3e07d8ddb4479daafa3fd9490ae3a199859149bb9fb4a16c7e9d13a9e0527e684e781791a221391c21781be2fb5c2e9 + checksum: 10/f9bbaf85122205a507e63e3bfb033029ff27440f1f17a82c9f476082cf180edc90756ba7a87668dcd5e5122a70110313da2b226b9c274a018e4dd3c1c65667a2 languageName: node linkType: hard