@livekit/react-native 2.4.3 → 2.5.0

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 (42) hide show
  1. package/README.md +7 -7
  2. package/android/local.properties +8 -0
  3. package/lib/commonjs/e2ee/RNE2EEManager.js +115 -0
  4. package/lib/commonjs/e2ee/RNE2EEManager.js.map +1 -0
  5. package/lib/commonjs/e2ee/RNKeyProvider.js +104 -0
  6. package/lib/commonjs/e2ee/RNKeyProvider.js.map +1 -0
  7. package/lib/commonjs/hooks/useE2EEManager.js +38 -0
  8. package/lib/commonjs/hooks/useE2EEManager.js.map +1 -0
  9. package/lib/commonjs/hooks.js +42 -0
  10. package/lib/commonjs/hooks.js.map +1 -1
  11. package/lib/commonjs/index.js +18 -1
  12. package/lib/commonjs/index.js.map +1 -1
  13. package/lib/module/e2ee/RNE2EEManager.js +107 -0
  14. package/lib/module/e2ee/RNE2EEManager.js.map +1 -0
  15. package/lib/module/e2ee/RNKeyProvider.js +97 -0
  16. package/lib/module/e2ee/RNKeyProvider.js.map +1 -0
  17. package/lib/module/hooks/useE2EEManager.js +31 -0
  18. package/lib/module/hooks/useE2EEManager.js.map +1 -0
  19. package/lib/module/hooks.js +1 -0
  20. package/lib/module/hooks.js.map +1 -1
  21. package/lib/module/index.js +4 -1
  22. package/lib/module/index.js.map +1 -1
  23. package/lib/typescript/lib/commonjs/e2ee/RNE2EEManager.d.ts +23 -0
  24. package/lib/typescript/lib/commonjs/e2ee/RNKeyProvider.d.ts +33 -0
  25. package/lib/typescript/lib/commonjs/hooks/useE2EEManager.d.ts +8 -0
  26. package/lib/typescript/lib/commonjs/index.d.ts +2 -0
  27. package/lib/typescript/lib/module/e2ee/RNE2EEManager.d.ts +21 -0
  28. package/lib/typescript/lib/module/e2ee/RNKeyProvider.d.ts +30 -0
  29. package/lib/typescript/lib/module/hooks/useE2EEManager.d.ts +9 -0
  30. package/lib/typescript/lib/module/hooks.d.ts +1 -0
  31. package/lib/typescript/lib/module/index.d.ts +3 -1
  32. package/lib/typescript/src/e2ee/RNE2EEManager.d.ts +27 -0
  33. package/lib/typescript/src/e2ee/RNKeyProvider.d.ts +35 -0
  34. package/lib/typescript/src/hooks/useE2EEManager.d.ts +15 -0
  35. package/lib/typescript/src/hooks.d.ts +2 -0
  36. package/lib/typescript/src/index.d.ts +4 -2
  37. package/package.json +5 -4
  38. package/src/e2ee/RNE2EEManager.ts +199 -0
  39. package/src/e2ee/RNKeyProvider.ts +116 -0
  40. package/src/hooks/useE2EEManager.ts +49 -0
  41. package/src/hooks.ts +2 -0
  42. package/src/index.tsx +5 -0
package/README.md CHANGED
@@ -16,7 +16,7 @@ Use this SDK to add realtime video, audio and data features to your React Native
16
16
 
17
17
  > [!NOTE]
18
18
  > This is v2 of the React-Native SDK. When migrating from v1.x to v2.x you might encounter a small set of breaking changes.
