@sbhjt-gr/react-native-webrtc 124.0.3 → 124.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (361) hide show
  1. package/.clang-format +11 -11
  2. package/.eslintignore +6 -6
  3. package/.nvmrc +1 -1
  4. package/ISSUE_TEMPLATE.md +40 -40
  5. package/LICENSE +22 -22
  6. package/README.md +103 -103
  7. package/android/build.gradle +37 -37
  8. package/android/consumer-rules.pro +3 -3
  9. package/android/src/main/AndroidManifest.xml +11 -11
  10. package/android/src/main/java/com/oney/WebRTCModule/AbstractVideoCaptureController.java +113 -113
  11. package/android/src/main/java/com/oney/WebRTCModule/CameraCaptureController.java +338 -338
  12. package/android/src/main/java/com/oney/WebRTCModule/CameraEventsHandler.java +49 -49
  13. package/android/src/main/java/com/oney/WebRTCModule/DataChannelWrapper.java +99 -99
  14. package/android/src/main/java/com/oney/WebRTCModule/DataPacketCryptorManager.java +62 -62
  15. package/android/src/main/java/com/oney/WebRTCModule/DisplayUtils.java +16 -16
  16. package/android/src/main/java/com/oney/WebRTCModule/EglUtils.java +66 -66
  17. package/android/src/main/java/com/oney/WebRTCModule/GetUserMediaImpl.java +539 -539
  18. package/android/src/main/java/com/oney/WebRTCModule/LibraryLoader.java +21 -21
  19. package/android/src/main/java/com/oney/WebRTCModule/MediaProjectionNotification.java +70 -70
  20. package/android/src/main/java/com/oney/WebRTCModule/MediaProjectionService.java +82 -82
  21. package/android/src/main/java/com/oney/WebRTCModule/PeerConnectionObserver.java +588 -588
  22. package/android/src/main/java/com/oney/WebRTCModule/RTCCryptoManager.java +493 -493
  23. package/android/src/main/java/com/oney/WebRTCModule/RTCVideoViewManager.java +98 -98
  24. package/android/src/main/java/com/oney/WebRTCModule/ReactBridgeUtil.java +35 -35
  25. package/android/src/main/java/com/oney/WebRTCModule/ScreenCaptureController.java +94 -94
  26. package/android/src/main/java/com/oney/WebRTCModule/SerializeUtils.java +342 -342
  27. package/android/src/main/java/com/oney/WebRTCModule/StringUtils.java +100 -100
  28. package/android/src/main/java/com/oney/WebRTCModule/ThreadUtils.java +41 -41
  29. package/android/src/main/java/com/oney/WebRTCModule/TrackCapturerEventsEmitter.java +34 -34
  30. package/android/src/main/java/com/oney/WebRTCModule/VideoTrackAdapter.java +137 -137
  31. package/android/src/main/java/com/oney/WebRTCModule/WebRTCModule.java +1649 -1643
  32. package/android/src/main/java/com/oney/WebRTCModule/WebRTCModuleOptions.java +33 -33
  33. package/android/src/main/java/com/oney/WebRTCModule/WebRTCModulePackage.java +21 -21
  34. package/android/src/main/java/com/oney/WebRTCModule/WebRTCView.java +583 -583
  35. package/android/src/main/java/com/oney/WebRTCModule/palabra/PalabraClient.java +529 -501
  36. package/android/src/main/java/com/oney/WebRTCModule/palabra/PalabraConfig.java +17 -17
  37. package/android/src/main/java/com/oney/WebRTCModule/palabra/PalabraListener.java +7 -7
  38. package/android/src/main/java/com/oney/WebRTCModule/videoEffects/ProcessorProvider.java +38 -38
  39. package/android/src/main/java/com/oney/WebRTCModule/videoEffects/VideoEffectProcessor.java +59 -59
  40. package/android/src/main/java/com/oney/WebRTCModule/videoEffects/VideoFrameProcessor.java +19 -19
  41. package/android/src/main/java/com/oney/WebRTCModule/videoEffects/VideoFrameProcessorFactoryInterface.java +12 -12
  42. package/android/src/main/java/com/oney/WebRTCModule/webrtcutils/H264AndSoftwareVideoDecoderFactory.java +73 -73
  43. package/android/src/main/java/com/oney/WebRTCModule/webrtcutils/H264AndSoftwareVideoEncoderFactory.java +73 -73
  44. package/android/src/main/java/com/oney/WebRTCModule/webrtcutils/SoftwareVideoDecoderFactoryProxy.java +36 -36
  45. package/android/src/main/java/com/oney/WebRTCModule/webrtcutils/SoftwareVideoEncoderFactoryProxy.java +36 -36
  46. package/android/src/main/java/org/webrtc/Camera1Helper.java +54 -54
  47. package/android/src/main/java/org/webrtc/Camera2Helper.java +52 -52
  48. package/android/src/main/res/values/strings.xml +5 -5
  49. package/android/src/main/res/values/styles.xml +8 -8
  50. package/ios/RCTWebRTC/CaptureController.h +18 -18
  51. package/ios/RCTWebRTC/CaptureController.m +28 -28
  52. package/ios/RCTWebRTC/CapturerEventsDelegate.h +12 -12
  53. package/ios/RCTWebRTC/DataChannelWrapper.h +27 -27
  54. package/ios/RCTWebRTC/DataChannelWrapper.m +42 -42
  55. package/ios/RCTWebRTC/I420Converter.h +22 -22
  56. package/ios/RCTWebRTC/I420Converter.m +164 -164
  57. package/ios/RCTWebRTC/PIPController.h +24 -24
  58. package/ios/RCTWebRTC/PIPController.m +234 -234
  59. package/ios/RCTWebRTC/PalabraAudioSink.h +13 -13
  60. package/ios/RCTWebRTC/PalabraAudioSink.m +18 -18
  61. package/ios/RCTWebRTC/PalabraClient.h +42 -36
  62. package/ios/RCTWebRTC/PalabraClient.m +680 -644
  63. package/ios/RCTWebRTC/RCTConvert+WebRTC.h +16 -16
  64. package/ios/RCTWebRTC/RCTConvert+WebRTC.m +206 -206
  65. package/ios/RCTWebRTC/RTCMediaStreamTrack+React.h +10 -10
  66. package/ios/RCTWebRTC/RTCMediaStreamTrack+React.m +16 -16
  67. package/ios/RCTWebRTC/RTCVideoViewManager.h +29 -29
  68. package/ios/RCTWebRTC/RTCVideoViewManager.m +411 -411
  69. package/ios/RCTWebRTC/SampleBufferVideoCallView.h +12 -12
  70. package/ios/RCTWebRTC/SampleBufferVideoCallView.m +178 -178
  71. package/ios/RCTWebRTC/ScreenCaptureController.h +20 -20
  72. package/ios/RCTWebRTC/ScreenCaptureController.m +82 -82
  73. package/ios/RCTWebRTC/ScreenCapturePickerViewManager.h +7 -7
  74. package/ios/RCTWebRTC/ScreenCapturePickerViewManager.m +59 -59
  75. package/ios/RCTWebRTC/ScreenCapturer.h +19 -19
  76. package/ios/RCTWebRTC/ScreenCapturer.m +263 -263
  77. package/ios/RCTWebRTC/SerializeUtils.h +28 -28
  78. package/ios/RCTWebRTC/SerializeUtils.m +314 -314
  79. package/ios/RCTWebRTC/SocketConnection.h +13 -13
  80. package/ios/RCTWebRTC/SocketConnection.m +137 -137
  81. package/ios/RCTWebRTC/TrackCapturerEventsEmitter.h +14 -14
  82. package/ios/RCTWebRTC/TrackCapturerEventsEmitter.m +36 -36
  83. package/ios/RCTWebRTC/VideoCaptureController.h +21 -21
  84. package/ios/RCTWebRTC/VideoCaptureController.m +328 -328
  85. package/ios/RCTWebRTC/WLVAudioDevice.h +12 -12
  86. package/ios/RCTWebRTC/WLVAudioDevice.m +137 -137
  87. package/ios/RCTWebRTC/WebRTCModule+Palabra.h +4 -4
  88. package/ios/RCTWebRTC/WebRTCModule+Palabra.m +92 -83
  89. package/ios/RCTWebRTC/WebRTCModule+Permissions.m +75 -75
  90. package/ios/RCTWebRTC/WebRTCModule+RTCAudioSession.m +20 -20
  91. package/ios/RCTWebRTC/WebRTCModule+RTCDataChannel.h +14 -14
  92. package/ios/RCTWebRTC/WebRTCModule+RTCDataChannel.m +165 -165
  93. package/ios/RCTWebRTC/WebRTCModule+RTCFrameCryptor.m +611 -611
  94. package/ios/RCTWebRTC/WebRTCModule+RTCMediaStream.h +13 -13
  95. package/ios/RCTWebRTC/WebRTCModule+RTCMediaStream.m +728 -728
  96. package/ios/RCTWebRTC/WebRTCModule+RTCPeerConnection.h +24 -24
  97. package/ios/RCTWebRTC/WebRTCModule+RTCPeerConnection.m +1004 -1004
  98. package/ios/RCTWebRTC/WebRTCModule+Transceivers.m +267 -267
  99. package/ios/RCTWebRTC/WebRTCModule+VideoTrackAdapter.h +12 -12
  100. package/ios/RCTWebRTC/WebRTCModule+VideoTrackAdapter.m +166 -166
  101. package/ios/RCTWebRTC/WebRTCModule.h +58 -58
  102. package/ios/RCTWebRTC/WebRTCModule.m +169 -169
  103. package/ios/RCTWebRTC/WebRTCModuleOptions.h +24 -24
  104. package/ios/RCTWebRTC/WebRTCModuleOptions.m +31 -31
  105. package/ios/RCTWebRTC/videoEffects/ProcessorProvider.h +9 -9
  106. package/ios/RCTWebRTC/videoEffects/ProcessorProvider.m +23 -23
  107. package/ios/RCTWebRTC/videoEffects/VideoEffectProcessor.h +13 -13
  108. package/ios/RCTWebRTC/videoEffects/VideoEffectProcessor.m +23 -23
  109. package/ios/RCTWebRTC/videoEffects/VideoFrameProcessor.h +8 -8
  110. package/ios/RCTWebRTC.xcodeproj/project.pbxproj +404 -404
  111. package/ios/RCTWebRTC.xcworkspace/contents.xcworkspacedata +10 -10
  112. package/lib/commonjs/Constraints.js.map +1 -1
  113. package/lib/commonjs/EventEmitter.js.map +1 -1
  114. package/lib/commonjs/Logger.js.map +1 -1
  115. package/lib/commonjs/MediaDevices.js +17 -17
  116. package/lib/commonjs/MediaDevices.js.map +1 -1
  117. package/lib/commonjs/MediaStream.js +19 -19
  118. package/lib/commonjs/MediaStream.js.map +1 -1
  119. package/lib/commonjs/MediaStreamError.js.map +1 -1
  120. package/lib/commonjs/MediaStreamErrorEvent.js.map +1 -1
  121. package/lib/commonjs/MediaStreamTrack.js +28 -28
  122. package/lib/commonjs/MediaStreamTrack.js.map +1 -1
  123. package/lib/commonjs/MediaStreamTrackEvent.js +6 -6
  124. package/lib/commonjs/MediaStreamTrackEvent.js.map +1 -1
  125. package/lib/commonjs/MessageEvent.js +7 -7
  126. package/lib/commonjs/MessageEvent.js.map +1 -1
  127. package/lib/commonjs/Permissions.js +28 -28
  128. package/lib/commonjs/Permissions.js.map +1 -1
  129. package/lib/commonjs/RTCAudioSession.js +4 -4
  130. package/lib/commonjs/RTCAudioSession.js.map +1 -1
  131. package/lib/commonjs/RTCDataChannel.js +2 -2
  132. package/lib/commonjs/RTCDataChannel.js.map +1 -1
  133. package/lib/commonjs/RTCDataChannelEvent.js +6 -6
  134. package/lib/commonjs/RTCDataChannelEvent.js.map +1 -1
  135. package/lib/commonjs/RTCDataPacketCryptor.js.map +1 -1
  136. package/lib/commonjs/RTCDataPacketCryptorFactory.js.map +1 -1
  137. package/lib/commonjs/RTCErrorEvent.js +3 -3
  138. package/lib/commonjs/RTCErrorEvent.js.map +1 -1
  139. package/lib/commonjs/RTCFrameCryptor.js +8 -8
  140. package/lib/commonjs/RTCFrameCryptor.js.map +1 -1
  141. package/lib/commonjs/RTCFrameCryptorFactory.js.map +1 -1
  142. package/lib/commonjs/RTCIceCandidate.js.map +1 -1
  143. package/lib/commonjs/RTCIceCandidateEvent.js +7 -7
  144. package/lib/commonjs/RTCIceCandidateEvent.js.map +1 -1
  145. package/lib/commonjs/RTCKeyProvider.js.map +1 -1
  146. package/lib/commonjs/RTCPIPView.js +2 -2
  147. package/lib/commonjs/RTCPIPView.js.map +1 -1
  148. package/lib/commonjs/RTCPIPView.web.js.map +1 -1
  149. package/lib/commonjs/RTCPeerConnection.js +36 -36
  150. package/lib/commonjs/RTCPeerConnection.js.map +1 -1
  151. package/lib/commonjs/RTCRtcpParameters.js.map +1 -1
  152. package/lib/commonjs/RTCRtpCapabilities.js +2 -2
  153. package/lib/commonjs/RTCRtpCapabilities.js.map +1 -1
  154. package/lib/commonjs/RTCRtpCodecCapability.js.map +1 -1
  155. package/lib/commonjs/RTCRtpCodecParameters.js.map +1 -1
  156. package/lib/commonjs/RTCRtpEncodingParameters.js.map +1 -1
  157. package/lib/commonjs/RTCRtpHeaderExtension.js.map +1 -1
  158. package/lib/commonjs/RTCRtpParameters.js.map +1 -1
  159. package/lib/commonjs/RTCRtpReceiveParameters.js.map +1 -1
  160. package/lib/commonjs/RTCRtpReceiver.js +7 -7
  161. package/lib/commonjs/RTCRtpReceiver.js.map +1 -1
  162. package/lib/commonjs/RTCRtpSendParameters.js +3 -3
  163. package/lib/commonjs/RTCRtpSendParameters.js.map +1 -1
  164. package/lib/commonjs/RTCRtpSender.js +7 -7
  165. package/lib/commonjs/RTCRtpSender.js.map +1 -1
  166. package/lib/commonjs/RTCRtpTransceiver.js.map +1 -1
  167. package/lib/commonjs/RTCSessionDescription.js.map +1 -1
  168. package/lib/commonjs/RTCTrackEvent.js +6 -6
  169. package/lib/commonjs/RTCTrackEvent.js.map +1 -1
  170. package/lib/commonjs/RTCUtil.js +28 -28
  171. package/lib/commonjs/RTCUtil.js.map +1 -1
  172. package/lib/commonjs/RTCView.js +5 -5
  173. package/lib/commonjs/RTCView.js.map +1 -1
  174. package/lib/commonjs/RTCView.web.js.map +1 -1
  175. package/lib/commonjs/ScreenCapturePickerView.js.map +1 -1
  176. package/lib/commonjs/ScreenCapturePickerView.web.js.map +1 -1
  177. package/lib/commonjs/getDisplayMedia.js.map +1 -1
  178. package/lib/commonjs/getUserMedia.js.map +1 -1
  179. package/lib/commonjs/index.js.map +1 -1
  180. package/lib/commonjs/index.web.js.map +1 -1
  181. package/lib/commonjs/webStream.js.map +1 -1
  182. package/lib/module/Constraints.js.map +1 -1
  183. package/lib/module/EventEmitter.js.map +1 -1
  184. package/lib/module/Logger.js.map +1 -1
  185. package/lib/module/MediaDevices.js +17 -17
  186. package/lib/module/MediaDevices.js.map +1 -1
  187. package/lib/module/MediaStream.js +19 -19
  188. package/lib/module/MediaStream.js.map +1 -1
  189. package/lib/module/MediaStreamError.js.map +1 -1
  190. package/lib/module/MediaStreamErrorEvent.js.map +1 -1
  191. package/lib/module/MediaStreamTrack.js +28 -28
  192. package/lib/module/MediaStreamTrack.js.map +1 -1
  193. package/lib/module/MediaStreamTrackEvent.js +6 -6
  194. package/lib/module/MediaStreamTrackEvent.js.map +1 -1
  195. package/lib/module/MessageEvent.js +7 -7
  196. package/lib/module/MessageEvent.js.map +1 -1
  197. package/lib/module/Permissions.js +28 -28
  198. package/lib/module/Permissions.js.map +1 -1
  199. package/lib/module/RTCAudioSession.js +4 -4
  200. package/lib/module/RTCAudioSession.js.map +1 -1
  201. package/lib/module/RTCDataChannel.js +2 -2
  202. package/lib/module/RTCDataChannel.js.map +1 -1
  203. package/lib/module/RTCDataChannelEvent.js +6 -6
  204. package/lib/module/RTCDataChannelEvent.js.map +1 -1
  205. package/lib/module/RTCDataPacketCryptor.js.map +1 -1
  206. package/lib/module/RTCDataPacketCryptorFactory.js.map +1 -1
  207. package/lib/module/RTCErrorEvent.js +3 -3
  208. package/lib/module/RTCErrorEvent.js.map +1 -1
  209. package/lib/module/RTCFrameCryptor.js +8 -8
  210. package/lib/module/RTCFrameCryptor.js.map +1 -1
  211. package/lib/module/RTCFrameCryptorFactory.js.map +1 -1
  212. package/lib/module/RTCIceCandidate.js.map +1 -1
  213. package/lib/module/RTCIceCandidateEvent.js +7 -7
  214. package/lib/module/RTCIceCandidateEvent.js.map +1 -1
  215. package/lib/module/RTCKeyProvider.js.map +1 -1
  216. package/lib/module/RTCPIPView.js +2 -2
  217. package/lib/module/RTCPIPView.js.map +1 -1
  218. package/lib/module/RTCPIPView.web.js.map +1 -1
  219. package/lib/module/RTCPeerConnection.js +36 -36
  220. package/lib/module/RTCPeerConnection.js.map +1 -1
  221. package/lib/module/RTCRtcpParameters.js.map +1 -1
  222. package/lib/module/RTCRtpCapabilities.js +2 -2
  223. package/lib/module/RTCRtpCapabilities.js.map +1 -1
  224. package/lib/module/RTCRtpCodecCapability.js.map +1 -1
  225. package/lib/module/RTCRtpCodecParameters.js.map +1 -1
  226. package/lib/module/RTCRtpEncodingParameters.js.map +1 -1
  227. package/lib/module/RTCRtpHeaderExtension.js.map +1 -1
  228. package/lib/module/RTCRtpParameters.js.map +1 -1
  229. package/lib/module/RTCRtpReceiveParameters.js.map +1 -1
  230. package/lib/module/RTCRtpReceiver.js +7 -7
  231. package/lib/module/RTCRtpReceiver.js.map +1 -1
  232. package/lib/module/RTCRtpSendParameters.js +3 -3
  233. package/lib/module/RTCRtpSendParameters.js.map +1 -1
  234. package/lib/module/RTCRtpSender.js +7 -7
  235. package/lib/module/RTCRtpSender.js.map +1 -1
  236. package/lib/module/RTCRtpTransceiver.js.map +1 -1
  237. package/lib/module/RTCSessionDescription.js.map +1 -1
  238. package/lib/module/RTCTrackEvent.js +6 -6
  239. package/lib/module/RTCTrackEvent.js.map +1 -1
  240. package/lib/module/RTCUtil.js +28 -28
  241. package/lib/module/RTCUtil.js.map +1 -1
  242. package/lib/module/RTCView.js +5 -5
  243. package/lib/module/RTCView.js.map +1 -1
  244. package/lib/module/RTCView.web.js.map +1 -1
  245. package/lib/module/ScreenCapturePickerView.js.map +1 -1
  246. package/lib/module/ScreenCapturePickerView.web.js.map +1 -1
  247. package/lib/module/getDisplayMedia.js.map +1 -1
  248. package/lib/module/getUserMedia.js.map +1 -1
  249. package/lib/module/index.js.map +1 -1
  250. package/lib/module/index.web.js.map +1 -1
  251. package/lib/module/webStream.js.map +1 -1
  252. package/lib/typescript/Constraints.d.ts +19 -19
  253. package/lib/typescript/EventEmitter.d.ts +6 -6
  254. package/lib/typescript/Logger.d.ts +13 -13
  255. package/lib/typescript/MediaDevices.d.ts +30 -30
  256. package/lib/typescript/MediaStream.d.ts +48 -48
  257. package/lib/typescript/MediaStreamError.d.ts +6 -6
  258. package/lib/typescript/MediaStreamErrorEvent.d.ts +6 -6
  259. package/lib/typescript/MediaStreamTrack.d.ts +101 -101
  260. package/lib/typescript/MediaStreamTrackEvent.d.ts +19 -19
  261. package/lib/typescript/MessageEvent.d.ts +20 -20
  262. package/lib/typescript/Permissions.d.ts +55 -55
  263. package/lib/typescript/RTCAudioSession.d.ts +10 -10
  264. package/lib/typescript/RTCDataChannel.d.ts +43 -43
  265. package/lib/typescript/RTCDataChannelEvent.d.ts +19 -19
  266. package/lib/typescript/RTCDataPacketCryptor.d.ts +12 -12
  267. package/lib/typescript/RTCDataPacketCryptorFactory.d.ts +6 -6
  268. package/lib/typescript/RTCErrorEvent.d.ts +12 -12
  269. package/lib/typescript/RTCFrameCryptor.d.ts +47 -47
  270. package/lib/typescript/RTCFrameCryptorFactory.d.ts +21 -21
  271. package/lib/typescript/RTCIceCandidate.d.ts +17 -17
  272. package/lib/typescript/RTCIceCandidateEvent.d.ts +20 -20
  273. package/lib/typescript/RTCKeyProvider.d.ts +21 -21
  274. package/lib/typescript/RTCPIPView.d.ts +15 -15
  275. package/lib/typescript/RTCPIPView.web.d.ts +13 -13
  276. package/lib/typescript/RTCPeerConnection.d.ts +117 -117
  277. package/lib/typescript/RTCRtcpParameters.d.ts +10 -10
  278. package/lib/typescript/RTCRtpCapabilities.d.ts +9 -9
  279. package/lib/typescript/RTCRtpCodecCapability.d.ts +7 -7
  280. package/lib/typescript/RTCRtpCodecParameters.d.ts +16 -16
  281. package/lib/typescript/RTCRtpEncodingParameters.d.ts +23 -23
  282. package/lib/typescript/RTCRtpHeaderExtension.d.ts +12 -12
  283. package/lib/typescript/RTCRtpParameters.d.ts +19 -19
  284. package/lib/typescript/RTCRtpReceiveParameters.d.ts +4 -4
  285. package/lib/typescript/RTCRtpReceiver.d.ts +21 -21
  286. package/lib/typescript/RTCRtpSendParameters.d.ts +20 -20
  287. package/lib/typescript/RTCRtpSender.d.ts +22 -22
  288. package/lib/typescript/RTCRtpTransceiver.d.ts +31 -31
  289. package/lib/typescript/RTCSessionDescription.d.ts +12 -12
  290. package/lib/typescript/RTCTrackEvent.d.ts +29 -29
  291. package/lib/typescript/RTCUtil.d.ts +37 -37
  292. package/lib/typescript/RTCView.d.ts +117 -117
  293. package/lib/typescript/RTCView.web.d.ts +25 -25
  294. package/lib/typescript/ScreenCapturePickerView.d.ts +2 -2
  295. package/lib/typescript/ScreenCapturePickerView.web.d.ts +1 -1
  296. package/lib/typescript/getDisplayMedia.d.ts +2 -2
  297. package/lib/typescript/getUserMedia.d.ts +7 -7
  298. package/lib/typescript/index.d.ts +22 -22
  299. package/lib/typescript/index.web.d.ts +101 -101
  300. package/lib/typescript/webStream.d.ts +3 -3
  301. package/livekit-react-native-webrtc.podspec +29 -29
  302. package/macos/RCTWebRTC.xcodeproj/project.pbxproj +324 -324
  303. package/macos/RCTWebRTC.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -7
  304. package/macos/RCTWebRTC.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -8
  305. package/metro.config.js +7 -7
  306. package/metro.config.macos.js +14 -14
  307. package/package.json +66 -66
  308. package/react-native.config.js +11 -11
  309. package/src/.eslintrc.cjs +67 -67
  310. package/src/Constraints.ts +20 -20
  311. package/src/EventEmitter.ts +65 -65
  312. package/src/Logger.ts +49 -49
  313. package/src/MediaDevices.ts +53 -53
  314. package/src/MediaStream.ts +161 -161
  315. package/src/MediaStreamError.ts +12 -12
  316. package/src/MediaStreamErrorEvent.ts +11 -11
  317. package/src/MediaStreamTrack.ts +282 -282
  318. package/src/MediaStreamTrackEvent.ts +25 -25
  319. package/src/MessageEvent.ts +26 -26
  320. package/src/Permissions.ts +133 -133
  321. package/src/RTCAudioSession.ts +25 -25
  322. package/src/RTCDataChannel.ts +190 -190
  323. package/src/RTCDataChannelEvent.ts +28 -28
  324. package/src/RTCDataPacketCryptor.ts +90 -90
  325. package/src/RTCDataPacketCryptorFactory.ts +24 -24
  326. package/src/RTCErrorEvent.ts +20 -20
  327. package/src/RTCFrameCryptor.ts +162 -162
  328. package/src/RTCFrameCryptorFactory.ts +101 -101
  329. package/src/RTCIceCandidate.ts +29 -29
  330. package/src/RTCIceCandidateEvent.ts +26 -26
  331. package/src/RTCKeyProvider.ts +117 -117
  332. package/src/RTCPIPView.tsx +46 -46
  333. package/src/RTCPIPView.web.tsx +18 -18
  334. package/src/RTCPeerConnection.ts +935 -935
  335. package/src/RTCRtcpParameters.ts +23 -23
  336. package/src/RTCRtpCapabilities.ts +16 -16
  337. package/src/RTCRtpCodecCapability.ts +12 -12
  338. package/src/RTCRtpCodecParameters.ts +44 -44
  339. package/src/RTCRtpEncodingParameters.ts +90 -90
  340. package/src/RTCRtpHeaderExtension.ts +27 -27
  341. package/src/RTCRtpParameters.ts +37 -37
  342. package/src/RTCRtpReceiveParameters.ts +7 -7
  343. package/src/RTCRtpReceiver.ts +60 -60
  344. package/src/RTCRtpSendParameters.ts +63 -63
  345. package/src/RTCRtpSender.ts +78 -78
  346. package/src/RTCRtpTransceiver.ts +107 -107
  347. package/src/RTCSessionDescription.ts +30 -30
  348. package/src/RTCTrackEvent.ts +42 -42
  349. package/src/RTCUtil.ts +211 -211
  350. package/src/RTCView.ts +122 -122
  351. package/src/RTCView.web.tsx +80 -80
  352. package/src/ScreenCapturePickerView.ts +4 -4
  353. package/src/ScreenCapturePickerView.web.tsx +3 -3
  354. package/src/getDisplayMedia.ts +30 -30
  355. package/src/getUserMedia.ts +136 -136
  356. package/src/index.ts +107 -107
  357. package/src/index.web.ts +191 -191
  358. package/src/webStream.ts +31 -31
  359. package/tools/format.sh +6 -6
  360. package/tools/release.sh +45 -45
  361. package/tsconfig.json +17 -17
