Skip to content

Commit a4f84e6

Browse files
authored
feat: end to end encryption for data channels option (#285)
1 parent e2e03ef commit a4f84e6

File tree

11 files changed

+234
-99
lines changed

11 files changed

+234
-99
lines changed

ci/ios/Podfile.lock

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ PODS:
77
- hermes-engine (0.74.2):
88
- hermes-engine/Pre-built (= 0.74.2)
99
- hermes-engine/Pre-built (0.74.2)
10-
- livekit-react-native (2.8.0):
10+
- livekit-react-native (2.9.1):
1111
- DoubleConversion
1212
- glog
1313
- hermes-engine
@@ -29,9 +29,9 @@ PODS:
2929
- ReactCommon/turbomodule/bridging
3030
- ReactCommon/turbomodule/core
3131
- Yoga
32-
- livekit-react-native-webrtc (137.0.0):
32+
- livekit-react-native-webrtc (137.0.2):
3333
- React-Core
34-
- WebRTC-SDK (= 137.7151.02)
34+
- WebRTC-SDK (= 137.7151.04)
3535
- RCT-Folly (2024.01.01.00):
3636
- boost
3737
- DoubleConversion
@@ -1190,7 +1190,7 @@ PODS:
11901190
- React-perflogger (= 0.74.2)
11911191
- React-utils (= 0.74.2)
11921192
- SocketRocket (0.7.0)
1193-
- WebRTC-SDK (137.7151.02)
1193+
- WebRTC-SDK (137.7151.04)
11941194
- Yoga (0.0.0)
11951195

11961196
DEPENDENCIES:
@@ -1380,8 +1380,8 @@ SPEC CHECKSUMS:
13801380
fmt: 4c2741a687cc09f0634a2e2c72a838b99f1ff120
13811381
glog: c5d68082e772fa1c511173d6b30a9de2c05a69a2
13821382
hermes-engine: 01d3e052018c2a13937aca1860fbedbccd4a41b7
1383-
livekit-react-native: f5555a11014ee4d00ff52e7d8d2148ac6c1eb3c5
1384-
livekit-react-native-webrtc: 323f7edcea8d64e5abf1455d8c552b69cd2599b1
1383+
livekit-react-native: 22180f283c63416a81f8765555fccc7a33f0a044
1384+
livekit-react-native-webrtc: 3bb1be767c4e489f69bca662eba1c5e7b1e1be0d
13851385
RCT-Folly: 02617c592a293bd6d418e0a88ff4ee1f88329b47
13861386
RCTDeprecation: b03c35057846b685b3ccadc9bfe43e349989cdb2
13871387
RCTRequired: 194626909cfa8d39ca6663138c417bc6c431648c
@@ -1430,7 +1430,7 @@ SPEC CHECKSUMS:
14301430
React-utils: 4476b7fcbbd95cfd002f3e778616155241d86e31
14311431
ReactCommon: ecad995f26e0d1e24061f60f4e5d74782f003f12
14321432
SocketRocket: abac6f5de4d4d62d24e11868d7a2f427e0ef940d
1433-
WebRTC-SDK: d20de357dcbf7c9696b124b39f3ff62125107e4b
1433+
WebRTC-SDK: 40d4f5ba05cadff14e4db5614aec402a633f007e
14341434
Yoga: ae3c32c514802d30f687a04a6a35b348506d411f
14351435

14361436
PODFILE CHECKSUM: 7e787510e5e3fbe259a5a7507ea2e7e1b1ff65ef

ci/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212
},
1313
"dependencies": {
1414
"@livekit/react-native": "*",
15-
"@livekit/react-native-webrtc": "^137.0.1",
16-
"livekit-client": "^2.15.4",
15+
"@livekit/react-native-webrtc": "^137.0.2",
16+
"livekit-client": "^2.15.8",
1717
"react": "18.2.0",
1818
"react-native": "0.74.2"
1919
},

ci/yarn.lock

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2165,25 +2165,25 @@ __metadata:
21652165
languageName: node
21662166
linkType: hard
21672167

