UNPKG

@videosdk.live/react-native-sdk

Version:

<h1 align="center"> <img src="https://static.videosdk.live/videosdk_logo_website_black.png"/><br/> <p align="center"> Video SDK React Native App <br/> <a href="https://videosdk.live/">videosdk.live</a> </p> </h1>

127 lines (110 loc) 3.26 kB
import { RTCFrameCryptorFactory, RTCFrameCryptorAlgorithm, RTCFrameCryptorState } from "@videosdk.live/react-native-webrtc"; export default class E2EEManager { #frameCryptors = new Map(); keyProvider = null; constructor(keyProvider) { this.keyProvider = keyProvider; } findTrackCryptor(id) { return this.#frameCryptors.get(id); } async setupE2EESender(producerInfo, e2eCallback) { let frameCryptor = this.findTrackCryptor(producerInfo.id); if (!frameCryptor) { frameCryptor = this.createFrameCryptorForSender( producerInfo.id, producerInfo.rtpSender ); this.#frameCryptors.set(producerInfo.id, frameCryptor); frameCryptor.setEnabled(true); frameCryptor.addEventListener('onframecryptorstatechanged', (event) => { const state = event.state; switch (state) { case 'ok': e2eCallback("EncryptionSuccess") break; case 'encryptionFailed': e2eCallback("EncryptionFailed") break; case 'internalError': e2eCallback("InternalError") break; default: e2eCallback("UnknownState") break; } }) // return frameCryptor; } } createFrameCryptorForSender(producerId, sender) { if (!this.keyProvider) { console.error("KeyProvider is not set in E2EEManager"); return null; } try { const frameCryptor = RTCFrameCryptorFactory.createFrameCryptorForRtpSender( producerId, sender, RTCFrameCryptorAlgorithm.kAesGcm, this.keyProvider.rtcKeyProvider ); return frameCryptor; } catch (error) { throw error; } } async setupE2EEReceiver(consumerInfo, e2eCallback) { let frameCryptor = this.findTrackCryptor(consumerInfo.id); if (!frameCryptor) { frameCryptor = this.createFrameCryptorForReceiver( consumerInfo.id, consumerInfo.rtpReceiver ); this.#frameCryptors.set(consumerInfo.id, frameCryptor); frameCryptor.setEnabled(true); frameCryptor.addEventListener('onframecryptorstatechanged', (event) => { const state = event.state; switch (state) { case 'ok': e2eCallback("DecryptionSuccess") break; case 'decryptionFailed': e2eCallback("DecryptionFailed") break; case 'internalError': e2eCallback("InternalError") break; default: e2eCallback("UnknownState") break; } }) // return frameCryptor; } } createFrameCryptorForReceiver(consumerId, receiver) { if (!this.keyProvider) { console.error("KeyProvider is not set in E2EEManager"); return null; } return RTCFrameCryptorFactory.createFrameCryptorForRtpReceiver( consumerId, receiver, RTCFrameCryptorAlgorithm.kAesGcm, this.keyProvider.rtcKeyProvider ); } async closeCryptor(id) { const frameCryptor = this.findTrackCryptor(id); if (frameCryptor) { this.#frameCryptors.delete(id); await frameCryptor.setEnabled(false); await frameCryptor.dispose(); } } }