@@ -1,611 +1,611 @@
1
- #include <Foundation/Foundation.h>
2
- #import <objc/runtime.h>
3
-
4
- #import <React/RCTBridge.h>
5
- #import <React/RCTBridgeModule.h>
6
-
7
- #import "WebRTCModule+RTCPeerConnection.h"
8
- #import "WebRTCModule.h"
9
-
10
- // Key for objc_set/getAssociatedObject, value of NSString*
11
- static char frameCryptorUUIDKey;
12
-
13
- @interface WebRTCModule ()<RTCFrameCryptorDelegate>
14
- @end
15
-
16
- @implementation WebRTCModule (RTCFrameCryptor)
17
-
18
- - (RTCCryptorAlgorithm)getAlgorithm:(NSNumber *)algorithm {
19
- switch ([algorithm intValue]) {
20
- // case 0:
21
- // return RTCCryptorAlgorithmAesGcm;
22
- // case 1:
23
- // return RTCCryptorAlgorithmAesCbc;
24
- default:
25
- return RTCCryptorAlgorithmAesGcm;
26
- }
27
- }
28
-
29
- - (NSData *)bytesFromMap:(NSDictionary *)map key:(NSString *)key isBase64Key:(nullable NSString *)isBase64Key {
30
- BOOL isBase64 = YES;
31
- if (isBase64Key) {
32
- isBase64 = [map[isBase64Key] boolValue];
33
- }
34
-
35
- if (isBase64) {
36
- return [[NSData alloc] initWithBase64EncodedString:map[key] options:0];
37
- } else {
38
- return [map[key] dataUsingEncoding:NSUTF8StringEncoding];
39
- }
40
- }
41
-
42
- RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(frameCryptorFactoryCreateFrameCryptor : (nonnull NSDictionary *)constraints) {
43
- __block NSString *frameCryptorId = nil;
44
- dispatch_sync(self.workerQueue, ^{
45
- NSNumber *peerConnectionId = constraints[@"peerConnectionId"];
46
- NSNumber *algorithm = constraints[@"algorithm"];
47
- if (algorithm == nil) {
48
- NSLog(@"frameCryptorFactoryCreateFrameCryptorFailed: Invalid algorithm");
49
- return;
50
- }
51
-
52
- NSString *participantId = constraints[@"participantId"];
53
- if (participantId == nil) {
54
- NSLog(@"frameCryptorFactoryCreateFrameCryptorFailed: Invalid participantId");
55
- return;
56
- }
57
-
58
- NSString *keyProviderId = constraints[@"keyProviderId"];
59
- if (keyProviderId == nil) {
60
- NSLog(@"frameCryptorFactoryCreateFrameCryptorFailed: Invalid keyProviderId");
61
- return;
62
- }
63
-
64
- RTCFrameCryptorKeyProvider *keyProvider = self.keyProviders[keyProviderId];
65
- if (keyProvider == nil) {
66
- NSLog(@"frameCryptorFactoryCreateFrameCryptorFailed: Invalid keyProvider");
67
- return;
68
- }
69
-
70
- NSString *type = constraints[@"type"];
71
- NSString *rtpSenderId = constraints[@"rtpSenderId"];
72
- NSString *rtpReceiverId = constraints[@"rtpReceiverId"];
73
-
74
- if ([type isEqualToString:@"sender"]) {
75
- RTCRtpSender *sender = [self getSenderByPeerConnectionId:peerConnectionId senderId:rtpSenderId];
76
-
77
- if (sender == nil) {
78
- NSLog(@"frameCryptorFactoryCreateFrameCryptorFailed: Error: sender not found!");
79
- return;
80
- }
81
-
82
- RTCFrameCryptor *frameCryptor = [[RTCFrameCryptor alloc] initWithFactory:self.peerConnectionFactory
83
- rtpSender:sender
84
- participantId:participantId
85
- algorithm:[self getAlgorithm:algorithm]
86
- keyProvider:keyProvider];
87
- frameCryptorId = [[NSUUID UUID] UUIDString];
88
-
89
- frameCryptor.delegate = self;
90
-
91
- self.frameCryptors[frameCryptorId] = frameCryptor;
92
- objc_setAssociatedObject(frameCryptor, &frameCryptorUUIDKey, frameCryptorId, OBJC_ASSOCIATION_COPY);
93
- return;
94
- } else if ([type isEqualToString:@"receiver"]) {
95
- RTCRtpReceiver *receiver = [self getReceiverByPeerConnectionId:peerConnectionId receiverId:rtpReceiverId];
96
- if (receiver == nil) {
97
- NSLog(@"frameCryptorFactoryCreateFrameCryptorFailed: Error: receiver not found!");
98
- return;
99
- }
100
- RTCFrameCryptor *frameCryptor = [[RTCFrameCryptor alloc] initWithFactory:self.peerConnectionFactory
101
- rtpReceiver:receiver
102
- participantId:participantId
103
- algorithm:[self getAlgorithm:algorithm]
104
- keyProvider:keyProvider];
105
- frameCryptorId = [[NSUUID UUID] UUIDString];
106
-
107
- frameCryptor.delegate = self;
108
-
109
- self.frameCryptors[frameCryptorId] = frameCryptor;
110
- objc_setAssociatedObject(frameCryptor, &frameCryptorUUIDKey, frameCryptorId, OBJC_ASSOCIATION_COPY);
111
- return;
112
- } else {
113
- NSLog(@"InvalidArgument: Invalid type");
114
- return;
115
- }
116
- });
117
-
118
- return frameCryptorId;
119
- }
120
-
121
- RCT_EXPORT_METHOD(frameCryptorSetKeyIndex
122
- : (nonnull NSDictionary *)constraints resolver
123
- : (RCTPromiseResolveBlock)resolve rejecter
124
- : (RCTPromiseRejectBlock)reject) {
125
- NSString *frameCryptorId = constraints[@"frameCryptorId"];
126
- if (frameCryptorId == nil) {
127
- reject(@"frameCryptorSetKeyIndexFailed", @"Invalid frameCryptorId", nil);
128
- return;
129
- }
130
- RTCFrameCryptor *frameCryptor = self.frameCryptors[frameCryptorId];
131
- if (frameCryptor == nil) {
132
- reject(@"frameCryptorSetKeyIndexFailed", @"Invalid frameCryptor", nil);
133
- return;
134
- }
135
-
136
- NSNumber *keyIndex = constraints[@"keyIndex"];
137
- if (keyIndex == nil) {
138
- reject(@"frameCryptorSetKeyIndexFailed", @"Invalid keyIndex", nil);
139
- return;
140
- }
141
- [frameCryptor setKeyIndex:[keyIndex intValue]];
142
- resolve(@{@"result" : @YES});
143
- }
144
-
145
- RCT_EXPORT_METHOD(frameCryptorGetKeyIndex
146
- : (nonnull NSDictionary *)constraints resolver
147
- : (RCTPromiseResolveBlock)resolve rejecter
148
- : (RCTPromiseRejectBlock)reject) {
149
- NSString *frameCryptorId = constraints[@"frameCryptorId"];
150
- if (frameCryptorId == nil) {
151
- reject(@"frameCryptorGetKeyIndexFailed", @"Invalid frameCryptorId", nil);
152
- return;
153
- }
154
- RTCFrameCryptor *frameCryptor = self.frameCryptors[frameCryptorId];
155
- if (frameCryptor == nil) {
156
- reject(@"frameCryptorGetKeyIndexFailed", @"Invalid frameCryptor", nil);
157
- return;
158
- }
159
- resolve(@{@"keyIndex" : [NSNumber numberWithInt:frameCryptor.keyIndex]});
160
- }
161
-
162
- RCT_EXPORT_METHOD(frameCryptorSetEnabled
163
- : (nonnull NSDictionary *)constraints resolver
164
- : (RCTPromiseResolveBlock)resolve rejecter
165
- : (RCTPromiseRejectBlock)reject) {
166
- NSString *frameCryptorId = constraints[@"frameCryptorId"];
167
- if (frameCryptorId == nil) {
168
- reject(@"frameCryptorSetEnabledFailed", @"Invalid frameCryptorId", nil);
169
- return;
170
- }
171
- RTCFrameCryptor *frameCryptor = self.frameCryptors[frameCryptorId];
172
- if (frameCryptor == nil) {
173
- reject(@"frameCryptorSetEnabledFailed", @"Invalid frameCryptor", nil);
174
- return;
175
- }
176
-
177
- NSNumber *enabled = constraints[@"enabled"];
178
- if (enabled == nil) {
179
- reject(@"frameCryptorSetEnabledFailed", @"Invalid enabled", nil);
180
- return;
181
- }
182
- frameCryptor.enabled = [enabled boolValue];
183
- resolve(@{@"result" : enabled});
184
- }
185
-
186
- RCT_EXPORT_METHOD(frameCryptorGetEnabled
187
- : (nonnull NSDictionary *)constraints resolver
188
- : (RCTPromiseResolveBlock)resolve rejecter
189
- : (RCTPromiseRejectBlock)reject) {
190
- NSString *frameCryptorId = constraints[@"frameCryptorId"];
191
- if (frameCryptorId == nil) {
192
- reject(@"frameCryptorGetEnabledFailed", @"Invalid frameCryptorId", nil);
193
- return;
194
- }
195
- RTCFrameCryptor *frameCryptor = self.frameCryptors[frameCryptorId];
196
- if (frameCryptor == nil) {
197
- reject(@"frameCryptorGetEnabledFailed", @"Invalid frameCryptor", nil);
198
- return;
199
- }
200
- resolve(@{@"enabled" : [NSNumber numberWithBool:frameCryptor.enabled]});
201
- }
202
-
203
- RCT_EXPORT_METHOD(frameCryptorDispose
204
- : (nonnull NSDictionary *)constraints resolver
205
- : (RCTPromiseResolveBlock)resolve rejecter
206
- : (RCTPromiseRejectBlock)reject) {
207
- NSString *frameCryptorId = constraints[@"frameCryptorId"];
208
- if (frameCryptorId == nil) {
209
- reject(@"frameCryptorDisposeFailed", @"Invalid frameCryptorId", nil);
210
- return;
211
- }
212
- RTCFrameCryptor *frameCryptor = self.frameCryptors[frameCryptorId];
213
- if (frameCryptor == nil) {
214
- reject(@"frameCryptorDisposeFailed", @"Invalid frameCryptor", nil);
215
- return;
216
- }
217
- [self.frameCryptors removeObjectForKey:frameCryptorId];
218
- frameCryptor.enabled = NO;
219
- resolve(@{@"result" : @"success"});
220
- }
221
-
222
- RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(frameCryptorFactoryCreateKeyProvider
223
- : (nonnull NSDictionary *)keyProviderOptions) {
224
- __block NSString *keyProviderId = [[NSUUID UUID] UUIDString];
225
-
226
- dispatch_sync(self.workerQueue, ^{
227
- NSNumber *sharedKey = keyProviderOptions[@"sharedKey"];
228
- if (sharedKey == nil) {
229
- NSLog(@"frameCryptorFactoryCreateKeyProviderFailed: Invalid sharedKey");
230
- keyProviderId = nil;
231
- return;
232
- }
233
-
234
- if (keyProviderOptions[@"ratchetSalt"] == nil) {
235
- NSLog(@"frameCryptorFactoryCreateKeyProviderFailed: Invalid ratchetSalt");
236
- keyProviderId = nil;
237
- return;
238
- }
239
- NSData *ratchetSalt = [self bytesFromMap:keyProviderOptions
240
- key:@"ratchetSalt"
241
- isBase64Key:@"ratchetSaltIsBase64"];
242
-
243
- NSNumber *ratchetWindowSize = keyProviderOptions[@"ratchetWindowSize"];
244
- if (ratchetWindowSize == nil) {
245
- NSLog(@"frameCryptorFactoryCreateKeyProviderFailed: Invalid ratchetWindowSize");
246
- keyProviderId = nil;
247
- return;
248
- }
249
-
250
- NSNumber *failureTolerance = keyProviderOptions[@"failureTolerance"];
251
- NSData *uncryptedMagicBytes = nil;
252
-
253
- if (keyProviderOptions[@"uncryptedMagicBytes"] != nil) {
254
- uncryptedMagicBytes = [[NSData alloc] initWithBase64EncodedString:keyProviderOptions[@"uncryptedMagicBytes"]
255
- options:0];
256
- }
257
-
258
- NSNumber *keyRingSize = keyProviderOptions[@"keyRingSize"];
259
- NSNumber *discardFrameWhenCryptorNotReady = keyProviderOptions[@"discardFrameWhenCryptorNotReady"];
260
-
261
- RTCFrameCryptorKeyProvider *keyProvider = [[RTCFrameCryptorKeyProvider alloc]
262
- initWithRatchetSalt:ratchetSalt
263
- ratchetWindowSize:[ratchetWindowSize intValue]
264
- sharedKeyMode:[sharedKey boolValue]
265
- uncryptedMagicBytes:uncryptedMagicBytes
266
- failureTolerance:failureTolerance != nil ? [failureTolerance intValue] : -1
267
- keyRingSize:keyRingSize != nil ? [keyRingSize intValue] : 0
268
- discardFrameWhenCryptorNotReady:discardFrameWhenCryptorNotReady != nil
269
- ? [discardFrameWhenCryptorNotReady boolValue]
270
- : NO];
271
- self.keyProviders[keyProviderId] = keyProvider;
272
- return;
273
- });
274
- return keyProviderId;
275
- }
276
-
277
- - (nullable RTCFrameCryptorKeyProvider *)getKeyProviderForId:(NSString *)keyProviderId
278
- rejecter:(RCTPromiseRejectBlock)reject {
279
- if (keyProviderId == nil) {
280
- reject(@"getKeyProviderForIdFailed", @"Invalid keyProviderId", nil);
281
- return nil;
282
- }
283
- RTCFrameCryptorKeyProvider *keyProvider = self.keyProviders[keyProviderId];
284
- if (keyProvider == nil) {
285
- reject(@"getKeyProviderForIdFailed", @"Invalid keyProvider", nil);
286
- return nil;
287
- }
288
- return keyProvider;
289
- }
290
-
291
- RCT_EXPORT_METHOD(keyProviderSetSharedKey
292
- : (nonnull NSDictionary *)constraints resolver
293
- : (RCTPromiseResolveBlock)resolve rejecter
294
- : (RCTPromiseRejectBlock)reject) {
295
- RTCFrameCryptorKeyProvider *keyProvider = [self getKeyProviderForId:constraints[@"keyProviderId"] rejecter:reject];
296
- if (keyProvider == nil) {
297
- return;
298
- }
299
-
300
- NSNumber *keyIndex = constraints[@"keyIndex"];
301
- if (keyIndex == nil) {
302
- reject(@"keyProviderSetSharedKey", @"Invalid keyIndex", nil);
303
- return;
304
- }
305
-
306
- if (constraints[@"key"] == nil) {
307
- reject(@"keyProviderSetSharedKey", @"Invalid key", nil);
308
- return;
309
- }
310
- NSData *key = [self bytesFromMap:constraints key:@"key" isBase64Key:@"keyIsBase64"];
311
-
312
- [keyProvider setSharedKey:key withIndex:[keyIndex intValue]];
313
- resolve(@{@"result" : @YES});
314
- }
315
-
316
- RCT_EXPORT_METHOD(keyProviderRatchetSharedKey
317
- : (nonnull NSDictionary *)constraints resolver
318
- : (RCTPromiseResolveBlock)resolve rejecter
319
- : (RCTPromiseRejectBlock)reject) {
320
- RTCFrameCryptorKeyProvider *keyProvider = [self getKeyProviderForId:constraints[@"keyProviderId"] rejecter:reject];
321
- if (keyProvider == nil) {
322
- return;
323
- }
324
-
325
- NSNumber *keyIndex = constraints[@"keyIndex"];
326
- if (keyIndex == nil) {
327
- reject(@"keyProviderRatchetSharedKeyFailed", @"Invalid keyIndex", nil);
328
- return;
329
- }
330
-
331
- NSData *newKey = [keyProvider ratchetSharedKey:[keyIndex intValue]];
332
- resolve(@{@"result" : [newKey base64EncodedStringWithOptions:0]});
333
- }
334
-
335
- RCT_EXPORT_METHOD(keyProviderExportSharedKey
336
- : (nonnull NSDictionary *)constraints resolver
337
- : (RCTPromiseResolveBlock)resolve rejecter
338
- : (RCTPromiseRejectBlock)reject) {
339
- RTCFrameCryptorKeyProvider *keyProvider = [self getKeyProviderForId:constraints[@"keyProviderId"] rejecter:reject];
340
- if (keyProvider == nil) {
341
- return;
342
- }
343
-
344
- NSNumber *keyIndex = constraints[@"keyIndex"];
345
- if (keyIndex == nil) {
346
- reject(@"keyProviderExportSharedKeyFailed", @"Invalid keyIndex", nil);
347
- return;
348
- }
349
-
350
- NSData *key = [keyProvider exportSharedKey:[keyIndex intValue]];
351
- resolve(@{@"result" : [key base64EncodedStringWithOptions:0]});
352
- }
353
-
354
- RCT_EXPORT_METHOD(keyProviderSetKey
355
- : (nonnull NSDictionary *)constraints resolver
356
- : (RCTPromiseResolveBlock)resolve rejecter
357
- : (RCTPromiseRejectBlock)reject) {
358
- RTCFrameCryptorKeyProvider *keyProvider = [self getKeyProviderForId:constraints[@"keyProviderId"] rejecter:reject];
359
- if (keyProvider == nil) {
360
- return;
361
- }
362
-
363
- NSNumber *keyIndex = constraints[@"keyIndex"];
364
- if (keyIndex == nil) {
365
- reject(@"keyProviderSetKeyFailed", @"Invalid keyIndex", nil);
366
- return;
367
- }
368
-
369
- if (constraints[@"key"] == nil) {
370
- reject(@"keyProviderSetKeyFailed", @"Invalid key", nil);
371
- return;
372
- }
373
- NSData *key = [self bytesFromMap:constraints key:@"key" isBase64Key:@"keyIsBase64"];
374
-
375
- NSString *participantId = constraints[@"participantId"];
376
- if (participantId == nil) {
377
- reject(@"keyProviderSetKeyFailed", @"Invalid participantId", nil);
378
- return;
379
- }
380
-
381
- [keyProvider setKey:key withIndex:[keyIndex intValue] forParticipant:participantId];
382
- resolve(@{@"result" : @YES});
383
- }
384
-
385
- RCT_EXPORT_METHOD(keyProviderRatchetKey
386
- : (nonnull NSDictionary *)constraints resolver
387
- : (RCTPromiseResolveBlock)resolve rejecter
388
- : (RCTPromiseRejectBlock)reject) {
389
- RTCFrameCryptorKeyProvider *keyProvider = [self getKeyProviderForId:constraints[@"keyProviderId"] rejecter:reject];
390
- if (keyProvider == nil) {
391
- return;
392
- }
393
-
394
- NSNumber *keyIndex = constraints[@"keyIndex"];
395
- if (keyIndex == nil) {
396
- reject(@"keyProviderRatchetKeyFailed", @"Invalid keyIndex", nil);
397
- return;
398
- }
399
-
400
- NSString *participantId = constraints[@"participantId"];
401
- if (participantId == nil) {
402
- reject(@"keyProviderRatchetKeyFailed", @"Invalid participantId", nil);
403
- return;
404
- }
405
-
406
- NSData *newKey = [keyProvider ratchetKey:participantId withIndex:[keyIndex intValue]];
407
- resolve(@{@"result" : [newKey base64EncodedStringWithOptions:0]});
408
- }
409
-
410
- RCT_EXPORT_METHOD(keyProviderExportKey
411
- : (nonnull NSDictionary *)constraints resolver
412
- : (RCTPromiseResolveBlock)resolve rejecter
413
- : (RCTPromiseRejectBlock)reject) {
414
- RTCFrameCryptorKeyProvider *keyProvider = [self getKeyProviderForId:constraints[@"keyProviderId"] rejecter:reject];
415
- if (keyProvider == nil) {
416
- return;
417
- }
418
-
419
- NSNumber *keyIndex = constraints[@"keyIndex"];
420
- if (keyIndex == nil) {
421
- reject(@"keyProviderExportKeyFailed", @"Invalid keyIndex", nil);
422
- return;
423
- }
424
-
425
- NSString *participantId = constraints[@"participantId"];
426
- if (participantId == nil) {
427
- reject(@"keyProviderExportKeyFailed", @"Invalid participantId", nil);
428
- return;
429
- }
430
-
431
- NSData *key = [keyProvider exportKey:participantId withIndex:[keyIndex intValue]];
432
- resolve(@{@"result" : [key base64EncodedStringWithOptions:0]});
433
- }
434
-
435
- RCT_EXPORT_METHOD(keyProviderSetSifTrailer
436
- : (nonnull NSDictionary *)constraints resolver
437
- : (RCTPromiseResolveBlock)resolve rejecter
438
- : (RCTPromiseRejectBlock)reject) {
439
- RTCFrameCryptorKeyProvider *keyProvider = [self getKeyProviderForId:constraints[@"keyProviderId"] rejecter:reject];
440
- if (keyProvider == nil) {
441
- return;
442
- }
443
-
444
- if (constraints[@"sifTrailer"] == nil) {
445
- reject(@"keyProviderSetSifTrailerFailed", @"Invalid key", nil);
446
- return;
447
- }
448
- NSData *sifTrailer = [[NSData alloc] initWithBase64EncodedString:constraints[@"sifTrailer"] options:0];
449
-
450
- [keyProvider setSifTrailer:sifTrailer];
451
- resolve(nil);
452
- }
453
-
454
- RCT_EXPORT_METHOD(keyProviderDispose
455
- : (nonnull NSDictionary *)constraints resolver
456
- : (RCTPromiseResolveBlock)resolve rejecter
457
- : (RCTPromiseRejectBlock)reject) {
458
- NSString *keyProviderId = constraints[@"keyProviderId"];
459
- if (keyProviderId == nil) {
460
- reject(@"getKeyProviderForIdFailed", @"Invalid keyProviderId", nil);
461
- return;
462
- }
463
- [self.keyProviders removeObjectForKey:keyProviderId];
464
- resolve(@{@"result" : @"success"});
465
- }
466
-
467
- - (NSString *)stringFromState:(RTCFrameCryptorState)state {
468
- switch (state) {
469
- case RTCFrameCryptorStateNew:
470
- return @"new";
471
- case RTCFrameCryptorStateOk:
472
- return @"ok";
473
- case RTCFrameCryptorStateEncryptionFailed:
474
- return @"encryptionFailed";
475
- case RTCFrameCryptorStateDecryptionFailed:
476
- return @"decryptionFailed";
477
- case RTCFrameCryptorStateMissingKey:
478
- return @"missingKey";
479
- case RTCFrameCryptorStateKeyRatcheted:
480
- return @"keyRatcheted";
481
- case RTCFrameCryptorStateInternalError:
482
- return @"internalError";
483
- default:
484
- return @"unknown";
485
- }
486
- }
487
-
488
- RCT_EXPORT_METHOD(dataPacketCryptorFactoryCreateDataPacketCryptor
489
- : (nonnull NSDictionary *)constraints resolver
490
- : (RCTPromiseResolveBlock)resolve rejecter
491
- : (RCTPromiseRejectBlock)reject) {
492
- NSNumber *algorithm = constraints[@"algorithm"];
493
- NSString *keyProviderId = constraints[@"keyProviderId"];
494
- if (keyProviderId == nil) {
495
- reject(@"dataPacketCryptorFactoryCreateDataPacketCryptorFailed", @"Invalid keyProviderId", nil);
496
- return;
497
- }
498
-
499
- RTCFrameCryptorKeyProvider *keyProvider = self.keyProviders[keyProviderId];
500
- if (keyProvider == nil) {
501
- reject(@"getKeyProviderForIdFailed", @"Invalid keyProviderId", nil);
502
- return;
503
- }
504
-
505
- RTCDataPacketCryptor *cryptor = [[RTCDataPacketCryptor alloc] initWithAlgorithm:[self getAlgorithm:algorithm]
506
- keyProvider:keyProvider];
507
- NSString *cryptorId = [[NSUUID UUID] UUIDString];
508
-
509
- self.dataPacketCryptors[cryptorId] = cryptor;
510
-
511
- resolve(@{@"dataPacketCryptorId" : cryptorId});
512
- }
513
-
514
- RCT_EXPORT_METHOD(dataPacketCryptorEncrypt
515
- : (nonnull NSDictionary *)constraints resolver
516
- : (RCTPromiseResolveBlock)resolve rejecter
517
- : (RCTPromiseRejectBlock)reject) {
518
- NSString *cryptorId = constraints[@"dataPacketCryptorId"];
519
- NSString *participantId = constraints[@"participantId"];
520
- NSNumber *keyIndex = constraints[@"keyIndex"];
521
- NSData *data = [self bytesFromMap:constraints key:@"data" isBase64Key:nil];
522
-
523
- RTCDataPacketCryptor *cryptor = self.dataPacketCryptors[cryptorId];
524
-
525
- if (cryptor == nil) {
526
- reject(@"dataPacketCryptorEncryptFailed", @"data packet cryptor not found", nil);
527
- return;
528
- }
529
-
530
- RTCEncryptedPacket *packet = [cryptor encrypt:participantId keyIndex:[keyIndex unsignedIntValue] data:data];
531
-
532
- if (packet == nil) {
533
- reject(@"dataPacketCryptorEncryptFailed", @"packet encryption failed", nil);
534
- return;
535
- }
536
-
537
- resolve(@{
538
- @"payload" : [packet.data base64EncodedStringWithOptions:0],
539
- @"iv" : [packet.iv base64EncodedStringWithOptions:0],
540
- @"keyIndex" : [NSNumber numberWithUnsignedInt:packet.keyIndex]
541
- });
542
- }
543
-
544
- RCT_EXPORT_METHOD(dataPacketCryptorDecrypt
545
- : (nonnull NSDictionary *)constraints resolver
546
- : (RCTPromiseResolveBlock)resolve rejecter
547
- : (RCTPromiseRejectBlock)reject) {
548
- NSString *cryptorId = constraints[@"dataPacketCryptorId"];
549
- NSString *participantId = constraints[@"participantId"];
550
- NSNumber *keyIndex = constraints[@"keyIndex"];
551
- NSData *payload = [self bytesFromMap:constraints key:@"payload" isBase64Key:nil];
552
- NSData *iv = [self bytesFromMap:constraints key:@"iv" isBase64Key:nil];
553
-
554
- RTCDataPacketCryptor *cryptor = self.dataPacketCryptors[cryptorId];
555
-
556
- if (cryptor == nil) {
557
- reject(@"dataPacketCryptorDecryptFailed", @"data packet cryptor not found", nil);
558
- return;
559
- }
560
-
561
- RTCEncryptedPacket *packet = [[RTCEncryptedPacket alloc] initWithData:payload
562
- iv:iv
563
- keyIndex:[keyIndex unsignedIntValue]];
564
- NSData *decryptedData = [cryptor decrypt:participantId encryptedPacket:packet];
565
-
566
- if (decryptedData == nil) {
567
- reject(@"dataPacketCryptorDecryptFailed", @"packet decryption failed", nil);
568
- return;
569
- }
570
-
571
- resolve(@{@"data" : [decryptedData base64EncodedStringWithOptions:0]});
572
- }
573
- RCT_EXPORT_METHOD(dataPacketCryptorDispose
574
- : (nonnull NSDictionary *)constraints resolver
575
- : (RCTPromiseResolveBlock)resolve rejecter
576
- : (RCTPromiseRejectBlock)reject) {
577
- NSString *cryptorId = constraints[@"dataPacketCryptorId"];
578
-
579
- RTCDataPacketCryptor *cryptor = self.dataPacketCryptors[cryptorId];
580
-
581
- if (cryptor == nil) {
582
- reject(@"dataPacketCryptorDisposeFailed", @"data packet cryptor not found", nil);
583
- return;
584
- }
585
-
586
- [self.dataPacketCryptors removeObjectForKey:cryptorId];
587
- resolve(@{@"result" : @"success"});
588
- }
589
-
590
- #pragma mark - RTCFrameCryptorDelegate methods
591
-
592
- - (void)frameCryptor:(RTC_OBJC_TYPE(RTCFrameCryptor) *)frameCryptor
593
- didStateChangeWithParticipantId:(NSString *)participantId
594
- withState:(RTCFrameCryptorState)stateChanged {
595
- id frameCryptorId = objc_getAssociatedObject(frameCryptor, &frameCryptorUUIDKey);
596
-
597
- if (![frameCryptorId isKindOfClass:[NSString class]]) {
598
- NSLog(@"Received frameCryptordidStateChangeWithParticipantId event for frame cryptor without UUID!");
599
- return;
600
- }
601
-
602
- NSDictionary *event = @{
603
- @"event" : kEventFrameCryptionStateChanged,
604
- @"participantId" : participantId,
605
- @"frameCryptorId" : (NSString *)frameCryptorId,
606
- @"state" : [self stringFromState:stateChanged]
607
- };
608
- [self sendEventWithName:kEventFrameCryptionStateChanged body:event];
609
- }
610
-
611
- @end
1
+ #include <Foundation/Foundation.h>
2
+ #import <objc/runtime.h>
3
+
4
+ #import <React/RCTBridge.h>
5
+ #import <React/RCTBridgeModule.h>
6
+
7
+ #import "WebRTCModule+RTCPeerConnection.h"
8
+ #import "WebRTCModule.h"
9
+
10
+ // Key for objc_set/getAssociatedObject, value of NSString*
11
+ static char frameCryptorUUIDKey;
12
+
13
+ @interface WebRTCModule ()<RTCFrameCryptorDelegate>
14
+ @end
15
+
16
+ @implementation WebRTCModule (RTCFrameCryptor)
17
+
18
+ - (RTCCryptorAlgorithm)getAlgorithm:(NSNumber *)algorithm {
19
+ switch ([algorithm intValue]) {
20
+ // case 0:
21
+ // return RTCCryptorAlgorithmAesGcm;
22
+ // case 1:
23
+ // return RTCCryptorAlgorithmAesCbc;
24
+ default:
25
+ return RTCCryptorAlgorithmAesGcm;
26
+ }
27
+ }
28
+
29
+ - (NSData *)bytesFromMap:(NSDictionary *)map key:(NSString *)key isBase64Key:(nullable NSString *)isBase64Key {
30
+ BOOL isBase64 = YES;
31
+ if (isBase64Key) {
32
+ isBase64 = [map[isBase64Key] boolValue];
33
+ }
34
+
35
+ if (isBase64) {
36
+ return [[NSData alloc] initWithBase64EncodedString:map[key] options:0];
37
+ } else {
38
+ return [map[key] dataUsingEncoding:NSUTF8StringEncoding];
39
+ }
40
+ }
41
+
42
+ RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(frameCryptorFactoryCreateFrameCryptor : (nonnull NSDictionary *)constraints) {
43
+ __block NSString *frameCryptorId = nil;
44
+ dispatch_sync(self.workerQueue, ^{
45
+ NSNumber *peerConnectionId = constraints[@"peerConnectionId"];
46
+ NSNumber *algorithm = constraints[@"algorithm"];
47
+ if (algorithm == nil) {
48
+ NSLog(@"frameCryptorFactoryCreateFrameCryptorFailed: Invalid algorithm");
49
+ return;
50
+ }
51
+
52
+ NSString *participantId = constraints[@"participantId"];
53
+ if (participantId == nil) {
54
+ NSLog(@"frameCryptorFactoryCreateFrameCryptorFailed: Invalid participantId");
55
+ return;
56
+ }
57
+
58
+ NSString *keyProviderId = constraints[@"keyProviderId"];
59
+ if (keyProviderId == nil) {
60
+ NSLog(@"frameCryptorFactoryCreateFrameCryptorFailed: Invalid keyProviderId");
61
+ return;
62
+ }
63
+
64
+ RTCFrameCryptorKeyProvider *keyProvider = self.keyProviders[keyProviderId];
65
+ if (keyProvider == nil) {
66
+ NSLog(@"frameCryptorFactoryCreateFrameCryptorFailed: Invalid keyProvider");
67
+ return;
68
+ }
69
+
70
+ NSString *type = constraints[@"type"];
71
+ NSString *rtpSenderId = constraints[@"rtpSenderId"];
72
+ NSString *rtpReceiverId = constraints[@"rtpReceiverId"];
73
+
74
+ if ([type isEqualToString:@"sender"]) {
75
+ RTCRtpSender *sender = [self getSenderByPeerConnectionId:peerConnectionId senderId:rtpSenderId];
76
+
77
+ if (sender == nil) {
78
+ NSLog(@"frameCryptorFactoryCreateFrameCryptorFailed: Error: sender not found!");
79
+ return;
80
+ }
81
+
82
+ RTCFrameCryptor *frameCryptor = [[RTCFrameCryptor alloc] initWithFactory:self.peerConnectionFactory
83
+ rtpSender:sender
84
+ participantId:participantId
85
+ algorithm:[self getAlgorithm:algorithm]
86
+ keyProvider:keyProvider];
87
+ frameCryptorId = [[NSUUID UUID] UUIDString];
88
+
89
+ frameCryptor.delegate = self;
90
+
91
+ self.frameCryptors[frameCryptorId] = frameCryptor;
92
+ objc_setAssociatedObject(frameCryptor, &frameCryptorUUIDKey, frameCryptorId, OBJC_ASSOCIATION_COPY);
93
+ return;
94
+ } else if ([type isEqualToString:@"receiver"]) {
95
+ RTCRtpReceiver *receiver = [self getReceiverByPeerConnectionId:peerConnectionId receiverId:rtpReceiverId];
96
+ if (receiver == nil) {
97
+ NSLog(@"frameCryptorFactoryCreateFrameCryptorFailed: Error: receiver not found!");
98
+ return;
99
+ }
100
+ RTCFrameCryptor *frameCryptor = [[RTCFrameCryptor alloc] initWithFactory:self.peerConnectionFactory
101
+ rtpReceiver:receiver
102
+ participantId:participantId
103
+ algorithm:[self getAlgorithm:algorithm]
104
+ keyProvider:keyProvider];
105
+ frameCryptorId = [[NSUUID UUID] UUIDString];
106
+
107
+ frameCryptor.delegate = self;
108
+
109
+ self.frameCryptors[frameCryptorId] = frameCryptor;
110
+ objc_setAssociatedObject(frameCryptor, &frameCryptorUUIDKey, frameCryptorId, OBJC_ASSOCIATION_COPY);
111
+ return;
112
+ } else {
113
+ NSLog(@"InvalidArgument: Invalid type");
114
+ return;
115
+ }
116
+ });
117
+
118
+ return frameCryptorId;
119
+ }
120
+
121
+ RCT_EXPORT_METHOD(frameCryptorSetKeyIndex
122
+ : (nonnull NSDictionary *)constraints resolver
123
+ : (RCTPromiseResolveBlock)resolve rejecter
124
+ : (RCTPromiseRejectBlock)reject) {
125
+ NSString *frameCryptorId = constraints[@"frameCryptorId"];
126
+ if (frameCryptorId == nil) {
127
+ reject(@"frameCryptorSetKeyIndexFailed", @"Invalid frameCryptorId", nil);
128
+ return;
129
+ }
130
+ RTCFrameCryptor *frameCryptor = self.frameCryptors[frameCryptorId];
131
+ if (frameCryptor == nil) {
132
+ reject(@"frameCryptorSetKeyIndexFailed", @"Invalid frameCryptor", nil);
133
+ return;
134
+ }
135
+
136
+ NSNumber *keyIndex = constraints[@"keyIndex"];
137
+ if (keyIndex == nil) {
138
+ reject(@"frameCryptorSetKeyIndexFailed", @"Invalid keyIndex", nil);
139
+ return;
140
+ }
141
+ [frameCryptor setKeyIndex:[keyIndex intValue]];
142
+ resolve(@{@"result" : @YES});
143
+ }
144
+
145
+ RCT_EXPORT_METHOD(frameCryptorGetKeyIndex
146
+ : (nonnull NSDictionary *)constraints resolver
147
+ : (RCTPromiseResolveBlock)resolve rejecter
148
+ : (RCTPromiseRejectBlock)reject) {
149
+ NSString *frameCryptorId = constraints[@"frameCryptorId"];
150
+ if (frameCryptorId == nil) {
151
+ reject(@"frameCryptorGetKeyIndexFailed", @"Invalid frameCryptorId", nil);
152
+ return;
153
+ }
154
+ RTCFrameCryptor *frameCryptor = self.frameCryptors[frameCryptorId];
155
+ if (frameCryptor == nil) {
156
+ reject(@"frameCryptorGetKeyIndexFailed", @"Invalid frameCryptor", nil);
157
+ return;
158
+ }
159
+ resolve(@{@"keyIndex" : [NSNumber numberWithInt:frameCryptor.keyIndex]});
160
+ }
161
+
162
+ RCT_EXPORT_METHOD(frameCryptorSetEnabled
163
+ : (nonnull NSDictionary *)constraints resolver
164
+ : (RCTPromiseResolveBlock)resolve rejecter
165
+ : (RCTPromiseRejectBlock)reject) {
166
+ NSString *frameCryptorId = constraints[@"frameCryptorId"];
167
+ if (frameCryptorId == nil) {
168
+ reject(@"frameCryptorSetEnabledFailed", @"Invalid frameCryptorId", nil);
169
+ return;
170
+ }
171
+ RTCFrameCryptor *frameCryptor = self.frameCryptors[frameCryptorId];
172
+ if (frameCryptor == nil) {
173
+ reject(@"frameCryptorSetEnabledFailed", @"Invalid frameCryptor", nil);
174
+ return;
175
+ }
176
+
177
+ NSNumber *enabled = constraints[@"enabled"];
178
+ if (enabled == nil) {
179
+ reject(@"frameCryptorSetEnabledFailed", @"Invalid enabled", nil);
180
+ return;
181
+ }
182
+ frameCryptor.enabled = [enabled boolValue];
183
+ resolve(@{@"result" : enabled});
184
+ }
185
+
186
+ RCT_EXPORT_METHOD(frameCryptorGetEnabled
187
+ : (nonnull NSDictionary *)constraints resolver
188
+ : (RCTPromiseResolveBlock)resolve rejecter
189
+ : (RCTPromiseRejectBlock)reject) {
190
+ NSString *frameCryptorId = constraints[@"frameCryptorId"];
191
+ if (frameCryptorId == nil) {
192
+ reject(@"frameCryptorGetEnabledFailed", @"Invalid frameCryptorId", nil);
193
+ return;
194
+ }
195
+ RTCFrameCryptor *frameCryptor = self.frameCryptors[frameCryptorId];
196
+ if (frameCryptor == nil) {
197
+ reject(@"frameCryptorGetEnabledFailed", @"Invalid frameCryptor", nil);
198
+ return;
199
+ }
200
+ resolve(@{@"enabled" : [NSNumber numberWithBool:frameCryptor.enabled]});
201
+ }
202
+
203
+ RCT_EXPORT_METHOD(frameCryptorDispose
204
+ : (nonnull NSDictionary *)constraints resolver
205
+ : (RCTPromiseResolveBlock)resolve rejecter
206
+ : (RCTPromiseRejectBlock)reject) {
207
+ NSString *frameCryptorId = constraints[@"frameCryptorId"];
208
+ if (frameCryptorId == nil) {
209
+ reject(@"frameCryptorDisposeFailed", @"Invalid frameCryptorId", nil);
210
+ return;
211
+ }
212
+ RTCFrameCryptor *frameCryptor = self.frameCryptors[frameCryptorId];
213
+ if (frameCryptor == nil) {
214
+ reject(@"frameCryptorDisposeFailed", @"Invalid frameCryptor", nil);
215
+ return;
216
+ }
217
+ [self.frameCryptors removeObjectForKey:frameCryptorId];
218
+ frameCryptor.enabled = NO;
219
+ resolve(@{@"result" : @"success"});
220
+ }
221
+
222
+ RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(frameCryptorFactoryCreateKeyProvider
223
+ : (nonnull NSDictionary *)keyProviderOptions) {
224
+ __block NSString *keyProviderId = [[NSUUID UUID] UUIDString];
225
+
226
+ dispatch_sync(self.workerQueue, ^{
227
+ NSNumber *sharedKey = keyProviderOptions[@"sharedKey"];
228
+ if (sharedKey == nil) {
229
+ NSLog(@"frameCryptorFactoryCreateKeyProviderFailed: Invalid sharedKey");
230
+ keyProviderId = nil;
231
+ return;
232
+ }
233
+
234
+ if (keyProviderOptions[@"ratchetSalt"] == nil) {
235
+ NSLog(@"frameCryptorFactoryCreateKeyProviderFailed: Invalid ratchetSalt");
236
+ keyProviderId = nil;
237
+ return;
238
+ }
239
+ NSData *ratchetSalt = [self bytesFromMap:keyProviderOptions
240
+ key:@"ratchetSalt"
241
+ isBase64Key:@"ratchetSaltIsBase64"];
242
+
243
+ NSNumber *ratchetWindowSize = keyProviderOptions[@"ratchetWindowSize"];
244
+ if (ratchetWindowSize == nil) {
245
+ NSLog(@"frameCryptorFactoryCreateKeyProviderFailed: Invalid ratchetWindowSize");
246
+ keyProviderId = nil;
247
+ return;
248
+ }
249
+
250
+ NSNumber *failureTolerance = keyProviderOptions[@"failureTolerance"];
251
+ NSData *uncryptedMagicBytes = nil;
252
+
253
+ if (keyProviderOptions[@"uncryptedMagicBytes"] != nil) {
254
+ uncryptedMagicBytes = [[NSData alloc] initWithBase64EncodedString:keyProviderOptions[@"uncryptedMagicBytes"]
255
+ options:0];
256
+ }
257
+
258
+ NSNumber *keyRingSize = keyProviderOptions[@"keyRingSize"];
259
+ NSNumber *discardFrameWhenCryptorNotReady = keyProviderOptions[@"discardFrameWhenCryptorNotReady"];
260
+
261
+ RTCFrameCryptorKeyProvider *keyProvider = [[RTCFrameCryptorKeyProvider alloc]
262
+ initWithRatchetSalt:ratchetSalt
263
+ ratchetWindowSize:[ratchetWindowSize intValue]
264
+ sharedKeyMode:[sharedKey boolValue]
265
+ uncryptedMagicBytes:uncryptedMagicBytes
266
+ failureTolerance:failureTolerance != nil ? [failureTolerance intValue] : -1
267
+ keyRingSize:keyRingSize != nil ? [keyRingSize intValue] : 0
268
+ discardFrameWhenCryptorNotReady:discardFrameWhenCryptorNotReady != nil
269
+ ? [discardFrameWhenCryptorNotReady boolValue]
270
+ : NO];
271
+ self.keyProviders[keyProviderId] = keyProvider;
272
+ return;
273
+ });
274
+ return keyProviderId;
275
+ }
276
+
277
+ - (nullable RTCFrameCryptorKeyProvider *)getKeyProviderForId:(NSString *)keyProviderId
278
+ rejecter:(RCTPromiseRejectBlock)reject {
279
+ if (keyProviderId == nil) {
280
+ reject(@"getKeyProviderForIdFailed", @"Invalid keyProviderId", nil);
281
+ return nil;
282
+ }
283
+ RTCFrameCryptorKeyProvider *keyProvider = self.keyProviders[keyProviderId];
284
+ if (keyProvider == nil) {
285
+ reject(@"getKeyProviderForIdFailed", @"Invalid keyProvider", nil);
286
+ return nil;
287
+ }
288
+ return keyProvider;
289
+ }
290
+
291
+ RCT_EXPORT_METHOD(keyProviderSetSharedKey
292
+ : (nonnull NSDictionary *)constraints resolver
293
+ : (RCTPromiseResolveBlock)resolve rejecter
294
+ : (RCTPromiseRejectBlock)reject) {
295
+ RTCFrameCryptorKeyProvider *keyProvider = [self getKeyProviderForId:constraints[@"keyProviderId"] rejecter:reject];
296
+ if (keyProvider == nil) {
297
+ return;
298
+ }
299
+
300
+ NSNumber *keyIndex = constraints[@"keyIndex"];
301
+ if (keyIndex == nil) {
302
+ reject(@"keyProviderSetSharedKey", @"Invalid keyIndex", nil);
303
+ return;
304
+ }
305
+
306
+ if (constraints[@"key"] == nil) {
307
+ reject(@"keyProviderSetSharedKey", @"Invalid key", nil);
308
+ return;
309
+ }
310
+ NSData *key = [self bytesFromMap:constraints key:@"key" isBase64Key:@"keyIsBase64"];
311
+
312
+ [keyProvider setSharedKey:key withIndex:[keyIndex intValue]];
313
+ resolve(@{@"result" : @YES});
314
+ }
315
+
316
+ RCT_EXPORT_METHOD(keyProviderRatchetSharedKey
317
+ : (nonnull NSDictionary *)constraints resolver
318
+ : (RCTPromiseResolveBlock)resolve rejecter
319
+ : (RCTPromiseRejectBlock)reject) {
320
+ RTCFrameCryptorKeyProvider *keyProvider = [self getKeyProviderForId:constraints[@"keyProviderId"] rejecter:reject];
321
+ if (keyProvider == nil) {
322
+ return;
323
+ }
324
+
325
+ NSNumber *keyIndex = constraints[@"keyIndex"];
326
+ if (keyIndex == nil) {
327
+ reject(@"keyProviderRatchetSharedKeyFailed", @"Invalid keyIndex", nil);
328
+ return;
329
+ }
330
+
331
+ NSData *newKey = [keyProvider ratchetSharedKey:[keyIndex intValue]];
332
+ resolve(@{@"result" : [newKey base64EncodedStringWithOptions:0]});
333
+ }
334
+
335
+ RCT_EXPORT_METHOD(keyProviderExportSharedKey
336
+ : (nonnull NSDictionary *)constraints resolver
337
+ : (RCTPromiseResolveBlock)resolve rejecter
338
+ : (RCTPromiseRejectBlock)reject) {
339
+ RTCFrameCryptorKeyProvider *keyProvider = [self getKeyProviderForId:constraints[@"keyProviderId"] rejecter:reject];
340
+ if (keyProvider == nil) {
341
+ return;
342
+ }
343
+
344
+ NSNumber *keyIndex = constraints[@"keyIndex"];
345
+ if (keyIndex == nil) {
346
+ reject(@"keyProviderExportSharedKeyFailed", @"Invalid keyIndex", nil);
347
+ return;
348
+ }
349
+
350
+ NSData *key = [keyProvider exportSharedKey:[keyIndex intValue]];
351
+ resolve(@{@"result" : [key base64EncodedStringWithOptions:0]});
352
+ }
353
+
354
+ RCT_EXPORT_METHOD(keyProviderSetKey
355
+ : (nonnull NSDictionary *)constraints resolver
356
+ : (RCTPromiseResolveBlock)resolve rejecter
357
+ : (RCTPromiseRejectBlock)reject) {
358
+ RTCFrameCryptorKeyProvider *keyProvider = [self getKeyProviderForId:constraints[@"keyProviderId"] rejecter:reject];
359
+ if (keyProvider == nil) {
360
+ return;
361
+ }
362
+
363
+ NSNumber *keyIndex = constraints[@"keyIndex"];
364
+ if (keyIndex == nil) {
365
+ reject(@"keyProviderSetKeyFailed", @"Invalid keyIndex", nil);
366
+ return;
367
+ }
368
+
369
+ if (constraints[@"key"] == nil) {
370
+ reject(@"keyProviderSetKeyFailed", @"Invalid key", nil);
371
+ return;
372
+ }
373
+ NSData *key = [self bytesFromMap:constraints key:@"key" isBase64Key:@"keyIsBase64"];
374
+
375
+ NSString *participantId = constraints[@"participantId"];
376
+ if (participantId == nil) {
377
+ reject(@"keyProviderSetKeyFailed", @"Invalid participantId", nil);
378
+ return;
379
+ }
380
+
381
+ [keyProvider setKey:key withIndex:[keyIndex intValue] forParticipant:participantId];
382
+ resolve(@{@"result" : @YES});
383
+ }
384
+
385
+ RCT_EXPORT_METHOD(keyProviderRatchetKey
386
+ : (nonnull NSDictionary *)constraints resolver
387
+ : (RCTPromiseResolveBlock)resolve rejecter
388
+ : (RCTPromiseRejectBlock)reject) {
389
+ RTCFrameCryptorKeyProvider *keyProvider = [self getKeyProviderForId:constraints[@"keyProviderId"] rejecter:reject];
390
+ if (keyProvider == nil) {
391
+ return;
392
+ }
393
+
394
+ NSNumber *keyIndex = constraints[@"keyIndex"];
395
+ if (keyIndex == nil) {
396
+ reject(@"keyProviderRatchetKeyFailed", @"Invalid keyIndex", nil);
397
+ return;
398
+ }
399
+
400
+ NSString *participantId = constraints[@"participantId"];
401
+ if (participantId == nil) {
402
+ reject(@"keyProviderRatchetKeyFailed", @"Invalid participantId", nil);
403
+ return;
404
+ }
405
+
406
+ NSData *newKey = [keyProvider ratchetKey:participantId withIndex:[keyIndex intValue]];
407
+ resolve(@{@"result" : [newKey base64EncodedStringWithOptions:0]});
408
+ }
409
+
410
+ RCT_EXPORT_METHOD(keyProviderExportKey
411
+ : (nonnull NSDictionary *)constraints resolver
412
+ : (RCTPromiseResolveBlock)resolve rejecter
413
+ : (RCTPromiseRejectBlock)reject) {
414
+ RTCFrameCryptorKeyProvider *keyProvider = [self getKeyProviderForId:constraints[@"keyProviderId"] rejecter:reject];
415
+ if (keyProvider == nil) {
416
+ return;
417
+ }
418
+
419
+ NSNumber *keyIndex = constraints[@"keyIndex"];
420
+ if (keyIndex == nil) {
421
+ reject(@"keyProviderExportKeyFailed", @"Invalid keyIndex", nil);
422
+ return;
423
+ }
424
+
425
+ NSString *participantId = constraints[@"participantId"];
426
+ if (participantId == nil) {
427
+ reject(@"keyProviderExportKeyFailed", @"Invalid participantId", nil);
428
+ return;
429
+ }
430
+
431
+ NSData *key = [keyProvider exportKey:participantId withIndex:[keyIndex intValue]];
432
+ resolve(@{@"result" : [key base64EncodedStringWithOptions:0]});
433
+ }
434
+
435
+ RCT_EXPORT_METHOD(keyProviderSetSifTrailer
436
+ : (nonnull NSDictionary *)constraints resolver
437
+ : (RCTPromiseResolveBlock)resolve rejecter
438
+ : (RCTPromiseRejectBlock)reject) {
439
+ RTCFrameCryptorKeyProvider *keyProvider = [self getKeyProviderForId:constraints[@"keyProviderId"] rejecter:reject];
440
+ if (keyProvider == nil) {
441
+ return;
442
+ }
443
+
444
+ if (constraints[@"sifTrailer"] == nil) {
445
+ reject(@"keyProviderSetSifTrailerFailed", @"Invalid key", nil);
446
+ return;
447
+ }
448
+ NSData *sifTrailer = [[NSData alloc] initWithBase64EncodedString:constraints[@"sifTrailer"] options:0];
449
+
450
+ [keyProvider setSifTrailer:sifTrailer];
451
+ resolve(nil);
452
+ }
453
+
454
+ RCT_EXPORT_METHOD(keyProviderDispose
455
+ : (nonnull NSDictionary *)constraints resolver
456
+ : (RCTPromiseResolveBlock)resolve rejecter
457
+ : (RCTPromiseRejectBlock)reject) {
458
+ NSString *keyProviderId = constraints[@"keyProviderId"];
459
+ if (keyProviderId == nil) {
460
+ reject(@"getKeyProviderForIdFailed", @"Invalid keyProviderId", nil);
461
+ return;
462
+ }
463
+ [self.keyProviders removeObjectForKey:keyProviderId];
464
+ resolve(@{@"result" : @"success"});
465
+ }
466
+
467
+ - (NSString *)stringFromState:(RTCFrameCryptorState)state {
468
+ switch (state) {
469
+ case RTCFrameCryptorStateNew:
470
+ return @"new";
471
+ case RTCFrameCryptorStateOk:
472
+ return @"ok";
473
+ case RTCFrameCryptorStateEncryptionFailed:
474
+ return @"encryptionFailed";
475
+ case RTCFrameCryptorStateDecryptionFailed:
476
+ return @"decryptionFailed";
477
+ case RTCFrameCryptorStateMissingKey:
478
+ return @"missingKey";
479
+ case RTCFrameCryptorStateKeyRatcheted:
480
+ return @"keyRatcheted";
481
+ case RTCFrameCryptorStateInternalError:
482
+ return @"internalError";
483
+ default:
484
+ return @"unknown";
485
+ }
486
+ }
487
+
488
+ RCT_EXPORT_METHOD(dataPacketCryptorFactoryCreateDataPacketCryptor
489
+ : (nonnull NSDictionary *)constraints resolver
490
+ : (RCTPromiseResolveBlock)resolve rejecter
491
+ : (RCTPromiseRejectBlock)reject) {
492
+ NSNumber *algorithm = constraints[@"algorithm"];
493
+ NSString *keyProviderId = constraints[@"keyProviderId"];
494
+ if (keyProviderId == nil) {
495
+ reject(@"dataPacketCryptorFactoryCreateDataPacketCryptorFailed", @"Invalid keyProviderId", nil);
496
+ return;
497
+ }
498
+
499
+ RTCFrameCryptorKeyProvider *keyProvider = self.keyProviders[keyProviderId];
500
+ if (keyProvider == nil) {
501
+ reject(@"getKeyProviderForIdFailed", @"Invalid keyProviderId", nil);
502
+ return;
503
+ }
504
+
505
+ RTCDataPacketCryptor *cryptor = [[RTCDataPacketCryptor alloc] initWithAlgorithm:[self getAlgorithm:algorithm]
506
+ keyProvider:keyProvider];
507
+ NSString *cryptorId = [[NSUUID UUID] UUIDString];
508
+
509
+ self.dataPacketCryptors[cryptorId] = cryptor;
510
+
511
+ resolve(@{@"dataPacketCryptorId" : cryptorId});
512
+ }
513
+
514
+ RCT_EXPORT_METHOD(dataPacketCryptorEncrypt
515
+ : (nonnull NSDictionary *)constraints resolver
516
+ : (RCTPromiseResolveBlock)resolve rejecter
517
+ : (RCTPromiseRejectBlock)reject) {
518
+ NSString *cryptorId = constraints[@"dataPacketCryptorId"];
519
+ NSString *participantId = constraints[@"participantId"];
520
+ NSNumber *keyIndex = constraints[@"keyIndex"];
521
+ NSData *data = [self bytesFromMap:constraints key:@"data" isBase64Key:nil];
522
+
523
+ RTCDataPacketCryptor *cryptor = self.dataPacketCryptors[cryptorId];
524
+
525
+ if (cryptor == nil) {
526
+ reject(@"dataPacketCryptorEncryptFailed", @"data packet cryptor not found", nil);
527
+ return;
528
+ }
529
+
530
+ RTCEncryptedPacket *packet = [cryptor encrypt:participantId keyIndex:[keyIndex unsignedIntValue] data:data];
531
+
532
+ if (packet == nil) {
533
+ reject(@"dataPacketCryptorEncryptFailed", @"packet encryption failed", nil);
534
+ return;
535
+ }
536
+
537
+ resolve(@{
538
+ @"payload" : [packet.data base64EncodedStringWithOptions:0],
539
+ @"iv" : [packet.iv base64EncodedStringWithOptions:0],
540
+ @"keyIndex" : [NSNumber numberWithUnsignedInt:packet.keyIndex]
541
+ });
542
+ }
543
+
544
+ RCT_EXPORT_METHOD(dataPacketCryptorDecrypt
545
+ : (nonnull NSDictionary *)constraints resolver
546
+ : (RCTPromiseResolveBlock)resolve rejecter
547
+ : (RCTPromiseRejectBlock)reject) {
548
+ NSString *cryptorId = constraints[@"dataPacketCryptorId"];
549
+ NSString *participantId = constraints[@"participantId"];
550
+ NSNumber *keyIndex = constraints[@"keyIndex"];
551
+ NSData *payload = [self bytesFromMap:constraints key:@"payload" isBase64Key:nil];
552
+ NSData *iv = [self bytesFromMap:constraints key:@"iv" isBase64Key:nil];
553
+
554
+ RTCDataPacketCryptor *cryptor = self.dataPacketCryptors[cryptorId];
555
+
556
+ if (cryptor == nil) {
557
+ reject(@"dataPacketCryptorDecryptFailed", @"data packet cryptor not found", nil);
558
+ return;
559
+ }
560
+
561
+ RTCEncryptedPacket *packet = [[RTCEncryptedPacket alloc] initWithData:payload
562
+ iv:iv
563
+ keyIndex:[keyIndex unsignedIntValue]];
564
+ NSData *decryptedData = [cryptor decrypt:participantId encryptedPacket:packet];
565
+
566
+ if (decryptedData == nil) {
567
+ reject(@"dataPacketCryptorDecryptFailed", @"packet decryption failed", nil);
568
+ return;
569
+ }
570
+
571
+ resolve(@{@"data" : [decryptedData base64EncodedStringWithOptions:0]});
572
+ }
573
+ RCT_EXPORT_METHOD(dataPacketCryptorDispose
574
+ : (nonnull NSDictionary *)constraints resolver
575
+ : (RCTPromiseResolveBlock)resolve rejecter
576
+ : (RCTPromiseRejectBlock)reject) {
577
+ NSString *cryptorId = constraints[@"dataPacketCryptorId"];
578
+
579
+ RTCDataPacketCryptor *cryptor = self.dataPacketCryptors[cryptorId];
580
+
581
+ if (cryptor == nil) {
582
+ reject(@"dataPacketCryptorDisposeFailed", @"data packet cryptor not found", nil);
583
+ return;
584
+ }
585
+
586
+ [self.dataPacketCryptors removeObjectForKey:cryptorId];
587
+ resolve(@{@"result" : @"success"});
588
+ }
589
+
590
+ #pragma mark - RTCFrameCryptorDelegate methods
591
+
592
+ - (void)frameCryptor:(RTC_OBJC_TYPE(RTCFrameCryptor) *)frameCryptor
593
+ didStateChangeWithParticipantId:(NSString *)participantId
594
+ withState:(RTCFrameCryptorState)stateChanged {
595
+ id frameCryptorId = objc_getAssociatedObject(frameCryptor, &frameCryptorUUIDKey);
596
+
597
+ if (![frameCryptorId isKindOfClass:[NSString class]]) {
598
+ NSLog(@"Received frameCryptordidStateChangeWithParticipantId event for frame cryptor without UUID!");
599
+ return;
600
+ }
601
+
602
+ NSDictionary *event = @{
603
+ @"event" : kEventFrameCryptionStateChanged,
604
+ @"participantId" : participantId,
605
+ @"frameCryptorId" : (NSString *)frameCryptorId,
606
+ @"state" : [self stringFromState:stateChanged]
607
+ };
608
+ [self sendEventWithName:kEventFrameCryptionStateChanged body:event];
609
+ }
610
+
611
+ @end