@livekit/react-native 2.9.2 → 2.9.4

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 (103) hide show
  1. package/android/build.gradle +1 -3
  2. package/lib/commonjs/audio/MediaRecorder.js +2 -2
  3. package/lib/commonjs/audio/MediaRecorder.js.map +1 -1
  4. package/lib/commonjs/components/VideoTrack.js +6 -2
  5. package/lib/commonjs/components/VideoTrack.js.map +1 -1
  6. package/lib/commonjs/components/VideoView.js +3 -1
  7. package/lib/commonjs/components/VideoView.js.map +1 -1
  8. package/lib/commonjs/e2ee/RNE2EEManager.js +73 -1
  9. package/lib/commonjs/e2ee/RNE2EEManager.js.map +1 -1
  10. package/lib/commonjs/hooks/useE2EEManager.js +1 -1
  11. package/lib/commonjs/hooks/useE2EEManager.js.map +1 -1
  12. package/lib/commonjs/index.js +0 -1
  13. package/lib/commonjs/index.js.map +1 -1
  14. package/lib/module/audio/MediaRecorder.js +1 -1
  15. package/lib/module/audio/MediaRecorder.js.map +1 -1
  16. package/lib/module/components/VideoTrack.js +6 -2
  17. package/lib/module/components/VideoTrack.js.map +1 -1
  18. package/lib/module/components/VideoView.js +3 -1
  19. package/lib/module/components/VideoView.js.map +1 -1
  20. package/lib/module/e2ee/RNE2EEManager.js +75 -3
  21. package/lib/module/e2ee/RNE2EEManager.js.map +1 -1
  22. package/lib/module/hooks/useE2EEManager.js +1 -1
  23. package/lib/module/hooks/useE2EEManager.js.map +1 -1
  24. package/lib/module/index.js +0 -1
  25. package/lib/module/index.js.map +1 -1
  26. package/lib/typescript/{src/components → components}/VideoTrack.d.ts +1 -1
  27. package/lib/typescript/{src/e2ee → e2ee}/RNE2EEManager.d.ts +11 -2
  28. package/lib/typescript/{src/hooks → hooks}/useE2EEManager.d.ts +2 -2
  29. package/lib/typescript/{src/index.d.ts → index.d.ts} +1 -2
  30. package/package.json +31 -20
  31. package/src/audio/MediaRecorder.ts +1 -1
  32. package/src/components/VideoTrack.tsx +2 -0
  33. package/src/components/VideoView.tsx +1 -0
  34. package/src/e2ee/RNE2EEManager.ts +117 -2
  35. package/src/hooks/useE2EEManager.ts +3 -2
  36. package/src/index.tsx +1 -2
  37. package/lib/typescript/babel.config.d.ts +0 -1
  38. package/lib/typescript/docs/assets/icons.d.ts +0 -0
  39. package/lib/typescript/docs/assets/main.d.ts +0 -0
  40. package/lib/typescript/docs/assets/navigation.d.ts +0 -0
  41. package/lib/typescript/docs/assets/search.d.ts +0 -0
  42. package/lib/typescript/lib/commonjs/LKNativeModule.d.ts +0 -3
  43. package/lib/typescript/lib/commonjs/audio/AudioManager.d.ts +0 -10
  44. package/lib/typescript/lib/commonjs/audio/AudioSession.d.ts +0 -33
  45. package/lib/typescript/lib/commonjs/audio/MediaRecorder.d.ts +0 -24
  46. package/lib/typescript/lib/commonjs/components/BarVisualizer.d.ts +0 -32
  47. package/lib/typescript/lib/commonjs/components/LiveKitRoom.d.ts +0 -20
  48. package/lib/typescript/lib/commonjs/components/VideoTrack.d.ts +0 -2
  49. package/lib/typescript/lib/commonjs/components/VideoView.d.ts +0 -14
  50. package/lib/typescript/lib/commonjs/components/ViewPortDetector.d.ts +0 -30
  51. package/lib/typescript/lib/commonjs/e2ee/RNE2EEManager.d.ts +0 -23
  52. package/lib/typescript/lib/commonjs/e2ee/RNKeyProvider.d.ts +0 -33
  53. package/lib/typescript/lib/commonjs/events/EventEmitter.d.ts +0 -4
  54. package/lib/typescript/lib/commonjs/hooks/useE2EEManager.d.ts +0 -8
  55. package/lib/typescript/lib/commonjs/hooks/useMultibandTrackVolume.d.ts +0 -8
  56. package/lib/typescript/lib/commonjs/hooks/useTrackVolume.d.ts +0 -8
  57. package/lib/typescript/lib/commonjs/hooks.d.ts +0 -32
  58. package/lib/typescript/lib/commonjs/index.d.ts +0 -14
  59. package/lib/typescript/lib/commonjs/logger.d.ts +0 -8
  60. package/lib/typescript/lib/commonjs/useParticipant.d.ts +0 -14
  61. package/lib/typescript/lib/commonjs/useRoom.d.ts +0 -16
  62. package/lib/typescript/lib/module/LKNativeModule.d.ts +0 -2
  63. package/lib/typescript/lib/module/audio/AudioManager.d.ts +0 -9
  64. package/lib/typescript/lib/module/audio/AudioSession.d.ts +0 -31
  65. package/lib/typescript/lib/module/audio/MediaRecorder.d.ts +0 -22
  66. package/lib/typescript/lib/module/components/BarVisualizer.d.ts +0 -10
  67. package/lib/typescript/lib/module/components/LiveKitRoom.d.ts +0 -22
  68. package/lib/typescript/lib/module/components/VideoTrack.d.ts +0 -14
  69. package/lib/typescript/lib/module/components/VideoView.d.ts +0 -9
  70. package/lib/typescript/lib/module/components/ViewPortDetector.d.ts +0 -29
  71. package/lib/typescript/lib/module/e2ee/RNE2EEManager.d.ts +0 -21
  72. package/lib/typescript/lib/module/e2ee/RNKeyProvider.d.ts +0 -30
  73. package/lib/typescript/lib/module/events/EventEmitter.d.ts +0 -3
  74. package/lib/typescript/lib/module/hooks/useE2EEManager.d.ts +0 -9
  75. package/lib/typescript/lib/module/hooks/useMultibandTrackVolume.d.ts +0 -7
  76. package/lib/typescript/lib/module/hooks/useTrackVolume.d.ts +0 -7
  77. package/lib/typescript/lib/module/hooks.d.ts +0 -4
  78. package/lib/typescript/lib/module/index.d.ts +0 -23
  79. package/lib/typescript/lib/module/logger.d.ts +0 -8
  80. package/lib/typescript/lib/module/polyfills/MediaRecorderShim.d.ts +0 -1
  81. package/lib/typescript/lib/module/useParticipant.d.ts +0 -13
  82. package/lib/typescript/lib/module/useRoom.d.ts +0 -15
  83. package/lib/typescript/scripts/bootstrap.d.ts +0 -1
  84. package/lib/typescript/src/polyfills/EncoderDecoderTogether.min.d.ts +0 -0
  85. package/lib/typescript/src/polyfills/MediaRecorderShim.d.ts +0 -1
  86. /package/lib/typescript/{src/LKNativeModule.d.ts → LKNativeModule.d.ts} +0 -0
  87. /package/lib/typescript/{src/audio → audio}/AudioManager.d.ts +0 -0
  88. /package/lib/typescript/{src/audio → audio}/AudioSession.d.ts +0 -0
  89. /package/lib/typescript/{src/audio → audio}/MediaRecorder.d.ts +0 -0
  90. /package/lib/typescript/{src/components → components}/BarVisualizer.d.ts +0 -0
  91. /package/lib/typescript/{src/components → components}/LiveKitRoom.d.ts +0 -0
  92. /package/lib/typescript/{src/components → components}/VideoView.d.ts +0 -0
  93. /package/lib/typescript/{src/components → components}/ViewPortDetector.d.ts +0 -0
  94. /package/lib/typescript/{src/e2ee → e2ee}/RNKeyProvider.d.ts +0 -0
  95. /package/lib/typescript/{src/events → events}/EventEmitter.d.ts +0 -0
  96. /package/lib/typescript/{src/hooks → hooks}/useMultibandTrackVolume.d.ts +0 -0
  97. /package/lib/typescript/{src/hooks → hooks}/useTrackVolume.d.ts +0 -0
  98. /package/lib/typescript/{src/hooks.d.ts → hooks.d.ts} +0 -0
  99. /package/lib/typescript/{src/logger.d.ts → logger.d.ts} +0 -0
  100. /package/lib/typescript/{lib/module/polyfills → polyfills}/EncoderDecoderTogether.min.d.ts +0 -0
  101. /package/lib/typescript/{lib/commonjs/polyfills → polyfills}/MediaRecorderShim.d.ts +0 -0
  102. /package/lib/typescript/{src/useParticipant.d.ts → useParticipant.d.ts} +0 -0
  103. /package/lib/typescript/{src/useRoom.d.ts → useRoom.d.ts} +0 -0
