@livekit/react-native 2.9.6 → 2.9.8

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 (140) hide show
  1. package/README.md +7 -5
  2. package/ios/LivekitReactNative.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  3. package/ios/LivekitReactNative.xcodeproj/xcuserdata/davidliu.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
  4. package/lib/commonjs/LKNativeModule.js.map +1 -1
  5. package/lib/commonjs/audio/AudioManager.js +1 -2
  6. package/lib/commonjs/audio/AudioManager.js.map +1 -1
  7. package/lib/commonjs/audio/AudioSession.js +105 -100
  8. package/lib/commonjs/audio/AudioSession.js.map +1 -1
  9. package/lib/commonjs/audio/MediaRecorder.js +54 -35
  10. package/lib/commonjs/audio/MediaRecorder.js.map +1 -1
  11. package/lib/commonjs/components/BarVisualizer.js +8 -8
  12. package/lib/commonjs/components/BarVisualizer.js.map +1 -1
  13. package/lib/commonjs/components/LiveKitRoom.js +11 -7
  14. package/lib/commonjs/components/LiveKitRoom.js.map +1 -1
  15. package/lib/commonjs/components/VideoTrack.js +34 -47
  16. package/lib/commonjs/components/VideoTrack.js.map +1 -1
  17. package/lib/commonjs/components/VideoView.js +36 -48
  18. package/lib/commonjs/components/VideoView.js.map +1 -1
  19. package/lib/commonjs/components/ViewPortDetector.js +71 -79
  20. package/lib/commonjs/components/ViewPortDetector.js.map +1 -1
  21. package/lib/commonjs/e2ee/RNE2EEManager.js +8 -15
  22. package/lib/commonjs/e2ee/RNE2EEManager.js.map +1 -1
  23. package/lib/commonjs/e2ee/RNKeyProvider.js +1 -5
  24. package/lib/commonjs/e2ee/RNKeyProvider.js.map +1 -1
  25. package/lib/commonjs/events/EventEmitter.js +2 -4
  26. package/lib/commonjs/events/EventEmitter.js.map +1 -1
  27. package/lib/commonjs/hooks/useE2EEManager.js.map +1 -1
  28. package/lib/commonjs/hooks/useMultibandTrackVolume.js +4 -5
  29. package/lib/commonjs/hooks/useMultibandTrackVolume.js.map +1 -1
  30. package/lib/commonjs/hooks/useTrackVolume.js +4 -5
  31. package/lib/commonjs/hooks/useTrackVolume.js.map +1 -1
  32. package/lib/commonjs/hooks.js.map +1 -1
  33. package/lib/commonjs/index.js +15 -6
  34. package/lib/commonjs/index.js.map +1 -1
  35. package/lib/commonjs/logger.js.map +1 -1
  36. package/lib/commonjs/package.json +1 -0
  37. package/lib/commonjs/polyfills/EncoderDecoderTogether.min.js.map +1 -1
  38. package/lib/commonjs/polyfills/MediaRecorderShim.js.map +1 -1
  39. package/lib/commonjs/useParticipant.js.map +1 -1
  40. package/lib/commonjs/useRoom.js +4 -6
  41. package/lib/commonjs/useRoom.js.map +1 -1
  42. package/lib/module/LKNativeModule.js +2 -0
  43. package/lib/module/LKNativeModule.js.map +1 -1
  44. package/lib/module/audio/AudioManager.js +2 -0
  45. package/lib/module/audio/AudioManager.js.map +1 -1
  46. package/lib/module/audio/AudioSession.js +107 -100
  47. package/lib/module/audio/AudioSession.js.map +1 -1
  48. package/lib/module/audio/MediaRecorder.js +50 -29
  49. package/lib/module/audio/MediaRecorder.js.map +1 -1
  50. package/lib/module/components/BarVisualizer.js +9 -6
  51. package/lib/module/components/BarVisualizer.js.map +1 -1
  52. package/lib/module/components/LiveKitRoom.js +12 -6
  53. package/lib/module/components/LiveKitRoom.js.map +1 -1
  54. package/lib/module/components/VideoTrack.js +35 -45
  55. package/lib/module/components/VideoTrack.js.map +1 -1
  56. package/lib/module/components/VideoView.js +37 -46
  57. package/lib/module/components/VideoView.js.map +1 -1
  58. package/lib/module/components/ViewPortDetector.js +71 -77
  59. package/lib/module/components/ViewPortDetector.js.map +1 -1
  60. package/lib/module/e2ee/RNE2EEManager.js +10 -15
  61. package/lib/module/e2ee/RNE2EEManager.js.map +1 -1
  62. package/lib/module/e2ee/RNKeyProvider.js +3 -5
  63. package/lib/module/e2ee/RNKeyProvider.js.map +1 -1
  64. package/lib/module/events/EventEmitter.js +4 -4
  65. package/lib/module/events/EventEmitter.js.map +1 -1
  66. package/lib/module/hooks/useE2EEManager.js +2 -0
  67. package/lib/module/hooks/useE2EEManager.js.map +1 -1
  68. package/lib/module/hooks/useMultibandTrackVolume.js +6 -5
  69. package/lib/module/hooks/useMultibandTrackVolume.js.map +1 -1
  70. package/lib/module/hooks/useTrackVolume.js +6 -5
  71. package/lib/module/hooks/useTrackVolume.js.map +1 -1
  72. package/lib/module/hooks.js +2 -0
  73. package/lib/module/hooks.js.map +1 -1
  74. package/lib/module/index.js +5 -4
  75. package/lib/module/index.js.map +1 -1
  76. package/lib/module/logger.js +2 -0
  77. package/lib/module/logger.js.map +1 -1
  78. package/lib/module/polyfills/EncoderDecoderTogether.min.js.map +1 -1
  79. package/lib/module/polyfills/MediaRecorderShim.js +2 -0
  80. package/lib/module/polyfills/MediaRecorderShim.js.map +1 -1
  81. package/lib/module/useParticipant.js +2 -0
  82. package/lib/module/useParticipant.js.map +1 -1
  83. package/lib/module/useRoom.js +6 -6
  84. package/lib/module/useRoom.js.map +1 -1
  85. package/lib/typescript/{LKNativeModule.d.ts → src/LKNativeModule.d.ts} +1 -0
  86. package/lib/typescript/src/LKNativeModule.d.ts.map +1 -0
  87. package/lib/typescript/{audio → src/audio}/AudioManager.d.ts +1 -0
  88. package/lib/typescript/src/audio/AudioManager.d.ts.map +1 -0
  89. package/lib/typescript/{audio → src/audio}/AudioSession.d.ts +1 -0
  90. package/lib/typescript/src/audio/AudioSession.d.ts.map +1 -0
  91. package/lib/typescript/{audio → src/audio}/MediaRecorder.d.ts +14 -1
  92. package/lib/typescript/src/audio/MediaRecorder.d.ts.map +1 -0
  93. package/lib/typescript/{components → src/components}/BarVisualizer.d.ts +2 -2
  94. package/lib/typescript/src/components/BarVisualizer.d.ts.map +1 -0
  95. package/lib/typescript/{components → src/components}/LiveKitRoom.d.ts +2 -1
  96. package/lib/typescript/src/components/LiveKitRoom.d.ts.map +1 -0
  97. package/lib/typescript/{components → src/components}/VideoTrack.d.ts +2 -2
  98. package/lib/typescript/src/components/VideoTrack.d.ts.map +1 -0
  99. package/lib/typescript/{components → src/components}/VideoView.d.ts +2 -2
  100. package/lib/typescript/src/components/VideoView.d.ts.map +1 -0
  101. package/lib/typescript/{components → src/components}/ViewPortDetector.d.ts +3 -2
  102. package/lib/typescript/src/components/ViewPortDetector.d.ts.map +1 -0
  103. package/lib/typescript/{e2ee → src/e2ee}/RNE2EEManager.d.ts +1 -0
  104. package/lib/typescript/src/e2ee/RNE2EEManager.d.ts.map +1 -0
  105. package/lib/typescript/{e2ee → src/e2ee}/RNKeyProvider.d.ts +1 -0
  106. package/lib/typescript/src/e2ee/RNKeyProvider.d.ts.map +1 -0
  107. package/lib/typescript/{events → src/events}/EventEmitter.d.ts +1 -0
  108. package/lib/typescript/src/events/EventEmitter.d.ts.map +1 -0
  109. package/lib/typescript/{hooks → src/hooks}/useE2EEManager.d.ts +1 -0
  110. package/lib/typescript/src/hooks/useE2EEManager.d.ts.map +1 -0
  111. package/lib/typescript/{hooks → src/hooks}/useMultibandTrackVolume.d.ts +1 -0
  112. package/lib/typescript/src/hooks/useMultibandTrackVolume.d.ts.map +1 -0
  113. package/lib/typescript/{hooks → src/hooks}/useTrackVolume.d.ts +1 -0
  114. package/lib/typescript/src/hooks/useTrackVolume.d.ts.map +1 -0
  115. package/lib/typescript/{hooks.d.ts → src/hooks.d.ts} +1 -0
  116. package/lib/typescript/src/hooks.d.ts.map +1 -0
  117. package/lib/typescript/{index.d.ts → src/index.d.ts} +2 -0
  118. package/lib/typescript/src/index.d.ts.map +1 -0
  119. package/lib/typescript/{logger.d.ts → src/logger.d.ts} +1 -0
  120. package/lib/typescript/src/logger.d.ts.map +1 -0
  121. package/lib/typescript/src/polyfills/MediaRecorderShim.d.ts +2 -0
  122. package/lib/typescript/src/polyfills/MediaRecorderShim.d.ts.map +1 -0
  123. package/lib/typescript/{useParticipant.d.ts → src/useParticipant.d.ts} +1 -0
  124. package/lib/typescript/src/useParticipant.d.ts.map +1 -0
  125. package/lib/typescript/{useRoom.d.ts → src/useRoom.d.ts} +1 -0
  126. package/lib/typescript/src/useRoom.d.ts.map +1 -0
  127. package/package.json +40 -57
  128. package/src/audio/MediaRecorder.ts +54 -17
  129. package/src/components/BarVisualizer.tsx +2 -2
  130. package/src/components/VideoTrack.tsx +0 -2
  131. package/src/components/VideoView.tsx +0 -2
  132. package/src/components/ViewPortDetector.tsx +1 -1
  133. package/src/index.tsx +1 -0
  134. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  135. package/android/gradle/wrapper/gradle-wrapper.properties +0 -7
  136. package/android/gradlew +0 -249
  137. package/android/gradlew.bat +0 -92
  138. package/android/local.properties +0 -8
  139. package/lib/typescript/polyfills/EncoderDecoderTogether.min.d.ts +0 -0
  140. package/lib/typescript/polyfills/MediaRecorderShim.d.ts +0 -1