2168-
"@livekit/protocol@npm:1.39.3":
2169-
version: 1.39.3
2170-
resolution: "@livekit/protocol@npm:1.39.3"
2168+
"@livekit/protocol@npm:1.42.0":
2169+
version: 1.42.0
2170+
resolution: "@livekit/protocol@npm:1.42.0"
21712171
dependencies:
21722172
"@bufbuild/protobuf": ^1.10.0
2173-
checksum: 72aa3b9e82203ccec039047518d841d65b10dcc11ab9d661f269eab8a8672aed7b2d072f4f09cc6fb94a2579542b0a9216d7f66476d34cd1675c13e1ebcc119f
2173+
checksum: 6b1b194c69aa85c1d86b94eacc6ef163a85c56e66532c39737c2f9d1c6a2037c7fe499e474a823f4a332c7e87f4631be04e67bab57e12cdbba00bdcea202b7e9
21742174
languageName: node
21752175
linkType: hard
21762176

2177-
"@livekit/react-native-webrtc@npm:^137.0.1":
2178-
version: 137.0.1
2179-
resolution: "@livekit/react-native-webrtc@npm:137.0.1"
2177+
"@livekit/react-native-webrtc@npm:^137.0.2":
2178+
version: 137.0.2
2179+
resolution: "@livekit/react-native-webrtc@npm:137.0.2"
21802180
dependencies:
21812181
base64-js: 1.5.1
21822182
debug: 4.3.4
21832183
event-target-shim: 6.0.2
21842184
peerDependencies:
21852185
react-native: ">=0.60.0"
2186-
checksum: 3341aafe7d9d1deb345e47247faa020b2cb5f1adbded135a244f0f9285eed720c9f62325bbce0e21c1da755ae24ae6c69eb07728cece709560f615908bde43a9
2186+
checksum: c23467701c7dfb74e3b223dd955b20ba1586c2186383f5b2595fff9b65a36b2db0b660de9935e009b69bc5e0bbff047d0f598495f8464daae8db5f8d9f9b7c24
21872187
languageName: node
21882188
linkType: hard
21892189

@@ -3872,7 +3872,7 @@ __metadata:
38723872
"@babel/preset-env": ^7.20.0
38733873
"@babel/runtime": ^7.20.0
38743874
"@livekit/react-native": "*"
3875-
"@livekit/react-native-webrtc": ^137.0.1
3875+
"@livekit/react-native-webrtc": ^137.0.2
38763876
"@react-native/babel-preset": 0.74.84
38773877
"@react-native/eslint-config": 0.74.84
38783878
"@react-native/metro-config": 0.74.84
@@ -3883,7 +3883,7 @@ __metadata:
38833883
eslint: ^8.19.0
38843884
install-local: ^3.0.1
38853885
jest: ^29.6.3
3886-
livekit-client: ^2.15.4
3886+
livekit-client: ^2.15.8
38873887
prettier: 2.8.8
38883888
react: 18.2.0
38893889
react-native: 0.74.2
@@ -6715,6 +6715,13 @@ __metadata:
67156715
languageName: node
67166716
linkType: hard
67176717

6718+
"jose@npm:^6.1.0":
6719+
version: 6.1.0
6720+
resolution: "jose@npm:6.1.0"
6721+
checksum: f9596a3161b5dabfdd0b7d490f2710f2cc8d460b0a2e1f3262fd2f90652abbb535e4f80e80d3854e7264c9526dcdac5e28693b4d4b1803f622728d7dcde02010
6722+
languageName: node
6723+
linkType: hard
6724+
67186725
"js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0":
67196726
version: 4.0.0
67206727
resolution: "js-tokens@npm:4.0.0"
@@ -6956,13 +6963,14 @@ __metadata:
69566963
languageName: node
69576964
linkType: hard
69586965

