@livekit/react-native 2.9.1 → 2.9.3
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.
- package/android/build.gradle +1 -1
- package/android/consumer-rules.pro +1 -0
- package/android/src/main/AndroidManifest.xml +0 -1
- package/ios/AudioUtils.swift +38 -3
- package/ios/LiveKitReactNativeModule.swift +76 -79
- package/ios/LivekitReactNativeModule.m +7 -3
- package/lib/commonjs/audio/MediaRecorder.js +2 -2
- package/lib/commonjs/audio/MediaRecorder.js.map +1 -1
- package/lib/commonjs/e2ee/RNE2EEManager.js +73 -1
- package/lib/commonjs/e2ee/RNE2EEManager.js.map +1 -1
- package/lib/commonjs/hooks/useE2EEManager.js +1 -1
- package/lib/commonjs/hooks/useE2EEManager.js.map +1 -1
- package/lib/commonjs/index.js +10 -3
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/audio/MediaRecorder.js +1 -1
- package/lib/module/audio/MediaRecorder.js.map +1 -1
- package/lib/module/e2ee/RNE2EEManager.js +75 -3
- package/lib/module/e2ee/RNE2EEManager.js.map +1 -1
- package/lib/module/hooks/useE2EEManager.js +1 -1
- package/lib/module/hooks/useE2EEManager.js.map +1 -1
- package/lib/module/index.js +10 -4
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/lib/commonjs/e2ee/RNE2EEManager.d.ts +17 -1
- package/lib/typescript/lib/commonjs/index.d.ts +3 -1
- package/lib/typescript/lib/module/e2ee/RNE2EEManager.d.ts +17 -1
- package/lib/typescript/lib/module/index.d.ts +3 -1
- package/lib/typescript/src/e2ee/RNE2EEManager.d.ts +11 -2
- package/lib/typescript/src/hooks/useE2EEManager.d.ts +2 -2
- package/lib/typescript/src/index.d.ts +13 -2
- package/package.json +7 -6
- package/src/audio/MediaRecorder.ts +1 -1
- package/src/e2ee/RNE2EEManager.ts +117 -2
- package/src/hooks/useE2EEManager.ts +3 -2
- package/src/index.tsx +22 -3
|
@@ -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:
|
|
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":[]}
|
package/lib/commonjs/index.js
CHANGED
|
@@ -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");
|
|
@@ -170,10 +169,18 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
|
|
|
170
169
|
* Registers the required globals needed for LiveKit to work.
|
|
171
170
|
*
|
|
172
171
|
* Must be called before using LiveKit.
|
|
172
|
+
*
|
|
173
|
+
* @param options Optional configuration for global registration
|
|
173
174
|
*/
|
|
174
|
-
function registerGlobals() {
|
|
175
|
+
function registerGlobals(options) {
|
|
176
|
+
const opts = {
|
|
177
|
+
autoConfigureAudioSession: true,
|
|
178
|
+
...options
|
|
179
|
+
};
|
|
175
180
|
(0, _reactNativeWebrtc.registerGlobals)();
|
|
176
|
-
|
|
181
|
+
if (opts.autoConfigureAudioSession) {
|
|
182
|
+
iosCategoryEnforce();
|
|
183
|
+
}
|
|
177
184
|
livekitRegisterGlobals();
|
|
178
185
|
(0, _reactNativeUrlPolyfill.setupURLPolyfill)();
|
|
179
186
|
fixWebrtcAdapter();
|
|
@@ -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","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\n/**\n * Registers the required globals needed for LiveKit to work.\n *\n * Must be called before using LiveKit.\n */\nexport function registerGlobals() {\n webrtcRegisterGlobals();\n iosCategoryEnforce();\n livekitRegisterGlobals();\n setupURLPolyfill();\n fixWebrtcAdapter();\n shimPromiseAllSettled();\n shimArrayAt();\n 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":[]}
|
|
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 *\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":"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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 '
|
|
6
|
+
import { toByteArray } from 'base64-js';
|
|
7
7
|
import LiveKitModule from '../LKNativeModule';
|
|
8
8
|
import { log } from '../logger';
|
|
9
9
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["addListener","EventTarget","Event","defineEventAttribute","toByteArray","LiveKitModule","log","MediaRecorder","constructor","stream","_defineProperty","undefined","registerListener","audioTracks","getAudioTracks","length","mediaStreamTrack","peerConnectionId","_peerConnectionId","mediaStreamTrackId","id","_reactTag","createAudioSinkListener","event","state","str","data","_parts","push","unregisterListener","error","deleteAudioSinkListener","pause","dispatchEvent","resume","start","stop","dispatchData","requestData","combinedStr","reduce","sum","cur","BlobEvent","byteArray","type","eventInitDict","proto","prototype"],"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 '
|
|
1
|
+
{"version":3,"names":["addListener","EventTarget","Event","defineEventAttribute","toByteArray","LiveKitModule","log","MediaRecorder","constructor","stream","_defineProperty","undefined","registerListener","audioTracks","getAudioTracks","length","mediaStreamTrack","peerConnectionId","_peerConnectionId","mediaStreamTrackId","id","_reactTag","createAudioSinkListener","event","state","str","data","_parts","push","unregisterListener","error","deleteAudioSinkListener","pause","dispatchEvent","resume","start","stop","dispatchData","requestData","combinedStr","reduce","sum","cur","BlobEvent","byteArray","type","eventInitDict","proto","prototype"],"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":[]}
|
|
@@ -1,22 +1,35 @@
|
|
|
1
1
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
2
2
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
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
|
-
import { RTCFrameCryptorAlgorithm, RTCFrameCryptorFactory } from '@livekit/react-native-webrtc';
|
|
5
|
-
import { ParticipantEvent, RoomEvent, EncryptionEvent } from 'livekit-client';
|
|
4
|
+
import { RTCDataPacketCryptorFactory, RTCFrameCryptorAlgorithm, RTCFrameCryptorFactory } from '@livekit/react-native-webrtc';
|
|
5
|
+
import { ParticipantEvent, RoomEvent, EncryptionEvent, Mutex } from 'livekit-client';
|
|
6
6
|
import EventEmitter from 'events';
|
|
7
7
|
/**
|
|
8
8
|
* @experimental
|
|
9
9
|
*/
|
|
10
10
|
export default class RNE2EEManager extends EventEmitter {
|
|
11
|
-
constructor(keyProvider) {
|
|
11
|
+
constructor(keyProvider, dcEncryptionEnabled = false) {
|
|
12
12
|
super();
|
|
13
13
|
_defineProperty(this, "room", void 0);
|
|
14
14
|
_defineProperty(this, "frameCryptors", new Map());
|
|
15
15
|
_defineProperty(this, "keyProvider", void 0);
|
|
16
16
|
_defineProperty(this, "algorithm", RTCFrameCryptorAlgorithm.kAesGcm);
|
|
17
17
|
_defineProperty(this, "encryptionEnabled", false);
|
|
18
|
+
_defineProperty(this, "dataChannelEncryptionEnabled", false);
|
|
19
|
+
_defineProperty(this, "dataPacketCryptorLock", new Mutex());
|
|
20
|
+
_defineProperty(this, "dataPacketCryptor", undefined);
|
|
18
21
|
this.keyProvider = keyProvider;
|
|
19
22
|
this.encryptionEnabled = false;
|
|
23
|
+
this.dataChannelEncryptionEnabled = dcEncryptionEnabled;
|
|
24
|
+
}
|
|
25
|
+
get isEnabled() {
|
|
26
|
+
return this.encryptionEnabled;
|
|
27
|
+
}
|
|
28
|
+
get isDataChannelEncryptionEnabled() {
|
|
29
|
+
return this.isEnabled && this.dataChannelEncryptionEnabled;
|
|
30
|
+
}
|
|
31
|
+
set isDataChannelEncryptionEnabled(value) {
|
|
32
|
+
this.dataChannelEncryptionEnabled = value;
|
|
20
33
|
}
|
|
21
34
|
setup(room) {
|
|
22
35
|
if (this.room !== room) {
|
|
@@ -44,6 +57,11 @@ export default class RNE2EEManager extends EventEmitter {
|
|
|
44
57
|
await frameCryptor.setEnabled(false);
|
|
45
58
|
await frameCryptor.dispose();
|
|
46
59
|
}
|
|
60
|
+
}).on(RoomEvent.SignalConnected, () => {
|
|
61
|
+
if (!this.room) {
|
|
62
|
+
throw new TypeError(`expected room to be present on signal connect`);
|
|
63
|
+
}
|
|
64
|
+
this.setParticipantCryptorEnabled(this.room.localParticipant.isE2EEEnabled, this.room.localParticipant.identity);
|
|
47
65
|
});
|
|
48
66
|
}
|
|
49
67
|
async setupE2EESender(publication, participant) {
|
|
@@ -73,6 +91,60 @@ export default class RNE2EEManager extends EventEmitter {
|
|
|
73
91
|
setSifTrailer(trailer) {
|
|
74
92
|
this.keyProvider.setSifTrailer(trailer);
|
|
75
93
|
}
|
|
94
|
+
async getDataPacketCryptor() {
|
|
95
|
+
let dataPacketCryptor = this.dataPacketCryptor;
|
|
96
|
+
if (dataPacketCryptor) {
|
|
97
|
+
return dataPacketCryptor;
|
|
98
|
+
}
|
|
99
|
+
let unlock = await this.dataPacketCryptorLock.lock();
|
|
100
|
+
try {
|
|
101
|
+
dataPacketCryptor = this.dataPacketCryptor;
|
|
102
|
+
if (dataPacketCryptor) {
|
|
103
|
+
return dataPacketCryptor;
|
|
104
|
+
}
|
|
105
|
+
dataPacketCryptor = await RTCDataPacketCryptorFactory.createDataPacketCryptor(this.algorithm, this.keyProvider.rtcKeyProvider);
|
|
106
|
+
this.dataPacketCryptor = dataPacketCryptor;
|
|
107
|
+
return dataPacketCryptor;
|
|
108
|
+
} finally {
|
|
109
|
+
unlock();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
async encryptData(data) {
|
|
113
|
+
let room = this.room;
|
|
114
|
+
if (!room) {
|
|
115
|
+
throw new Error("e2eemanager isn't setup with room!");
|
|
116
|
+
}
|
|
117
|
+
let participantId = room.localParticipant.identity;
|
|
118
|
+
let dataPacketCryptor = await this.getDataPacketCryptor();
|
|
119
|
+
let encryptedPacket = await dataPacketCryptor.encrypt(participantId, this.keyProvider.getLatestKeyIndex(participantId), data);
|
|
120
|
+
if (!encryptedPacket) {
|
|
121
|
+
throw new Error('encryption for packet failed');
|
|
122
|
+
}
|
|
123
|
+
return {
|
|
124
|
+
uuid: '',
|
|
125
|
+
//not used
|
|
126
|
+
payload: encryptedPacket.payload,
|
|
127
|
+
iv: encryptedPacket.iv,
|
|
128
|
+
keyIndex: encryptedPacket.keyIndex
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
async handleEncryptedData(payload, iv, participantIdentity, keyIndex) {
|
|
132
|
+
let packet = {
|
|
133
|
+
payload,
|
|
134
|
+
iv,
|
|
135
|
+
keyIndex
|
|
136
|
+
};
|
|
137
|
+
let dataPacketCryptor = await this.getDataPacketCryptor();
|
|
138
|
+
let decryptedData = await dataPacketCryptor.decrypt(participantIdentity, packet);
|
|
139
|
+
if (!decryptedData) {
|
|
140
|
+
throw new Error('decryption for packet failed');
|
|
141
|
+
}
|
|
142
|
+
return {
|
|
143
|
+
uuid: '',
|
|
144
|
+
//not used
|
|
145
|
+
payload: decryptedData
|
|
146
|
+
};
|
|
147
|
+
}
|
|
76
148
|
|
|
77
149
|
// Utility methods
|
|
78
150
|
//////////////////////
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["RTCFrameCryptorAlgorithm","RTCFrameCryptorFactory","ParticipantEvent","RoomEvent","EncryptionEvent","EventEmitter","RNE2EEManager","constructor","keyProvider","_defineProperty","Map","kAesGcm","encryptionEnabled","setup","room","setupEventListeners","localParticipant","on","LocalTrackPublished","publication","setupE2EESender","LocalTrackUnpublished","frameCryptor","findTrackCryptor","trackSid","frameCryptors","delete","setEnabled","dispose","TrackSubscribed","_track","pub","participant","setupE2EEReceiver","TrackUnsubscribed","_participant","isEncrypted","createFrameCryptorForSender","track","sender","identity","set","setKeyIndex","getLatestKeyIndex","createFrameCryptorForReceiver","receiver","setSifTrailer","trailer","trackId","get","participantId","createFrameCryptorForRtpSender","algorithm","rtcKeyProvider","createFrameCryptorForRtpReceiver","setupEngine","_engine","setParticipantCryptorEnabled","enabled","participantIdentity","_this$room","emit","ParticipantEncryptionStatusChanged","_this$room2","getParticipantByIdentity","TypeError"],"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":";;;AAAA,SACEA,wBAAwB,EACxBC,sBAAsB,QAIjB,8BAA8B;AACrC,SAGEC,gBAAgB,EAGhBC,SAAS,EAITC,eAAe,QACV,gBAAgB;AAGvB,OAAOC,YAAY,MAAM,QAAQ;AAGjC;AACA;AACA;AACA,eAAe,MAAMC,aAAa,SACvBD,YAAY,CAEvB;EASEE,WAAWA,CAACC,WAA0B,EAAE;IACtC,KAAK,CAAC,CAAC;IAACC,eAAA;IAAAA,eAAA,wBAR4C,IAAIC,GAAG,CAAC,CAAC;IAAAD,eAAA;IAAAA,eAAA,oBAG7DT,wBAAwB,CAACW,OAAO;IAAAF,eAAA,4BAEG,KAAK;IAIxC,IAAI,CAACD,WAAW,GAAGA,WAAW;IAC9B,IAAI,CAACI,iBAAiB,GAAG,KAAK;EAChC;EAEAC,KAAKA,CAACC,IAAU,EAAE;IAChB,IAAI,IAAI,CAACA,IAAI,KAAKA,IAAI,EAAE;MACtB,IAAI,CAACA,IAAI,GAAGA,IAAI;MAChB,IAAI,CAACC,mBAAmB,CAACD,IAAI,CAAC;IAChC;EACF;EAEQC,mBAAmBA,CAACD,IAAU,EAAE;IACtCA,IAAI,CAACE,gBAAgB,CAClBC,EAAE,CAACf,gBAAgB,CAACgB,mBAAmB,EAAE,MAAOC,WAAW,IAAK;MAC/D,IAAI,CAACC,eAAe,CAACD,WAAW,EAAEL,IAAI,CAACE,gBAAgB,CAAC;IAC1D,CAAC,CAAC,CACDC,EAAE,CAACf,gBAAgB,CAACmB,qBAAqB,EAAE,MAAOF,WAAW,IAAK;MACjE,IAAIG,YAAY,GAAG,IAAI,CAACC,gBAAgB,CAACJ,WAAW,CAACK,QAAQ,CAAC;MAC9D,IAAIF,YAAY,EAAE;QAChB,IAAI,CAACG,aAAa,CAACC,MAAM,CAACP,WAAW,CAACK,QAAQ,CAAC;QAC/C,MAAMF,YAAY,CAACK,UAAU,CAAC,KAAK,CAAC;QACpC,MAAML,YAAY,CAACM,OAAO,CAAC,CAAC;MAC9B;IACF,CAAC,CAAC;IAEJd,IAAI,CACDG,EAAE,CAACd,SAAS,CAAC0B,eAAe,EAAE,CAACC,MAAM,EAAEC,GAAG,EAAEC,WAAW,KAAK;MAC3D,IAAI,CAACC,iBAAiB,CAACF,GAAG,EAAEC,WAAW,CAAC;IAC1C,CAAC,CAAC,CACDf,EAAE,CACDd,SAAS,CAAC+B,iBAAiB,EAC3B,OAAOJ,MAAM,EAAEX,WAAW,EAAEgB,YAAY,KAAK;MAC3C,IAAIb,YAAY,GAAG,IAAI,CAACC,gBAAgB,CAACJ,WAAW,CAACK,QAAQ,CAAC;MAC9D,IAAIF,YAAY,EAAE;QAChB,IAAI,CAACG,aAAa,CAACC,MAAM,CAACP,WAAW,CAACK,QAAQ,CAAC;QAC/C,MAAMF,YAAY,CAACK,UAAU,CAAC,KAAK,CAAC;QACpC,MAAML,YAAY,CAACM,OAAO,CAAC,CAAC;MAC9B;IACF,CACF,CAAC;EACL;EAEA,MAAcR,eAAeA,CAC3BD,WAAkC,EAClCa,WAA6B,EAC7B;IACA,IAAI,CAACb,WAAW,CAACiB,WAAW,EAAE;MAC5B;IACF;IAEA,IAAId,YAAY,GAAG,IAAI,CAACC,gBAAgB,CAACJ,WAAW,CAACK,QAAQ,CAAC;IAE9D,IAAI,CAACF,YAAY,EAAE;MACjBA,YAAY,GAAG,IAAI,CAACe,2BAA2B,CAC7ClB,WAAW,CAACmB,KAAK,CAAEC,MAAM,EACzBP,WAAW,CAACQ,QACd,CAAC;MAED,IAAI,CAACf,aAAa,CAACgB,GAAG,CAACtB,WAAW,CAACK,QAAQ,EAAEF,YAAY,CAAC;MAC1DA,YAAY,CAACK,UAAU,CAAC,IAAI,CAAC;MAC7BL,YAAY,CAACoB,WAAW,CACtB,IAAI,CAAClC,WAAW,CAACmC,iBAAiB,CAACX,WAAW,CAACQ,QAAQ,CACzD,CAAC;IACH;EACF;EAEA,MAAcP,iBAAiBA,CAC7Bd,WAAmC,EACnCa,WAA8B,EAC9B;IACA,IAAI,CAACb,WAAW,CAACiB,WAAW,EAAE;MAC5B;IACF;IAEA,IAAId,YAAY,GAAG,IAAI,CAACC,gBAAgB,CAACJ,WAAW,CAACK,QAAQ,CAAC;IAE9D,IAAI,CAACF,YAAY,EAAE;MACjBA,YAAY,GAAG,IAAI,CAACsB,6BAA6B,CAC/CzB,WAAW,CAACmB,KAAK,CAAEO,QAAQ,EAC3Bb,WAAW,CAACQ,QACd,CAAC;MAED,IAAI,CAACf,aAAa,CAACgB,GAAG,CAACtB,WAAW,CAACK,QAAQ,EAAEF,YAAY,CAAC;MAC1DA,YAAY,CAACK,UAAU,CAAC,IAAI,CAAC;MAC7BL,YAAY,CAACoB,WAAW,CACtB,IAAI,CAAClC,WAAW,CAACmC,iBAAiB,CAACX,WAAW,CAACQ,QAAQ,CACzD,CAAC;IACH;EACF;EAEAM,aAAaA,CAACC,OAAmB,EAAQ;IACvC,IAAI,CAACvC,WAAW,CAACsC,aAAa,CAACC,OAAO,CAAC;EACzC;;EAEA;EACA;;EAEQxB,gBAAgBA,CAACyB,OAAe,EAA+B;IACrE,OAAO,IAAI,CAACvB,aAAa,CAACwB,GAAG,CAACD,OAAO,CAAC;EACxC;EAEQX,2BAA2BA,CACjCE,MAAoB,EACpBW,aAAqB,EACJ;IACjB,OAAOjD,sBAAsB,CAACkD,8BAA8B,CAC1DD,aAAa,EACbX,MAAM,EACN,IAAI,CAACa,SAAS,EACd,IAAI,CAAC5C,WAAW,CAAC6C,cACnB,CAAC;EACH;EAEQT,6BAA6BA,CACnCC,QAAwB,EACxBK,aAAqB,EACJ;IACjB,OAAOjD,sBAAsB,CAACqD,gCAAgC,CAC5DJ,aAAa,EACbL,QAAQ,EACR,IAAI,CAACO,SAAS,EACd,IAAI,CAAC5C,WAAW,CAAC6C,cACnB,CAAC;EACH;EAEAE,WAAWA,CAACC,OAAkB,EAAQ;IACpC;EAAA;EAEFC,4BAA4BA,CAC1BC,OAAgB,EAChBC,mBAA2B,EACrB;IAAA,IAAAC,UAAA;IACN,IACE,IAAI,CAAChD,iBAAiB,KAAK8C,OAAO,IAClCC,mBAAmB,OAAAC,UAAA,GAAK,IAAI,CAAC9C,IAAI,cAAA8C,UAAA,uBAATA,UAAA,CAAW5C,gBAAgB,CAACwB,QAAQ,GAC5D;MACA,IAAI,CAAC5B,iBAAiB,GAAG8C,OAAO;MAChC,IAAI,CAACG,IAAI,CACPzD,eAAe,CAAC0D,kCAAkC,EAClDJ,OAAO,EACP,IAAI,CAAC5C,IAAI,CAAEE,gBACb,CAAC;IACH,CAAC,MAAM;MAAA,IAAA+C,WAAA;MACL,MAAM/B,WAAW,IAAA+B,WAAA,GACf,IAAI,CAACjD,IAAI,cAAAiD,WAAA,uBAATA,WAAA,CAAWC,wBAAwB,CAACL,mBAAmB,CAAC;MAC1D,IAAI,CAAC3B,WAAW,EAAE;QAChB,MAAMiC,SAAS,CACb,yDAAyDN,mBAAmB,EAC9E,CAAC;MACH;MACA,IAAI,CAACE,IAAI,CACPzD,eAAe,CAAC0D,kCAAkC,EAClDJ,OAAO,EACP1B,WACF,CAAC;IACH;EACF;AACF","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["RTCDataPacketCryptorFactory","RTCFrameCryptorAlgorithm","RTCFrameCryptorFactory","ParticipantEvent","RoomEvent","EncryptionEvent","Mutex","EventEmitter","RNE2EEManager","constructor","keyProvider","dcEncryptionEnabled","_defineProperty","Map","kAesGcm","undefined","encryptionEnabled","dataChannelEncryptionEnabled","isEnabled","isDataChannelEncryptionEnabled","value","setup","room","setupEventListeners","localParticipant","on","LocalTrackPublished","publication","setupE2EESender","LocalTrackUnpublished","frameCryptor","findTrackCryptor","trackSid","frameCryptors","delete","setEnabled","dispose","TrackSubscribed","_track","pub","participant","setupE2EEReceiver","TrackUnsubscribed","_participant","SignalConnected","TypeError","setParticipantCryptorEnabled","isE2EEEnabled","identity","isEncrypted","createFrameCryptorForSender","track","sender","set","setKeyIndex","getLatestKeyIndex","createFrameCryptorForReceiver","receiver","setSifTrailer","trailer","getDataPacketCryptor","dataPacketCryptor","unlock","dataPacketCryptorLock","lock","createDataPacketCryptor","algorithm","rtcKeyProvider","encryptData","data","Error","participantId","encryptedPacket","encrypt","uuid","payload","iv","keyIndex","handleEncryptedData","participantIdentity","packet","decryptedData","decrypt","trackId","get","createFrameCryptorForRtpSender","createFrameCryptorForRtpReceiver","setupEngine","_engine","enabled","_this$room","emit","ParticipantEncryptionStatusChanged","_this$room2","getParticipantByIdentity"],"sources":["RNE2EEManager.ts"],"sourcesContent":["import {\n RTCDataPacketCryptor,\n RTCDataPacketCryptorFactory,\n RTCFrameCryptorAlgorithm,\n RTCFrameCryptorFactory,\n RTCRtpReceiver,\n type RTCEncryptedPacket,\n type RTCFrameCryptor,\n type RTCRtpSender,\n} from '@livekit/react-native-webrtc';\nimport {\n LocalParticipant,\n LocalTrackPublication,\n ParticipantEvent,\n RemoteParticipant,\n RemoteTrackPublication,\n RoomEvent,\n type Room,\n type BaseE2EEManager,\n type E2EEManagerCallbacks,\n EncryptionEvent,\n type DecryptDataResponseMessage,\n type EncryptDataResponseMessage,\n Mutex,\n} from 'livekit-client';\nimport type RNKeyProvider from './RNKeyProvider';\nimport type RTCEngine from 'livekit-client/dist/src/room/RTCEngine';\nimport EventEmitter from 'events';\nimport type TypedEventEmitter from 'typed-emitter';\n\n/**\n * @experimental\n */\nexport default class RNE2EEManager\n extends (EventEmitter as new () => TypedEventEmitter<E2EEManagerCallbacks>)\n implements BaseE2EEManager\n{\n private room?: Room;\n private frameCryptors: Map<string, RTCFrameCryptor> = new Map();\n private keyProvider: RNKeyProvider;\n private algorithm: RTCFrameCryptorAlgorithm =\n RTCFrameCryptorAlgorithm.kAesGcm;\n\n private encryptionEnabled: boolean = false;\n private dataChannelEncryptionEnabled: boolean = false;\n\n private dataPacketCryptorLock = new Mutex();\n private dataPacketCryptor: RTCDataPacketCryptor | undefined = undefined;\n constructor(\n keyProvider: RNKeyProvider,\n dcEncryptionEnabled: boolean = false\n ) {\n super();\n this.keyProvider = keyProvider;\n this.encryptionEnabled = false;\n this.dataChannelEncryptionEnabled = dcEncryptionEnabled;\n }\n\n get isEnabled(): boolean {\n return this.encryptionEnabled;\n }\n get isDataChannelEncryptionEnabled(): boolean {\n return this.isEnabled && this.dataChannelEncryptionEnabled;\n }\n set isDataChannelEncryptionEnabled(value: boolean) {\n this.dataChannelEncryptionEnabled = value;\n }\n\n setup(room: Room) {\n if (this.room !== room) {\n this.room = room;\n this.setupEventListeners(room);\n }\n }\n\n private setupEventListeners(room: Room) {\n room.localParticipant\n .on(ParticipantEvent.LocalTrackPublished, async (publication) => {\n this.setupE2EESender(publication, room.localParticipant);\n })\n .on(ParticipantEvent.LocalTrackUnpublished, async (publication) => {\n let frameCryptor = this.findTrackCryptor(publication.trackSid);\n if (frameCryptor) {\n this.frameCryptors.delete(publication.trackSid);\n await frameCryptor.setEnabled(false);\n await frameCryptor.dispose();\n }\n });\n\n room\n .on(RoomEvent.TrackSubscribed, (_track, pub, participant) => {\n this.setupE2EEReceiver(pub, participant);\n })\n .on(\n RoomEvent.TrackUnsubscribed,\n async (_track, publication, _participant) => {\n let frameCryptor = this.findTrackCryptor(publication.trackSid);\n if (frameCryptor) {\n this.frameCryptors.delete(publication.trackSid);\n await frameCryptor.setEnabled(false);\n await frameCryptor.dispose();\n }\n }\n )\n .on(RoomEvent.SignalConnected, () => {\n if (!this.room) {\n throw new TypeError(`expected room to be present on signal connect`);\n }\n this.setParticipantCryptorEnabled(\n this.room.localParticipant.isE2EEEnabled,\n this.room.localParticipant.identity\n );\n });\n }\n\n private async setupE2EESender(\n publication: LocalTrackPublication,\n participant: LocalParticipant\n ) {\n if (!publication.isEncrypted) {\n return;\n }\n\n var frameCryptor = this.findTrackCryptor(publication.trackSid);\n\n if (!frameCryptor) {\n frameCryptor = this.createFrameCryptorForSender(\n publication.track!.sender,\n participant.identity\n );\n\n this.frameCryptors.set(publication.trackSid, frameCryptor);\n frameCryptor.setEnabled(true);\n frameCryptor.setKeyIndex(\n this.keyProvider.getLatestKeyIndex(participant.identity)\n );\n }\n }\n\n private async setupE2EEReceiver(\n publication: RemoteTrackPublication,\n participant: RemoteParticipant\n ) {\n if (!publication.isEncrypted) {\n return;\n }\n\n var frameCryptor = this.findTrackCryptor(publication.trackSid);\n\n if (!frameCryptor) {\n frameCryptor = this.createFrameCryptorForReceiver(\n publication.track!.receiver,\n participant.identity\n );\n\n this.frameCryptors.set(publication.trackSid, frameCryptor);\n frameCryptor.setEnabled(true);\n frameCryptor.setKeyIndex(\n this.keyProvider.getLatestKeyIndex(participant.identity)\n );\n }\n }\n\n setSifTrailer(trailer: Uint8Array): void {\n this.keyProvider.setSifTrailer(trailer);\n }\n\n private async getDataPacketCryptor(): Promise<RTCDataPacketCryptor> {\n let dataPacketCryptor = this.dataPacketCryptor;\n if (dataPacketCryptor) {\n return dataPacketCryptor;\n }\n\n let unlock = await this.dataPacketCryptorLock.lock();\n\n try {\n dataPacketCryptor = this.dataPacketCryptor;\n if (dataPacketCryptor) {\n return dataPacketCryptor;\n }\n\n dataPacketCryptor =\n await RTCDataPacketCryptorFactory.createDataPacketCryptor(\n this.algorithm,\n this.keyProvider.rtcKeyProvider\n );\n\n this.dataPacketCryptor = dataPacketCryptor;\n return dataPacketCryptor;\n } finally {\n unlock();\n }\n }\n async encryptData(\n data: Uint8Array\n ): Promise<EncryptDataResponseMessage['data']> {\n let room = this.room;\n if (!room) {\n throw new Error(\"e2eemanager isn't setup with room!\");\n }\n\n let participantId = room.localParticipant.identity;\n\n let dataPacketCryptor = await this.getDataPacketCryptor();\n\n let encryptedPacket = await dataPacketCryptor.encrypt(\n participantId,\n this.keyProvider.getLatestKeyIndex(participantId),\n data\n );\n\n if (!encryptedPacket) {\n throw new Error('encryption for packet failed');\n }\n return {\n uuid: '', //not used\n payload: encryptedPacket.payload,\n iv: encryptedPacket.iv,\n keyIndex: encryptedPacket.keyIndex,\n };\n }\n\n async handleEncryptedData(\n payload: Uint8Array,\n iv: Uint8Array,\n participantIdentity: string,\n keyIndex: number\n ): Promise<DecryptDataResponseMessage['data']> {\n let packet = {\n payload,\n iv,\n keyIndex,\n } satisfies RTCEncryptedPacket;\n\n let dataPacketCryptor = await this.getDataPacketCryptor();\n let decryptedData = await dataPacketCryptor.decrypt(\n participantIdentity,\n packet\n );\n\n if (!decryptedData) {\n throw new Error('decryption for packet failed');\n }\n\n return {\n uuid: '', //not used\n payload: decryptedData,\n } satisfies DecryptDataResponseMessage['data'];\n }\n\n // Utility methods\n //////////////////////\n\n private findTrackCryptor(trackId: string): RTCFrameCryptor | undefined {\n return this.frameCryptors.get(trackId);\n }\n\n private createFrameCryptorForSender(\n sender: RTCRtpSender,\n participantId: string\n ): RTCFrameCryptor {\n return RTCFrameCryptorFactory.createFrameCryptorForRtpSender(\n participantId,\n sender,\n this.algorithm,\n this.keyProvider.rtcKeyProvider\n );\n }\n\n private createFrameCryptorForReceiver(\n receiver: RTCRtpReceiver,\n participantId: string\n ): RTCFrameCryptor {\n return RTCFrameCryptorFactory.createFrameCryptorForRtpReceiver(\n participantId,\n receiver,\n this.algorithm,\n this.keyProvider.rtcKeyProvider\n );\n }\n\n setupEngine(_engine: RTCEngine): void {\n // No-op\n }\n setParticipantCryptorEnabled(\n enabled: boolean,\n participantIdentity: string\n ): void {\n if (\n this.encryptionEnabled !== enabled &&\n participantIdentity === this.room?.localParticipant.identity\n ) {\n this.encryptionEnabled = enabled;\n this.emit(\n EncryptionEvent.ParticipantEncryptionStatusChanged,\n enabled,\n this.room!.localParticipant\n );\n } else {\n const participant =\n this.room?.getParticipantByIdentity(participantIdentity);\n if (!participant) {\n throw TypeError(\n `couldn't set encryption status, participant not found ${participantIdentity}`\n );\n }\n this.emit(\n EncryptionEvent.ParticipantEncryptionStatusChanged,\n enabled,\n participant\n );\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -6,7 +6,7 @@ import { useEffect, useState } from 'react';
|
|
|
6
6
|
*/
|
|
7
7
|
export function useRNE2EEManager(options) {
|
|
8
8
|
let [keyProvider] = useState(() => new RNKeyProvider(options.keyProviderOptions ?? {}));
|
|
9
|
-
let [e2eeManager] = useState(() => new RNE2EEManager(keyProvider));
|
|
9
|
+
let [e2eeManager] = useState(() => new RNE2EEManager(keyProvider, false));
|
|
10
10
|
useEffect(() => {
|
|
11
11
|
let setup = async () => {
|
|
12
12
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["RNE2EEManager","log","RNKeyProvider","useEffect","useState","useRNE2EEManager","options","keyProvider","keyProviderOptions","e2eeManager","setup","setSharedKey","sharedKey","error","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:
|
|
1
|
+
{"version":3,"names":["RNE2EEManager","log","RNKeyProvider","useEffect","useState","useRNE2EEManager","options","keyProvider","keyProviderOptions","e2eeManager","setup","setSharedKey","sharedKey","error","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,OAAOA,aAAa,MAAM,uBAAuB;AACjD,SAASC,GAAG,EAAEC,aAAa,QAAQ,IAAI;AACvC,SAASC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAc3C;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAC9BC,OAAgC,EACZ;EACpB,IAAI,CAACC,WAAW,CAAC,GAAGH,QAAQ,CAC1B,MAAM,IAAIF,aAAa,CAACI,OAAO,CAACE,kBAAkB,IAAI,CAAC,CAAC,CAC1D,CAAC;EACD,IAAI,CAACC,WAAW,CAAC,GAAGL,QAAQ,CAAC,MAAM,IAAIJ,aAAa,CAACO,WAAW,EAAE,KAAK,CAAC,CAAC;EAEzEJ,SAAS,CAAC,MAAM;IACd,IAAIO,KAAK,GAAG,MAAAA,CAAA,KAAY;MACtB,IAAI;QACF,MAAMH,WAAW,CAACI,YAAY,CAACL,OAAO,CAACM,SAAS,CAAC;MACnD,CAAC,CAAC,OAAOC,KAAK,EAAE;QACdZ,GAAG,CAACa,IAAI,CAAC,0BAA0B,EAAED,KAAK,CAAC;MAC7C;IACF,CAAC;IACDH,KAAK,CAAC,CAAC;IACP,OAAO,MAAM,CAAC,CAAC;EACjB,CAAC,EAAE,CAACH,WAAW,EAAED,OAAO,CAACM,SAAS,CAAC,CAAC;EAEpCT,SAAS,CAAC,MAAM;IACd,OAAO,MAAM;MACXI,WAAW,CAACQ,OAAO,CAAC,CAAC;IACvB,CAAC;EACH,CAAC,EAAE,CAACR,WAAW,CAAC,CAAC;EAEjB,OAAO;IACLA,WAAW;IACXE;EACF,CAAC;AACH","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import 'well-known-symbols/Symbol.asyncIterator/auto';
|
|
2
2
|
import 'well-known-symbols/Symbol.iterator/auto';
|
|
3
3
|
import './polyfills/MediaRecorderShim';
|
|
4
|
-
import 'react-native-quick-base64';
|
|
5
4
|
import { registerGlobals as webrtcRegisterGlobals } from '@livekit/react-native-webrtc';
|
|
6
5
|
import { setupURLPolyfill } from 'react-native-url-polyfill';
|
|
7
6
|
import './polyfills/EncoderDecoderTogether.min.js';
|
|
@@ -11,15 +10,22 @@ import RNE2EEManager from './e2ee/RNE2EEManager';
|
|
|
11
10
|
import RNKeyProvider from './e2ee/RNKeyProvider';
|
|
12
11
|
import { setupNativeEvents } from './events/EventEmitter';
|
|
13
12
|
import { ReadableStream, WritableStream } from 'web-streams-polyfill';
|
|
14
|
-
|
|
15
13
|
/**
|
|
16
14
|
* Registers the required globals needed for LiveKit to work.
|
|
17
15
|
*
|
|
18
16
|
* Must be called before using LiveKit.
|
|
17
|
+
*
|
|
18
|
+
* @param options Optional configuration for global registration
|
|
19
19
|
*/
|
|
20
|
-
export function registerGlobals() {
|
|
20
|
+
export function registerGlobals(options) {
|
|
21
|
+
const opts = {
|
|
22
|
+
autoConfigureAudioSession: true,
|
|
23
|
+
...options
|
|
24
|
+
};
|
|
21
25
|
webrtcRegisterGlobals();
|
|
22
|
-
|
|
26
|
+
if (opts.autoConfigureAudioSession) {
|
|
27
|
+
iosCategoryEnforce();
|
|
28
|
+
}
|
|
23
29
|
livekitRegisterGlobals();
|
|
24
30
|
setupURLPolyfill();
|
|
25
31
|
fixWebrtcAdapter();
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["registerGlobals","webrtcRegisterGlobals","setupURLPolyfill","AudioSession","AndroidAudioTypePresets","getDefaultAppleAudioConfigurationForMode","PixelRatio","Platform","RNE2EEManager","RNKeyProvider","setupNativeEvents","ReadableStream","WritableStream","iosCategoryEnforce","livekitRegisterGlobals","fixWebrtcAdapter","shimPromiseAllSettled","shimArrayAt","shimCryptoUuid","shimWebstreams","OS","getUserMediaFunc","global","navigator","mediaDevices","getUserMedia","constraints","audio","setAppleAudioConfiguration","audioCategory","lkGlobal","platform","devicePixelRatio","get","LiveKitReactNativeGlobal","_window","window","undefined","userAgent","product","allSettled","require","shim","Array","prototype","at","_global$crypto","crypto","randomUUID","createRandomUUID","replace","c","r","Math","random","v","toString"],"sources":["index.tsx"],"sourcesContent":["import 'well-known-symbols/Symbol.asyncIterator/auto';\nimport 'well-known-symbols/Symbol.iterator/auto';\nimport './polyfills/MediaRecorderShim';\nimport
|
|
1
|
+
{"version":3,"names":["registerGlobals","webrtcRegisterGlobals","setupURLPolyfill","AudioSession","AndroidAudioTypePresets","getDefaultAppleAudioConfigurationForMode","PixelRatio","Platform","RNE2EEManager","RNKeyProvider","setupNativeEvents","ReadableStream","WritableStream","options","opts","autoConfigureAudioSession","iosCategoryEnforce","livekitRegisterGlobals","fixWebrtcAdapter","shimPromiseAllSettled","shimArrayAt","shimCryptoUuid","shimWebstreams","OS","getUserMediaFunc","global","navigator","mediaDevices","getUserMedia","constraints","audio","setAppleAudioConfiguration","audioCategory","lkGlobal","platform","devicePixelRatio","get","LiveKitReactNativeGlobal","_window","window","undefined","userAgent","product","allSettled","require","shim","Array","prototype","at","_global$crypto","crypto","randomUUID","createRandomUUID","replace","c","r","Math","random","v","toString"],"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 *\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":"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","ignoreList":[]}
|
|
@@ -6,15 +6,31 @@ declare const RNE2EEManager_base: any;
|
|
|
6
6
|
*/
|
|
7
7
|
declare class RNE2EEManager extends RNE2EEManager_base {
|
|
8
8
|
[x: string]: any;
|
|
9
|
-
constructor(keyProvider: any);
|
|
9
|
+
constructor(keyProvider: any, dcEncryptionEnabled?: boolean);
|
|
10
10
|
keyProvider: any;
|
|
11
11
|
encryptionEnabled: boolean;
|
|
12
|
+
dataChannelEncryptionEnabled: boolean;
|
|
13
|
+
get isEnabled(): boolean;
|
|
14
|
+
set isDataChannelEncryptionEnabled(arg: boolean);
|
|
15
|
+
get isDataChannelEncryptionEnabled(): boolean;
|
|
12
16
|
setup(room: any): void;
|
|
13
17
|
room: any;
|
|
14
18
|
setupEventListeners(room: any): void;
|
|
15
19
|
setupE2EESender(publication: any, participant: any): Promise<void>;
|
|
16
20
|
setupE2EEReceiver(publication: any, participant: any): Promise<void>;
|
|
17
21
|
setSifTrailer(trailer: any): void;
|
|
22
|
+
getDataPacketCryptor(): Promise<any>;
|
|
23
|
+
dataPacketCryptor: any;
|
|
24
|
+
encryptData(data: any): Promise<{
|
|
25
|
+
uuid: string;
|
|
26
|
+
payload: any;
|
|
27
|
+
iv: any;
|
|
28
|
+
keyIndex: any;
|
|
29
|
+
}>;
|
|
30
|
+
handleEncryptedData(payload: any, iv: any, participantIdentity: any, keyIndex: any): Promise<{
|
|
31
|
+
uuid: string;
|
|
32
|
+
payload: any;
|
|
33
|
+
}>;
|
|
18
34
|
findTrackCryptor(trackId: any): any;
|
|
19
35
|
createFrameCryptorForSender(sender: any, participantId: any): any;
|
|
20
36
|
createFrameCryptorForReceiver(receiver: any, participantId: any): any;
|
|
@@ -8,5 +8,7 @@ export const getDefaultAppleAudioConfigurationForMode: any;
|
|
|
8
8
|
* Registers the required globals needed for LiveKit to work.
|
|
9
9
|
*
|
|
10
10
|
* Must be called before using LiveKit.
|
|
11
|
+
*
|
|
12
|
+
* @param options Optional configuration for global registration
|
|
11
13
|
*/
|
|
12
|
-
export function registerGlobals(): void;
|
|
14
|
+
export function registerGlobals(options: any): void;
|
|
@@ -3,15 +3,31 @@
|
|
|
3
3
|
* @experimental
|
|
4
4
|
*/
|
|
5
5
|
export default class RNE2EEManager extends EventEmitter<[never]> {
|
|
6
|
-
constructor(keyProvider: any);
|
|
6
|
+
constructor(keyProvider: any, dcEncryptionEnabled?: boolean);
|
|
7
7
|
keyProvider: any;
|
|
8
8
|
encryptionEnabled: boolean;
|
|
9
|
+
dataChannelEncryptionEnabled: boolean;
|
|
10
|
+
get isEnabled(): boolean;
|
|
11
|
+
set isDataChannelEncryptionEnabled(arg: boolean);
|
|
12
|
+
get isDataChannelEncryptionEnabled(): boolean;
|
|
9
13
|
setup(room: any): void;
|
|
10
14
|
room: any;
|
|
11
15
|
setupEventListeners(room: any): void;
|
|
12
16
|
setupE2EESender(publication: any, participant: any): Promise<void>;
|
|
13
17
|
setupE2EEReceiver(publication: any, participant: any): Promise<void>;
|
|
14
18
|
setSifTrailer(trailer: any): void;
|
|
19
|
+
getDataPacketCryptor(): Promise<any>;
|
|
20
|
+
dataPacketCryptor: any;
|
|
21
|
+
encryptData(data: any): Promise<{
|
|
22
|
+
uuid: string;
|
|
23
|
+
payload: any;
|
|
24
|
+
iv: any;
|
|
25
|
+
keyIndex: any;
|
|
26
|
+
}>;
|
|
27
|
+
handleEncryptedData(payload: any, iv: any, participantIdentity: any, keyIndex: any): Promise<{
|
|
28
|
+
uuid: string;
|
|
29
|
+
payload: any;
|
|
30
|
+
}>;
|
|
15
31
|
findTrackCryptor(trackId: any): any;
|
|
16
32
|
createFrameCryptorForSender(sender: any, participantId: any): import("@livekit/react-native-webrtc").RTCFrameCryptor;
|
|
17
33
|
createFrameCryptorForReceiver(receiver: any, participantId: any): import("@livekit/react-native-webrtc").RTCFrameCryptor;
|
|
@@ -2,8 +2,10 @@
|
|
|
2
2
|
* Registers the required globals needed for LiveKit to work.
|
|
3
3
|
*
|
|
4
4
|
* Must be called before using LiveKit.
|
|
5
|
+
*
|
|
6
|
+
* @param options Optional configuration for global registration
|
|
5
7
|
*/
|
|
6
|
-
export function registerGlobals(): void;
|
|
8
|
+
export function registerGlobals(options: any): void;
|
|
7
9
|
export * from "./hooks";
|
|
8
10
|
export * from "./components/BarVisualizer";
|
|
9
11
|
export * from "./components/LiveKitRoom";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Room, type BaseE2EEManager, type E2EEManagerCallbacks } from 'livekit-client';
|
|
1
|
+
import { type Room, type BaseE2EEManager, type E2EEManagerCallbacks, type DecryptDataResponseMessage, type EncryptDataResponseMessage } from 'livekit-client';
|
|
2
2
|
import type RNKeyProvider from './RNKeyProvider';
|
|
3
3
|
import type RTCEngine from 'livekit-client/dist/src/room/RTCEngine';
|
|
4
4
|
import type TypedEventEmitter from 'typed-emitter';
|
|
@@ -12,12 +12,21 @@ export default class RNE2EEManager extends RNE2EEManager_base implements BaseE2E
|
|
|
12
12
|
private keyProvider;
|
|
13
13
|
private algorithm;
|
|
14
14
|
private encryptionEnabled;
|
|
15
|
-
|
|
15
|
+
private dataChannelEncryptionEnabled;
|
|
16
|
+
private dataPacketCryptorLock;
|
|
17
|
+
private dataPacketCryptor;
|
|
18
|
+
constructor(keyProvider: RNKeyProvider, dcEncryptionEnabled?: boolean);
|
|
19
|
+
get isEnabled(): boolean;
|
|
20
|
+
get isDataChannelEncryptionEnabled(): boolean;
|
|
21
|
+
set isDataChannelEncryptionEnabled(value: boolean);
|
|
16
22
|
setup(room: Room): void;
|
|
17
23
|
private setupEventListeners;
|
|
18
24
|
private setupE2EESender;
|
|
19
25
|
private setupE2EEReceiver;
|
|
20
26
|
setSifTrailer(trailer: Uint8Array): void;
|
|
27
|
+
private getDataPacketCryptor;
|
|
28
|
+
encryptData(data: Uint8Array): Promise<EncryptDataResponseMessage['data']>;
|
|
29
|
+
handleEncryptedData(payload: Uint8Array, iv: Uint8Array, participantIdentity: string, keyIndex: number): Promise<DecryptDataResponseMessage['data']>;
|
|
21
30
|
private findTrackCryptor;
|
|
22
31
|
private createFrameCryptorForSender;
|
|
23
32
|
private createFrameCryptorForReceiver;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import RNE2EEManager from '../e2ee/RNE2EEManager';
|
|
2
1
|
import { RNKeyProvider } from '..';
|
|
3
2
|
import type { RNKeyProviderOptions } from '../e2ee/RNKeyProvider';
|
|
3
|
+
import type { BaseE2EEManager } from 'livekit-client';
|
|
4
4
|
export type UseRNE2EEManagerOptions = {
|
|
5
5
|
keyProviderOptions?: RNKeyProviderOptions;
|
|
6
6
|
sharedKey: string | Uint8Array;
|
|
7
7
|
};
|
|
8
8
|
export interface RNE2EEManagerState {
|
|
9
9
|
keyProvider: RNKeyProvider;
|
|
10
|
-
e2eeManager:
|
|
10
|
+
e2eeManager: BaseE2EEManager;
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
13
|
* @experimental
|