@@ -5,7 +5,6 @@ buildscript {
5
5
  repositories {
6
6
  google()
7
7
  mavenCentral()
8
- jcenter()
9
8
  }
10
9
 
11
10
  dependencies {
@@ -53,7 +52,6 @@ android {
53
52
 
54
53
  repositories {
55
54
  mavenCentral()
56
- jcenter()
57
55
  google()
58
56
  maven { url 'https://jitpack.io' }
59
57
 
@@ -130,7 +128,7 @@ dependencies {
130
128
  api 'com.facebook.react:react-native:+'
131
129
  implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
132
130
  api 'com.github.davidliu:audioswitch:89582c47c9a04c62f90aa5e57251af4800a62c9a'
133
- api 'io.github.webrtc-sdk:android:125.6422.02'
131
+ api 'io.github.webrtc-sdk:android:137.7151.04'
134
132
  implementation "io.livekit:noise:2.0.0"
135
133
  implementation project(':livekit_react-native-webrtc')
136
134
  implementation "androidx.annotation:annotation:1.9.1"
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.MediaRecorder = void 0;
7
7
  var _EventEmitter = require("../events/EventEmitter");
8
8
  var _index = require("event-target-shim/index");
9
- var _reactNativeQuickBase = require("react-native-quick-base64");
9
+ var _base64Js = require("base64-js");
10
10
  var _LKNativeModule = _interopRequireDefault(require("../LKNativeModule"));
11
11
  var _logger = require("../logger");
12
12
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
@@ -92,7 +92,7 @@ class MediaRecorder extends _index.EventTarget {
92
92
  }
93
93
  dispatchData() {
94
94
  let combinedStr = this._parts.reduce((sum, cur) => sum + cur, '');
95
- let data = (0, _reactNativeQuickBase.toByteArray)(combinedStr);
95
+ let data = (0, _base64Js.toByteArray)(combinedStr);
96
96
  this._parts = [];
97
97
  this.dispatchEvent(new BlobEvent('dataavailable', {
98
98
  data: {
@@ -1 +1 @@
1
- {"version":3,"names":["_EventEmitter","require","_index","_reactNativeQuickBase","_LKNativeModule","_interopRequireDefault","_logger","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","MediaRecorder","EventTarget","constructor","stream","undefined","registerListener","audioTracks","getAudioTracks","length","mediaStreamTrack","peerConnectionId","_peerConnectionId","mediaStreamTrackId","id","_reactTag","LiveKitModule","createAudioSinkListener","addListener","event","state","str","data","_parts","push","unregisterListener","log","error","deleteAudioSinkListener","pause","dispatchEvent","Event","resume","start","stop","dispatchData","requestData","combinedStr","reduce","sum","cur","toByteArray","BlobEvent","byteArray","exports","type","eventInitDict","proto","prototype","defineEventAttribute"],"sources":["MediaRecorder.ts"],"sourcesContent":["import type { MediaStream } from '@livekit/react-native-webrtc';\nimport { addListener } from '../events/EventEmitter';\nimport {\n EventTarget,\n Event,\n defineEventAttribute,\n} from 'event-target-shim/index';\nimport { toByteArray } from 'react-native-quick-base64';\nimport LiveKitModule from '../LKNativeModule';\nimport { log } from '../logger';\n\n// typeof MediaRecorder\n// const Tester = (stream: MediaStream) => {\n// return new AudioRecorder(stream) satisfies MediaRecorder;\n// };\n\ntype MediaRecorderState = 'inactive' | 'recording' | 'paused';\ntype MediaRecorderEventMap = {\n dataavailable: BlobEvent<'dataavailable'>;\n error: Event<'error'>;\n pause: Event<'pause'>;\n resume: Event<'resume'>;\n start: Event<'start'>;\n stop: Event<'stop'>;\n};\n\n/**\n * A MediaRecord implementation only meant for recording audio streams.\n *\n * @private\n */\nexport class MediaRecorder extends EventTarget<MediaRecorderEventMap> {\n mimeType: String = 'audio/pcm';\n audioBitsPerSecond: number = 0; // TODO?\n state: MediaRecorderState = 'inactive';\n stream: MediaStream;\n videoBitsPerSecond: number = 0; // TODO?\n audioBitrateMode = 'constant';\n\n _reactTag: string | undefined = undefined;\n _parts: string[] = [];\n constructor(stream: MediaStream) {\n super();\n this.stream = stream;\n }\n\n registerListener() {\n let audioTracks = this.stream.getAudioTracks();\n if (audioTracks.length !== 1) {\n return;\n }\n const mediaStreamTrack = audioTracks[0];\n const peerConnectionId = mediaStreamTrack._peerConnectionId ?? -1;\n const mediaStreamTrackId = mediaStreamTrack?.id;\n this._reactTag = LiveKitModule.createAudioSinkListener(\n peerConnectionId,\n mediaStreamTrackId\n );\n addListener(this, 'LK_AUDIO_DATA', (event: any) => {\n if (\n this._reactTag &&\n event.id === this._reactTag &&\n this.state === 'recording'\n ) {\n let str = event.data as string;\n this._parts.push(str);\n }\n });\n }\n\n unregisterListener() {\n if (this._reactTag) {\n let audioTracks = this.stream.getAudioTracks();\n if (audioTracks.length !== 1) {\n log.error(\"couldn't find any audio tracks to record from!\");\n return;\n }\n const mediaStreamTrack = audioTracks[0];\n const peerConnectionId = mediaStreamTrack._peerConnectionId ?? -1;\n const mediaStreamTrackId = mediaStreamTrack?.id;\n\n LiveKitModule.deleteAudioSinkListener(\n this._reactTag,\n peerConnectionId,\n mediaStreamTrackId\n );\n }\n }\n\n pause() {\n this.state = 'paused';\n this.dispatchEvent(new Event('pause'));\n }\n\n resume() {\n this.state = 'recording';\n this.dispatchEvent(new Event('resume'));\n }\n\n start() {\n this.registerListener();\n this.state = 'recording';\n this.dispatchEvent(new Event('start'));\n }\n\n stop() {\n // dispatch data must come before stopping.\n this.dispatchData();\n\n this.unregisterListener();\n this.state = 'inactive';\n this.dispatchEvent(new Event('stop'));\n }\n\n requestData() {\n this.dispatchData();\n }\n dispatchData() {\n let combinedStr = this._parts.reduce((sum, cur) => sum + cur, '');\n let data = toByteArray(combinedStr);\n this._parts = [];\n this.dispatchEvent(\n new BlobEvent('dataavailable', { data: { byteArray: data } })\n );\n }\n}\n\n/**\n * @eventClass\n * This event is fired whenever the Track is changed in PeerConnection.\n * @param {TRACK_EVENTS} type - The type of event.\n * @param {IRTCTrackEventInitDict} eventInitDict - The event init properties.\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/track_event MDN} for details.\n */\nclass BlobEvent<TEventType extends string> extends Event<TEventType> {\n /** @eventProperty */\n readonly data: { byteArray: Uint8Array };\n\n constructor(\n type: TEventType,\n eventInitDict: { data: { byteArray: Uint8Array } } & Event.EventInit\n ) {\n super(type, eventInitDict);\n this.data = eventInitDict.data;\n }\n}\n\n/**\n * Define the `onxxx` event handlers.\n */\nconst proto = MediaRecorder.prototype;\n\ndefineEventAttribute(proto, 'dataavailable');\ndefineEventAttribute(proto, 'error');\ndefineEventAttribute(proto, 'pause');\ndefineEventAttribute(proto, 'resume');\ndefineEventAttribute(proto, 'start');\ndefineEventAttribute(proto, 'stop');\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_EventEmitter","require","_index","_base64Js","_LKNativeModule","_interopRequireDefault","_logger","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","MediaRecorder","EventTarget","constructor","stream","undefined","registerListener","audioTracks","getAudioTracks","length","mediaStreamTrack","peerConnectionId","_peerConnectionId","mediaStreamTrackId","id","_reactTag","LiveKitModule","createAudioSinkListener","addListener","event","state","str","data","_parts","push","unregisterListener","log","error","deleteAudioSinkListener","pause","dispatchEvent","Event","resume","start","stop","dispatchData","requestData","combinedStr","reduce","sum","cur","toByteArray","BlobEvent","byteArray","exports","type","eventInitDict","proto","prototype","defineEventAttribute"],"sources":["MediaRecorder.ts"],"sourcesContent":["import type { MediaStream } from '@livekit/react-native-webrtc';\nimport { addListener } from '../events/EventEmitter';\nimport {\n EventTarget,\n Event,\n defineEventAttribute,\n} from 'event-target-shim/index';\nimport { toByteArray } from 'base64-js';\nimport LiveKitModule from '../LKNativeModule';\nimport { log } from '../logger';\n\n// typeof MediaRecorder\n// const Tester = (stream: MediaStream) => {\n// return new AudioRecorder(stream) satisfies MediaRecorder;\n// };\n\ntype MediaRecorderState = 'inactive' | 'recording' | 'paused';\ntype MediaRecorderEventMap = {\n dataavailable: BlobEvent<'dataavailable'>;\n error: Event<'error'>;\n pause: Event<'pause'>;\n resume: Event<'resume'>;\n start: Event<'start'>;\n stop: Event<'stop'>;\n};\n\n/**\n * A MediaRecord implementation only meant for recording audio streams.\n *\n * @private\n */\nexport class MediaRecorder extends EventTarget<MediaRecorderEventMap> {\n mimeType: String = 'audio/pcm';\n audioBitsPerSecond: number = 0; // TODO?\n state: MediaRecorderState = 'inactive';\n stream: MediaStream;\n videoBitsPerSecond: number = 0; // TODO?\n audioBitrateMode = 'constant';\n\n _reactTag: string | undefined = undefined;\n _parts: string[] = [];\n constructor(stream: MediaStream) {\n super();\n this.stream = stream;\n }\n\n registerListener() {\n let audioTracks = this.stream.getAudioTracks();\n if (audioTracks.length !== 1) {\n return;\n }\n const mediaStreamTrack = audioTracks[0];\n const peerConnectionId = mediaStreamTrack._peerConnectionId ?? -1;\n const mediaStreamTrackId = mediaStreamTrack?.id;\n this._reactTag = LiveKitModule.createAudioSinkListener(\n peerConnectionId,\n mediaStreamTrackId\n );\n addListener(this, 'LK_AUDIO_DATA', (event: any) => {\n if (\n this._reactTag &&\n event.id === this._reactTag &&\n this.state === 'recording'\n ) {\n let str = event.data as string;\n this._parts.push(str);\n }\n });\n }\n\n unregisterListener() {\n if (this._reactTag) {\n let audioTracks = this.stream.getAudioTracks();\n if (audioTracks.length !== 1) {\n log.error(\"couldn't find any audio tracks to record from!\");\n return;\n }\n const mediaStreamTrack = audioTracks[0];\n const peerConnectionId = mediaStreamTrack._peerConnectionId ?? -1;\n const mediaStreamTrackId = mediaStreamTrack?.id;\n\n LiveKitModule.deleteAudioSinkListener(\n this._reactTag,\n peerConnectionId,\n mediaStreamTrackId\n );\n }\n }\n\n pause() {\n this.state = 'paused';\n this.dispatchEvent(new Event('pause'));\n }\n\n resume() {\n this.state = 'recording';\n this.dispatchEvent(new Event('resume'));\n }\n\n start() {\n this.registerListener();\n this.state = 'recording';\n this.dispatchEvent(new Event('start'));\n }\n\n stop() {\n // dispatch data must come before stopping.\n this.dispatchData();\n\n this.unregisterListener();\n this.state = 'inactive';\n this.dispatchEvent(new Event('stop'));\n }\n\n requestData() {\n this.dispatchData();\n }\n dispatchData() {\n let combinedStr = this._parts.reduce((sum, cur) => sum + cur, '');\n let data = toByteArray(combinedStr);\n this._parts = [];\n this.dispatchEvent(\n new BlobEvent('dataavailable', { data: { byteArray: data } })\n );\n }\n}\n\n/**\n * @eventClass\n * This event is fired whenever the Track is changed in PeerConnection.\n * @param {TRACK_EVENTS} type - The type of event.\n * @param {IRTCTrackEventInitDict} eventInitDict - The event init properties.\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/track_event MDN} for details.\n */\nclass BlobEvent<TEventType extends string> extends Event<TEventType> {\n /** @eventProperty */\n readonly data: { byteArray: Uint8Array };\n\n constructor(\n type: TEventType,\n eventInitDict: { data: { byteArray: Uint8Array } } & Event.EventInit\n ) {\n super(type, eventInitDict);\n this.data = eventInitDict.data;\n }\n}\n\n/**\n * Define the `onxxx` event handlers.\n */\nconst proto = MediaRecorder.prototype;\n\ndefineEventAttribute(proto, 'dataavailable');\ndefineEventAttribute(proto, 'error');\ndefineEventAttribute(proto, 'pause');\ndefineEventAttribute(proto, 'resume');\ndefineEventAttribute(proto, 'start');\ndefineEventAttribute(proto, 'stop');\n"],"mappings":"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","ignoreList":[]}
@@ -78,7 +78,9 @@ const VideoTrack = exports.VideoTrack = /*#__PURE__*/(0, _react.forwardRef)(({
78
78
  let videoView;
79
79
  if (!iosPIP || _reactNative.Platform.OS !== 'ios') {
80
80
  videoView = /*#__PURE__*/React.createElement(_reactNativeWebrtc.RTCView, {
81
- style: styles.videoTrack,
81
+ style: styles.videoTrack
82
+ // @ts-expect-error
83
+ ,
82
84
  streamURL: (mediaStream === null || mediaStream === void 0 ? void 0 : mediaStream.toURL()) ?? '',
83
85
  objectFit: objectFit,
84
86
  zOrder: zOrder,
@@ -89,7 +91,9 @@ const VideoTrack = exports.VideoTrack = /*#__PURE__*/(0, _react.forwardRef)(({
89
91
  });
90
92
  } else {
91
93
  videoView = /*#__PURE__*/React.createElement(_reactNativeWebrtc.RTCPIPView, {
92
- style: styles.videoTrack,
94
+ style: styles.videoTrack
95
+ // @ts-expect-error
96
+ ,
93
97
  streamURL: (mediaStream === null || mediaStream === void 0 ? void 0 : mediaStream.toURL()) ?? '',
94
98
  objectFit: objectFit,
95
99
  zOrder: zOrder,
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","React","_reactNative","_livekitClient","_reactNativeWebrtc","_ViewPortDetector","_interopRequireDefault","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","_defineProperty","_toPropertyKey","value","enumerable","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","VideoTrack","exports","forwardRef","style","trackRef","objectFit","zOrder","mirror","iosPIP","ref","elementInfo","useState","_trackRef$publication","info","VideoTrackElementInfo","id","publication","trackSid","layoutOnChange","useCallback","event","onLayout","iosPIPEnabled","enabled","visibilityOnChange","isVisible","onVisibility","videoTrack","track","shouldObserveVisibility","useMemo","RemoteVideoTrack","isAdaptiveStream","mediaStream","setMediaStream","useEffect","LocalVideoTrack","onRestarted","on","TrackEvent","Restarted","off","observeElementInfo","stopObservingElementInfo","videoView","Platform","OS","createElement","RTCView","styles","streamURL","toURL","RTCPIPView","View","container","onChange","disabled","propKey","StyleSheet","create","flex","width","constructor","_width","_height","observe","_observing","stopObserving","height","nativeEvent","layout","_this$handleResize","handleResize","visible","visibilityChangedAt","Date","now","_this$handleVisibilit","handleVisibilityChanged"],"sources":["VideoTrack.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n type LayoutChangeEvent,\n Platform,\n StyleSheet,\n View,\n type ViewStyle,\n} from 'react-native';\nimport {\n type ElementInfo,\n LocalVideoTrack,\n Track,\n TrackEvent,\n} from 'livekit-client';\nimport {\n RTCView,\n RTCPIPView,\n type RTCIOSPIPOptions,\n} from '@livekit/react-native-webrtc';\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useState,\n type ReactNode,\n} from 'react';\nimport { RemoteVideoTrack } from 'livekit-client';\nimport ViewPortDetector from './ViewPortDetector';\nimport type { TrackReference } from '@livekit/components-react';\n\n/**\n * Props for the VideoTrack component.\n * @public\n */\nexport type VideoTrackProps = {\n /**\n * The track reference to display. This should be a TrackReference object\n * or undefined if no track is available.\n */\n trackRef: TrackReference | undefined;\n /**\n * Custom React Native styles for the video container.\n */\n style?: ViewStyle;\n /**\n * Specifies how the video content should be resized to fit its container.\n * 'cover' (default): The video will fill the entire container, potentially cropping the video.\n * 'contain': The entire video will be visible within the container, potentially leaving empty space.\n */\n objectFit?: 'cover' | 'contain' | undefined;\n /**\n * Indicates whether the video should be mirrored during rendering.\n * This is commonly used for front-facing cameras.\n */\n mirror?: boolean;\n /**\n * Specifies the depth-stacking order of this video view in the stacking space of all video views.\n * A larger zOrder value generally causes the view to cover those with lower values.\n *\n * The support for zOrder is platform-dependent and/or\n * implementation-specific. Thus, specifying a value for zOrder is to be\n * thought of as giving a hint rather than as imposing a requirement. For\n * example, video renderers such as RTCView are commonly implemented using\n * OpenGL and OpenGL views may have different numbers of layers in their\n * stacking space. Android has three: a layer bellow the window (aka\n * default), a layer bellow the window again but above the previous layer\n * (aka media overlay), and above the window. Consequently, it is advisable\n * to limit the number of utilized layers in the stacking space to the\n * minimum sufficient for the desired display. For example, a video call\n * application usually needs a maximum of two zOrder values: 0 for the\n * remote video(s) which appear in the background, and 1 for the local\n * video(s) which appear above the remote video(s).\n */\n zOrder?: number;\n\n /**\n * Picture in picture options for this view. Disabled if not supplied.\n *\n * iOS only. Requires iOS 15.0 or above, and the PIP background mode capability.\n *\n * If `iosPIP.enabled` is true, the methods `startIOSPIP` and `stopIOSPIP`\n * can be used to manually trigger the PIP mode.\n *\n * `iosPIP.startAutomatically` can be used to automatically\n * enter PIP when backgrounding the app.\n *\n * `iosPIP.preferredSize` is used to provide a suggested aspect ratio.\n *\n * @example\n * ```tsx\n * import { startIOSPIP, stopIOSPIP } from '@livekit/react-native-webrtc';\n *\n * // Obtain a ref to the view\n * const videoRef = useRef<Component>(null);\n * const videoView = (\n * <VideoTrack\n * ref={videoRef}\n * iosPIP={{\n * enabled: true,\n * startAutomatically: true,\n * preferredSize: {\n * width: 9,\n * height: 16,\n * },\n * }}\n * ...\n * />\n * );\n *\n * // Start/stop manually\n * startIOSPIP(videoRef);\n * stopIOSPIP(videoRef);\n * ```\n *\n */\n iosPIP?: RTCIOSPIPOptions & {\n preferredSize: {\n width: number;\n height: number;\n };\n fallbackView?: ReactNode;\n };\n};\n\ntype RTCViewInstance = InstanceType<typeof RTCView>;\n\n/**\n * VideoTrack component for displaying video tracks in a React Native application.\n * It supports both local and remote video tracks from LiveKit, and handles adaptive streaming for remote tracks.\n *\n * @param props - See VideoTrackProps for details.\n * @returns A React component that renders the given video track.\n * @public\n */\nexport const VideoTrack = forwardRef<RTCViewInstance, VideoTrackProps>(\n (\n {\n style = {},\n trackRef,\n objectFit = 'cover',\n zOrder,\n mirror,\n iosPIP,\n }: VideoTrackProps,\n ref\n ) => {\n const [elementInfo] = useState(() => {\n let info = new VideoTrackElementInfo();\n info.id = trackRef?.publication?.trackSid;\n return info;\n });\n\n const layoutOnChange = useCallback(\n (event: LayoutChangeEvent) => elementInfo.onLayout(event),\n [elementInfo]\n );\n\n const iosPIPEnabled = iosPIP?.enabled ?? false;\n const visibilityOnChange = useCallback(\n (isVisible: boolean) =>\n elementInfo.onVisibility(isVisible || iosPIPEnabled),\n [elementInfo, iosPIPEnabled]\n );\n\n const videoTrack = trackRef?.publication.track;\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 (\n videoTrack instanceof RemoteVideoTrack &&\n videoTrack.isAdaptiveStream\n ) {\n videoTrack?.observeElementInfo(elementInfo);\n return () => {\n videoTrack?.stopObservingElementInfo(elementInfo);\n };\n } else {\n return () => {};\n }\n }, [videoTrack, elementInfo]);\n\n let videoView;\n if (!iosPIP || Platform.OS !== 'ios') {\n videoView = (\n <RTCView\n style={styles.videoTrack}\n streamURL={mediaStream?.toURL() ?? ''}\n objectFit={objectFit}\n zOrder={zOrder}\n mirror={mirror}\n // @ts-ignore\n ref={ref}\n />\n );\n } else {\n videoView = (\n <RTCPIPView\n style={styles.videoTrack}\n streamURL={mediaStream?.toURL() ?? ''}\n objectFit={objectFit}\n zOrder={zOrder}\n mirror={mirror}\n // TODO: fix this up in react-native-webrtc side.\n // @ts-expect-error\n iosPIP={iosPIP}\n ref={ref}\n />\n );\n }\n return (\n <View style={{ ...style, ...styles.container }} onLayout={layoutOnChange}>\n <ViewPortDetector\n onChange={visibilityOnChange}\n style={styles.videoTrack}\n disabled={!shouldObserveVisibility}\n propKey={videoTrack}\n >\n {videoView}\n </ViewPortDetector>\n </View>\n );\n }\n);\n\nconst styles = StyleSheet.create({\n container: {},\n videoTrack: {\n flex: 1,\n width: '100%',\n },\n});\n\nclass VideoTrackElementInfo 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\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\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":["_react","_interopRequireWildcard","require","React","_reactNative","_livekitClient","_reactNativeWebrtc","_ViewPortDetector","_interopRequireDefault","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","_defineProperty","_toPropertyKey","value","enumerable","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","VideoTrack","exports","forwardRef","style","trackRef","objectFit","zOrder","mirror","iosPIP","ref","elementInfo","useState","_trackRef$publication","info","VideoTrackElementInfo","id","publication","trackSid","layoutOnChange","useCallback","event","onLayout","iosPIPEnabled","enabled","visibilityOnChange","isVisible","onVisibility","videoTrack","track","shouldObserveVisibility","useMemo","RemoteVideoTrack","isAdaptiveStream","mediaStream","setMediaStream","useEffect","LocalVideoTrack","onRestarted","on","TrackEvent","Restarted","off","observeElementInfo","stopObservingElementInfo","videoView","Platform","OS","createElement","RTCView","styles","streamURL","toURL","RTCPIPView","View","container","onChange","disabled","propKey","StyleSheet","create","flex","width","constructor","_width","_height","observe","_observing","stopObserving","height","nativeEvent","layout","_this$handleResize","handleResize","visible","visibilityChangedAt","Date","now","_this$handleVisibilit","handleVisibilityChanged"],"sources":["VideoTrack.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n type LayoutChangeEvent,\n Platform,\n StyleSheet,\n View,\n type ViewStyle,\n} from 'react-native';\nimport {\n type ElementInfo,\n LocalVideoTrack,\n Track,\n TrackEvent,\n} from 'livekit-client';\nimport {\n RTCView,\n RTCPIPView,\n type RTCIOSPIPOptions,\n} from '@livekit/react-native-webrtc';\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useState,\n type ReactNode,\n} from 'react';\nimport { RemoteVideoTrack } from 'livekit-client';\nimport ViewPortDetector from './ViewPortDetector';\nimport type { TrackReference } from '@livekit/components-react';\n\n/**\n * Props for the VideoTrack component.\n * @public\n */\nexport type VideoTrackProps = {\n /**\n * The track reference to display. This should be a TrackReference object\n * or undefined if no track is available.\n */\n trackRef: TrackReference | undefined;\n /**\n * Custom React Native styles for the video container.\n */\n style?: ViewStyle;\n /**\n * Specifies how the video content should be resized to fit its container.\n * 'cover' (default): The video will fill the entire container, potentially cropping the video.\n * 'contain': The entire video will be visible within the container, potentially leaving empty space.\n */\n objectFit?: 'cover' | 'contain' | undefined;\n /**\n * Indicates whether the video should be mirrored during rendering.\n * This is commonly used for front-facing cameras.\n */\n mirror?: boolean;\n /**\n * Specifies the depth-stacking order of this video view in the stacking space of all video views.\n * A larger zOrder value generally causes the view to cover those with lower values.\n *\n * The support for zOrder is platform-dependent and/or\n * implementation-specific. Thus, specifying a value for zOrder is to be\n * thought of as giving a hint rather than as imposing a requirement. For\n * example, video renderers such as RTCView are commonly implemented using\n * OpenGL and OpenGL views may have different numbers of layers in their\n * stacking space. Android has three: a layer bellow the window (aka\n * default), a layer bellow the window again but above the previous layer\n * (aka media overlay), and above the window. Consequently, it is advisable\n * to limit the number of utilized layers in the stacking space to the\n * minimum sufficient for the desired display. For example, a video call\n * application usually needs a maximum of two zOrder values: 0 for the\n * remote video(s) which appear in the background, and 1 for the local\n * video(s) which appear above the remote video(s).\n */\n zOrder?: number;\n\n /**\n * Picture in picture options for this view. Disabled if not supplied.\n *\n * iOS only. Requires iOS 15.0 or above, and the PIP background mode capability.\n *\n * If `iosPIP.enabled` is true, the methods `startIOSPIP` and `stopIOSPIP`\n * can be used to manually trigger the PIP mode.\n *\n * `iosPIP.startAutomatically` can be used to automatically\n * enter PIP when backgrounding the app.\n *\n * `iosPIP.preferredSize` is used to provide a suggested aspect ratio.\n *\n * @example\n * ```tsx\n * import { startIOSPIP, stopIOSPIP } from '@livekit/react-native-webrtc';\n *\n * // Obtain a ref to the view\n * const videoRef = useRef<Component>(null);\n * const videoView = (\n * <VideoTrack\n * ref={videoRef}\n * iosPIP={{\n * enabled: true,\n * startAutomatically: true,\n * preferredSize: {\n * width: 9,\n * height: 16,\n * },\n * }}\n * ...\n * />\n * );\n *\n * // Start/stop manually\n * startIOSPIP(videoRef);\n * stopIOSPIP(videoRef);\n * ```\n *\n */\n iosPIP?: RTCIOSPIPOptions & {\n preferredSize: {\n width: number;\n height: number;\n };\n fallbackView?: ReactNode;\n };\n};\n\ntype RTCViewInstance = InstanceType<typeof RTCView>;\n\n/**\n * VideoTrack component for displaying video tracks in a React Native application.\n * It supports both local and remote video tracks from LiveKit, and handles adaptive streaming for remote tracks.\n *\n * @param props - See VideoTrackProps for details.\n * @returns A React component that renders the given video track.\n * @public\n */\nexport const VideoTrack = forwardRef<RTCViewInstance, VideoTrackProps>(\n (\n {\n style = {},\n trackRef,\n objectFit = 'cover',\n zOrder,\n mirror,\n iosPIP,\n }: VideoTrackProps,\n ref\n ) => {\n const [elementInfo] = useState(() => {\n let info = new VideoTrackElementInfo();\n info.id = trackRef?.publication?.trackSid;\n return info;\n });\n\n const layoutOnChange = useCallback(\n (event: LayoutChangeEvent) => elementInfo.onLayout(event),\n [elementInfo]\n );\n\n const iosPIPEnabled = iosPIP?.enabled ?? false;\n const visibilityOnChange = useCallback(\n (isVisible: boolean) =>\n elementInfo.onVisibility(isVisible || iosPIPEnabled),\n [elementInfo, iosPIPEnabled]\n );\n\n const videoTrack = trackRef?.publication.track;\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 (\n videoTrack instanceof RemoteVideoTrack &&\n videoTrack.isAdaptiveStream\n ) {\n videoTrack?.observeElementInfo(elementInfo);\n return () => {\n videoTrack?.stopObservingElementInfo(elementInfo);\n };\n } else {\n return () => {};\n }\n }, [videoTrack, elementInfo]);\n\n let videoView;\n if (!iosPIP || Platform.OS !== 'ios') {\n videoView = (\n <RTCView\n style={styles.videoTrack}\n // @ts-expect-error\n streamURL={mediaStream?.toURL() ?? ''}\n objectFit={objectFit}\n zOrder={zOrder}\n mirror={mirror}\n // @ts-ignore\n ref={ref}\n />\n );\n } else {\n videoView = (\n <RTCPIPView\n style={styles.videoTrack}\n // @ts-expect-error\n streamURL={mediaStream?.toURL() ?? ''}\n objectFit={objectFit}\n zOrder={zOrder}\n mirror={mirror}\n // TODO: fix this up in react-native-webrtc side.\n // @ts-expect-error\n iosPIP={iosPIP}\n ref={ref}\n />\n );\n }\n return (\n <View style={{ ...style, ...styles.container }} onLayout={layoutOnChange}>\n <ViewPortDetector\n onChange={visibilityOnChange}\n style={styles.videoTrack}\n disabled={!shouldObserveVisibility}\n propKey={videoTrack}\n >\n {videoView}\n </ViewPortDetector>\n </View>\n );\n }\n);\n\nconst styles = StyleSheet.create({\n container: {},\n videoTrack: {\n flex: 1,\n width: '100%',\n },\n});\n\nclass VideoTrackElementInfo 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\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\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":[]}
@@ -78,7 +78,9 @@ const VideoView = ({
78
78
  disabled: !shouldObserveVisibility,
79
79
  propKey: videoTrack
80
80
  }, /*#__PURE__*/React.createElement(_reactNativeWebrtc.RTCView, {
81
- style: styles.videoView,
81
+ style: styles.videoView
82
+ // @ts-expect-error
83
+ ,
82
84
  streamURL: (mediaStream === null || mediaStream === void 0 ? void 0 : mediaStream.toURL()) ?? '',
83
85
  objectFit: objectFit,
84
86
  zOrder: zOrder,
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","React","_reactNative","_livekitClient","_reactNativeWebrtc","_ViewPortDetector","_interopRequireDefault","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","_defineProperty","_toPropertyKey","value","enumerable","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","VideoView","style","videoTrack","objectFit","zOrder","mirror","elementInfo","useState","info","VideoViewElementInfo","id","sid","something","layoutOnChange","useCallback","event","onLayout","visibilityOnChange","isVisible","onVisibility","shouldObserveVisibility","useMemo","RemoteVideoTrack","isAdaptiveStream","mediaStream","setMediaStream","useEffect","LocalVideoTrack","onRestarted","track","on","TrackEvent","Restarted","off","observeElementInfo","stopObservingElementInfo","createElement","View","styles","container","onChange","videoView","disabled","propKey","RTCView","streamURL","toURL","exports","StyleSheet","create","flex","width","constructor","_width","_height","observe","_observing","stopObserving","height","nativeEvent","layout","_this$handleResize","handleResize","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 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":["_react","_interopRequireWildcard","require","React","_reactNative","_livekitClient","_reactNativeWebrtc","_ViewPortDetector","_interopRequireDefault","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","_defineProperty","_toPropertyKey","value","enumerable","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","VideoView","style","videoTrack","objectFit","zOrder","mirror","elementInfo","useState","info","VideoViewElementInfo","id","sid","something","layoutOnChange","useCallback","event","onLayout","visibilityOnChange","isVisible","onVisibility","shouldObserveVisibility","useMemo","RemoteVideoTrack","isAdaptiveStream","mediaStream","setMediaStream","useEffect","LocalVideoTrack","onRestarted","track","on","TrackEvent","Restarted","off","observeElementInfo","stopObservingElementInfo","createElement","View","styles","container","onChange","videoView","disabled","propKey","RTCView","streamURL","toURL","exports","StyleSheet","create","flex","width","constructor","_width","_height","observe","_observing","stopObserving","height","nativeEvent","layout","_this$handleResize","handleResize","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":";;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AAA+B,IAAAC,KAAA,GAAAH,MAAA;AAE/B,IAAAI,YAAA,GAAAF,OAAA;AAMA,IAAAG,cAAA,GAAAH,OAAA;AAOA,IAAAI,kBAAA,GAAAJ,OAAA;AAGA,IAAAK,iBAAA,GAAAC,sBAAA,CAAAN,OAAA;AAAkD,SAAAM,uBAAAC,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAG,yBAAAH,CAAA,6BAAAI,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAD,wBAAA,YAAAA,CAAAH,CAAA,WAAAA,CAAA,GAAAM,CAAA,GAAAD,CAAA,KAAAL,CAAA;AAAA,SAAAR,wBAAAQ,CAAA,EAAAK,CAAA,SAAAA,CAAA,IAAAL,CAAA,IAAAA,CAAA,CAAAC,UAAA,SAAAD,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAE,OAAA,EAAAF,CAAA,QAAAM,CAAA,GAAAH,wBAAA,CAAAE,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAC,GAAA,CAAAP,CAAA,UAAAM,CAAA,CAAAE,GAAA,CAAAR,CAAA,OAAAS,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAf,CAAA,oBAAAe,CAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAjB,CAAA,EAAAe,CAAA,SAAAG,CAAA,GAAAP,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAd,CAAA,EAAAe,CAAA,UAAAG,CAAA,KAAAA,CAAA,CAAAV,GAAA,IAAAU,CAAA,CAAAC,GAAA,IAAAP,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAG,CAAA,IAAAT,CAAA,CAAAM,CAAA,IAAAf,CAAA,CAAAe,CAAA,YAAAN,CAAA,CAAAP,OAAA,GAAAF,CAAA,EAAAM,CAAA,IAAAA,CAAA,CAAAa,GAAA,CAAAnB,CAAA,EAAAS,CAAA,GAAAA,CAAA;AAAA,SAAAW,gBAAApB,CAAA,EAAAK,CAAA,EAAAC,CAAA,YAAAD,CAAA,GAAAgB,cAAA,CAAAhB,CAAA,MAAAL,CAAA,GAAAY,MAAA,CAAAC,cAAA,CAAAb,CAAA,EAAAK,CAAA,IAAAiB,KAAA,EAAAhB,CAAA,EAAAiB,UAAA,MAAAC,YAAA,MAAAC,QAAA,UAAAzB,CAAA,CAAAK,CAAA,IAAAC,CAAA,EAAAN,CAAA;AAAA,SAAAqB,eAAAf,CAAA,QAAAY,CAAA,GAAAQ,YAAA,CAAApB,CAAA,uCAAAY,CAAA,GAAAA,CAAA,GAAAA,CAAA;AAAA,SAAAQ,aAAApB,CAAA,EAAAD,CAAA,2BAAAC,CAAA,KAAAA,CAAA,SAAAA,CAAA,MAAAN,CAAA,GAAAM,CAAA,CAAAqB,MAAA,CAAAC,WAAA,kBAAA5B,CAAA,QAAAkB,CAAA,GAAAlB,CAAA,CAAAiB,IAAA,CAAAX,CAAA,EAAAD,CAAA,uCAAAa,CAAA,SAAAA,CAAA,YAAAW,SAAA,yEAAAxB,CAAA,GAAAyB,MAAA,GAAAC,MAAA,EAAAzB,CAAA;AAElD;AACA;AACA;;AASA;AACA;AACA;AACO,MAAM0B,SAAS,GAAGA,CAAC;EACxBC,KAAK,GAAG,CAAC,CAAC;EACVC,UAAU;EACVC,SAAS,GAAG,OAAO;EACnBC,MAAM;EACNC;AACK,CAAC,KAAK;EACX,MAAM,CAACC,WAAW,CAAC,GAAG,IAAAC,eAAQ,EAAC,MAAM;IACnC,IAAIC,IAAI,GAAG,IAAIC,oBAAoB,CAAC,CAAC;IACrCD,IAAI,CAACE,EAAE,GAAGR,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAES,GAAG;IACzBH,IAAI,CAACI,SAAS,GAAGV,UAAU;IAC3B,OAAOM,IAAI;EACb,CAAC,CAAC;EAEF,MAAMK,cAAc,GAAG,IAAAC,kBAAW,EAC/BC,KAAwB,IAAKT,WAAW,CAACU,QAAQ,CAACD,KAAK,CAAC,EACzD,CAACT,WAAW,CACd,CAAC;EACD,MAAMW,kBAAkB,GAAG,IAAAH,kBAAW,EACnCI,SAAkB,IAAKZ,WAAW,CAACa,YAAY,CAACD,SAAS,CAAC,EAC3D,CAACZ,WAAW,CACd,CAAC;EACD,MAAMc,uBAAuB,GAAG,IAAAC,cAAO,EAAC,MAAM;IAC5C,OACEnB,UAAU,YAAYoB,+BAAgB,IAAIpB,UAAU,CAACqB,gBAAgB;EAEzE,CAAC,EAAE,CAACrB,UAAU,CAAC,CAAC;EAEhB,MAAM,CAACsB,WAAW,EAAEC,cAAc,CAAC,GAAG,IAAAlB,eAAQ,EAACL,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEsB,WAAW,CAAC;EACvE,IAAAE,gBAAS,EAAC,MAAM;IACdD,cAAc,CAACvB,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEsB,WAAW,CAAC;IACvC,IAAItB,UAAU,YAAYyB,8BAAe,EAAE;MACzC,MAAMC,WAAW,GAAIC,KAAmB,IAAK;QAC3CJ,cAAc,CAACI,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEL,WAAW,CAAC;MACpC,CAAC;MACDtB,UAAU,CAAC4B,EAAE,CAACC,yBAAU,CAACC,SAAS,EAAEJ,WAAW,CAAC;MAEhD,OAAO,MAAM;QACX1B,UAAU,CAAC+B,GAAG,CAACF,yBAAU,CAACC,SAAS,EAAEJ,WAAW,CAAC;MACnD,CAAC;IACH,CAAC,MAAM;MACL,OAAO,MAAM,CAAC,CAAC;IACjB;EACF,CAAC,EAAE,CAAC1B,UAAU,CAAC,CAAC;EAEhB,IAAAwB,gBAAS,EAAC,MAAM;IACd,IAAIxB,UAAU,YAAYoB,+BAAgB,IAAIpB,UAAU,CAACqB,gBAAgB,EAAE;MACzErB,UAAU,aAAVA,UAAU,eAAVA,UAAU,CAAEgC,kBAAkB,CAAC5B,WAAW,CAAC;MAC3C,OAAO,MAAM;QACXJ,UAAU,aAAVA,UAAU,eAAVA,UAAU,CAAEiC,wBAAwB,CAAC7B,WAAW,CAAC;MACnD,CAAC;IACH,CAAC,MAAM;MACL,OAAO,MAAM,CAAC,CAAC;IACjB;EACF,CAAC,EAAE,CAACJ,UAAU,EAAEI,WAAW,CAAC,CAAC;EAE7B,oBACE5C,KAAA,CAAA0E,aAAA,CAACzE,YAAA,CAAA0E,IAAI;IAACpC,KAAK,EAAE;MAAE,GAAGA,KAAK;MAAE,GAAGqC,MAAM,CAACC;IAAU,CAAE;IAACvB,QAAQ,EAAEH;EAAe,gBACvEnD,KAAA,CAAA0E,aAAA,CAACtE,iBAAA,CAAAI,OAAgB;IACfsE,QAAQ,EAAEvB,kBAAmB;IAC7BhB,KAAK,EAAEqC,MAAM,CAACG,SAAU;IACxBC,QAAQ,EAAE,CAACtB,uBAAwB;IACnCuB,OAAO,EAAEzC;EAAW,gBAEpBxC,KAAA,CAAA0E,aAAA,CAACvE,kBAAA,CAAA+E,OAAO;IACN3C,KAAK,EAAEqC,MAAM,CAACG;IACd;IAAA;IACAI,SAAS,EAAE,CAAArB,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEsB,KAAK,CAAC,CAAC,KAAI,EAAG;IACtC3C,SAAS,EAAEA,SAAU;IACrBC,MAAM,EAAEA,MAAO;IACfC,MAAM,EAAEA;EAAO,CAChB,CACe,CACd,CAAC;AAEX,CAAC;AAAC0C,OAAA,CAAA/C,SAAA,GAAAA,SAAA;AAEF,MAAMsC,MAAM,GAAGU,uBAAU,CAACC,MAAM,CAAC;EAC/BV,SAAS,EAAE,CAAC,CAAC;EACbE,SAAS,EAAE;IACTS,IAAI,EAAE,CAAC;IACPC,KAAK,EAAE;EACT;AACF,CAAC,CAAC;AAEF,MAAM1C,oBAAoB,CAAwB;EAAA2C,YAAA;IAAAhE,eAAA,kBAC9B,CAAC,CAAC;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA,iBAGX,CAAC;IAAAA,eAAA,kBACA,CAAC;IAAAA,eAAA,qBACE,KAAK;IAAAA,eAAA,kBACC,IAAI;IAAAA,eAAA;IAAAA,eAAA,2BAEJ,KAAK;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA,gBAGhB,MAAM,IAAI,CAACiE,MAAM;IAAAjE,eAAA,iBAChB,MAAM,IAAI,CAACkE,OAAO;EAAA;EAE3BC,OAAOA,CAAA,EAAS;IACd,IAAI,CAACC,UAAU,GAAG,IAAI;EACxB;EACAC,aAAaA,CAAA,EAAS;IACpB,IAAI,CAACD,UAAU,GAAG,KAAK;EACzB;EAEAxC,QAAQA,CAACD,KAAwB,EAAE;IACjC,IAAI;MAAEoC,KAAK;MAAEO;IAAO,CAAC,GAAG3C,KAAK,CAAC4C,WAAW,CAACC,MAAM;IAChD,IAAI,CAACP,MAAM,GAAGF,KAAK;IACnB,IAAI,CAACG,OAAO,GAAGI,MAAM;IAErB,IAAI,IAAI,CAACF,UAAU,EAAE;MAAA,IAAAK,kBAAA;MACnB,CAAAA,kBAAA,OAAI,CAACC,YAAY,cAAAD,kBAAA,eAAjBA,kBAAA,CAAA5E,IAAA,KAAoB,CAAC;IACvB;EACF;EACAkC,YAAYA,CAACD,SAAkB,EAAE;IAC/B,IAAI,IAAI,CAAC6C,OAAO,KAAK7C,SAAS,EAAE;MAC9B,IAAI,CAAC6C,OAAO,GAAG7C,SAAS;MACxB,IAAI,CAAC8C,mBAAmB,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;MACrC,IAAI,IAAI,CAACV,UAAU,EAAE;QAAA,IAAAW,qBAAA;QACnB,CAAAA,qBAAA,OAAI,CAACC,uBAAuB,cAAAD,qBAAA,eAA5BA,qBAAA,CAAAlF,IAAA,KAA+B,CAAC;MAClC;IACF;EACF;AACF","ignoreList":[]}
@@ -15,15 +15,28 @@ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e =
15
15
  * @experimental
16
16
  */
17
17
  class RNE2EEManager extends _events.default {
18
- constructor(keyProvider) {
18
+ constructor(keyProvider, dcEncryptionEnabled = false) {
19
19
  super();
20
20
  _defineProperty(this, "room", void 0);
21
21
  _defineProperty(this, "frameCryptors", new Map());
22
22
  _defineProperty(this, "keyProvider", void 0);
23
23
  _defineProperty(this, "algorithm", _reactNativeWebrtc.RTCFrameCryptorAlgorithm.kAesGcm);
24
24
  _defineProperty(this, "encryptionEnabled", false);
25
+ _defineProperty(this, "dataChannelEncryptionEnabled", false);
26
+ _defineProperty(this, "dataPacketCryptorLock", new _livekitClient.Mutex());
27
+ _defineProperty(this, "dataPacketCryptor", undefined);
25
28
  this.keyProvider = keyProvider;
26
29
  this.encryptionEnabled = false;
30
+ this.dataChannelEncryptionEnabled = dcEncryptionEnabled;
31
+ }
32
+ get isEnabled() {
33
+ return this.encryptionEnabled;
34
+ }
35
+ get isDataChannelEncryptionEnabled() {
36
+ return this.isEnabled && this.dataChannelEncryptionEnabled;
37
+ }
38
+ set isDataChannelEncryptionEnabled(value) {
39
+ this.dataChannelEncryptionEnabled = value;
27
40
  }
28
41
  setup(room) {
29
42
  if (this.room !== room) {
@@ -51,6 +64,11 @@ class RNE2EEManager extends _events.default {
51
64
  await frameCryptor.setEnabled(false);
52
65
  await frameCryptor.dispose();
53
66
  }
67
+ }).on(_livekitClient.RoomEvent.SignalConnected, () => {
68
+ if (!this.room) {
69
+ throw new TypeError(`expected room to be present on signal connect`);
70
+ }
71
+ this.setParticipantCryptorEnabled(this.room.localParticipant.isE2EEEnabled, this.room.localParticipant.identity);
54
72
  });
55
73
  }
56
74
  async setupE2EESender(publication, participant) {
@@ -80,6 +98,60 @@ class RNE2EEManager extends _events.default {
80
98
  setSifTrailer(trailer) {
81
99
  this.keyProvider.setSifTrailer(trailer);
82
100
  }
101
+ async getDataPacketCryptor() {
102
+ let dataPacketCryptor = this.dataPacketCryptor;
103
+ if (dataPacketCryptor) {
104
+ return dataPacketCryptor;
105
+ }
106
+ let unlock = await this.dataPacketCryptorLock.lock();
107
+ try {
108
+ dataPacketCryptor = this.dataPacketCryptor;
109
+ if (dataPacketCryptor) {
110
+ return dataPacketCryptor;
111
+ }
112
+ dataPacketCryptor = await _reactNativeWebrtc.RTCDataPacketCryptorFactory.createDataPacketCryptor(this.algorithm, this.keyProvider.rtcKeyProvider);
113
+ this.dataPacketCryptor = dataPacketCryptor;
114
+ return dataPacketCryptor;
115
+ } finally {
116
+ unlock();
117
+ }
118
+ }
119
+ async encryptData(data) {
120
+ let room = this.room;
121
+ if (!room) {
122
+ throw new Error("e2eemanager isn't setup with room!");
123
+ }
124
+ let participantId = room.localParticipant.identity;
125
+ let dataPacketCryptor = await this.getDataPacketCryptor();
126
+ let encryptedPacket = await dataPacketCryptor.encrypt(participantId, this.keyProvider.getLatestKeyIndex(participantId), data);
127
+ if (!encryptedPacket) {
128
+ throw new Error('encryption for packet failed');
129
+ }
130
+ return {
131
+ uuid: '',
132
+ //not used
133
+ payload: encryptedPacket.payload,
134
+ iv: encryptedPacket.iv,
135
+ keyIndex: encryptedPacket.keyIndex
136
+ };
137
+ }
138
+ async handleEncryptedData(payload, iv, participantIdentity, keyIndex) {
139
+ let packet = {
140
+ payload,
141
+ iv,
142
+ keyIndex
143
+ };
144
+ let dataPacketCryptor = await this.getDataPacketCryptor();
145
+ let decryptedData = await dataPacketCryptor.decrypt(participantIdentity, packet);
146
+ if (!decryptedData) {
147
+ throw new Error('decryption for packet failed');
148
+ }
149
+ return {
150
+ uuid: '',
151
+ //not used
152
+ payload: decryptedData
153
+ };
154
+ }
83
155
 
84
156
  // Utility methods
85
157
  //////////////////////
@@ -1 +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":[]}
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","dcEncryptionEnabled","Map","RTCFrameCryptorAlgorithm","kAesGcm","Mutex","undefined","encryptionEnabled","dataChannelEncryptionEnabled","isEnabled","isDataChannelEncryptionEnabled","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","SignalConnected","setParticipantCryptorEnabled","isE2EEEnabled","identity","isEncrypted","createFrameCryptorForSender","track","sender","set","setKeyIndex","getLatestKeyIndex","createFrameCryptorForReceiver","receiver","setSifTrailer","trailer","getDataPacketCryptor","dataPacketCryptor","unlock","dataPacketCryptorLock","lock","RTCDataPacketCryptorFactory","createDataPacketCryptor","algorithm","rtcKeyProvider","encryptData","data","Error","participantId","encryptedPacket","encrypt","uuid","payload","iv","keyIndex","handleEncryptedData","participantIdentity","packet","decryptedData","decrypt","trackId","get","RTCFrameCryptorFactory","createFrameCryptorForRtpSender","createFrameCryptorForRtpReceiver","setupEngine","_engine","enabled","_this$room","emit","EncryptionEvent","ParticipantEncryptionStatusChanged","_this$room2","getParticipantByIdentity","exports"],"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":[]}
@@ -13,7 +13,7 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
13
13
  */
14
14
  function useRNE2EEManager(options) {
15
15
  let [keyProvider] = (0, _react.useState)(() => new _.RNKeyProvider(options.keyProviderOptions ?? {}));
16
- let [e2eeManager] = (0, _react.useState)(() => new _RNE2EEManager.default(keyProvider));
16
+ let [e2eeManager] = (0, _react.useState)(() => new _RNE2EEManager.default(keyProvider, false));
17
17
  (0, _react.useEffect)(() => {
18
18
  let setup = async () => {
19
19
  try {
@@ -1 +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":[]}
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';\nimport type { BaseE2EEManager } from 'livekit-client';\n\nexport type UseRNE2EEManagerOptions = {\n keyProviderOptions?: RNKeyProviderOptions;\n sharedKey: string | Uint8Array;\n};\n\nexport interface RNE2EEManagerState {\n keyProvider: RNKeyProvider;\n e2eeManager: BaseE2EEManager;\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, false));\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;AAc5C;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,EAAE,KAAK,CAAC,CAAC;EAEzE,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":[]}
@@ -45,7 +45,6 @@ exports.registerGlobals = registerGlobals;
45
45
  require("well-known-symbols/Symbol.asyncIterator/auto");
46
46
  require("well-known-symbols/Symbol.iterator/auto");
47
47
  require("./polyfills/MediaRecorderShim");
48
- require("react-native-quick-base64");
49
48
  var _reactNativeWebrtc = require("@livekit/react-native-webrtc");
50
49
  var _reactNativeUrlPolyfill = require("react-native-url-polyfill");
51
50
  require("./polyfills/EncoderDecoderTogether.min.js");
@@ -1 +1 @@
1
- {"version":3,"names":["require","_reactNativeWebrtc","_reactNativeUrlPolyfill","_AudioSession","_interopRequireWildcard","_reactNative","_RNE2EEManager","_interopRequireDefault","_RNKeyProvider","_EventEmitter","_webStreamsPolyfill","_hooks","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_BarVisualizer","_LiveKitRoom","_VideoTrack","_VideoView","_useParticipant","_useRoom","_logger","_AudioManager","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","has","n","__proto__","a","getOwnPropertyDescriptor","u","i","set","registerGlobals","options","opts","autoConfigureAudioSession","webrtcRegisterGlobals","iosCategoryEnforce","livekitRegisterGlobals","setupURLPolyfill","fixWebrtcAdapter","shimPromiseAllSettled","shimArrayAt","shimCryptoUuid","shimWebstreams","setupNativeEvents","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","_global$crypto","crypto","randomUUID","createRandomUUID","replace","c","Math","random","v","toString","WritableStream","ReadableStream"],"sources":["index.tsx"],"sourcesContent":["import 'well-known-symbols/Symbol.asyncIterator/auto';\nimport 'well-known-symbols/Symbol.iterator/auto';\nimport './polyfills/MediaRecorderShim';\nimport 'react-native-quick-base64';\nimport { 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';\nimport { setupNativeEvents } from './events/EventEmitter';\nimport { ReadableStream, WritableStream } from 'web-streams-polyfill';\n\nexport interface RegisterGlobalsOptions {\n /**\n * Automatically configure audio session before accessing microphone.\n * When enabled, sets the iOS audio category to 'playAndRecord' before getUserMedia.\n *\n * @default true\n * @platform ios\n */\n autoConfigureAudioSession?: boolean;\n}\n\n/**\n * Registers the required globals needed for LiveKit to work.\n *\n * Must be called before using LiveKit.\n *\n * @param options Optional configuration for global registration\n */\nexport function registerGlobals(options?: RegisterGlobalsOptions) {\n const opts = {\n autoConfigureAudioSession: true,\n ...options,\n };\n\n webrtcRegisterGlobals();\n if (opts.autoConfigureAudioSession) {\n iosCategoryEnforce();\n }\n livekitRegisterGlobals();\n setupURLPolyfill();\n fixWebrtcAdapter();\n shimPromiseAllSettled();\n shimArrayAt();\n shimCryptoUuid();\n shimWebstreams();\n setupNativeEvents();\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 shimCryptoUuid() {\n let crypto = global.crypto;\n if (typeof global.crypto?.randomUUID !== 'function') {\n let createRandomUUID = () => {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(\n /[xy]/g,\n function (c) {\n /* eslint-disable no-bitwise */\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n }\n ) as `${string}-${string}-${string}-${string}-${string}`;\n };\n\n if (!crypto) {\n crypto = {} as typeof global.crypto;\n global.crypto = crypto;\n }\n crypto.randomUUID = createRandomUUID;\n }\n}\n\nfunction shimWebstreams() {\n // @ts-expect-error: global.WritableStream isn't typed here.\n if (typeof global.WritableStream === 'undefined') {\n // @ts-expect-error\n global.WritableStream = WritableStream;\n }\n\n // @ts-expect-error: global.ReadableStream isn't typed here.\n if (typeof global.ReadableStream === 'undefined') {\n // @ts-expect-error\n global.ReadableStream = ReadableStream;\n }\n}\n\nexport * from './hooks';\nexport * from './components/BarVisualizer';\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAAA,OAAA;AACAA,OAAA;AACAA,OAAA;AACAA,OAAA;AACA,IAAAC,kBAAA,GAAAD,OAAA;AACA,IAAAE,uBAAA,GAAAF,OAAA;AACAA,OAAA;AACA,IAAAG,aAAA,GAAAC,uBAAA,CAAAJ,OAAA;AAWA,IAAAK,YAAA,GAAAL,OAAA;AAGA,IAAAM,cAAA,GAAAC,sBAAA,CAAAP,OAAA;AACA,IAAAQ,cAAA,GAAAD,sBAAA,CAAAP,OAAA;AACA,IAAAS,aAAA,GAAAT,OAAA;AACA,IAAAU,mBAAA,GAAAV,OAAA;AAmIA,IAAAW,MAAA,GAAAX,OAAA;AAAAY,MAAA,CAAAC,IAAA,CAAAF,MAAA,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,MAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAZ,MAAA,CAAAI,GAAA;IAAA;EAAA;AAAA;AACA,IAAAS,cAAA,GAAAxB,OAAA;AAAAY,MAAA,CAAAC,IAAA,CAAAW,cAAA,EAAAV,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,MAAAS,cAAA,CAAAT,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,cAAA,CAAAT,GAAA;IAAA;EAAA;AAAA;AACA,IAAAU,YAAA,GAAAzB,OAAA;AAAAY,MAAA,CAAAC,IAAA,CAAAY,YAAA,EAAAX,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,MAAAU,YAAA,CAAAV,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAE,YAAA,CAAAV,GAAA;IAAA;EAAA;AAAA;AACA,IAAAW,WAAA,GAAA1B,OAAA;AAAAY,MAAA,CAAAC,IAAA,CAAAa,WAAA,EAAAZ,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,MAAAW,WAAA,CAAAX,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAG,WAAA,CAAAX,GAAA;IAAA;EAAA;AAAA;AACA,IAAAY,UAAA,GAAA3B,OAAA;AAAAY,MAAA,CAAAC,IAAA,CAAAc,UAAA,EAAAb,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,MAAAY,UAAA,CAAAZ,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAI,UAAA,CAAAZ,GAAA;IAAA;EAAA;AAAA;AACA,IAAAa,eAAA,GAAA5B,OAAA;AAAAY,MAAA,CAAAC,IAAA,CAAAe,eAAA,EAAAd,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,MAAAa,eAAA,CAAAb,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAK,eAAA,CAAAb,GAAA;IAAA;EAAA;AAAA;AACA,IAAAc,QAAA,GAAA7B,OAAA;AAAAY,MAAA,CAAAC,IAAA,CAAAgB,QAAA,EAAAf,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,MAAAc,QAAA,CAAAd,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAM,QAAA,CAAAd,GAAA;IAAA;EAAA;AAAA;AACA,IAAAe,OAAA,GAAA9B,OAAA;AAAAY,MAAA,CAAAC,IAAA,CAAAiB,OAAA,EAAAhB,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,MAAAe,OAAA,CAAAf,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAO,OAAA,CAAAf,GAAA;IAAA;EAAA;AAAA;AACA,IAAAgB,aAAA,GAAA/B,OAAA;AAAAY,MAAA,CAAAC,IAAA,CAAAkB,aAAA,EAAAjB,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,MAAAgB,aAAA,CAAAhB,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAQ,aAAA,CAAAhB,GAAA;IAAA;EAAA;AAAA;AAAqC,SAAAR,uBAAAyB,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAG,yBAAAH,CAAA,6BAAAI,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAD,wBAAA,YAAAA,CAAAH,CAAA,WAAAA,CAAA,GAAAM,CAAA,GAAAD,CAAA,KAAAL,CAAA;AAAA,SAAA5B,wBAAA4B,CAAA,EAAAK,CAAA,SAAAA,CAAA,IAAAL,CAAA,IAAAA,CAAA,CAAAC,UAAA,SAAAD,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAE,OAAA,EAAAF,CAAA,QAAAM,CAAA,GAAAH,wBAAA,CAAAE,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAC,GAAA,CAAAP,CAAA,UAAAM,CAAA,CAAAf,GAAA,CAAAS,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAA9B,MAAA,CAAAS,cAAA,IAAAT,MAAA,CAAA+B,wBAAA,WAAAC,CAAA,IAAAZ,CAAA,oBAAAY,CAAA,OAAA3B,cAAA,CAAAC,IAAA,CAAAc,CAAA,EAAAY,CAAA,SAAAC,CAAA,GAAAH,CAAA,GAAA9B,MAAA,CAAA+B,wBAAA,CAAAX,CAAA,EAAAY,CAAA,UAAAC,CAAA,KAAAA,CAAA,CAAAtB,GAAA,IAAAsB,CAAA,CAAAC,GAAA,IAAAlC,MAAA,CAAAS,cAAA,CAAAmB,CAAA,EAAAI,CAAA,EAAAC,CAAA,IAAAL,CAAA,CAAAI,CAAA,IAAAZ,CAAA,CAAAY,CAAA,YAAAJ,CAAA,CAAAN,OAAA,GAAAF,CAAA,EAAAM,CAAA,IAAAA,CAAA,CAAAQ,GAAA,CAAAd,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AA9HrC;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASO,eAAeA,CAACC,OAAgC,EAAE;EAChE,MAAMC,IAAI,GAAG;IACXC,yBAAyB,EAAE,IAAI;IAC/B,GAAGF;EACL,CAAC;EAED,IAAAG,kCAAqB,EAAC,CAAC;EACvB,IAAIF,IAAI,CAACC,yBAAyB,EAAE;IAClCE,kBAAkB,CAAC,CAAC;EACtB;EACAC,sBAAsB,CAAC,CAAC;EACxB,IAAAC,wCAAgB,EAAC,CAAC;EAClBC,gBAAgB,CAAC,CAAC;EAClBC,qBAAqB,CAAC,CAAC;EACvBC,WAAW,CAAC,CAAC;EACbC,cAAc,CAAC,CAAC;EAChBC,cAAc,CAAC,CAAC;EAChB,IAAAC,+BAAiB,EAAC,CAAC;AACrB;;AAEA;AACA;AACA;AACA,SAASR,kBAAkBA,CAAA,EAAG;EAC5B,IAAIS,qBAAQ,CAACC,EAAE,KAAK,KAAK,EAAE;IACzB;IACA,IAAIC,gBAAgB,GAAGC,MAAM,CAACC,SAAS,CAACC,YAAY,CAACC,YAAY;IACjE;IACAH,MAAM,CAACC,SAAS,CAACC,YAAY,CAACC,YAAY,GAAG,MAAOC,WAAgB,IAAK;MACvE,IAAIA,WAAW,CAACC,KAAK,EAAE;QACrB,MAAMC,qBAAY,CAACC,0BAA0B,CAAC;UAC5CC,aAAa,EAAE;QACjB,CAAC,CAAC;MACJ;MAEA,OAAO,MAAMT,gBAAgB,CAACK,WAAW,CAAC;IAC5C,CAAC;EACH;AACF;AAEA,SAASf,sBAAsBA,CAAA,EAAG;EAChC,IAAIoB,QAAgC,GAAG;IACrCC,QAAQ,EAAEb,qBAAQ,CAACC,EAAE;IACrBa,gBAAgB,EAAEC,uBAAU,CAACrD,GAAG,CAAC;EACnC,CAAC;;EAED;EACAyC,MAAM,CAACa,wBAAwB,GAAGJ,QAAQ;AAC5C;AAEA,SAASlB,gBAAgBA,CAAA,EAAG;EAAA,IAAAuB,OAAA;EAC1B;EACA,IAAI,EAAAA,OAAA,GAAAC,MAAM,cAAAD,OAAA,uBAANA,OAAA,CAAQb,SAAS,MAAKe,SAAS,EAAE;IACnC;IACA,MAAM;MAAEf;IAAU,CAAC,GAAGc,MAAM;IAC5B,IAAId,SAAS,CAACgB,SAAS,KAAKD,SAAS,EAAE;MACrCf,SAAS,CAACgB,SAAS,GAAGhB,SAAS,CAACiB,OAAO,IAAI,SAAS;IACtD;EACF;AACF;AAEA,SAAS1B,qBAAqBA,CAAA,EAAG;EAC/B,IAAI2B,UAAU,GAAGnF,OAAO,CAAC,oBAAoB,CAAC;EAC9CmF,UAAU,CAACC,IAAI,CAAC,CAAC;AACnB;AAEA,SAAS3B,WAAWA,CAAA,EAAG;EACrB;EACA,IAAI,CAAC4B,KAAK,CAACrE,SAAS,CAACsE,EAAE,EAAE;IACvB,IAAIA,EAAE,GAAGtF,OAAO,CAAC,oBAAoB,CAAC;IACtCsF,EAAE,CAACF,IAAI,CAAC,CAAC;EACX;AACF;AAEA,SAAS1B,cAAcA,CAAA,EAAG;EAAA,IAAA6B,cAAA;EACxB,IAAIC,MAAM,GAAGxB,MAAM,CAACwB,MAAM;EAC1B,IAAI,SAAAD,cAAA,GAAOvB,MAAM,CAACwB,MAAM,cAAAD,cAAA,uBAAbA,cAAA,CAAeE,UAAU,MAAK,UAAU,EAAE;IACnD,IAAIC,gBAAgB,GAAGA,CAAA,KAAM;MAC3B,OAAO,sCAAsC,CAACC,OAAO,CACnD,OAAO,EACP,UAAUC,CAAC,EAAE;QACX;QACA,MAAMvD,CAAC,GAAIwD,IAAI,CAACC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAI,CAAC;QAClC,MAAMC,CAAC,GAAGH,CAAC,KAAK,GAAG,GAAGvD,CAAC,GAAIA,CAAC,GAAG,GAAG,GAAI,GAAG;QACzC,OAAO0D,CAAC,CAACC,QAAQ,CAAC,EAAE,CAAC;MACvB,CACF,CAAC;IACH,CAAC;IAED,IAAI,CAACR,MAAM,EAAE;MACXA,MAAM,GAAG,CAAC,CAAyB;MACnCxB,MAAM,CAACwB,MAAM,GAAGA,MAAM;IACxB;IACAA,MAAM,CAACC,UAAU,GAAGC,gBAAgB;EACtC;AACF;AAEA,SAAS/B,cAAcA,CAAA,EAAG;EACxB;EACA,IAAI,OAAOK,MAAM,CAACiC,cAAc,KAAK,WAAW,EAAE;IAChD;IACAjC,MAAM,CAACiC,cAAc,GAAGA,kCAAc;EACxC;;EAEA;EACA,IAAI,OAAOjC,MAAM,CAACkC,cAAc,KAAK,WAAW,EAAE;IAChD;IACAlC,MAAM,CAACkC,cAAc,GAAGA,kCAAc;EACxC;AACF;;AAMwC;AACN;AACP","ignoreList":[]}
1
+ {"version":3,"names":["require","_reactNativeWebrtc","_reactNativeUrlPolyfill","_AudioSession","_interopRequireWildcard","_reactNative","_RNE2EEManager","_interopRequireDefault","_RNKeyProvider","_EventEmitter","_webStreamsPolyfill","_hooks","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_BarVisualizer","_LiveKitRoom","_VideoTrack","_VideoView","_useParticipant","_useRoom","_logger","_AudioManager","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","has","n","__proto__","a","getOwnPropertyDescriptor","u","i","set","registerGlobals","options","opts","autoConfigureAudioSession","webrtcRegisterGlobals","iosCategoryEnforce","livekitRegisterGlobals","setupURLPolyfill","fixWebrtcAdapter","shimPromiseAllSettled","shimArrayAt","shimCryptoUuid","shimWebstreams","setupNativeEvents","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","_global$crypto","crypto","randomUUID","createRandomUUID","replace","c","Math","random","v","toString","WritableStream","ReadableStream"],"sources":["index.tsx"],"sourcesContent":["import 'well-known-symbols/Symbol.asyncIterator/auto';\nimport 'well-known-symbols/Symbol.iterator/auto';\nimport './polyfills/MediaRecorderShim';\nimport { 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';\nimport { setupNativeEvents } from './events/EventEmitter';\nimport { ReadableStream, WritableStream } from 'web-streams-polyfill';\n\nexport interface RegisterGlobalsOptions {\n /**\n * Automatically configure audio session before accessing microphone.\n * When enabled, sets the iOS audio category to 'playAndRecord' before getUserMedia.\n * Has no effect on non-iOS platforms.\n *\n * @default true\n */\n autoConfigureAudioSession?: boolean;\n}\n\n/**\n * Registers the required globals needed for LiveKit to work.\n *\n * Must be called before using LiveKit.\n *\n * @param options Optional configuration for global registration\n */\nexport function registerGlobals(options?: RegisterGlobalsOptions) {\n const opts = {\n autoConfigureAudioSession: true,\n ...options,\n };\n\n webrtcRegisterGlobals();\n if (opts.autoConfigureAudioSession) {\n iosCategoryEnforce();\n }\n livekitRegisterGlobals();\n setupURLPolyfill();\n fixWebrtcAdapter();\n shimPromiseAllSettled();\n shimArrayAt();\n shimCryptoUuid();\n shimWebstreams();\n setupNativeEvents();\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 shimCryptoUuid() {\n let crypto = global.crypto;\n if (typeof global.crypto?.randomUUID !== 'function') {\n let createRandomUUID = () => {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(\n /[xy]/g,\n function (c) {\n /* eslint-disable no-bitwise */\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n }\n ) as `${string}-${string}-${string}-${string}-${string}`;\n };\n\n if (!crypto) {\n crypto = {} as typeof global.crypto;\n global.crypto = crypto;\n }\n crypto.randomUUID = createRandomUUID;\n }\n}\n\nfunction shimWebstreams() {\n // @ts-expect-error: global.WritableStream isn't typed here.\n if (typeof global.WritableStream === 'undefined') {\n // @ts-expect-error\n global.WritableStream = WritableStream;\n }\n\n // @ts-expect-error: global.ReadableStream isn't typed here.\n if (typeof global.ReadableStream === 'undefined') {\n // @ts-expect-error\n global.ReadableStream = ReadableStream;\n }\n}\n\nexport * from './hooks';\nexport * from './components/BarVisualizer';\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":[]}
@@ -3,7 +3,7 @@ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol"
3
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
4
  import { addListener } from '../events/EventEmitter';
5
5
  import { EventTarget, Event, defineEventAttribute } from 'event-target-shim/index';
6
- import { toByteArray } from 'react-native-quick-base64';
6
+ import { toByteArray } from 'base64-js';
7
7
  import LiveKitModule from '../LKNativeModule';
8
8
  import { log } from '../logger';
9
9