@@ -1,7 +1,5 @@
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 * as React from 'react';
1
+ "use strict";
2
+
5
3
  import { StyleSheet, View } from 'react-native';
6
4
  import { LocalVideoTrack, TrackEvent } from 'livekit-client';
7
5
  import { RTCView } from '@livekit/react-native-webrtc';
@@ -12,7 +10,7 @@ import ViewPortDetector from './ViewPortDetector';
12
10
  /**
13
11
  * @deprecated use `VideoTrack` and `VideoTrackProps` instead.
14
12
  */
15
-
13
+ import { jsx as _jsx } from "react/jsx-runtime";
16
14
  /**
17
15
  * @deprecated use `VideoTrack` and `VideoTrackProps` instead.
18
16
  */
@@ -25,7 +23,7 @@ export const VideoView = ({
25
23
  }) => {
26
24
  const [elementInfo] = useState(() => {
27
25
  let info = new VideoViewElementInfo();
28
- info.id = videoTrack === null || videoTrack === void 0 ? void 0 : videoTrack.sid;
26
+ info.id = videoTrack?.sid;
29
27
  info.something = videoTrack;
30
28
  return info;
31
29
  });
@@ -34,12 +32,12 @@ export const VideoView = ({
34
32
  const shouldObserveVisibility = useMemo(() => {
35
33
  return videoTrack instanceof RemoteVideoTrack && videoTrack.isAdaptiveStream;
36
34
  }, [videoTrack]);
37
- const [mediaStream, setMediaStream] = useState(videoTrack === null || videoTrack === void 0 ? void 0 : videoTrack.mediaStream);
35
+ const [mediaStream, setMediaStream] = useState(videoTrack?.mediaStream);
38
36
  useEffect(() => {
39
- setMediaStream(videoTrack === null || videoTrack === void 0 ? void 0 : videoTrack.mediaStream);
37
+ setMediaStream(videoTrack?.mediaStream);
40
38
  if (videoTrack instanceof LocalVideoTrack) {
41
39
  const onRestarted = track => {
42
- setMediaStream(track === null || track === void 0 ? void 0 : track.mediaStream);
40
+ setMediaStream(track?.mediaStream);
43
41
  };
44
42
  videoTrack.on(TrackEvent.Restarted, onRestarted);
45
43
  return () => {
@@ -51,34 +49,36 @@ export const VideoView = ({
51
49
  }, [videoTrack]);
52
50
  useEffect(() => {
53
51
  if (videoTrack instanceof RemoteVideoTrack && videoTrack.isAdaptiveStream) {
54
- videoTrack === null || videoTrack === void 0 || videoTrack.observeElementInfo(elementInfo);
52
+ videoTrack?.observeElementInfo(elementInfo);
55
53
  return () => {
56
- videoTrack === null || videoTrack === void 0 || videoTrack.stopObservingElementInfo(elementInfo);
54
+ videoTrack?.stopObservingElementInfo(elementInfo);
57
55
  };
58
56
  } else {
59
57
  return () => {};
60
58
  }
61
59
  }, [videoTrack, elementInfo]);
62
- return /*#__PURE__*/React.createElement(View, {
60
+ return /*#__PURE__*/_jsx(View, {
63
61
  style: {
64
62
  ...style,
65
63
  ...styles.container
66
64
  },
67
- onLayout: layoutOnChange
68
- }, /*#__PURE__*/React.createElement(ViewPortDetector, {
69
- onChange: visibilityOnChange,
70
- style: styles.videoView,
71
- disabled: !shouldObserveVisibility,
72
- propKey: videoTrack
73
- }, /*#__PURE__*/React.createElement(RTCView, {
74
- style: styles.videoView
75
- // @ts-expect-error
76
- ,
77
- streamURL: (mediaStream === null || mediaStream === void 0 ? void 0 : mediaStream.toURL()) ?? '',
78
- objectFit: objectFit,
79
- zOrder: zOrder,
80
- mirror: mirror
81
- })));
65
+ onLayout: layoutOnChange,
66
+ children: /*#__PURE__*/_jsx(ViewPortDetector, {
67
+ onChange: visibilityOnChange,
68
+ style: styles.videoView,
69
+ disabled: !shouldObserveVisibility,
70
+ propKey: videoTrack,
71
+ children: /*#__PURE__*/_jsx(RTCView, {
72
+ style: styles.videoView
73
+ // @ts-expect-error
74
+ ,
75
+ streamURL: mediaStream?.toURL() ?? '',
76
+ objectFit: objectFit,
77
+ zOrder: zOrder,
78
+ mirror: mirror
79
+ })
80
+ })
81
+ });
82
82
  };
83
83
  const styles = StyleSheet.create({
84
84
  container: {},
@@ -88,21 +88,14 @@ const styles = StyleSheet.create({
88
88
  }
89
89
  });
90
90
  class VideoViewElementInfo {
91
- constructor() {
92
- _defineProperty(this, "element", {});
93
- _defineProperty(this, "something", void 0);
94
- _defineProperty(this, "id", void 0);
95
- _defineProperty(this, "_width", 0);
96
- _defineProperty(this, "_height", 0);
97
- _defineProperty(this, "_observing", false);
98
- _defineProperty(this, "visible", true);
99
- _defineProperty(this, "visibilityChangedAt", void 0);
100
- _defineProperty(this, "pictureInPicture", false);
101
- _defineProperty(this, "handleResize", void 0);
102
- _defineProperty(this, "handleVisibilityChanged", void 0);
103
- _defineProperty(this, "width", () => this._width);
104
- _defineProperty(this, "height", () => this._height);
105
- }
91
+ element = {};
92
+ _width = 0;
93
+ _height = 0;
94
+ _observing = false;
95
+ visible = true;
96
+ pictureInPicture = false;
97
+ width = () => this._width;
98
+ height = () => this._height;
106
99
  observe() {
107
100
  this._observing = true;
108
101
  }
@@ -117,8 +110,7 @@ class VideoViewElementInfo {
117
110
  this._width = width;
118
111
  this._height = height;
119
112
  if (this._observing) {
120
- var _this$handleResize;
121
- (_this$handleResize = this.handleResize) === null || _this$handleResize === void 0 || _this$handleResize.call(this);
113
+ this.handleResize?.();
122
114
  }
123
115
  }
124
116
  onVisibility(isVisible) {
@@ -126,8 +118,7 @@ class VideoViewElementInfo {
126
118
  this.visible = isVisible;
127
119
  this.visibilityChangedAt = Date.now();
128
120
  if (this._observing) {
129
- var _this$handleVisibilit;
130
- (_this$handleVisibilit = this.handleVisibilityChanged) === null || _this$handleVisibilit === void 0 || _this$handleVisibilit.call(this);
121
+ this.handleVisibilityChanged?.();
131
122
  }
132
123
  }
133
124
  }
@@ -1 +1 @@
1
- {"version":3,"names":["React","StyleSheet","View","LocalVideoTrack","TrackEvent","RTCView","useCallback","useEffect","useMemo","useState","RemoteVideoTrack","ViewPortDetector","VideoView","style","videoTrack","objectFit","zOrder","mirror","elementInfo","info","VideoViewElementInfo","id","sid","something","layoutOnChange","event","onLayout","visibilityOnChange","isVisible","onVisibility","shouldObserveVisibility","isAdaptiveStream","mediaStream","setMediaStream","onRestarted","track","on","Restarted","off","observeElementInfo","stopObservingElementInfo","createElement","styles","container","onChange","videoView","disabled","propKey","streamURL","toURL","create","flex","width","constructor","_defineProperty","_width","_height","observe","_observing","stopObserving","height","nativeEvent","layout","_this$handleResize","handleResize","call","visible","visibilityChangedAt","Date","now","_this$handleVisibilit","handleVisibilityChanged"],"sources":["VideoView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n type LayoutChangeEvent,\n StyleSheet,\n View,\n type ViewStyle,\n} from 'react-native';\nimport {\n type ElementInfo,\n LocalVideoTrack,\n Track,\n TrackEvent,\n type VideoTrack,\n} from 'livekit-client';\nimport { RTCView } from '@livekit/react-native-webrtc';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport { RemoteVideoTrack } from 'livekit-client';\nimport ViewPortDetector from './ViewPortDetector';\n\n/**\n * @deprecated use `VideoTrack` and `VideoTrackProps` instead.\n */\nexport type Props = {\n videoTrack?: VideoTrack | undefined;\n style?: ViewStyle;\n objectFit?: 'cover' | 'contain' | undefined;\n mirror?: boolean;\n zOrder?: number;\n};\n\n/**\n * @deprecated use `VideoTrack` and `VideoTrackProps` instead.\n */\nexport const VideoView = ({\n style = {},\n videoTrack,\n objectFit = 'cover',\n zOrder,\n mirror,\n}: Props) => {\n const [elementInfo] = useState(() => {\n let info = new VideoViewElementInfo();\n info.id = videoTrack?.sid;\n info.something = videoTrack;\n return info;\n });\n\n const layoutOnChange = useCallback(\n (event: LayoutChangeEvent) => elementInfo.onLayout(event),\n [elementInfo]\n );\n const visibilityOnChange = useCallback(\n (isVisible: boolean) => elementInfo.onVisibility(isVisible),\n [elementInfo]\n );\n const shouldObserveVisibility = useMemo(() => {\n return (\n videoTrack instanceof RemoteVideoTrack && videoTrack.isAdaptiveStream\n );\n }, [videoTrack]);\n\n const [mediaStream, setMediaStream] = useState(videoTrack?.mediaStream);\n useEffect(() => {\n setMediaStream(videoTrack?.mediaStream);\n if (videoTrack instanceof LocalVideoTrack) {\n const onRestarted = (track: Track | null) => {\n setMediaStream(track?.mediaStream);\n };\n videoTrack.on(TrackEvent.Restarted, onRestarted);\n\n return () => {\n videoTrack.off(TrackEvent.Restarted, onRestarted);\n };\n } else {\n return () => {};\n }\n }, [videoTrack]);\n\n useEffect(() => {\n if (videoTrack instanceof RemoteVideoTrack && videoTrack.isAdaptiveStream) {\n videoTrack?.observeElementInfo(elementInfo);\n return () => {\n videoTrack?.stopObservingElementInfo(elementInfo);\n };\n } else {\n return () => {};\n }\n }, [videoTrack, elementInfo]);\n\n return (\n <View style={{ ...style, ...styles.container }} onLayout={layoutOnChange}>\n <ViewPortDetector\n onChange={visibilityOnChange}\n style={styles.videoView}\n disabled={!shouldObserveVisibility}\n propKey={videoTrack}\n >\n <RTCView\n style={styles.videoView}\n // @ts-expect-error\n streamURL={mediaStream?.toURL() ?? ''}\n objectFit={objectFit}\n zOrder={zOrder}\n mirror={mirror}\n />\n </ViewPortDetector>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {},\n videoView: {\n flex: 1,\n width: '100%',\n },\n});\n\nclass VideoViewElementInfo implements ElementInfo {\n element: object = {};\n something?: any;\n id?: string;\n _width = 0;\n _height = 0;\n _observing = false;\n visible: boolean = true;\n visibilityChangedAt: number | undefined;\n pictureInPicture = false;\n handleResize?: (() => void) | undefined;\n handleVisibilityChanged?: (() => void) | undefined;\n width = () => this._width;\n height = () => this._height;\n\n observe(): void {\n this._observing = true;\n }\n stopObserving(): void {\n this._observing = false;\n }\n\n onLayout(event: LayoutChangeEvent) {\n let { width, height } = event.nativeEvent.layout;\n this._width = width;\n this._height = height;\n\n if (this._observing) {\n this.handleResize?.();\n }\n }\n onVisibility(isVisible: boolean) {\n if (this.visible !== isVisible) {\n this.visible = isVisible;\n this.visibilityChangedAt = Date.now();\n if (this._observing) {\n this.handleVisibilityChanged?.();\n }\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["StyleSheet","View","LocalVideoTrack","TrackEvent","RTCView","useCallback","useEffect","useMemo","useState","RemoteVideoTrack","ViewPortDetector","jsx","_jsx","VideoView","style","videoTrack","objectFit","zOrder","mirror","elementInfo","info","VideoViewElementInfo","id","sid","something","layoutOnChange","event","onLayout","visibilityOnChange","isVisible","onVisibility","shouldObserveVisibility","isAdaptiveStream","mediaStream","setMediaStream","onRestarted","track","on","Restarted","off","observeElementInfo","stopObservingElementInfo","styles","container","children","onChange","videoView","disabled","propKey","streamURL","toURL","create","flex","width","element","_width","_height","_observing","visible","pictureInPicture","height","observe","stopObserving","nativeEvent","layout","handleResize","visibilityChangedAt","Date","now","handleVisibilityChanged"],"sourceRoot":"../../../src","sources":["components/VideoView.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,18 +1,13 @@
1
1
  'use strict';
2
2
 
3
- function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
4
- 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; }
5
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
6
- 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); }
7
- import React, { Component } from 'react';
3
+ import { Component } from 'react';
8
4
  import { AppState, View } from 'react-native';
5
+ import { jsx as _jsx } from "react/jsx-runtime";
9
6
  const DEFAULT_DELAY = 1000;
10
7
  class TimeoutHandler {
11
- constructor() {
12
- _defineProperty(this, "handlerRef", {
13
- id: -1
14
- });
15
- }
8
+ handlerRef = {
9
+ id: -1
10
+ };
16
11
  get handler() {
17
12
  return this.handlerRef.id;
18
13
  }
@@ -46,70 +41,13 @@ function setIntervalWithTimeout(callback, intervalMs, handleWrapper = new Timeou
46
41
  * Will not fire visibility changes for zero width/height components.
47
42
  */
48
43
  export default class ViewPortDetector extends Component {
44
+ lastValue = null;
45
+ interval = null;
46
+ view = null;
47
+ lastAppStateActive = false;
48
+ appStateSubscription = null;
49
49
  constructor(props) {
50
50
  super(props);
51
- _defineProperty(this, "lastValue", null);
52
- _defineProperty(this, "interval", null);
53
- _defineProperty(this, "view", null);
54
- _defineProperty(this, "lastAppStateActive", false);
55
- _defineProperty(this, "appStateSubscription", null);
56
- _defineProperty(this, "hasValidTimeout", (disabled, delay) => {
57
- let disabledValue = disabled ?? false;
58
- let delayValue = delay ?? DEFAULT_DELAY;
59
- return AppState.currentState === 'active' && !disabledValue && delayValue > 0;
60
- });
61
- _defineProperty(this, "handleAppStateChange", nextAppState => {
62
- let nextAppStateActive = nextAppState === 'active';
63
- if (this.lastAppStateActive !== nextAppStateActive) {
64
- this.checkVisibility();
65
- }
66
- this.lastAppStateActive = nextAppStateActive;
67
- if (!this.hasValidTimeout(this.props.disabled, this.props.delay)) {
68
- this.stopWatching();
69
- } else {
70
- this.startWatching();
71
- }
72
- });
73
- _defineProperty(this, "startWatching", () => {
74
- if (this.interval) {
75
- return;
76
- }
77
- this.interval = setIntervalWithTimeout(this.checkVisibility, this.props.delay || DEFAULT_DELAY);
78
- });
79
- _defineProperty(this, "stopWatching", () => {
80
- var _this$interval;
81
- (_this$interval = this.interval) === null || _this$interval === void 0 || _this$interval.clear();
82
- this.interval = null;
83
- });
84
- _defineProperty(this, "checkVisibility", () => {
85
- if (!this.view) {
86
- return;
87
- }
88
- if (AppState.currentState !== 'active') {
89
- this.updateVisibility(false);
90
- return;
91
- }
92
- this.view.measure((_x, _y, width, height, _pageX, _pageY) => {
93
- this.checkInViewPort(width, height);
94
- });
95
- });
96
- _defineProperty(this, "checkInViewPort", (width, height) => {
97
- let isVisible;
98
- // Not visible if any of these are missing.
99
- if (!width || !height) {
100
- isVisible = false;
101
- } else {
102
- isVisible = true;
103
- }
104
- this.updateVisibility(isVisible);
105
- });
106
- _defineProperty(this, "updateVisibility", isVisible => {
107
- if (this.lastValue !== isVisible) {
108
- var _this$props$onChange, _this$props;
109
- this.lastValue = isVisible;
110
- (_this$props$onChange = (_this$props = this.props).onChange) === null || _this$props$onChange === void 0 || _this$props$onChange.call(_this$props, isVisible);
111
- }
112
- });
113
51
  this.state = {
114
52
  rectTop: 0,
115
53
  rectBottom: 0
@@ -123,11 +61,15 @@ export default class ViewPortDetector extends Component {
123
61
  }
124
62
  }
125
63
  componentWillUnmount() {
126
- var _this$appStateSubscri;
127
- (_this$appStateSubscri = this.appStateSubscription) === null || _this$appStateSubscri === void 0 || _this$appStateSubscri.remove();
64
+ this.appStateSubscription?.remove();
128
65
  this.appStateSubscription = null;
129
66
  this.stopWatching();
130
67
  }
68
+ hasValidTimeout = (disabled, delay) => {
69
+ let disabledValue = disabled ?? false;
70
+ let delayValue = delay ?? DEFAULT_DELAY;
71
+ return AppState.currentState === 'active' && !disabledValue && delayValue > 0;
72
+ };
131
73
  UNSAFE_componentWillReceiveProps(nextProps) {
132
74
  if (!this.hasValidTimeout(nextProps.disabled, nextProps.delay)) {
133
75
  this.stopWatching();
@@ -138,13 +80,65 @@ export default class ViewPortDetector extends Component {
138
80
  this.startWatching();
139
81
  }
140
82
  }
83
+ handleAppStateChange = nextAppState => {
84
+ let nextAppStateActive = nextAppState === 'active';
85
+ if (this.lastAppStateActive !== nextAppStateActive) {
86
+ this.checkVisibility();
87
+ }
88
+ this.lastAppStateActive = nextAppStateActive;
89
+ if (!this.hasValidTimeout(this.props.disabled, this.props.delay)) {
90
+ this.stopWatching();
91
+ } else {
92
+ this.startWatching();
93
+ }
94
+ };
95
+ startWatching = () => {
96
+ if (this.interval) {
97
+ return;
98
+ }
99
+ this.interval = setIntervalWithTimeout(this.checkVisibility, this.props.delay || DEFAULT_DELAY);
100
+ };
101
+ stopWatching = () => {
102
+ this.interval?.clear();
103
+ this.interval = null;
104
+ };
105
+ checkVisibility = () => {
106
+ if (!this.view) {
107
+ return;
108
+ }
109
+ if (AppState.currentState !== 'active') {
110
+ this.updateVisibility(false);
111
+ return;
112
+ }
113
+ this.view.measure((_x, _y, width, height, _pageX, _pageY) => {
114
+ this.checkInViewPort(width, height);
115
+ });
116
+ };
117
+ checkInViewPort = (width, height) => {
118
+ let isVisible;
119
+ // Not visible if any of these are missing.
120
+ if (!width || !height) {
121
+ isVisible = false;
122
+ } else {
123
+ isVisible = true;
124
+ }
125
+ this.updateVisibility(isVisible);
126
+ };
127
+ updateVisibility = isVisible => {
128
+ if (this.lastValue !== isVisible) {
129
+ this.lastValue = isVisible;
130
+ this.props.onChange?.(isVisible);
131
+ }
132
+ };
141
133
  render() {
142
- return /*#__PURE__*/React.createElement(View, _extends({
134
+ return /*#__PURE__*/_jsx(View, {
143
135
  collapsable: false,
144
136
  ref: component => {
145
137
  this.view = component;
146
- }
147
- }, this.props), this.props.children);
138
+ },
139
+ ...this.props,
140
+ children: this.props.children
141
+ });
148
142
  }
149
143
  }
150
144
  //# sourceMappingURL=ViewPortDetector.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_extends","Object","assign","bind","n","e","arguments","length","t","r","hasOwnProperty","call","apply","_defineProperty","_toPropertyKey","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","React","Component","AppState","View","DEFAULT_DELAY","TimeoutHandler","constructor","id","handler","handlerRef","clear","clearTimeout","setIntervalWithTimeout","callback","intervalMs","handleWrapper","cleared","timeout","setTimeout","ViewPortDetector","props","disabled","delay","disabledValue","delayValue","currentState","nextAppState","nextAppStateActive","lastAppStateActive","checkVisibility","hasValidTimeout","stopWatching","startWatching","interval","_this$interval","view","updateVisibility","measure","_x","_y","width","height","_pageX","_pageY","checkInViewPort","isVisible","lastValue","_this$props$onChange","_this$props","onChange","state","rectTop","rectBottom","componentDidMount","appStateSubscription","addEventListener","handleAppStateChange","componentWillUnmount","_this$appStateSubscri","remove","UNSAFE_componentWillReceiveProps","nextProps","propKey","render","createElement","collapsable","ref","component","children"],"sources":["ViewPortDetector.tsx"],"sourcesContent":["'use strict';\n\nimport React, { Component, type PropsWithChildren } from 'react';\nimport {\n AppState,\n type AppStateStatus,\n type NativeEventSubscription,\n View,\n type ViewStyle,\n} from 'react-native';\n\nconst DEFAULT_DELAY = 1000;\n\nexport type Props = {\n disabled?: boolean;\n style?: ViewStyle;\n onChange?: (isVisible: boolean) => void;\n delay?: number;\n propKey?: any;\n};\n\nclass TimeoutHandler {\n private handlerRef: { id: any } = { id: -1 };\n\n get handler(): any {\n return this.handlerRef.id;\n }\n set handler(n: any) {\n this.handlerRef.id = n;\n }\n\n clear() {\n clearTimeout(this.handlerRef.id as any);\n }\n}\n\nfunction setIntervalWithTimeout(\n callback: (clear: () => void) => any,\n intervalMs: number,\n handleWrapper = new TimeoutHandler()\n): TimeoutHandler {\n let cleared = false;\n\n const timeout = () => {\n handleWrapper.handler = setTimeout(() => {\n callback(() => {\n cleared = true;\n handleWrapper.clear();\n });\n if (!cleared) {\n timeout();\n }\n }, intervalMs);\n };\n timeout();\n return handleWrapper;\n}\n\n/**\n * Detects when this is in the viewport and visible.\n *\n * Will not fire visibility changes for zero width/height components.\n */\nexport default class ViewPortDetector extends Component<\n PropsWithChildren<Props>\n> {\n private lastValue: boolean | null = null;\n private interval: TimeoutHandler | null = null;\n private view: View | null = null;\n private lastAppStateActive = false;\n private appStateSubscription: NativeEventSubscription | null = null;\n\n constructor(props: Props) {\n super(props);\n this.state = { rectTop: 0, rectBottom: 0 };\n }\n\n componentDidMount() {\n this.lastAppStateActive = AppState.currentState === 'active';\n this.appStateSubscription = AppState.addEventListener(\n 'change',\n this.handleAppStateChange\n );\n if (this.hasValidTimeout(this.props.disabled, this.props.delay)) {\n this.startWatching();\n }\n }\n\n componentWillUnmount() {\n this.appStateSubscription?.remove();\n this.appStateSubscription = null;\n this.stopWatching();\n }\n\n hasValidTimeout = (disabled?: boolean, delay?: number): boolean => {\n let disabledValue = disabled ?? false;\n let delayValue = delay ?? DEFAULT_DELAY;\n return (\n AppState.currentState === 'active' && !disabledValue && delayValue > 0\n );\n };\n\n UNSAFE_componentWillReceiveProps(nextProps: Props) {\n if (!this.hasValidTimeout(nextProps.disabled, nextProps.delay)) {\n this.stopWatching();\n } else {\n if (this.props.propKey !== nextProps.propKey) {\n this.lastValue = null;\n }\n this.startWatching();\n }\n }\n handleAppStateChange = (nextAppState: AppStateStatus) => {\n let nextAppStateActive = nextAppState === 'active';\n if (this.lastAppStateActive !== nextAppStateActive) {\n this.checkVisibility();\n }\n this.lastAppStateActive = nextAppStateActive;\n\n if (!this.hasValidTimeout(this.props.disabled, this.props.delay)) {\n this.stopWatching();\n } else {\n this.startWatching();\n }\n };\n\n startWatching = () => {\n if (this.interval) {\n return;\n }\n this.interval = setIntervalWithTimeout(\n this.checkVisibility,\n this.props.delay || DEFAULT_DELAY\n );\n };\n\n stopWatching = () => {\n this.interval?.clear();\n this.interval = null;\n };\n\n checkVisibility = () => {\n if (!this.view) {\n return;\n }\n\n if (AppState.currentState !== 'active') {\n this.updateVisibility(false);\n return;\n }\n\n this.view.measure((_x, _y, width, height, _pageX, _pageY) => {\n this.checkInViewPort(width, height);\n });\n };\n checkInViewPort = (width?: number, height?: number) => {\n let isVisible: boolean;\n // Not visible if any of these are missing.\n if (!width || !height) {\n isVisible = false;\n } else {\n isVisible = true;\n }\n this.updateVisibility(isVisible);\n };\n\n updateVisibility = (isVisible: boolean) => {\n if (this.lastValue !== isVisible) {\n this.lastValue = isVisible;\n this.props.onChange?.(isVisible);\n }\n };\n render() {\n return (\n <View\n collapsable={false}\n ref={(component) => {\n this.view = component;\n }}\n {...this.props}\n >\n {this.props.children}\n </View>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Component","AppState","View","jsx","_jsx","DEFAULT_DELAY","TimeoutHandler","handlerRef","id","handler","n","clear","clearTimeout","setIntervalWithTimeout","callback","intervalMs","handleWrapper","cleared","timeout","setTimeout","ViewPortDetector","lastValue","interval","view","lastAppStateActive","appStateSubscription","constructor","props","state","rectTop","rectBottom","componentDidMount","currentState","addEventListener","handleAppStateChange","hasValidTimeout","disabled","delay","startWatching","componentWillUnmount","remove","stopWatching","disabledValue","delayValue","UNSAFE_componentWillReceiveProps","nextProps","propKey","nextAppState","nextAppStateActive","checkVisibility","updateVisibility","measure","_x","_y","width","height","_pageX","_pageY","checkInViewPort","isVisible","onChange","render","collapsable","ref","component","children"],"sourceRoot":"../../../src","sources":["components/ViewPortDetector.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,5 @@
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); }
1
+ "use strict";
2
+
4
3
  import { RTCDataPacketCryptorFactory, RTCFrameCryptorAlgorithm, RTCFrameCryptorFactory } from '@livekit/react-native-webrtc';
5
4
  import { ParticipantEvent, RoomEvent, EncryptionEvent, Mutex } from 'livekit-client';
6
5
  import EventEmitter from 'events';
@@ -8,16 +7,14 @@ import EventEmitter from 'events';
8
7
  * @experimental
9
8
  */
10
9
  export default class RNE2EEManager extends EventEmitter {
10
+ frameCryptors = new Map();
11
+ algorithm = RTCFrameCryptorAlgorithm.kAesGcm;
12
+ encryptionEnabled = false;
13
+ dataChannelEncryptionEnabled = false;
14
+ dataPacketCryptorLock = new Mutex();
15
+ dataPacketCryptor = undefined;
11
16
  constructor(keyProvider, dcEncryptionEnabled = false) {
12
17
  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
- _defineProperty(this, "dataChannelEncryptionEnabled", false);
19
- _defineProperty(this, "dataPacketCryptorLock", new Mutex());
20
- _defineProperty(this, "dataPacketCryptor", undefined);
21
18
  this.keyProvider = keyProvider;
22
19
  this.encryptionEnabled = false;
23
20
  this.dataChannelEncryptionEnabled = dcEncryptionEnabled;
@@ -162,13 +159,11 @@ export default class RNE2EEManager extends EventEmitter {
162
159
  // No-op
163
160
  }
164
161
  setParticipantCryptorEnabled(enabled, participantIdentity) {
165
- var _this$room;
166
- if (this.encryptionEnabled !== enabled && participantIdentity === ((_this$room = this.room) === null || _this$room === void 0 ? void 0 : _this$room.localParticipant.identity)) {
162
+ if (this.encryptionEnabled !== enabled && participantIdentity === this.room?.localParticipant.identity) {
167
163
  this.encryptionEnabled = enabled;
168
164
  this.emit(EncryptionEvent.ParticipantEncryptionStatusChanged, enabled, this.room.localParticipant);
169
165
  } else {
170
- var _this$room2;
171
- const participant = (_this$room2 = this.room) === null || _this$room2 === void 0 ? void 0 : _this$room2.getParticipantByIdentity(participantIdentity);
166
+ const participant = this.room?.getParticipantByIdentity(participantIdentity);
172
167
  if (!participant) {
173
168
  throw TypeError(`couldn't set encryption status, participant not found ${participantIdentity}`);
174
169
  }
@@ -1 +1 @@
1
- {"version":3,"names":["RTCDataPacketCryptorFactory","RTCFrameCryptorAlgorithm","RTCFrameCryptorFactory","ParticipantEvent","RoomEvent","EncryptionEvent","Mutex","EventEmitter","RNE2EEManager","constructor","keyProvider","dcEncryptionEnabled","_defineProperty","Map","kAesGcm","undefined","encryptionEnabled","dataChannelEncryptionEnabled","isEnabled","isDataChannelEncryptionEnabled","value","setup","room","setupEventListeners","localParticipant","on","LocalTrackPublished","publication","setupE2EESender","LocalTrackUnpublished","frameCryptor","findTrackCryptor","trackSid","frameCryptors","delete","setEnabled","dispose","TrackSubscribed","_track","pub","participant","setupE2EEReceiver","TrackUnsubscribed","_participant","SignalConnected","TypeError","setParticipantCryptorEnabled","isE2EEEnabled","identity","isEncrypted","createFrameCryptorForSender","track","sender","set","setKeyIndex","getLatestKeyIndex","createFrameCryptorForReceiver","receiver","setSifTrailer","trailer","getDataPacketCryptor","dataPacketCryptor","unlock","dataPacketCryptorLock","lock","createDataPacketCryptor","algorithm","rtcKeyProvider","encryptData","data","Error","participantId","encryptedPacket","encrypt","uuid","payload","iv","keyIndex","handleEncryptedData","participantIdentity","packet","decryptedData","decrypt","trackId","get","createFrameCryptorForRtpSender","createFrameCryptorForRtpReceiver","setupEngine","_engine","enabled","_this$room","emit","ParticipantEncryptionStatusChanged","_this$room2","getParticipantByIdentity"],"sources":["RNE2EEManager.ts"],"sourcesContent":["import {\n RTCDataPacketCryptor,\n RTCDataPacketCryptorFactory,\n RTCFrameCryptorAlgorithm,\n RTCFrameCryptorFactory,\n RTCRtpReceiver,\n type RTCEncryptedPacket,\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 type DecryptDataResponseMessage,\n type EncryptDataResponseMessage,\n Mutex,\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 private dataChannelEncryptionEnabled: boolean = false;\n\n private dataPacketCryptorLock = new Mutex();\n private dataPacketCryptor: RTCDataPacketCryptor | undefined = undefined;\n constructor(\n keyProvider: RNKeyProvider,\n dcEncryptionEnabled: boolean = false\n ) {\n super();\n this.keyProvider = keyProvider;\n this.encryptionEnabled = false;\n this.dataChannelEncryptionEnabled = dcEncryptionEnabled;\n }\n\n get isEnabled(): boolean {\n return this.encryptionEnabled;\n }\n get isDataChannelEncryptionEnabled(): boolean {\n return this.isEnabled && this.dataChannelEncryptionEnabled;\n }\n set isDataChannelEncryptionEnabled(value: boolean) {\n this.dataChannelEncryptionEnabled = value;\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 .on(RoomEvent.SignalConnected, () => {\n if (!this.room) {\n throw new TypeError(`expected room to be present on signal connect`);\n }\n this.setParticipantCryptorEnabled(\n this.room.localParticipant.isE2EEEnabled,\n this.room.localParticipant.identity\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 private async getDataPacketCryptor(): Promise<RTCDataPacketCryptor> {\n let dataPacketCryptor = this.dataPacketCryptor;\n if (dataPacketCryptor) {\n return dataPacketCryptor;\n }\n\n let unlock = await this.dataPacketCryptorLock.lock();\n\n try {\n dataPacketCryptor = this.dataPacketCryptor;\n if (dataPacketCryptor) {\n return dataPacketCryptor;\n }\n\n dataPacketCryptor =\n await RTCDataPacketCryptorFactory.createDataPacketCryptor(\n this.algorithm,\n this.keyProvider.rtcKeyProvider\n );\n\n this.dataPacketCryptor = dataPacketCryptor;\n return dataPacketCryptor;\n } finally {\n unlock();\n }\n }\n async encryptData(\n data: Uint8Array\n ): Promise<EncryptDataResponseMessage['data']> {\n let room = this.room;\n if (!room) {\n throw new Error(\"e2eemanager isn't setup with room!\");\n }\n\n let participantId = room.localParticipant.identity;\n\n let dataPacketCryptor = await this.getDataPacketCryptor();\n\n let encryptedPacket = await dataPacketCryptor.encrypt(\n participantId,\n this.keyProvider.getLatestKeyIndex(participantId),\n data\n );\n\n if (!encryptedPacket) {\n throw new Error('encryption for packet failed');\n }\n return {\n uuid: '', //not used\n payload: encryptedPacket.payload,\n iv: encryptedPacket.iv,\n keyIndex: encryptedPacket.keyIndex,\n };\n }\n\n async handleEncryptedData(\n payload: Uint8Array,\n iv: Uint8Array,\n participantIdentity: string,\n keyIndex: number\n ): Promise<DecryptDataResponseMessage['data']> {\n let packet = {\n payload,\n iv,\n keyIndex,\n } satisfies RTCEncryptedPacket;\n\n let dataPacketCryptor = await this.getDataPacketCryptor();\n let decryptedData = await dataPacketCryptor.decrypt(\n participantIdentity,\n packet\n );\n\n if (!decryptedData) {\n throw new Error('decryption for packet failed');\n }\n\n return {\n uuid: '', //not used\n payload: decryptedData,\n } satisfies DecryptDataResponseMessage['data'];\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":[]}
1
+ {"version":3,"names":["RTCDataPacketCryptorFactory","RTCFrameCryptorAlgorithm","RTCFrameCryptorFactory","ParticipantEvent","RoomEvent","EncryptionEvent","Mutex","EventEmitter","RNE2EEManager","frameCryptors","Map","algorithm","kAesGcm","encryptionEnabled","dataChannelEncryptionEnabled","dataPacketCryptorLock","dataPacketCryptor","undefined","constructor","keyProvider","dcEncryptionEnabled","isEnabled","isDataChannelEncryptionEnabled","value","setup","room","setupEventListeners","localParticipant","on","LocalTrackPublished","publication","setupE2EESender","LocalTrackUnpublished","frameCryptor","findTrackCryptor","trackSid","delete","setEnabled","dispose","TrackSubscribed","_track","pub","participant","setupE2EEReceiver","TrackUnsubscribed","_participant","SignalConnected","TypeError","setParticipantCryptorEnabled","isE2EEEnabled","identity","isEncrypted","createFrameCryptorForSender","track","sender","set","setKeyIndex","getLatestKeyIndex","createFrameCryptorForReceiver","receiver","setSifTrailer","trailer","getDataPacketCryptor","unlock","lock","createDataPacketCryptor","rtcKeyProvider","encryptData","data","Error","participantId","encryptedPacket","encrypt","uuid","payload","iv","keyIndex","handleEncryptedData","participantIdentity","packet","decryptedData","decrypt","trackId","get","createFrameCryptorForRtpSender","createFrameCryptorForRtpReceiver","setupEngine","_engine","enabled","emit","ParticipantEncryptionStatusChanged","getParticipantByIdentity"],"sourceRoot":"../../../src","sources":["e2ee/RNE2EEManager.ts"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,5 @@
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); }
1
+ "use strict";
2
+
4
3
  import { BaseKeyProvider } from 'livekit-client';
5
4
  import { RTCFrameCryptorFactory } from '@livekit/react-native-webrtc';
6
5
  const defaultRatchetSalt = 'LKFrameEncryptionKey';
@@ -18,6 +17,7 @@ const defaultDiscardFrameWhenCryptorNotReady = false;
18
17
  * @experimental
19
18
  */
20
19
  export default class RNKeyProvider extends BaseKeyProvider {
20
+ latestSetIndex = new Map();
21
21
  constructor(options) {
22
22
  const opts = {
23
23
  sharedKey: options.sharedKey ?? true,
@@ -34,8 +34,6 @@ export default class RNKeyProvider extends BaseKeyProvider {
34
34
  }
35
35
  opts.uncryptedMagicBytes = magicBytes;
36
36
  super(opts);
37
- _defineProperty(this, "latestSetIndex", new Map());
38
- _defineProperty(this, "nativeKeyProvider", void 0);
39
37
  this.nativeKeyProvider = RTCFrameCryptorFactory.createDefaultKeyProvider(opts);
40
38
  }
41
39
  getLatestKeyIndex(participantId) {
@@ -1 +1 @@
1
- {"version":3,"names":["BaseKeyProvider","RTCFrameCryptorFactory","defaultRatchetSalt","defaultMagicBytes","defaultRatchetWindowSize","defaultFailureTolerance","defaultKeyRingSize","defaultDiscardFrameWhenCryptorNotReady","RNKeyProvider","constructor","options","opts","sharedKey","ratchetSalt","ratchetWindowSize","failureTolerance","keyRingSize","keyringSize","discardFrameWhenCryptorNotReady","magicBytes","uncryptedMagicBytes","TextEncoder","encode","_defineProperty","Map","nativeKeyProvider","createDefaultKeyProvider","getLatestKeyIndex","participantId","latestSetIndex","get","setSharedKey","key","keyIndex","ratchetSharedKey","setKey","getOptions","set","ratchetKey","participantIdentity","setSifTrailer","trailer","rtcKeyProvider","dispose"],"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":[]}
1
+ {"version":3,"names":["BaseKeyProvider","RTCFrameCryptorFactory","defaultRatchetSalt","defaultMagicBytes","defaultRatchetWindowSize","defaultFailureTolerance","defaultKeyRingSize","defaultDiscardFrameWhenCryptorNotReady","RNKeyProvider","latestSetIndex","Map","constructor","options","opts","sharedKey","ratchetSalt","ratchetWindowSize","failureTolerance","keyRingSize","keyringSize","discardFrameWhenCryptorNotReady","magicBytes","uncryptedMagicBytes","TextEncoder","encode","nativeKeyProvider","createDefaultKeyProvider","getLatestKeyIndex","participantId","get","setSharedKey","key","keyIndex","ratchetSharedKey","setKey","getOptions","set","ratchetKey","participantIdentity","setSifTrailer","trailer","rtcKeyProvider","dispose"],"sourceRoot":"../../../src","sources":["e2ee/RNKeyProvider.ts"],"mappings":"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","ignoreList":[]}
@@ -1,3 +1,5 @@
1
+ "use strict";
2
+
1
3
  import { NativeEventEmitter } from 'react-native';
2
4
  // @ts-ignore
3
5
  import EventEmitter from 'react-native/Libraries/vendor/emitter/EventEmitter';
@@ -17,18 +19,16 @@ export function setupNativeEvents() {
17
19
  }
18
20
  const _subscriptions = new Map();
19
21
  export function addListener(listener, eventName, eventHandler) {
20
- var _subscriptions$get;
21
22
  if (!NATIVE_EVENTS.includes(eventName)) {
22
23
  throw new Error(`Invalid event: ${eventName}`);
23
24
  }
24
25
  if (!_subscriptions.has(listener)) {
25
26
  _subscriptions.set(listener, []);
26
27
  }
27
- (_subscriptions$get = _subscriptions.get(listener)) === null || _subscriptions$get === void 0 || _subscriptions$get.push(eventEmitter.addListener(eventName, eventHandler));
28
+ _subscriptions.get(listener)?.push(eventEmitter.addListener(eventName, eventHandler));
28
29
  }
29
30
  export function removeListener(listener) {
30
- var _subscriptions$get2;
31
- (_subscriptions$get2 = _subscriptions.get(listener)) === null || _subscriptions$get2 === void 0 || _subscriptions$get2.forEach(sub => {
31
+ _subscriptions.get(listener)?.forEach(sub => {
32
32
  sub.remove();
33
33
  });
34
34
  _subscriptions.delete(listener);
@@ -1 +1 @@
1
- {"version":3,"names":["NativeEventEmitter","EventEmitter","LiveKitModule","nativeEmitter","NATIVE_EVENTS","eventEmitter","setupNativeEvents","eventName","addListener","args","emit","_subscriptions","Map","listener","eventHandler","_subscriptions$get","includes","Error","has","set","get","push","removeListener","_subscriptions$get2","forEach","sub","remove","delete"],"sources":["EventEmitter.ts"],"sourcesContent":["import { NativeEventEmitter, type EmitterSubscription } from 'react-native';\n// @ts-ignore\nimport EventEmitter from 'react-native/Libraries/vendor/emitter/EventEmitter';\nimport LiveKitModule from '../LKNativeModule';\n\n// This emitter is going to be used to listen to all the native events (once) and then\n// re-emit them on a JS-only emitter.\nconst nativeEmitter = new NativeEventEmitter(LiveKitModule);\n\nconst NATIVE_EVENTS = [\n 'LK_VOLUME_PROCESSED',\n 'LK_MULTIBAND_PROCESSED',\n 'LK_AUDIO_DATA',\n];\n\nconst eventEmitter = new EventEmitter();\n\nexport function setupNativeEvents() {\n for (const eventName of NATIVE_EVENTS) {\n nativeEmitter.addListener(eventName, (...args) => {\n eventEmitter.emit(eventName, ...args);\n });\n }\n}\n\ntype EventHandler = (event: unknown) => void;\ntype Listener = unknown;\n\nconst _subscriptions: Map<Listener, EmitterSubscription[]> = new Map();\n\nexport function addListener(\n listener: Listener,\n eventName: string,\n eventHandler: EventHandler\n): void {\n if (!NATIVE_EVENTS.includes(eventName)) {\n throw new Error(`Invalid event: ${eventName}`);\n }\n\n if (!_subscriptions.has(listener)) {\n _subscriptions.set(listener, []);\n }\n\n _subscriptions\n .get(listener)\n ?.push(eventEmitter.addListener(eventName, eventHandler));\n}\n\nexport function removeListener(listener: Listener): void {\n _subscriptions.get(listener)?.forEach((sub) => {\n sub.remove();\n });\n\n _subscriptions.delete(listener);\n}\n"],"mappings":"AAAA,SAASA,kBAAkB,QAAkC,cAAc;AAC3E;AACA,OAAOC,YAAY,MAAM,oDAAoD;AAC7E,OAAOC,aAAa,MAAM,mBAAmB;;AAE7C;AACA;AACA,MAAMC,aAAa,GAAG,IAAIH,kBAAkB,CAACE,aAAa,CAAC;AAE3D,MAAME,aAAa,GAAG,CACpB,qBAAqB,EACrB,wBAAwB,EACxB,eAAe,CAChB;AAED,MAAMC,YAAY,GAAG,IAAIJ,YAAY,CAAC,CAAC;AAEvC,OAAO,SAASK,iBAAiBA,CAAA,EAAG;EAClC,KAAK,MAAMC,SAAS,IAAIH,aAAa,EAAE;IACrCD,aAAa,CAACK,WAAW,CAACD,SAAS,EAAE,CAAC,GAAGE,IAAI,KAAK;MAChDJ,YAAY,CAACK,IAAI,CAACH,SAAS,EAAE,GAAGE,IAAI,CAAC;IACvC,CAAC,CAAC;EACJ;AACF;AAKA,MAAME,cAAoD,GAAG,IAAIC,GAAG,CAAC,CAAC;AAEtE,OAAO,SAASJ,WAAWA,CACzBK,QAAkB,EAClBN,SAAiB,EACjBO,YAA0B,EACpB;EAAA,IAAAC,kBAAA;EACN,IAAI,CAACX,aAAa,CAACY,QAAQ,CAACT,SAAS,CAAC,EAAE;IACtC,MAAM,IAAIU,KAAK,CAAC,kBAAkBV,SAAS,EAAE,CAAC;EAChD;EAEA,IAAI,CAACI,cAAc,CAACO,GAAG,CAACL,QAAQ,CAAC,EAAE;IACjCF,cAAc,CAACQ,GAAG,CAACN,QAAQ,EAAE,EAAE,CAAC;EAClC;EAEA,CAAAE,kBAAA,GAAAJ,cAAc,CACXS,GAAG,CAACP,QAAQ,CAAC,cAAAE,kBAAA,eADhBA,kBAAA,CAEIM,IAAI,CAAChB,YAAY,CAACG,WAAW,CAACD,SAAS,EAAEO,YAAY,CAAC,CAAC;AAC7D;AAEA,OAAO,SAASQ,cAAcA,CAACT,QAAkB,EAAQ;EAAA,IAAAU,mBAAA;EACvD,CAAAA,mBAAA,GAAAZ,cAAc,CAACS,GAAG,CAACP,QAAQ,CAAC,cAAAU,mBAAA,eAA5BA,mBAAA,CAA8BC,OAAO,CAAEC,GAAG,IAAK;IAC7CA,GAAG,CAACC,MAAM,CAAC,CAAC;EACd,CAAC,CAAC;EAEFf,cAAc,CAACgB,MAAM,CAACd,QAAQ,CAAC;AACjC","ignoreList":[]}
1
+ {"version":3,"names":["NativeEventEmitter","EventEmitter","LiveKitModule","nativeEmitter","NATIVE_EVENTS","eventEmitter","setupNativeEvents","eventName","addListener","args","emit","_subscriptions","Map","listener","eventHandler","includes","Error","has","set","get","push","removeListener","forEach","sub","remove","delete"],"sourceRoot":"../../../src","sources":["events/EventEmitter.ts"],"mappings":";;AAAA,SAASA,kBAAkB,QAAkC,cAAc;AAC3E;AACA,OAAOC,YAAY,MAAM,oDAAoD;AAC7E,OAAOC,aAAa,MAAM,mBAAmB;;AAE7C;AACA;AACA,MAAMC,aAAa,GAAG,IAAIH,kBAAkB,CAACE,aAAa,CAAC;AAE3D,MAAME,aAAa,GAAG,CACpB,qBAAqB,EACrB,wBAAwB,EACxB,eAAe,CAChB;AAED,MAAMC,YAAY,GAAG,IAAIJ,YAAY,CAAC,CAAC;AAEvC,OAAO,SAASK,iBAAiBA,CAAA,EAAG;EAClC,KAAK,MAAMC,SAAS,IAAIH,aAAa,EAAE;IACrCD,aAAa,CAACK,WAAW,CAACD,SAAS,EAAE,CAAC,GAAGE,IAAI,KAAK;MAChDJ,YAAY,CAACK,IAAI,CAACH,SAAS,EAAE,GAAGE,IAAI,CAAC;IACvC,CAAC,CAAC;EACJ;AACF;AAKA,MAAME,cAAoD,GAAG,IAAIC,GAAG,CAAC,CAAC;AAEtE,OAAO,SAASJ,WAAWA,CACzBK,QAAkB,EAClBN,SAAiB,EACjBO,YAA0B,EACpB;EACN,IAAI,CAACV,aAAa,CAACW,QAAQ,CAACR,SAAS,CAAC,EAAE;IACtC,MAAM,IAAIS,KAAK,CAAC,kBAAkBT,SAAS,EAAE,CAAC;EAChD;EAEA,IAAI,CAACI,cAAc,CAACM,GAAG,CAACJ,QAAQ,CAAC,EAAE;IACjCF,cAAc,CAACO,GAAG,CAACL,QAAQ,EAAE,EAAE,CAAC;EAClC;EAEAF,cAAc,CACXQ,GAAG,CAACN,QAAQ,CAAC,EACZO,IAAI,CAACf,YAAY,CAACG,WAAW,CAACD,SAAS,EAAEO,YAAY,CAAC,CAAC;AAC7D;AAEA,OAAO,SAASO,cAAcA,CAACR,QAAkB,EAAQ;EACvDF,cAAc,CAACQ,GAAG,CAACN,QAAQ,CAAC,EAAES,OAAO,CAAEC,GAAG,IAAK;IAC7CA,GAAG,CAACC,MAAM,CAAC,CAAC;EACd,CAAC,CAAC;EAEFb,cAAc,CAACc,MAAM,CAACZ,QAAQ,CAAC;AACjC","ignoreList":[]}