6959-
"livekit-client@npm:^2.15.4":
6960-
version: 2.15.4
6961-
resolution: "livekit-client@npm:2.15.4"
6966+
"livekit-client@npm:^2.15.8":
6967+
version: 2.15.8
6968+
resolution: "livekit-client@npm:2.15.8"
69626969
dependencies:
69636970
"@livekit/mutex": 1.1.1
6964-
"@livekit/protocol": 1.39.3
6971+
"@livekit/protocol": 1.42.0
69656972
events: ^3.3.0
6973+
jose: ^6.1.0
69666974
loglevel: ^1.9.2
69676975
sdp-transform: ^2.15.0
69686976
ts-debounce: ^4.0.0
@@ -6971,7 +6979,7 @@ __metadata:
69716979
webrtc-adapter: ^9.0.1
69726980
peerDependencies:
69736981
"@types/dom-mediacapture-record": ^1
6974-
checksum: 7ae2e2f5326c8f7925b359277fd12ddeefb0bc5069b0563a9e184f2b860351bf91733c1fa5fd7b65467b643776368058d485af888e2771fd68c61c409b950e05
6982+
checksum: d12b81ad5640dc383ab3eca241d0b064387e15df0e8cda616fa4a6aa3c0af46ac202f8cb8a4fd19bd3980531a852784f87d21d27062b95b8581ae110f933c744
69756983
languageName: node
69766984
linkType: hard
69776985

example/ios/Podfile.lock

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ PODS:
2929
- ReactCommon/turbomodule/bridging
3030
- ReactCommon/turbomodule/core
3131
- Yoga
32-
- livekit-react-native-webrtc (137.0.1):
32+
- livekit-react-native-webrtc (137.0.2):
3333
- React-Core
34-
- WebRTC-SDK (= 137.7151.02)
34+
- WebRTC-SDK (= 137.7151.04)
3535
- RCT-Folly (2024.01.01.00):
3636
- boost
3737
- DoubleConversion
@@ -1220,7 +1220,7 @@ PODS:
12201220
- ReactCommon/turbomodule/core
12211221
- Yoga
12221222
- SocketRocket (0.7.0)
1223-
- WebRTC-SDK (137.7151.02)
1223+
- WebRTC-SDK (137.7151.04)
12241224
- Yoga (0.0.0)
12251225

12261226
DEPENDENCIES:
@@ -1426,7 +1426,7 @@ SPEC CHECKSUMS:
14261426
glog: fdfdfe5479092de0c4bdbebedd9056951f092c4f
14271427
hermes-engine: 01d3e052018c2a13937aca1860fbedbccd4a41b7
14281428
livekit-react-native: 1320867758f718760eb868c537876ceb007d95ca
1429-
livekit-react-native-webrtc: 0ffe5a13d196f65d717f958a111399f4f6383102
1429+
livekit-react-native-webrtc: 3bb1be767c4e489f69bca662eba1c5e7b1e1be0d
14301430
RCT-Folly: 02617c592a293bd6d418e0a88ff4ee1f88329b47
14311431
RCTDeprecation: b03c35057846b685b3ccadc9bfe43e349989cdb2
14321432
RCTRequired: 194626909cfa8d39ca6663138c417bc6c431648c
@@ -1480,7 +1480,7 @@ SPEC CHECKSUMS:
14801480
RNCAsyncStorage: 0c357f3156fcb16c8589ede67cc036330b6698ca
14811481
RNScreens: b32a9ff15bea7fcdbe5dff6477bc503f792b1208
14821482
SocketRocket: abac6f5de4d4d62d24e11868d7a2f427e0ef940d
1483-
WebRTC-SDK: d20de357dcbf7c9696b124b39f3ff62125107e4b
1483+
WebRTC-SDK: 40d4f5ba05cadff14e4db5614aec402a633f007e
14841484
Yoga: ae3c32c514802d30f687a04a6a35b348506d411f
14851485

14861486
PODFILE CHECKSUM: b5aad0c7d12b2ea501eb822f98f00ca01d154bd9