19
- > Read the [migration guide](https://docs.livekit.io/guides/migrate-from-v1/) for a detailed overview of what has changed.
19
+ > Read the [migration guide](https://docs.livekit.io/recipes/migrate-from-v1/) for a detailed overview of what has changed.
20
20
 
21
21
  ## Installation
22
22
 
@@ -295,7 +295,7 @@ Enabling screenshare requires extra installation steps:
295
295
 
296
296
  Android screenshare requires a foreground service with type `mediaProjection` to be present.
297
297
 
298
- From version 2.4.0 onwards, the foreground service is handled internally,
298
+ From version 2.4.0 onwards, the foreground service is handled internally,
299
299
  but you must declare the permission yourself in your app's AndroidManifest.xml file.
300
300
 
301
301
  ```
@@ -375,15 +375,15 @@ Once setup, [start the foreground service](https://github.com/livekit/client-sdk
375
375
 
376
376
  ### iOS
377
377
 
378
- By default, simple background processing can be enabled by selecting the `audio` and `voip`
379
- [UIBackgroundModes](https://developer.apple.com/documentation/bundleresources/information_property_list/uibackgroundmodes)
378
+ By default, simple background processing can be enabled by selecting the `audio` and `voip`
379
+ [UIBackgroundModes](https://developer.apple.com/documentation/bundleresources/information_property_list/uibackgroundmodes)
380
380
  in your XCode project. In your project, select your app target -> Signing & Capabilities -> Add Capability -> Background Modes.
381
381
 
382
382
  These background modes will keep the app alive in the background as long as a mic or audio track is playing.
383
383
 
384
- For a more robust background that isn't sensitive to the above conditions, we suggest using
385
- [CallKit](https://developer.apple.com/documentation/callkit/) to maintain the
386
- connection while in the background. The example uses
384
+ For a more robust background that isn't sensitive to the above conditions, we suggest using
385
+ [CallKit](https://developer.apple.com/documentation/callkit/) to maintain the
386
+ connection while in the background. The example uses
387
387
  [react-native-callkeep](https://github.com/react-native-webrtc/react-native-callkeep)
388
388
  for simple integration with CallKit.
389
389
 
@@ -0,0 +1,8 @@
1
+ ## This file must *NOT* be checked into Version Control Systems,
2
+ # as it contains information specific to your local configuration.
3
+ #
4
+ # Location of the SDK. This is only used by Gradle.
5
+ # For customization when using a Version Control System, please read the
6
+ # header note.
7
+ #Mon Nov 18 17:25:28 PST 2024
8
+ sdk.dir=/Users/davidliu/Library/Android/sdk
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _reactNativeWebrtc = require("@livekit/react-native-webrtc");
8
+ var _livekitClient = require("livekit-client");
9
+ var _events = _interopRequireDefault(require("events"));
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
12
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
13
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
14
+ /**
15
+ * @experimental
16
+ */
17
+ class RNE2EEManager extends _events.default {
18
+ constructor(keyProvider) {
19
+ super();
20
+ _defineProperty(this, "room", void 0);
21
+ _defineProperty(this, "frameCryptors", new Map());
22
+ _defineProperty(this, "keyProvider", void 0);
23
+ _defineProperty(this, "algorithm", _reactNativeWebrtc.RTCFrameCryptorAlgorithm.kAesGcm);
24
+ _defineProperty(this, "encryptionEnabled", false);
25
+ this.keyProvider = keyProvider;
26
+ this.encryptionEnabled = false;
27
+ }
28
+ setup(room) {
29
+ if (this.room !== room) {
30
+ this.room = room;
31
+ this.setupEventListeners(room);
32
+ }
33
+ }
34
+ setupEventListeners(room) {
35
+ room.localParticipant.on(_livekitClient.ParticipantEvent.LocalTrackPublished, async publication => {
36
+ this.setupE2EESender(publication, room.localParticipant);
37
+ }).on(_livekitClient.ParticipantEvent.LocalTrackUnpublished, async publication => {
38
+ let frameCryptor = this.findTrackCryptor(publication.trackSid);
39
+ if (frameCryptor) {
40
+ this.frameCryptors.delete(publication.trackSid);
41
+ await frameCryptor.setEnabled(false);
42
+ await frameCryptor.dispose();
43
+ }
44
+ });
45
+ room.on(_livekitClient.RoomEvent.TrackSubscribed, (_track, pub, participant) => {
46
+ this.setupE2EEReceiver(pub, participant);
47
+ }).on(_livekitClient.RoomEvent.TrackUnsubscribed, async (_track, publication, _participant) => {
48
+ let frameCryptor = this.findTrackCryptor(publication.trackSid);
49
+ if (frameCryptor) {
50
+ this.frameCryptors.delete(publication.trackSid);
51
+ await frameCryptor.setEnabled(false);
52
+ await frameCryptor.dispose();
53
+ }
54
+ });
55
+ }
56
+ async setupE2EESender(publication, participant) {
57
+ if (!publication.isEncrypted) {
58
+ return;
59
+ }
60
+ var frameCryptor = this.findTrackCryptor(publication.trackSid);
61
+ if (!frameCryptor) {
62
+ frameCryptor = this.createFrameCryptorForSender(publication.track.sender, participant.identity);
63
+ this.frameCryptors.set(publication.trackSid, frameCryptor);
64
+ frameCryptor.setEnabled(true);
65
+ frameCryptor.setKeyIndex(this.keyProvider.getLatestKeyIndex(participant.identity));
66
+ }
67
+ }
68
+ async setupE2EEReceiver(publication, participant) {
69
+ if (!publication.isEncrypted) {
70
+ return;
71
+ }
72
+ var frameCryptor = this.findTrackCryptor(publication.trackSid);
73
+ if (!frameCryptor) {
74
+ frameCryptor = this.createFrameCryptorForReceiver(publication.track.receiver, participant.identity);
75
+ this.frameCryptors.set(publication.trackSid, frameCryptor);
76
+ frameCryptor.setEnabled(true);
77
+ frameCryptor.setKeyIndex(this.keyProvider.getLatestKeyIndex(participant.identity));
78
+ }
79
+ }
80
+ setSifTrailer(trailer) {
81
+ this.keyProvider.setSifTrailer(trailer);
82
+ }
83
+
84
+ // Utility methods
85
+ //////////////////////
86
+
87
+ findTrackCryptor(trackId) {
88
+ return this.frameCryptors.get(trackId);
89
+ }
90
+ createFrameCryptorForSender(sender, participantId) {
91
+ return _reactNativeWebrtc.RTCFrameCryptorFactory.createFrameCryptorForRtpSender(participantId, sender, this.algorithm, this.keyProvider.rtcKeyProvider);
92
+ }
93
+ createFrameCryptorForReceiver(receiver, participantId) {
94
+ return _reactNativeWebrtc.RTCFrameCryptorFactory.createFrameCryptorForRtpReceiver(participantId, receiver, this.algorithm, this.keyProvider.rtcKeyProvider);
95
+ }
96
+ setupEngine(_engine) {
97
+ // No-op
98
+ }
99
+ setParticipantCryptorEnabled(enabled, participantIdentity) {
100
+ var _this$room;
101
+ if (this.encryptionEnabled !== enabled && participantIdentity === ((_this$room = this.room) === null || _this$room === void 0 ? void 0 : _this$room.localParticipant.identity)) {
102
+ this.encryptionEnabled = enabled;
103
+ this.emit(_livekitClient.EncryptionEvent.ParticipantEncryptionStatusChanged, enabled, this.room.localParticipant);
104
+ } else {
105
+ var _this$room2;
106
+ const participant = (_this$room2 = this.room) === null || _this$room2 === void 0 ? void 0 : _this$room2.getParticipantByIdentity(participantIdentity);
107
+ if (!participant) {
108
+ throw TypeError(`couldn't set encryption status, participant not found ${participantIdentity}`);
109
+ }
110
+ this.emit(_livekitClient.EncryptionEvent.ParticipantEncryptionStatusChanged, enabled, participant);
111
+ }
112
+ }
113
+ }
114
+ exports.default = RNE2EEManager;
115
+ //# sourceMappingURL=RNE2EEManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNativeWebrtc","require","_livekitClient","_events","_interopRequireDefault","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","RNE2EEManager","EventEmitter","constructor","keyProvider","Map","RTCFrameCryptorAlgorithm","kAesGcm","encryptionEnabled","setup","room","setupEventListeners","localParticipant","on","ParticipantEvent","LocalTrackPublished","publication","setupE2EESender","LocalTrackUnpublished","frameCryptor","findTrackCryptor","trackSid","frameCryptors","delete","setEnabled","dispose","RoomEvent","TrackSubscribed","_track","pub","participant","setupE2EEReceiver","TrackUnsubscribed","_participant","isEncrypted","createFrameCryptorForSender","track","sender","identity","set","setKeyIndex","getLatestKeyIndex","createFrameCryptorForReceiver","receiver","setSifTrailer","trailer","trackId","get","participantId","RTCFrameCryptorFactory","createFrameCryptorForRtpSender","algorithm","rtcKeyProvider","createFrameCryptorForRtpReceiver","setupEngine","_engine","setParticipantCryptorEnabled","enabled","participantIdentity","_this$room","emit","EncryptionEvent","ParticipantEncryptionStatusChanged","_this$room2","getParticipantByIdentity","exports"],"sources":["RNE2EEManager.ts"],"sourcesContent":["import {\n RTCFrameCryptorAlgorithm,\n RTCFrameCryptorFactory,\n RTCRtpReceiver,\n type RTCFrameCryptor,\n type RTCRtpSender,\n} from '@livekit/react-native-webrtc';\nimport {\n LocalParticipant,\n LocalTrackPublication,\n ParticipantEvent,\n RemoteParticipant,\n RemoteTrackPublication,\n RoomEvent,\n type Room,\n type BaseE2EEManager,\n type E2EEManagerCallbacks,\n EncryptionEvent,\n} from 'livekit-client';\nimport type RNKeyProvider from './RNKeyProvider';\nimport type RTCEngine from 'livekit-client/dist/src/room/RTCEngine';\nimport EventEmitter from 'events';\nimport type TypedEventEmitter from 'typed-emitter';\n\n/**\n * @experimental\n */\nexport default class RNE2EEManager\n extends (EventEmitter as new () => TypedEventEmitter<E2EEManagerCallbacks>)\n implements BaseE2EEManager\n{\n private room?: Room;\n private frameCryptors: Map<string, RTCFrameCryptor> = new Map();\n private keyProvider: RNKeyProvider;\n private algorithm: RTCFrameCryptorAlgorithm =\n RTCFrameCryptorAlgorithm.kAesGcm;\n\n private encryptionEnabled: boolean = false;\n\n constructor(keyProvider: RNKeyProvider) {\n super();\n this.keyProvider = keyProvider;\n this.encryptionEnabled = false;\n }\n\n setup(room: Room) {\n if (this.room !== room) {\n this.room = room;\n this.setupEventListeners(room);\n }\n }\n\n private setupEventListeners(room: Room) {\n room.localParticipant\n .on(ParticipantEvent.LocalTrackPublished, async (publication) => {\n this.setupE2EESender(publication, room.localParticipant);\n })\n .on(ParticipantEvent.LocalTrackUnpublished, async (publication) => {\n let frameCryptor = this.findTrackCryptor(publication.trackSid);\n if (frameCryptor) {\n this.frameCryptors.delete(publication.trackSid);\n await frameCryptor.setEnabled(false);\n await frameCryptor.dispose();\n }\n });\n\n room\n .on(RoomEvent.TrackSubscribed, (_track, pub, participant) => {\n this.setupE2EEReceiver(pub, participant);\n })\n .on(\n RoomEvent.TrackUnsubscribed,\n async (_track, publication, _participant) => {\n let frameCryptor = this.findTrackCryptor(publication.trackSid);\n if (frameCryptor) {\n this.frameCryptors.delete(publication.trackSid);\n await frameCryptor.setEnabled(false);\n await frameCryptor.dispose();\n }\n }\n );\n }\n\n private async setupE2EESender(\n publication: LocalTrackPublication,\n participant: LocalParticipant\n ) {\n if (!publication.isEncrypted) {\n return;\n }\n\n var frameCryptor = this.findTrackCryptor(publication.trackSid);\n\n if (!frameCryptor) {\n frameCryptor = this.createFrameCryptorForSender(\n publication.track!.sender,\n participant.identity\n );\n\n this.frameCryptors.set(publication.trackSid, frameCryptor);\n frameCryptor.setEnabled(true);\n frameCryptor.setKeyIndex(\n this.keyProvider.getLatestKeyIndex(participant.identity)\n );\n }\n }\n\n private async setupE2EEReceiver(\n publication: RemoteTrackPublication,\n participant: RemoteParticipant\n ) {\n if (!publication.isEncrypted) {\n return;\n }\n\n var frameCryptor = this.findTrackCryptor(publication.trackSid);\n\n if (!frameCryptor) {\n frameCryptor = this.createFrameCryptorForReceiver(\n publication.track!.receiver,\n participant.identity\n );\n\n this.frameCryptors.set(publication.trackSid, frameCryptor);\n frameCryptor.setEnabled(true);\n frameCryptor.setKeyIndex(\n this.keyProvider.getLatestKeyIndex(participant.identity)\n );\n }\n }\n\n setSifTrailer(trailer: Uint8Array): void {\n this.keyProvider.setSifTrailer(trailer);\n }\n\n // Utility methods\n //////////////////////\n\n private findTrackCryptor(trackId: string): RTCFrameCryptor | undefined {\n return this.frameCryptors.get(trackId);\n }\n\n private createFrameCryptorForSender(\n sender: RTCRtpSender,\n participantId: string\n ): RTCFrameCryptor {\n return RTCFrameCryptorFactory.createFrameCryptorForRtpSender(\n participantId,\n sender,\n this.algorithm,\n this.keyProvider.rtcKeyProvider\n );\n }\n\n private createFrameCryptorForReceiver(\n receiver: RTCRtpReceiver,\n participantId: string\n ): RTCFrameCryptor {\n return RTCFrameCryptorFactory.createFrameCryptorForRtpReceiver(\n participantId,\n receiver,\n this.algorithm,\n this.keyProvider.rtcKeyProvider\n );\n }\n\n setupEngine(_engine: RTCEngine): void {\n // No-op\n }\n setParticipantCryptorEnabled(\n enabled: boolean,\n participantIdentity: string\n ): void {\n if (\n this.encryptionEnabled !== enabled &&\n participantIdentity === this.room?.localParticipant.identity\n ) {\n this.encryptionEnabled = enabled;\n this.emit(\n EncryptionEvent.ParticipantEncryptionStatusChanged,\n enabled,\n this.room!.localParticipant\n );\n } else {\n const participant =\n this.room?.getParticipantByIdentity(participantIdentity);\n if (!participant) {\n throw TypeError(\n `couldn't set encryption status, participant not found ${participantIdentity}`\n );\n }\n this.emit(\n EncryptionEvent.ParticipantEncryptionStatusChanged,\n enabled,\n participant\n );\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _livekitClient = require("livekit-client");
8
+ var _reactNativeWebrtc = require("@livekit/react-native-webrtc");
9
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
10
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
11
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
12
+ const defaultRatchetSalt = 'LKFrameEncryptionKey';
13
+ const defaultMagicBytes = 'LK-ROCKS';
14
+ const defaultRatchetWindowSize = 16;
15
+ const defaultFailureTolerance = -1;
16
+ const defaultKeyRingSize = 16;
17
+ const defaultDiscardFrameWhenCryptorNotReady = false;
18
+
19
+ /**
20
+ * Options for construction an RNKeyProvider
21
+ */
22
+
23
+ /**
24
+ * @experimental
25
+ */
26
+ class RNKeyProvider extends _livekitClient.BaseKeyProvider {
27
+ constructor(options) {
28
+ const opts = {
29
+ sharedKey: options.sharedKey ?? true,
30
+ ratchetSalt: options.ratchetSalt ?? defaultRatchetSalt,
31
+ ratchetWindowSize: options.ratchetWindowSize ?? defaultRatchetWindowSize,
32
+ failureTolerance: options.failureTolerance ?? defaultFailureTolerance,
33
+ keyRingSize: options.keyringSize ?? defaultKeyRingSize,
34
+ keyringSize: options.keyringSize ?? defaultKeyRingSize,
35
+ discardFrameWhenCryptorNotReady: defaultDiscardFrameWhenCryptorNotReady
36
+ };
37
+ let magicBytes = options.uncryptedMagicBytes ?? defaultMagicBytes;
38
+ if (typeof magicBytes === 'string') {
39
+ magicBytes = new TextEncoder().encode(magicBytes);
40
+ }
41
+ opts.uncryptedMagicBytes = magicBytes;
42
+ super(opts);
43
+ _defineProperty(this, "latestSetIndex", new Map());
44
+ _defineProperty(this, "nativeKeyProvider", void 0);
45
+ this.nativeKeyProvider = _reactNativeWebrtc.RTCFrameCryptorFactory.createDefaultKeyProvider(opts);
46
+ }
47
+ getLatestKeyIndex(participantId) {
48
+ return this.latestSetIndex.get(participantId) ?? 0;
49
+ }
50
+
51
+ /**
52
+ * Accepts a passphrase that's used to create the crypto keys.
53
+ * @param key
54
+ */
55
+ async setSharedKey(key, keyIndex) {
56
+ return this.nativeKeyProvider.setSharedKey(key, keyIndex);
57
+ }
58
+ async ratchetSharedKey(keyIndex) {
59
+ this.nativeKeyProvider.ratchetSharedKey(keyIndex);
60
+ }
61
+
62
+ /**
63
+ * Accepts a passphrase that's used to create the crypto keys for a participant's stream.
64
+ * @param key
65
+ */
66
+ async setKey(participantId, key, keyIndex) {
67
+ if (this.getOptions().sharedKey) {
68
+ return this.setSharedKey(key, keyIndex);
69
+ }
70
+ this.latestSetIndex.set(participantId, keyIndex ?? 0);
71
+ return this.nativeKeyProvider.setKey(participantId, key, keyIndex);
72
+ }
73
+ async ratchetKey(participantIdentity, keyIndex) {
74
+ if (!this.getOptions().sharedKey && participantIdentity) {
75
+ this.nativeKeyProvider.ratchetKey(participantIdentity, keyIndex);
76
+ } else {
77
+ this.ratchetSharedKey(keyIndex);
78
+ }
79
+ }
80
+ async setSifTrailer(trailer) {
81
+ return this.nativeKeyProvider.setSifTrailer(trailer);
82
+ }
83
+
84
+ /**
85
+ * @internal
86
+ */
87
+ get rtcKeyProvider() {
88
+ return this.nativeKeyProvider;
89
+ }
90
+ dispose() {
91
+ this.nativeKeyProvider.dispose();
92
+ }
93
+ }
94
+
95
+ // /**
96
+ // * Define the `onxxx` event handlers.
97
+ // */
98
+ // const proto = RNExternalE2EEKeyProvider.prototype;
99
+
100
+ // defineEventAttribute(proto, KeyProviderEvent.SetKey);
101
+ // defineEventAttribute(proto, KeyProviderEvent.RatchetRequest);
102
+ // defineEventAttribute(proto, KeyProviderEvent.KeyRatcheted);
103
+ exports.default = RNKeyProvider;
104
+ //# sourceMappingURL=RNKeyProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_livekitClient","require","_reactNativeWebrtc","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","defaultRatchetSalt","defaultMagicBytes","defaultRatchetWindowSize","defaultFailureTolerance","defaultKeyRingSize","defaultDiscardFrameWhenCryptorNotReady","RNKeyProvider","BaseKeyProvider","constructor","options","opts","sharedKey","ratchetSalt","ratchetWindowSize","failureTolerance","keyRingSize","keyringSize","discardFrameWhenCryptorNotReady","magicBytes","uncryptedMagicBytes","TextEncoder","encode","Map","nativeKeyProvider","RTCFrameCryptorFactory","createDefaultKeyProvider","getLatestKeyIndex","participantId","latestSetIndex","get","setSharedKey","key","keyIndex","ratchetSharedKey","setKey","getOptions","set","ratchetKey","participantIdentity","setSifTrailer","trailer","rtcKeyProvider","dispose","exports","default"],"sources":["RNKeyProvider.ts"],"sourcesContent":["import { BaseKeyProvider, type KeyProviderOptions } from 'livekit-client';\nimport {\n RTCFrameCryptorFactory,\n RTCKeyProvider,\n type RTCKeyProviderOptions,\n} from '@livekit/react-native-webrtc';\n\nconst defaultRatchetSalt = 'LKFrameEncryptionKey';\nconst defaultMagicBytes = 'LK-ROCKS';\nconst defaultRatchetWindowSize = 16;\nconst defaultFailureTolerance = -1;\nconst defaultKeyRingSize = 16;\nconst defaultDiscardFrameWhenCryptorNotReady = false;\n\n/**\n * Options for construction an RNKeyProvider\n */\nexport type RNKeyProviderOptions = KeyProviderOptions & {\n uncryptedMagicBytes?: string | Uint8Array;\n};\n\n/**\n * @experimental\n */\nexport default class RNKeyProvider extends BaseKeyProvider {\n private latestSetIndex: Map<string, number> = new Map();\n private nativeKeyProvider: RTCKeyProvider;\n\n constructor(options: Partial<RNKeyProviderOptions>) {\n const opts: RTCKeyProviderOptions & KeyProviderOptions = {\n sharedKey: options.sharedKey ?? true,\n ratchetSalt: options.ratchetSalt ?? defaultRatchetSalt,\n ratchetWindowSize: options.ratchetWindowSize ?? defaultRatchetWindowSize,\n failureTolerance: options.failureTolerance ?? defaultFailureTolerance,\n keyRingSize: options.keyringSize ?? defaultKeyRingSize,\n keyringSize: options.keyringSize ?? defaultKeyRingSize,\n discardFrameWhenCryptorNotReady: defaultDiscardFrameWhenCryptorNotReady,\n };\n\n let magicBytes = options.uncryptedMagicBytes ?? defaultMagicBytes;\n if (typeof magicBytes === 'string') {\n magicBytes = new TextEncoder().encode(magicBytes);\n }\n opts.uncryptedMagicBytes = magicBytes;\n\n super(opts);\n\n this.nativeKeyProvider =\n RTCFrameCryptorFactory.createDefaultKeyProvider(opts);\n }\n\n getLatestKeyIndex(participantId: string) {\n return this.latestSetIndex.get(participantId) ?? 0;\n }\n\n /**\n * Accepts a passphrase that's used to create the crypto keys.\n * @param key\n */\n async setSharedKey(key: string | Uint8Array, keyIndex?: number) {\n return this.nativeKeyProvider.setSharedKey(key, keyIndex);\n }\n\n async ratchetSharedKey(keyIndex?: number) {\n this.nativeKeyProvider.ratchetSharedKey(keyIndex);\n }\n\n /**\n * Accepts a passphrase that's used to create the crypto keys for a participant's stream.\n * @param key\n */\n async setKey(\n participantId: string,\n key: string | Uint8Array,\n keyIndex?: number\n ) {\n if (this.getOptions().sharedKey) {\n return this.setSharedKey(key, keyIndex);\n }\n\n this.latestSetIndex.set(participantId, keyIndex ?? 0);\n return this.nativeKeyProvider.setKey(participantId, key, keyIndex);\n }\n\n override async ratchetKey(participantIdentity?: string, keyIndex?: number) {\n if (!this.getOptions().sharedKey && participantIdentity) {\n this.nativeKeyProvider.ratchetKey(participantIdentity, keyIndex);\n } else {\n this.ratchetSharedKey(keyIndex);\n }\n }\n\n async setSifTrailer(trailer: Uint8Array) {\n return this.nativeKeyProvider.setSifTrailer(trailer);\n }\n\n /**\n * @internal\n */\n get rtcKeyProvider() {\n return this.nativeKeyProvider;\n }\n\n dispose() {\n this.nativeKeyProvider.dispose();\n }\n}\n\n// /**\n// * Define the `onxxx` event handlers.\n// */\n// const proto = RNExternalE2EEKeyProvider.prototype;\n\n// defineEventAttribute(proto, KeyProviderEvent.SetKey);\n// defineEventAttribute(proto, KeyProviderEvent.RatchetRequest);\n// defineEventAttribute(proto, KeyProviderEvent.KeyRatcheted);\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useRNE2EEManager = useRNE2EEManager;
7
+ var _RNE2EEManager = _interopRequireDefault(require("../e2ee/RNE2EEManager"));
8
+ var _ = require("..");
9
+ var _react = require("react");
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
+ /**
12
+ * @experimental
13
+ */
14
+ function useRNE2EEManager(options) {
15
+ let [keyProvider] = (0, _react.useState)(() => new _.RNKeyProvider(options.keyProviderOptions ?? {}));
16
+ let [e2eeManager] = (0, _react.useState)(() => new _RNE2EEManager.default(keyProvider));
17
+ (0, _react.useEffect)(() => {
18
+ let setup = async () => {
19
+ try {
20
+ await keyProvider.setSharedKey(options.sharedKey);
21
+ } catch (error) {
22
+ _.log.warn('unable to set shared key', error);
23
+ }
24
+ };
25
+ setup();
26
+ return () => {};
27
+ }, [keyProvider, options.sharedKey]);
28
+ (0, _react.useEffect)(() => {
29
+ return () => {
30
+ keyProvider.dispose();
31
+ };
32
+ }, [keyProvider]);
33
+ return {
34
+ keyProvider,
35
+ e2eeManager
36
+ };
37
+ }
38
+ //# sourceMappingURL=useE2EEManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_RNE2EEManager","_interopRequireDefault","require","_","_react","e","__esModule","default","useRNE2EEManager","options","keyProvider","useState","RNKeyProvider","keyProviderOptions","e2eeManager","RNE2EEManager","useEffect","setup","setSharedKey","sharedKey","error","log","warn","dispose"],"sources":["useE2EEManager.ts"],"sourcesContent":["import RNE2EEManager from '../e2ee/RNE2EEManager';\nimport { log, RNKeyProvider } from '..';\nimport { useEffect, useState } from 'react';\nimport type { RNKeyProviderOptions } from '../e2ee/RNKeyProvider';\n\nexport type UseRNE2EEManagerOptions = {\n keyProviderOptions?: RNKeyProviderOptions;\n sharedKey: string | Uint8Array;\n};\n\nexport interface RNE2EEManagerState {\n keyProvider: RNKeyProvider;\n e2eeManager: RNE2EEManager;\n}\n\n/**\n * @experimental\n */\nexport function useRNE2EEManager(\n options: UseRNE2EEManagerOptions\n): RNE2EEManagerState {\n let [keyProvider] = useState(\n () => new RNKeyProvider(options.keyProviderOptions ?? {})\n );\n let [e2eeManager] = useState(() => new RNE2EEManager(keyProvider));\n\n useEffect(() => {\n let setup = async () => {\n try {\n await keyProvider.setSharedKey(options.sharedKey);\n } catch (error) {\n log.warn('unable to set shared key', error);\n }\n };\n setup();\n return () => {};\n }, [keyProvider, options.sharedKey]);\n\n useEffect(() => {\n return () => {\n keyProvider.dispose();\n };\n }, [keyProvider]);\n\n return {\n keyProvider,\n e2eeManager,\n };\n}\n"],"mappings":";;;;;;AAAA,IAAAA,cAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,CAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AAA4C,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAa5C;AACA;AACA;AACO,SAASG,gBAAgBA,CAC9BC,OAAgC,EACZ;EACpB,IAAI,CAACC,WAAW,CAAC,GAAG,IAAAC,eAAQ,EAC1B,MAAM,IAAIC,eAAa,CAACH,OAAO,CAACI,kBAAkB,IAAI,CAAC,CAAC,CAC1D,CAAC;EACD,IAAI,CAACC,WAAW,CAAC,GAAG,IAAAH,eAAQ,EAAC,MAAM,IAAII,sBAAa,CAACL,WAAW,CAAC,CAAC;EAElE,IAAAM,gBAAS,EAAC,MAAM;IACd,IAAIC,KAAK,GAAG,MAAAA,CAAA,KAAY;MACtB,IAAI;QACF,MAAMP,WAAW,CAACQ,YAAY,CAACT,OAAO,CAACU,SAAS,CAAC;MACnD,CAAC,CAAC,OAAOC,KAAK,EAAE;QACdC,KAAG,CAACC,IAAI,CAAC,0BAA0B,EAAEF,KAAK,CAAC;MAC7C;IACF,CAAC;IACDH,KAAK,CAAC,CAAC;IACP,OAAO,MAAM,CAAC,CAAC;EACjB,CAAC,EAAE,CAACP,WAAW,EAAED,OAAO,CAACU,SAAS,CAAC,CAAC;EAEpC,IAAAH,gBAAS,EAAC,MAAM;IACd,OAAO,MAAM;MACXN,WAAW,CAACa,OAAO,CAAC,CAAC;IACvB,CAAC;EACH,CAAC,EAAE,CAACb,WAAW,CAAC,CAAC;EAEjB,OAAO;IACLA,WAAW;IACXI;EACF,CAAC;AACH","ignoreList":[]}
@@ -3,6 +3,36 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ var _exportNames = {
7
+ useConnectionState: true,
8
+ useDataChannel: true,
9
+ useIsSpeaking: true,
10
+ useLocalParticipant: true,
11
+ useLocalParticipantPermissions: true,
12
+ useParticipantInfo: true,
13
+ useParticipants: true,
14
+ useRemoteParticipants: true,
15
+ useRemoteParticipant: true,
16
+ useSpeakingParticipants: true,
17
+ useSortedParticipants: true,
18
+ useChat: true,
19
+ useIsEncrypted: true,
20
+ useRoomInfo: true,
21
+ useIsMuted: true,
22
+ useParticipantTracks: true,
23
+ useLiveKitRoom: true,
24
+ RoomContext: true,
25
+ useRoomContext: true,
26
+ ParticipantContext: true,
27
+ useParticipantContext: true,
28
+ TrackRefContext: true,
29
+ useTrackRefContext: true,
30
+ useTracks: true,
31
+ isTrackReference: true,
32
+ useEnsureTrackRef: true,
33
+ useTrackMutedIndicator: true,
34
+ useVisualStableUpdate: true
35
+ };
6
36
  Object.defineProperty(exports, "ParticipantContext", {
7
37
  enumerable: true,
8
38
  get: function () {
@@ -172,4 +202,16 @@ Object.defineProperty(exports, "useVisualStableUpdate", {
172
202
  }
173
203
  });
174
204
  var _componentsReact = require("@livekit/components-react");
205
+ var _useE2EEManager = require("./hooks/useE2EEManager");
206
+ Object.keys(_useE2EEManager).forEach(function (key) {
207
+ if (key === "default" || key === "__esModule") return;
208
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
209
+ if (key in exports && exports[key] === _useE2EEManager[key]) return;
210
+ Object.defineProperty(exports, key, {
211
+ enumerable: true,
212
+ get: function () {
213
+ return _useE2EEManager[key];
214
+ }
215
+ });
216
+ });
175
217
  //# sourceMappingURL=hooks.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_componentsReact","require"],"sources":["hooks.ts"],"sourcesContent":["export {\n useConnectionState,\n useDataChannel,\n useIsSpeaking,\n useLocalParticipant,\n useLocalParticipantPermissions,\n useParticipantInfo,\n useParticipants,\n useRemoteParticipants,\n useRemoteParticipant,\n useSpeakingParticipants,\n useSortedParticipants,\n useChat,\n useIsEncrypted,\n useRoomInfo,\n useIsMuted,\n useParticipantTracks,\n useLiveKitRoom,\n RoomContext,\n useRoomContext,\n ParticipantContext,\n useParticipantContext,\n TrackRefContext,\n useTrackRefContext,\n useTracks,\n isTrackReference,\n useEnsureTrackRef,\n useTrackMutedIndicator,\n useVisualStableUpdate,\n} from '@livekit/components-react';\nexport type {\n UseLocalParticipantOptions,\n UseParticipantInfoOptions,\n UseParticipantsOptions,\n UseRemoteParticipantOptions,\n UseRemoteParticipantsOptions,\n UseTracksOptions,\n TrackReference,\n TrackReferenceOrPlaceholder,\n UseVisualStableUpdateOptions,\n} from '@livekit/components-react';\n\nexport type { ReceivedDataMessage } from '@livekit/components-core';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,gBAAA,GAAAC,OAAA","ignoreList":[]}
1
+ {"version":3,"names":["_componentsReact","require","_useE2EEManager","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get"],"sources":["hooks.ts"],"sourcesContent":["export {\n useConnectionState,\n useDataChannel,\n useIsSpeaking,\n useLocalParticipant,\n useLocalParticipantPermissions,\n useParticipantInfo,\n useParticipants,\n useRemoteParticipants,\n useRemoteParticipant,\n useSpeakingParticipants,\n useSortedParticipants,\n useChat,\n useIsEncrypted,\n useRoomInfo,\n useIsMuted,\n useParticipantTracks,\n useLiveKitRoom,\n RoomContext,\n useRoomContext,\n ParticipantContext,\n useParticipantContext,\n TrackRefContext,\n useTrackRefContext,\n useTracks,\n isTrackReference,\n useEnsureTrackRef,\n useTrackMutedIndicator,\n useVisualStableUpdate,\n} from '@livekit/components-react';\nexport type {\n UseLocalParticipantOptions,\n UseParticipantInfoOptions,\n UseParticipantsOptions,\n UseRemoteParticipantOptions,\n UseRemoteParticipantsOptions,\n UseTracksOptions,\n TrackReference,\n TrackReferenceOrPlaceholder,\n UseVisualStableUpdateOptions,\n} from '@livekit/components-react';\n\nexport type { ReceivedDataMessage } from '@livekit/components-core';\nexport * from './hooks/useE2EEManager';\nexport type { UseRNE2EEManagerOptions } from './hooks/useE2EEManager';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,gBAAA,GAAAC,OAAA;AA2CA,IAAAC,eAAA,GAAAD,OAAA;AAAAE,MAAA,CAAAC,IAAA,CAAAF,eAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAJ,eAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAZ,eAAA,CAAAI,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
@@ -7,7 +7,9 @@ var _exportNames = {
7
7
  registerGlobals: true,
8
8
  AudioSession: true,
9
9
  AndroidAudioTypePresets: true,
10
- getDefaultAppleAudioConfigurationForMode: true
10
+ getDefaultAppleAudioConfigurationForMode: true,
11
+ RNE2EEManager: true,
12
+ RNKeyProvider: true
11
13
  };
12
14
  Object.defineProperty(exports, "AndroidAudioTypePresets", {
13
15
  enumerable: true,
@@ -21,6 +23,18 @@ Object.defineProperty(exports, "AudioSession", {
21
23
  return _AudioSession.default;
22
24
  }
23
25
  });
26
+ Object.defineProperty(exports, "RNE2EEManager", {
27
+ enumerable: true,
28
+ get: function () {
29
+ return _RNE2EEManager.default;
30
+ }
31
+ });
32
+ Object.defineProperty(exports, "RNKeyProvider", {
33
+ enumerable: true,
34
+ get: function () {
35
+ return _RNKeyProvider.default;
36
+ }
37
+ });
24
38
  Object.defineProperty(exports, "getDefaultAppleAudioConfigurationForMode", {
25
39
  enumerable: true,
26
40
  get: function () {
@@ -33,6 +47,8 @@ var _reactNativeUrlPolyfill = require("react-native-url-polyfill");
33
47
  require("./polyfills/EncoderDecoderTogether.min.js");
34
48
  var _AudioSession = _interopRequireWildcard(require("./audio/AudioSession"));
35
49
  var _reactNative = require("react-native");
50
+ var _RNE2EEManager = _interopRequireDefault(require("./e2ee/RNE2EEManager"));
51
+ var _RNKeyProvider = _interopRequireDefault(require("./e2ee/RNKeyProvider"));
36
52
  var _hooks = require("./hooks");
37
53
  Object.keys(_hooks).forEach(function (key) {
38
54
  if (key === "default" || key === "__esModule") return;
@@ -129,6 +145,7 @@ Object.keys(_AudioManager).forEach(function (key) {
129
145
  }
130
146
  });
131
147
  });
148
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
132
149
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
133
150
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
134
151
  /**
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNativeWebrtc","require","_reactNativeUrlPolyfill","_AudioSession","_interopRequireWildcard","_reactNative","_hooks","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_LiveKitRoom","_VideoTrack","_VideoView","_useParticipant","_useRoom","_logger","_AudioManager","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","n","__proto__","a","getOwnPropertyDescriptor","u","i","set","registerGlobals","webrtcRegisterGlobals","iosCategoryEnforce","livekitRegisterGlobals","setupURLPolyfill","fixWebrtcAdapter","shimPromiseAllSettled","shimArrayAt","shimAsyncIterator","shimIterator","Platform","OS","getUserMediaFunc","global","navigator","mediaDevices","getUserMedia","constraints","audio","AudioSession","setAppleAudioConfiguration","audioCategory","lkGlobal","platform","devicePixelRatio","PixelRatio","LiveKitReactNativeGlobal","_window","window","undefined","userAgent","product","allSettled","shim","Array","at"],"sources":["index.tsx"],"sourcesContent":["import { registerGlobals as webrtcRegisterGlobals } from '@livekit/react-native-webrtc';\nimport { setupURLPolyfill } from 'react-native-url-polyfill';\nimport './polyfills/EncoderDecoderTogether.min.js';\nimport AudioSession, {\n AndroidAudioTypePresets,\n type AndroidAudioTypeOptions,\n type AppleAudioCategory,\n type AppleAudioCategoryOption,\n type AppleAudioConfiguration,\n type AppleAudioMode,\n type AudioTrackState,\n getDefaultAppleAudioConfigurationForMode,\n} from './audio/AudioSession';\nimport type { AudioConfiguration } from './audio/AudioSession';\nimport { PixelRatio, Platform } from 'react-native';\nimport { type LiveKitReactNativeInfo } from 'livekit-client';\nimport type { LogLevel, SetLogLevelOptions } from './logger';\n\n/**\n * Registers the required globals needed for LiveKit to work.\n *\n * Must be called before using LiveKit.\n */\nexport function registerGlobals() {\n webrtcRegisterGlobals();\n iosCategoryEnforce();\n livekitRegisterGlobals();\n setupURLPolyfill();\n fixWebrtcAdapter();\n shimPromiseAllSettled();\n shimArrayAt();\n shimAsyncIterator();\n shimIterator();\n}\n\n/**\n * Enforces changing to playAndRecord category prior to obtaining microphone.\n */\nfunction iosCategoryEnforce() {\n if (Platform.OS === 'ios') {\n // @ts-ignore\n let getUserMediaFunc = global.navigator.mediaDevices.getUserMedia;\n // @ts-ignore\n global.navigator.mediaDevices.getUserMedia = async (constraints: any) => {\n if (constraints.audio) {\n await AudioSession.setAppleAudioConfiguration({\n audioCategory: 'playAndRecord',\n });\n }\n\n return await getUserMediaFunc(constraints);\n };\n }\n}\n\nfunction livekitRegisterGlobals() {\n let lkGlobal: LiveKitReactNativeInfo = {\n platform: Platform.OS,\n devicePixelRatio: PixelRatio.get(),\n };\n\n // @ts-ignore\n global.LiveKitReactNativeGlobal = lkGlobal;\n}\n\nfunction fixWebrtcAdapter() {\n // @ts-ignore\n if (window?.navigator !== undefined) {\n // @ts-ignore\n const { navigator } = window;\n if (navigator.userAgent === undefined) {\n navigator.userAgent = navigator.product ?? 'Unknown';\n }\n }\n}\n\nfunction shimPromiseAllSettled() {\n var allSettled = require('promise.allsettled');\n allSettled.shim();\n}\n\nfunction shimArrayAt() {\n // Some versions of RN don't have Array.prototype.at, which is used by sdp-transform\n if (!Array.prototype.at) {\n var at = require('array.prototype.at');\n at.shim();\n }\n}\n\nfunction shimAsyncIterator() {\n var shim = require('well-known-symbols/Symbol.asyncIterator/shim');\n shim();\n}\n\nfunction shimIterator() {\n var shim = require('well-known-symbols/Symbol.iterator/shim');\n shim();\n}\nexport * from './hooks';\nexport * from './components/LiveKitRoom';\nexport * from './components/VideoTrack';\nexport * from './components/VideoView'; // deprecated\nexport * from './useParticipant'; // deprecated\nexport * from './useRoom'; // deprecated\nexport * from './logger';\nexport * from './audio/AudioManager';\n\nexport {\n AudioSession,\n AndroidAudioTypePresets,\n getDefaultAppleAudioConfigurationForMode,\n};\nexport type {\n AudioConfiguration,\n AndroidAudioTypeOptions,\n AppleAudioCategory,\n AppleAudioCategoryOption,\n AppleAudioConfiguration,\n AppleAudioMode,\n AudioTrackState,\n LogLevel,\n SetLogLevelOptions,\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_reactNativeWebrtc","require","_reactNativeUrlPolyfill","_AudioSession","_interopRequireWildcard","_reactNative","_RNE2EEManager","_interopRequireDefault","_RNKeyProvider","_hooks","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_LiveKitRoom","_VideoTrack","_VideoView","_useParticipant","_useRoom","_logger","_AudioManager","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","has","n","__proto__","a","getOwnPropertyDescriptor","u","i","set","registerGlobals","webrtcRegisterGlobals","iosCategoryEnforce","livekitRegisterGlobals","setupURLPolyfill","fixWebrtcAdapter","shimPromiseAllSettled","shimArrayAt","shimAsyncIterator","shimIterator","Platform","OS","getUserMediaFunc","global","navigator","mediaDevices","getUserMedia","constraints","audio","AudioSession","setAppleAudioConfiguration","audioCategory","lkGlobal","platform","devicePixelRatio","PixelRatio","LiveKitReactNativeGlobal","_window","window","undefined","userAgent","product","allSettled","shim","Array","at"],"sources":["index.tsx"],"sourcesContent":["import { registerGlobals as webrtcRegisterGlobals } from '@livekit/react-native-webrtc';\nimport { setupURLPolyfill } from 'react-native-url-polyfill';\nimport './polyfills/EncoderDecoderTogether.min.js';\nimport AudioSession, {\n AndroidAudioTypePresets,\n type AndroidAudioTypeOptions,\n type AppleAudioCategory,\n type AppleAudioCategoryOption,\n type AppleAudioConfiguration,\n type AppleAudioMode,\n type AudioTrackState,\n getDefaultAppleAudioConfigurationForMode,\n} from './audio/AudioSession';\nimport type { AudioConfiguration } from './audio/AudioSession';\nimport { PixelRatio, Platform } from 'react-native';\nimport { type LiveKitReactNativeInfo } from 'livekit-client';\nimport type { LogLevel, SetLogLevelOptions } from './logger';\nimport RNE2EEManager from './e2ee/RNE2EEManager';\nimport RNKeyProvider, { type RNKeyProviderOptions } from './e2ee/RNKeyProvider';\n\n/**\n * Registers the required globals needed for LiveKit to work.\n *\n * Must be called before using LiveKit.\n */\nexport function registerGlobals() {\n webrtcRegisterGlobals();\n iosCategoryEnforce();\n livekitRegisterGlobals();\n setupURLPolyfill();\n fixWebrtcAdapter();\n shimPromiseAllSettled();\n shimArrayAt();\n shimAsyncIterator();\n shimIterator();\n}\n\n/**\n * Enforces changing to playAndRecord category prior to obtaining microphone.\n */\nfunction iosCategoryEnforce() {\n if (Platform.OS === 'ios') {\n // @ts-ignore\n let getUserMediaFunc = global.navigator.mediaDevices.getUserMedia;\n // @ts-ignore\n global.navigator.mediaDevices.getUserMedia = async (constraints: any) => {\n if (constraints.audio) {\n await AudioSession.setAppleAudioConfiguration({\n audioCategory: 'playAndRecord',\n });\n }\n\n return await getUserMediaFunc(constraints);\n };\n }\n}\n\nfunction livekitRegisterGlobals() {\n let lkGlobal: LiveKitReactNativeInfo = {\n platform: Platform.OS,\n devicePixelRatio: PixelRatio.get(),\n };\n\n // @ts-ignore\n global.LiveKitReactNativeGlobal = lkGlobal;\n}\n\nfunction fixWebrtcAdapter() {\n // @ts-ignore\n if (window?.navigator !== undefined) {\n // @ts-ignore\n const { navigator } = window;\n if (navigator.userAgent === undefined) {\n navigator.userAgent = navigator.product ?? 'Unknown';\n }\n }\n}\n\nfunction shimPromiseAllSettled() {\n var allSettled = require('promise.allsettled');\n allSettled.shim();\n}\n\nfunction shimArrayAt() {\n // Some versions of RN don't have Array.prototype.at, which is used by sdp-transform\n if (!Array.prototype.at) {\n var at = require('array.prototype.at');\n at.shim();\n }\n}\n\nfunction shimAsyncIterator() {\n var shim = require('well-known-symbols/Symbol.asyncIterator/shim');\n shim();\n}\n\nfunction shimIterator() {\n var shim = require('well-known-symbols/Symbol.iterator/shim');\n shim();\n}\nexport * from './hooks';\nexport * from './components/LiveKitRoom';\nexport * from './components/VideoTrack';\nexport * from './components/VideoView'; // deprecated\nexport * from './useParticipant'; // deprecated\nexport * from './useRoom'; // deprecated\nexport * from './logger';\nexport * from './audio/AudioManager';\n\nexport {\n AudioSession,\n RNE2EEManager,\n RNKeyProvider,\n AndroidAudioTypePresets,\n getDefaultAppleAudioConfigurationForMode,\n};\nexport type {\n AudioConfiguration,\n AndroidAudioTypeOptions,\n AppleAudioCategory,\n AppleAudioCategoryOption,\n AppleAudioConfiguration,\n AppleAudioMode,\n AudioTrackState,\n LogLevel,\n SetLogLevelOptions,\n RNKeyProviderOptions,\n};\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,107 @@
1
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
2
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
3
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
4
+ import { RTCFrameCryptorAlgorithm, RTCFrameCryptorFactory } from '@livekit/react-native-webrtc';
5
+ import { ParticipantEvent, RoomEvent, EncryptionEvent } from 'livekit-client';
6
+ import EventEmitter from 'events';
7
+ /**
8
+ * @experimental
9
+ */
10
+ export default class RNE2EEManager extends EventEmitter {
11
+ constructor(keyProvider) {
12
+ super();
13
+ _defineProperty(this, "room", void 0);
14
+ _defineProperty(this, "frameCryptors", new Map());
15
+ _defineProperty(this, "keyProvider", void 0);
16
+ _defineProperty(this, "algorithm", RTCFrameCryptorAlgorithm.kAesGcm);
17
+ _defineProperty(this, "encryptionEnabled", false);
18
+ this.keyProvider = keyProvider;
19
+ this.encryptionEnabled = false;
20
+ }
21
+ setup(room) {
22
+ if (this.room !== room) {
23
+ this.room = room;
24
+ this.setupEventListeners(room);
25
+ }
26
+ }
27
+ setupEventListeners(room) {
28
+ room.localParticipant.on(ParticipantEvent.LocalTrackPublished, async publication => {
29
+ this.setupE2EESender(publication, room.localParticipant);
30
+ }).on(ParticipantEvent.LocalTrackUnpublished, async publication => {
31
+ let frameCryptor = this.findTrackCryptor(publication.trackSid);
32
+ if (frameCryptor) {
33
+ this.frameCryptors.delete(publication.trackSid);
34
+ await frameCryptor.setEnabled(false);
35
+ await frameCryptor.dispose();
36
+ }
37
+ });
38
+ room.on(RoomEvent.TrackSubscribed, (_track, pub, participant) => {
39
+ this.setupE2EEReceiver(pub, participant);
40
+ }).on(RoomEvent.TrackUnsubscribed, async (_track, publication, _participant) => {
41
+ let frameCryptor = this.findTrackCryptor(publication.trackSid);
42
+ if (frameCryptor) {
43
+ this.frameCryptors.delete(publication.trackSid);
44
+ await frameCryptor.setEnabled(false);
45
+ await frameCryptor.dispose();
46
+ }
47
+ });
48
+ }
49
+ async setupE2EESender(publication, participant) {
50
+ if (!publication.isEncrypted) {
51
+ return;
52
+ }
53
+ var frameCryptor = this.findTrackCryptor(publication.trackSid);
54
+ if (!frameCryptor) {
55
+ frameCryptor = this.createFrameCryptorForSender(publication.track.sender, participant.identity);
56
+ this.frameCryptors.set(publication.trackSid, frameCryptor);
57
+ frameCryptor.setEnabled(true);
58
+ frameCryptor.setKeyIndex(this.keyProvider.getLatestKeyIndex(participant.identity));
59
+ }
60
+ }
61
+ async setupE2EEReceiver(publication, participant) {
62
+ if (!publication.isEncrypted) {
63
+ return;
64
+ }
65
+ var frameCryptor = this.findTrackCryptor(publication.trackSid);
66
+ if (!frameCryptor) {
67
+ frameCryptor = this.createFrameCryptorForReceiver(publication.track.receiver, participant.identity);
68
+ this.frameCryptors.set(publication.trackSid, frameCryptor);
69
+ frameCryptor.setEnabled(true);
70
+ frameCryptor.setKeyIndex(this.keyProvider.getLatestKeyIndex(participant.identity));
71
+ }
72
+ }
73
+ setSifTrailer(trailer) {
74
+ this.keyProvider.setSifTrailer(trailer);
75
+ }
76
+
77
+ // Utility methods
78
+ //////////////////////
79
+
80
+ findTrackCryptor(trackId) {
81
+ return this.frameCryptors.get(trackId);
82
+ }
83
+ createFrameCryptorForSender(sender, participantId) {
84
+ return RTCFrameCryptorFactory.createFrameCryptorForRtpSender(participantId, sender, this.algorithm, this.keyProvider.rtcKeyProvider);
85
+ }
86
+ createFrameCryptorForReceiver(receiver, participantId) {
87
+ return RTCFrameCryptorFactory.createFrameCryptorForRtpReceiver(participantId, receiver, this.algorithm, this.keyProvider.rtcKeyProvider);
88
+ }
89
+ setupEngine(_engine) {
90
+ // No-op
91
+ }
92
+ setParticipantCryptorEnabled(enabled, participantIdentity) {
93
+ var _this$room;
94
+ if (this.encryptionEnabled !== enabled && participantIdentity === ((_this$room = this.room) === null || _this$room === void 0 ? void 0 : _this$room.localParticipant.identity)) {
95
+ this.encryptionEnabled = enabled;
96
+ this.emit(EncryptionEvent.ParticipantEncryptionStatusChanged, enabled, this.room.localParticipant);
97
+ } else {
98
+ var _this$room2;
99
+ const participant = (_this$room2 = this.room) === null || _this$room2 === void 0 ? void 0 : _this$room2.getParticipantByIdentity(participantIdentity);
100
+ if (!participant) {
101
+ throw TypeError(`couldn't set encryption status, participant not found ${participantIdentity}`);
102
+ }
103
+ this.emit(EncryptionEvent.ParticipantEncryptionStatusChanged, enabled, participant);
104
+ }
105
+ }
106
+ }
107
+ //# sourceMappingURL=RNE2EEManager.js.map