example/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@
1010
"postinstall": "patch-package"
1111
},
1212
"dependencies": {
13-
"@livekit/react-native-webrtc": "^137.0.1",
13+
"@livekit/react-native-webrtc": "^137.0.2",
1414
"@react-native-async-storage/async-storage": "^1.17.10",
1515
"@react-navigation/native": "^6.0.8",
1616
"@react-navigation/native-stack": "^6.5.0",
1717
"@supersami/rn-foreground-service": "^2.2.5",
18-
"livekit-client": "^2.15.4",
18+
"livekit-client": "^2.15.8",
1919
"react": "18.2.0",
2020
"react-native": "0.74.2",
2121
"react-native-callkeep": "^4.3.14",

example/src/RoomPage.tsx

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,10 @@ import {
2020
AudioSession,
2121
useLocalParticipant,
2222
LiveKitRoom,
23-
useDataChannel,
2423
useRoomContext,
2524
useVisualStableUpdate,
2625
useTracks,
2726
type TrackReferenceOrPlaceholder,
28-
type ReceivedDataMessage,
2927
AndroidAudioTypePresets,
3028
useIOSAudioManagement,
3129
useRNE2EEManager,
@@ -67,7 +65,9 @@ export const RoomPage = ({
6765
};
6866
}, []);
6967

70-
let { e2eeManager } = useRNE2EEManager({ sharedKey: e2eeKey });
68+
let { e2eeManager } = useRNE2EEManager({
69+
sharedKey: e2eeKey,
70+
});
7171
let e2eeOptions = e2ee ? { e2eeManager } : undefined;
7272

7373
return (
@@ -79,7 +79,7 @@ export const RoomPage = ({
7979
adaptiveStream: { pixelDensity: 'screen' },
8080
e2ee: e2eeOptions,
8181
}}
82-
audio={true}
82+
audio={false}
8383
video={true}
8484
>
8585
<RoomView navigation={navigation} e2ee={e2ee} />
@@ -107,24 +107,22 @@ const RoomView = ({ navigation, e2ee }: RoomViewProps) => {
107107
}, [room, e2ee]);
108108

109109
useIOSAudioManagement(room, true);
110-
// Setup room listeners
111-
const { send } = useDataChannel(
112-
(dataMessage: ReceivedDataMessage<string>) => {
113-
//@ts-ignore
114-
let decoder = new TextDecoder('utf-8');
115-
let message = decoder.decode(dataMessage.payload);
116110

111+
// Setup room listeners
112+
useEffect(() => {
113+
room.registerTextStreamHandler('lk.chat', async (reader, participant) => {
114+
let message = await reader.readAll();
117115
let title = 'Received Message';
118-
if (dataMessage.from != null) {
119-
title = 'Received Message from ' + dataMessage.from?.identity;
116+
if (participant != null) {
117+
title = 'Received Message from ' + participant.identity;
120118
}
121119
Toast.show({
122120
type: 'success',
123121
text1: title,
124122
text2: message,
125123
});
126-
}
127-
);
124+
});
125+
}, [room]);
128126

129127
const tracks = useTracks(
130128
[
@@ -229,17 +227,14 @@ const RoomView = ({ navigation, e2ee }: RoomViewProps) => {
229227
localParticipant.setScreenShareEnabled(enabled);
230228
}
231229
}}
232-
sendData={(message: string) => {
230+
sendData={async (message: string) => {
233231
Toast.show({
234232
type: 'success',
235233
text1: 'Sending Message',
236234
text2: message,
237235
});
238236

239-
//@ts-ignore
240-
let encoder = new TextEncoder();
241-
let encodedData = encoder.encode(message);
242-
send(encodedData, { reliable: true });
237+
room.localParticipant.sendText(message, { topic: 'lk.chat' });
243238
}}
244239
onSimulate={(scenario) => {
245240
room.simulateScenario(scenario);

example/yarn.lock

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2163,25 +2163,25 @@ __metadata:
21632163
languageName: node
21642164
linkType: hard
21652165

2166-
"@livekit/protocol@npm:1.39.3":
2167-
version: 1.39.3
2168-
resolution: "@livekit/protocol@npm:1.39.3"
2166+
"@livekit/protocol@npm:1.42.0":
2167+
version: 1.42.0
2168+
resolution: "@livekit/protocol@npm:1.42.0"
21692169
dependencies:
21702170
"@bufbuild/protobuf": ^1.10.0
2171-
checksum: 72aa3b9e82203ccec039047518d841d65b10dcc11ab9d661f269eab8a8672aed7b2d072f4f09cc6fb94a2579542b0a9216d7f66476d34cd1675c13e1ebcc119f
2171+
checksum: 6b1b194c69aa85c1d86b94eacc6ef163a85c56e66532c39737c2f9d1c6a2037c7fe499e474a823f4a332c7e87f4631be04e67bab57e12cdbba00bdcea202b7e9
21722172
languageName: node
21732173
linkType: hard
21742174

2175-
"@livekit/react-native-webrtc@npm:^137.0.1":
2176-
version: 137.0.1
2177-
resolution: "@livekit/react-native-webrtc@npm:137.0.1"
2175+
"@livekit/react-native-webrtc@npm:^137.0.2":
2176+
version: 137.0.2
2177+
resolution: "@livekit/react-native-webrtc@npm:137.0.2"
21782178
dependencies:
21792179
base64-js: 1.5.1
21802180
debug: 4.3.4
21812181
event-target-shim: 6.0.2
21822182
peerDependencies:
21832183
react-native: ">=0.60.0"
2184-
checksum: 3341aafe7d9d1deb345e47247faa020b2cb5f1adbded135a244f0f9285eed720c9f62325bbce0e21c1da755ae24ae6c69eb07728cece709560f615908bde43a9
2184+
checksum: c23467701c7dfb74e3b223dd955b20ba1586c2186383f5b2595fff9b65a36b2db0b660de9935e009b69bc5e0bbff047d0f598495f8464daae8db5f8d9f9b7c24
21852185
languageName: node
21862186
linkType: hard
21872187

@@ -5892,6 +5892,13 @@ __metadata:
58925892
languageName: node
58935893
linkType: hard
58945894

5895+
"jose@npm:^6.1.0":
5896+
version: 6.1.0
5897+
resolution: "jose@npm:6.1.0"
5898+
checksum: f9596a3161b5dabfdd0b7d490f2710f2cc8d460b0a2e1f3262fd2f90652abbb535e4f80e80d3854e7264c9526dcdac5e28693b4d4b1803f622728d7dcde02010
5899+
languageName: node
5900+
linkType: hard
5901+
58955902
"js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0":
58965903
version: 4.0.0
58975904
resolution: "js-tokens@npm:4.0.0"
@@ -6102,13 +6109,14 @@ __metadata:
61026109
languageName: node
61036110
linkType: hard
61046111

6105-
"livekit-client@npm:^2.15.4":
6106-
version: 2.15.4
6107-
resolution: "livekit-client@npm:2.15.4"
6112+
"livekit-client@npm:^2.15.8":
6113+
version: 2.15.8
6114+
resolution: "livekit-client@npm:2.15.8"
61086115
dependencies:
61096116
"@livekit/mutex": 1.1.1
6110-
"@livekit/protocol": 1.39.3
6117+
"@livekit/protocol": 1.42.0
61116118
events: ^3.3.0
6119+
jose: ^6.1.0
61126120
loglevel: ^1.9.2
61136121
sdp-transform: ^2.15.0
61146122
ts-debounce: ^4.0.0
@@ -6117,7 +6125,7 @@ __metadata:
61176125
webrtc-adapter: ^9.0.1
61186126
peerDependencies:
61196127
"@types/dom-mediacapture-record": ^1
6120-
checksum: 7ae2e2f5326c8f7925b359277fd12ddeefb0bc5069b0563a9e184f2b860351bf91733c1fa5fd7b65467b643776368058d485af888e2771fd68c61c409b950e05
6128+
checksum: d12b81ad5640dc383ab3eca241d0b064387e15df0e8cda616fa4a6aa3c0af46ac202f8cb8a4fd19bd3980531a852784f87d21d27062b95b8581ae110f933c744
61216129
languageName: node
61226130
linkType: hard
61236131

@@ -6128,7 +6136,7 @@ __metadata:
61286136
"@babel/core": ^7.20.0
61296137
"@babel/preset-env": ^7.20.0
61306138
"@babel/runtime": ^7.20.0
6131-
"@livekit/react-native-webrtc": ^137.0.1
6139+
"@livekit/react-native-webrtc": ^137.0.2
61326140
"@react-native-async-storage/async-storage": ^1.17.10
61336141
"@react-native/babel-preset": 0.74.84
61346142
"@react-native/eslint-config": 0.74.84
@@ -6140,7 +6148,7 @@ __metadata:
61406148
"@types/fastestsmallesttextencoderdecoder": ^1.0.0
61416149
"@types/react": ^18.2.6
61426150
babel-plugin-module-resolver: ^4.1.0
6143-
livekit-client: ^2.15.4
6151+
livekit-client: ^2.15.8
61446152
patch-package: ^8.0.0
61456153
react: 18.2.0
61466154
react-native: 0.74.2

0 commit comments

Comments
 (0)