@fishjam-cloud/react-native-client 0.5.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -6
- package/android/build.gradle +6 -2
- package/android/src/main/java/io/fishjam/reactnative/EmitableEvents.kt +17 -16
- package/android/src/main/java/io/fishjam/reactnative/RNFishjamClient.kt +64 -49
- package/android/src/main/java/io/fishjam/reactnative/RNFishjamClientModule.kt +16 -24
- package/build/RNFishjamClientModule.d.ts +44 -11
- package/build/RNFishjamClientModule.d.ts.map +1 -1
- package/build/RNFishjamClientModule.js +18 -4
- package/build/RNFishjamClientModule.js.map +1 -1
- package/build/common/client.d.ts +3 -8
- package/build/common/client.d.ts.map +1 -1
- package/build/common/client.js +2 -6
- package/build/common/client.js.map +1 -1
- package/build/common/metadata.d.ts +2 -1
- package/build/common/metadata.d.ts.map +1 -1
- package/build/common/metadata.js +2 -1
- package/build/common/metadata.js.map +1 -1
- package/build/components/FishjamRoom/index.d.ts +21 -0
- package/build/components/FishjamRoom/index.d.ts.map +1 -1
- package/build/components/FishjamRoom/index.js +16 -1
- package/build/components/FishjamRoom/index.js.map +1 -1
- package/build/components/FishjamRoom/parsePeersToTracks.d.ts.map +1 -1
- package/build/components/FishjamRoom/parsePeersToTracks.js +4 -6
- package/build/components/FishjamRoom/parsePeersToTracks.js.map +1 -1
- package/build/components/VideoPreviewView.d.ts +7 -3
- package/build/components/VideoPreviewView.d.ts.map +1 -1
- package/build/components/VideoPreviewView.js +5 -1
- package/build/components/VideoPreviewView.js.map +1 -1
- package/build/components/VideoRendererView.d.ts +13 -0
- package/build/components/VideoRendererView.d.ts.map +1 -1
- package/build/components/VideoRendererView.js +13 -0
- package/build/components/VideoRendererView.js.map +1 -1
- package/build/debug/stats/useRTCStatistics.d.ts.map +1 -1
- package/build/debug/stats/useRTCStatistics.js +13 -13
- package/build/debug/stats/useRTCStatistics.js.map +1 -1
- package/build/hooks/internal/useFishjamEvent.d.ts +4 -0
- package/build/hooks/internal/useFishjamEvent.d.ts.map +1 -0
- package/build/hooks/internal/useFishjamEvent.js +35 -0
- package/build/hooks/internal/useFishjamEvent.js.map +1 -0
- package/build/hooks/internal/useFishjamEventState.d.ts +3 -0
- package/build/hooks/internal/useFishjamEventState.d.ts.map +1 -0
- package/build/hooks/{useFishjamEventState.js → internal/useFishjamEventState.js} +3 -1
- package/build/hooks/internal/useFishjamEventState.js.map +1 -0
- package/build/hooks/useAppScreenShare.d.ts +9 -0
- package/build/hooks/useAppScreenShare.d.ts.map +1 -1
- package/build/hooks/useAppScreenShare.js +14 -14
- package/build/hooks/useAppScreenShare.js.map +1 -1
- package/build/hooks/useAudioSettings.d.ts +4 -0
- package/build/hooks/useAudioSettings.d.ts.map +1 -1
- package/build/hooks/useAudioSettings.js +8 -11
- package/build/hooks/useAudioSettings.js.map +1 -1
- package/build/hooks/useBandwidthEstimation.d.ts +3 -0
- package/build/hooks/useBandwidthEstimation.d.ts.map +1 -1
- package/build/hooks/useBandwidthEstimation.js +9 -5
- package/build/hooks/useBandwidthEstimation.js.map +1 -1
- package/build/hooks/useCamera.d.ts +11 -33
- package/build/hooks/useCamera.d.ts.map +1 -1
- package/build/hooks/useCamera.js +18 -68
- package/build/hooks/useCamera.js.map +1 -1
- package/build/hooks/useConnection.d.ts +58 -0
- package/build/hooks/useConnection.d.ts.map +1 -0
- package/build/hooks/useConnection.js +39 -0
- package/build/hooks/useConnection.js.map +1 -0
- package/build/hooks/useForegroundService.d.ts +20 -11
- package/build/hooks/useForegroundService.d.ts.map +1 -1
- package/build/hooks/useForegroundService.js +2 -3
- package/build/hooks/useForegroundService.js.map +1 -1
- package/build/hooks/useMicrophone.d.ts.map +1 -1
- package/build/hooks/useMicrophone.js +2 -3
- package/build/hooks/useMicrophone.js.map +1 -1
- package/build/hooks/usePeerStatus.d.ts +3 -12
- package/build/hooks/usePeerStatus.d.ts.map +1 -1
- package/build/hooks/usePeerStatus.js +5 -10
- package/build/hooks/usePeerStatus.js.map +1 -1
- package/build/hooks/usePeers.d.ts +19 -22
- package/build/hooks/usePeers.d.ts.map +1 -1
- package/build/hooks/usePeers.js +21 -20
- package/build/hooks/usePeers.js.map +1 -1
- package/build/hooks/useReconnection.d.ts +3 -3
- package/build/hooks/useReconnection.d.ts.map +1 -1
- package/build/hooks/useReconnection.js +5 -10
- package/build/hooks/useReconnection.js.map +1 -1
- package/build/hooks/useScreenShare.d.ts +2 -23
- package/build/hooks/useScreenShare.d.ts.map +1 -1
- package/build/hooks/useScreenShare.js +6 -45
- package/build/hooks/useScreenShare.js.map +1 -1
- package/build/hooks/useUpdatePeerMetadata.d.ts +15 -0
- package/build/hooks/useUpdatePeerMetadata.d.ts.map +1 -0
- package/build/hooks/useUpdatePeerMetadata.js +21 -0
- package/build/hooks/useUpdatePeerMetadata.js.map +1 -0
- package/build/index.d.ts +21 -16
- package/build/index.d.ts.map +1 -1
- package/build/index.js +15 -6
- package/build/index.js.map +1 -1
- package/build/types.d.ts +0 -19
- package/build/types.d.ts.map +1 -1
- package/build/types.js.map +1 -1
- package/build/utils/errorListener.d.ts.map +1 -1
- package/build/utils/errorListener.js +2 -3
- package/build/utils/errorListener.js.map +1 -1
- package/build/utils/eventPayloadValidator.d.ts +3 -0
- package/build/utils/eventPayloadValidator.d.ts.map +1 -0
- package/build/utils/eventPayloadValidator.js +94 -0
- package/build/utils/eventPayloadValidator.js.map +1 -0
- package/ios/Events.swift +8 -8
- package/ios/RNFishjamClient.podspec +1 -1
- package/ios/RNFishjamClient.swift +45 -48
- package/ios/RNFishjamClientModule.swift +13 -14
- package/ios/Utils.swift +0 -20
- package/package.json +21 -13
- package/plugin/build/withFishjamAndroid.js +18 -20
- package/plugin/build/withFishjamIos.js +116 -110
- package/build/common/webRTC.d.ts +0 -14
- package/build/common/webRTC.d.ts.map +0 -1
- package/build/common/webRTC.js +0 -15
- package/build/common/webRTC.js.map +0 -1
- package/build/hooks/useFishjamEvent.d.ts +0 -18
- package/build/hooks/useFishjamEvent.d.ts.map +0 -1
- package/build/hooks/useFishjamEvent.js +0 -27
- package/build/hooks/useFishjamEvent.js.map +0 -1
- package/build/hooks/useFishjamEventState.d.ts +0 -3
- package/build/hooks/useFishjamEventState.d.ts.map +0 -1
- package/build/hooks/useFishjamEventState.js.map +0 -1
- /package/{LICENSE → LICENSE.txt} +0 -0
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
<img src="../../.github/images/fishjam-card.png" width="100%"
|
|
1
|
+
<img src="../../.github/images/fishjam-card.png" width="100%" />
|
|
2
2
|
|
|
3
|
-
# Fishjam
|
|
3
|
+
# Fishjam React Native client
|
|
4
4
|
|
|
5
5
|
`@fishjam-cloud/react-native-client` is an easiest way to add video streaming to your React Native app.
|
|
6
6
|
|
|
@@ -10,9 +10,9 @@ Check out the [installation](https://docs.fishjam.io/react-native/installation)
|
|
|
10
10
|
|
|
11
11
|
# Documentation
|
|
12
12
|
|
|
13
|
-
Check out our [documentation](https://docs.fishjam.io/) on how Fishjam
|
|
13
|
+
Check out our [documentation](https://docs.fishjam.io/) on how Fishjam work and how to integrate our service with your app.
|
|
14
14
|
|
|
15
|
-
There is also [API documentation](https://fishjam
|
|
15
|
+
There is also [API documentation](https://docs.fishjam.io/category/api) available.
|
|
16
16
|
|
|
17
17
|
# Examples
|
|
18
18
|
|
|
@@ -20,9 +20,9 @@ There is simple example app, that allows you to test our service. To run it loca
|
|
|
20
20
|
|
|
21
21
|
## License
|
|
22
22
|
|
|
23
|
-
Licensed under the [Apache License, Version 2.0](LICENSE)
|
|
23
|
+
Licensed under the [Apache License, Version 2.0](./LICENSE.txt)
|
|
24
24
|
|
|
25
|
-
## Fishjam
|
|
25
|
+
## Fishjam is created by Software Mansion
|
|
26
26
|
|
|
27
27
|
Since 2012 [Software Mansion](https://swmansion.com) is a software agency with experience in building web and mobile apps. We are Core React Native Contributors and experts in dealing with all kinds of React Native issues. We can help you build your next dream product – [Hire us](https://swmansion.com/contact/projects?utm_source=fishjam&utm_medium=mobile-readme).
|
|
28
28
|
|
package/android/build.gradle
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
|
+
import groovy.json.JsonSlurper
|
|
2
|
+
|
|
1
3
|
apply plugin: 'com.android.library'
|
|
2
4
|
apply plugin: 'kotlin-android'
|
|
3
5
|
apply plugin: 'maven-publish'
|
|
4
6
|
|
|
5
|
-
def
|
|
7
|
+
def inputFile = new File("$projectDir/../../../package.json")
|
|
8
|
+
def packageJson = new JsonSlurper().parseText(inputFile.text)
|
|
9
|
+
def packageVersion = packageJson["version"]
|
|
6
10
|
|
|
7
11
|
group = 'io.fishjam.reactnative'
|
|
8
12
|
version = "${packageVersion}"
|
|
@@ -63,6 +67,7 @@ android {
|
|
|
63
67
|
versionCode 1
|
|
64
68
|
versionName "${packageVersion}"
|
|
65
69
|
}
|
|
70
|
+
|
|
66
71
|
lintOptions {
|
|
67
72
|
abortOnError false
|
|
68
73
|
}
|
|
@@ -83,7 +88,6 @@ dependencies {
|
|
|
83
88
|
if (findProject(':fishjam-cloud-android-client')) {
|
|
84
89
|
implementation project(':fishjam-cloud-android-client')
|
|
85
90
|
} else {
|
|
86
|
-
// update version number when releasing
|
|
87
91
|
implementation "com.github.fishjam-cloud:mobile-client-sdk:${packageVersion}"
|
|
88
92
|
}
|
|
89
93
|
implementation 'com.twilio:audioswitch:1.2.0'
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
package io.fishjam.reactnative
|
|
2
2
|
|
|
3
|
+
import com.fishjamcloud.client.ReconnectionStatus
|
|
3
4
|
import com.fishjamcloud.client.models.SimulcastConfig
|
|
4
5
|
import com.twilio.audioswitch.AudioDevice
|
|
5
6
|
import io.fishjam.reactnative.extensions.LocalCamera
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
idle
|
|
8
|
+
enum class PeerStatus(
|
|
9
|
+
val status: String
|
|
10
|
+
) {
|
|
11
|
+
Connecting("connecting"),
|
|
12
|
+
Connected("connected"),
|
|
13
|
+
Idle("idle"),
|
|
14
|
+
Error("error")
|
|
13
15
|
}
|
|
14
16
|
|
|
15
17
|
class EmitableEvent private constructor(
|
|
@@ -23,11 +25,9 @@ class EmitableEvent private constructor(
|
|
|
23
25
|
PeersUpdate,
|
|
24
26
|
AudioDeviceUpdate,
|
|
25
27
|
BandwidthEstimation,
|
|
26
|
-
ReconnectionRetriesLimitReached,
|
|
27
|
-
ReconnectionStarted,
|
|
28
|
-
Reconnected,
|
|
29
28
|
Warning,
|
|
30
29
|
PeerStatusChanged,
|
|
30
|
+
ReconnectionStatusChanged,
|
|
31
31
|
CurrentCameraChanged
|
|
32
32
|
}
|
|
33
33
|
|
|
@@ -38,10 +38,6 @@ class EmitableEvent private constructor(
|
|
|
38
38
|
get() = mapOf(event.name to eventContent)
|
|
39
39
|
|
|
40
40
|
companion object {
|
|
41
|
-
val reconnectionRetriesLimitReached = EmitableEvent(EventName.ReconnectionRetriesLimitReached)
|
|
42
|
-
val reconnectionStarted = EmitableEvent(EventName.ReconnectionStarted)
|
|
43
|
-
val reconnected = EmitableEvent(EventName.Reconnected)
|
|
44
|
-
|
|
45
41
|
fun isMicrophoneOn(enabled: Boolean) = EmitableEvent(EventName.IsMicrophoneOn, enabled)
|
|
46
42
|
|
|
47
43
|
fun isScreenShareOn(enabled: Boolean) = EmitableEvent(EventName.IsScreenShareOn, enabled)
|
|
@@ -50,16 +46,21 @@ class EmitableEvent private constructor(
|
|
|
50
46
|
|
|
51
47
|
fun warning(message: String) = EmitableEvent(EventName.Warning, message)
|
|
52
48
|
|
|
53
|
-
fun peerStatusChanged(peerStatus: PeerStatus) = EmitableEvent(EventName.PeerStatusChanged, peerStatus.
|
|
49
|
+
fun peerStatusChanged(peerStatus: PeerStatus) = EmitableEvent(EventName.PeerStatusChanged, peerStatus.status)
|
|
50
|
+
|
|
51
|
+
fun reconnectionStatusChanged(reconnectionStatus: ReconnectionStatus) =
|
|
52
|
+
EmitableEvent(EventName.ReconnectionStatusChanged, reconnectionStatus.status)
|
|
54
53
|
|
|
55
54
|
fun currentCameraChanged(
|
|
56
55
|
localCamera: LocalCamera?,
|
|
57
|
-
isCameraOn: Boolean
|
|
56
|
+
isCameraOn: Boolean,
|
|
57
|
+
isCameraInitialized: Boolean
|
|
58
58
|
) = EmitableEvent(
|
|
59
59
|
EventName.CurrentCameraChanged,
|
|
60
60
|
mapOf(
|
|
61
61
|
"currentCamera" to localCamera,
|
|
62
|
-
"isCameraOn" to isCameraOn
|
|
62
|
+
"isCameraOn" to isCameraOn,
|
|
63
|
+
"isCameraInitialized" to isCameraInitialized
|
|
63
64
|
)
|
|
64
65
|
)
|
|
65
66
|
|
|
@@ -7,6 +7,7 @@ import android.media.projection.MediaProjectionManager
|
|
|
7
7
|
import androidx.appcompat.app.AppCompatActivity
|
|
8
8
|
import com.fishjamcloud.client.FishjamClient
|
|
9
9
|
import com.fishjamcloud.client.FishjamClientListener
|
|
10
|
+
import com.fishjamcloud.client.ReconnectionStatus
|
|
10
11
|
import com.fishjamcloud.client.media.CaptureDevice
|
|
11
12
|
import com.fishjamcloud.client.media.CaptureDeviceChangedListener
|
|
12
13
|
import com.fishjamcloud.client.media.LocalAudioTrack
|
|
@@ -24,11 +25,13 @@ import com.fishjamcloud.client.models.RTCOutboundStats
|
|
|
24
25
|
import com.fishjamcloud.client.models.ReconnectConfig
|
|
25
26
|
import com.fishjamcloud.client.models.SimulcastConfig
|
|
26
27
|
import com.fishjamcloud.client.models.TrackBandwidthLimit
|
|
28
|
+
import com.fishjamcloud.client.models.TrackEncoding
|
|
27
29
|
import com.fishjamcloud.client.models.VideoParameters
|
|
28
30
|
import com.twilio.audioswitch.AudioDevice
|
|
29
31
|
import expo.modules.kotlin.AppContext
|
|
30
32
|
import expo.modules.kotlin.Promise
|
|
31
33
|
import expo.modules.kotlin.exception.CodedException
|
|
34
|
+
import fishjam.media_events.server.Server
|
|
32
35
|
import io.fishjam.reactnative.extensions.toLocalCamera
|
|
33
36
|
import io.fishjam.reactnative.foregroundService.ForegroundServiceManager
|
|
34
37
|
import io.fishjam.reactnative.managers.LocalCameraTracksChangedListenersManager
|
|
@@ -52,7 +55,17 @@ class RNFishjamClient(
|
|
|
52
55
|
var isScreenShareOn = false
|
|
53
56
|
var isConnected = false
|
|
54
57
|
|
|
55
|
-
|
|
58
|
+
var isCameraInitialized = false
|
|
59
|
+
private set(value) {
|
|
60
|
+
field = value
|
|
61
|
+
emitEvent(
|
|
62
|
+
EmitableEvent.currentCameraChanged(
|
|
63
|
+
getCurrentCaptureDevice(),
|
|
64
|
+
isCameraOn,
|
|
65
|
+
value
|
|
66
|
+
)
|
|
67
|
+
)
|
|
68
|
+
}
|
|
56
69
|
|
|
57
70
|
private var connectPromise: Promise? = null
|
|
58
71
|
private var screenSharePermissionPromise: Promise? = null
|
|
@@ -62,7 +75,6 @@ class RNFishjamClient(
|
|
|
62
75
|
|
|
63
76
|
var screenShareQuality: String? = null
|
|
64
77
|
var screenShareSimulcastConfig: SimulcastConfig = SimulcastConfig()
|
|
65
|
-
var screenShareMaxBandwidth: TrackBandwidthLimit = TrackBandwidthLimit.BandwidthLimit(0)
|
|
66
78
|
|
|
67
79
|
var screenShareMetadata: Map<String, Any> = mutableMapOf()
|
|
68
80
|
|
|
@@ -72,12 +84,18 @@ class RNFishjamClient(
|
|
|
72
84
|
|
|
73
85
|
var appContext: AppContext? = null
|
|
74
86
|
|
|
75
|
-
var peerStatus = PeerStatus.
|
|
87
|
+
var peerStatus = PeerStatus.Idle
|
|
76
88
|
private set(value) {
|
|
77
89
|
field = value
|
|
78
90
|
emitEvent(EmitableEvent.peerStatusChanged(value))
|
|
79
91
|
}
|
|
80
92
|
|
|
93
|
+
var reconnectionStatus = ReconnectionStatus.Idle
|
|
94
|
+
private set(value) {
|
|
95
|
+
field = value
|
|
96
|
+
emitEvent(EmitableEvent.reconnectionStatusChanged(value))
|
|
97
|
+
}
|
|
98
|
+
|
|
81
99
|
private val foregroundServiceManager by lazy {
|
|
82
100
|
ForegroundServiceManager(appContext ?: throw CodedException("appContext not found"))
|
|
83
101
|
}
|
|
@@ -133,27 +151,13 @@ class RNFishjamClient(
|
|
|
133
151
|
|
|
134
152
|
private fun getSimulcastConfigFromOptions(simulcastConfigMap: io.fishjam.reactnative.SimulcastConfig): SimulcastConfig {
|
|
135
153
|
val simulcastEnabled = simulcastConfigMap.enabled
|
|
136
|
-
val activeEncodings =
|
|
154
|
+
val activeEncodings = listOf(TrackEncoding.L, TrackEncoding.M, TrackEncoding.H)
|
|
137
155
|
return SimulcastConfig(
|
|
138
156
|
enabled = simulcastEnabled,
|
|
139
157
|
activeEncodings = activeEncodings
|
|
140
158
|
)
|
|
141
159
|
}
|
|
142
160
|
|
|
143
|
-
private fun getMaxBandwidthFromOptions(
|
|
144
|
-
maxBandwidthMap: Map<String, Int>?,
|
|
145
|
-
maxBandwidthInt: Int
|
|
146
|
-
): TrackBandwidthLimit {
|
|
147
|
-
if (maxBandwidthMap != null) {
|
|
148
|
-
val maxBandwidthSimulcast = mutableMapOf<String, TrackBandwidthLimit.BandwidthLimit>()
|
|
149
|
-
maxBandwidthMap.forEach {
|
|
150
|
-
maxBandwidthSimulcast[it.key] = TrackBandwidthLimit.BandwidthLimit(it.value)
|
|
151
|
-
}
|
|
152
|
-
return TrackBandwidthLimit.SimulcastBandwidthLimit(maxBandwidthSimulcast)
|
|
153
|
-
}
|
|
154
|
-
return TrackBandwidthLimit.BandwidthLimit(maxBandwidthInt)
|
|
155
|
-
}
|
|
156
|
-
|
|
157
161
|
private fun create() {
|
|
158
162
|
audioSwitchManager = AudioSwitchManager(appContext?.reactContext!!)
|
|
159
163
|
fishjamClient =
|
|
@@ -164,8 +168,6 @@ class RNFishjamClient(
|
|
|
164
168
|
}
|
|
165
169
|
|
|
166
170
|
private fun getVideoParametersFromOptions(createOptions: CameraConfig): VideoParameters {
|
|
167
|
-
val videoMaxBandwidth =
|
|
168
|
-
getMaxBandwidthFromOptions(createOptions.maxBandwidthMap, createOptions.maxBandwidthInt)
|
|
169
171
|
var videoParameters =
|
|
170
172
|
when (createOptions.quality) {
|
|
171
173
|
"QVGA169" -> VideoParameters.presetQVGA169
|
|
@@ -184,7 +186,7 @@ class RNFishjamClient(
|
|
|
184
186
|
videoParameters.copy(
|
|
185
187
|
dimensions = if (createOptions.flipDimensions) videoParameters.dimensions.flip() else videoParameters.dimensions,
|
|
186
188
|
simulcastConfig = getSimulcastConfigFromOptions(createOptions.simulcastConfig),
|
|
187
|
-
maxBitrate =
|
|
189
|
+
maxBitrate = videoParameters.maxBitrate
|
|
188
190
|
)
|
|
189
191
|
return videoParameters
|
|
190
192
|
}
|
|
@@ -241,7 +243,7 @@ class RNFishjamClient(
|
|
|
241
243
|
CoroutineScope(Dispatchers.Main).launch {
|
|
242
244
|
connectPromise?.reject(ConnectionError(reason))
|
|
243
245
|
connectPromise = null
|
|
244
|
-
peerStatus = PeerStatus.
|
|
246
|
+
peerStatus = PeerStatus.Error
|
|
245
247
|
}
|
|
246
248
|
}
|
|
247
249
|
|
|
@@ -252,7 +254,7 @@ class RNFishjamClient(
|
|
|
252
254
|
config: ConnectConfig,
|
|
253
255
|
promise: Promise
|
|
254
256
|
) {
|
|
255
|
-
peerStatus = PeerStatus.
|
|
257
|
+
peerStatus = PeerStatus.Connecting
|
|
256
258
|
connectPromise = promise
|
|
257
259
|
localUserMetadata = mapOf("server" to emptyMap(), "peer" to peerMetadata)
|
|
258
260
|
fishjamClient.connect(
|
|
@@ -285,7 +287,6 @@ class RNFishjamClient(
|
|
|
285
287
|
|
|
286
288
|
suspend fun startCamera(config: CameraConfig): Boolean {
|
|
287
289
|
if (isCameraInitialized) {
|
|
288
|
-
emitEvent(EmitableEvent.warning("Camera already started. You may only call startCamera once before leaveRoom is called."))
|
|
289
290
|
return true
|
|
290
291
|
}
|
|
291
292
|
if (!PermissionUtils.requestCameraPermission(appContext)) {
|
|
@@ -317,7 +318,13 @@ class RNFishjamClient(
|
|
|
317
318
|
) {
|
|
318
319
|
cameraTrack.setEnabled(isEnabled)
|
|
319
320
|
isCameraOn = isEnabled
|
|
320
|
-
emitEvent(
|
|
321
|
+
emitEvent(
|
|
322
|
+
EmitableEvent.currentCameraChanged(
|
|
323
|
+
cameraTrack.getCaptureDevice()?.toLocalCamera(),
|
|
324
|
+
isEnabled,
|
|
325
|
+
isCameraInitialized
|
|
326
|
+
)
|
|
327
|
+
)
|
|
321
328
|
localCameraTracksChangedListenersManager.notifyListeners()
|
|
322
329
|
}
|
|
323
330
|
|
|
@@ -347,7 +354,7 @@ class RNFishjamClient(
|
|
|
347
354
|
return
|
|
348
355
|
}
|
|
349
356
|
|
|
350
|
-
val microphoneTrack = fishjamClient.createAudioTrack(
|
|
357
|
+
val microphoneTrack = fishjamClient.createAudioTrack(getMicrophoneTrackMetadata())
|
|
351
358
|
setMicrophoneTrackState(microphoneTrack, true)
|
|
352
359
|
emitEndpoints()
|
|
353
360
|
}
|
|
@@ -368,17 +375,18 @@ class RNFishjamClient(
|
|
|
368
375
|
getLocalAudioTrack()?.let { setMicrophoneTrackState(it, !isMicrophoneOn) }
|
|
369
376
|
}
|
|
370
377
|
|
|
371
|
-
updateLocalAudioTrackMetadata(
|
|
372
|
-
mapOf(
|
|
373
|
-
"active" to isMicrophoneOn,
|
|
374
|
-
"paused" to !isMicrophoneOn, // TODO: FCE-711,
|
|
375
|
-
"type" to "microphone"
|
|
376
|
-
)
|
|
377
|
-
)
|
|
378
|
+
updateLocalAudioTrackMetadata(getMicrophoneTrackMetadata())
|
|
378
379
|
|
|
379
380
|
return isMicrophoneOn
|
|
380
381
|
}
|
|
381
382
|
|
|
383
|
+
private fun getMicrophoneTrackMetadata(): Map<String, Any> =
|
|
384
|
+
mapOf(
|
|
385
|
+
"active" to isMicrophoneOn,
|
|
386
|
+
"paused" to !isMicrophoneOn, // TODO: FCE-711,
|
|
387
|
+
"type" to "microphone"
|
|
388
|
+
)
|
|
389
|
+
|
|
382
390
|
fun handleScreenSharePermission(promise: Promise) {
|
|
383
391
|
screenSharePermissionPromise = promise
|
|
384
392
|
if (!isScreenShareOn) {
|
|
@@ -408,11 +416,6 @@ class RNFishjamClient(
|
|
|
408
416
|
this.screenShareQuality = screenShareOptions.quality
|
|
409
417
|
this.screenShareSimulcastConfig =
|
|
410
418
|
getSimulcastConfigFromOptions(screenShareOptions.simulcastConfig)
|
|
411
|
-
this.screenShareMaxBandwidth =
|
|
412
|
-
getMaxBandwidthFromOptions(
|
|
413
|
-
screenShareOptions.maxBandwidthMap,
|
|
414
|
-
screenShareOptions.maxBandwidthInt
|
|
415
|
-
)
|
|
416
419
|
|
|
417
420
|
if (!isScreenShareOn) {
|
|
418
421
|
ensureConnected()
|
|
@@ -445,7 +448,11 @@ class RNFishjamClient(
|
|
|
445
448
|
"id" to track.id(),
|
|
446
449
|
"type" to "Audio",
|
|
447
450
|
"metadata" to track.metadata,
|
|
448
|
-
"vadStatus" to
|
|
451
|
+
"vadStatus" to
|
|
452
|
+
when (track.vadStatus) {
|
|
453
|
+
Server.MediaEvent.VadNotification.Status.STATUS_SPEECH -> "speech"
|
|
454
|
+
else -> "silence"
|
|
455
|
+
}
|
|
449
456
|
)
|
|
450
457
|
|
|
451
458
|
is LocalVideoTrack ->
|
|
@@ -692,9 +699,10 @@ class RNFishjamClient(
|
|
|
692
699
|
return res
|
|
693
700
|
}
|
|
694
701
|
|
|
695
|
-
fun getStatistics():
|
|
702
|
+
suspend fun getStatistics(): Map<String, Map<String, Any?>> {
|
|
696
703
|
val newMap = mutableMapOf<String, Map<String, Any?>>()
|
|
697
|
-
fishjamClient.getStats()
|
|
704
|
+
val stats = fishjamClient.getStats()
|
|
705
|
+
stats.forEach { entry ->
|
|
698
706
|
newMap[entry.key] =
|
|
699
707
|
if (entry.value is RTCInboundStats) {
|
|
700
708
|
rtcInboundStatsToRNMap(
|
|
@@ -741,7 +749,7 @@ class RNFishjamClient(
|
|
|
741
749
|
return videoParameters.copy(
|
|
742
750
|
dimensions = dimensions,
|
|
743
751
|
simulcastConfig = screenShareSimulcastConfig,
|
|
744
|
-
maxBitrate =
|
|
752
|
+
maxBitrate = videoParameters.maxBitrate
|
|
745
753
|
)
|
|
746
754
|
}
|
|
747
755
|
|
|
@@ -802,7 +810,7 @@ class RNFishjamClient(
|
|
|
802
810
|
connectPromise?.resolve(null)
|
|
803
811
|
connectPromise = null
|
|
804
812
|
emitEndpoints()
|
|
805
|
-
peerStatus = PeerStatus.
|
|
813
|
+
peerStatus = PeerStatus.Connected
|
|
806
814
|
}
|
|
807
815
|
}
|
|
808
816
|
|
|
@@ -857,7 +865,7 @@ class RNFishjamClient(
|
|
|
857
865
|
}
|
|
858
866
|
|
|
859
867
|
override fun onDisconnected() {
|
|
860
|
-
peerStatus = PeerStatus.
|
|
868
|
+
peerStatus = PeerStatus.Idle
|
|
861
869
|
}
|
|
862
870
|
|
|
863
871
|
override fun onSocketClose(
|
|
@@ -867,7 +875,7 @@ class RNFishjamClient(
|
|
|
867
875
|
CoroutineScope(Dispatchers.Main).launch {
|
|
868
876
|
connectPromise?.reject(SocketClosedError(code, reason))
|
|
869
877
|
connectPromise = null
|
|
870
|
-
peerStatus = PeerStatus.
|
|
878
|
+
peerStatus = PeerStatus.Idle
|
|
871
879
|
}
|
|
872
880
|
}
|
|
873
881
|
|
|
@@ -875,22 +883,29 @@ class RNFishjamClient(
|
|
|
875
883
|
CoroutineScope(Dispatchers.Main).launch {
|
|
876
884
|
connectPromise?.reject(SocketError(t.message ?: t.toString()))
|
|
877
885
|
connectPromise = null
|
|
886
|
+
peerStatus = PeerStatus.Error
|
|
878
887
|
}
|
|
879
888
|
}
|
|
880
889
|
|
|
881
890
|
override fun onReconnected() {
|
|
882
|
-
|
|
891
|
+
reconnectionStatus = ReconnectionStatus.Reconnecting
|
|
883
892
|
}
|
|
884
893
|
|
|
885
894
|
override fun onReconnectionStarted() {
|
|
886
|
-
|
|
895
|
+
reconnectionStatus = ReconnectionStatus.Idle
|
|
887
896
|
}
|
|
888
897
|
|
|
889
898
|
override fun onReconnectionRetriesLimitReached() {
|
|
890
|
-
|
|
899
|
+
reconnectionStatus = ReconnectionStatus.Error
|
|
891
900
|
}
|
|
892
901
|
|
|
893
902
|
override fun onCaptureDeviceChanged(captureDevice: CaptureDevice?) {
|
|
894
|
-
emitEvent(
|
|
903
|
+
emitEvent(
|
|
904
|
+
EmitableEvent.currentCameraChanged(
|
|
905
|
+
captureDevice?.toLocalCamera(),
|
|
906
|
+
isCameraOn,
|
|
907
|
+
isCameraInitialized
|
|
908
|
+
)
|
|
909
|
+
)
|
|
895
910
|
}
|
|
896
911
|
}
|
|
@@ -16,9 +16,6 @@ import kotlinx.coroutines.withContext
|
|
|
16
16
|
class SimulcastConfig : Record {
|
|
17
17
|
@Field
|
|
18
18
|
val enabled: Boolean = false
|
|
19
|
-
|
|
20
|
-
@Field
|
|
21
|
-
val activeEncodings: List<String> = emptyList()
|
|
22
19
|
}
|
|
23
20
|
|
|
24
21
|
class CameraConfig : Record {
|
|
@@ -34,13 +31,6 @@ class CameraConfig : Record {
|
|
|
34
31
|
@Field
|
|
35
32
|
val simulcastConfig: SimulcastConfig = SimulcastConfig()
|
|
36
33
|
|
|
37
|
-
// expo-modules on Android don't support Either type
|
|
38
|
-
@Field
|
|
39
|
-
val maxBandwidthMap: Map<String, Int> = emptyMap()
|
|
40
|
-
|
|
41
|
-
@Field
|
|
42
|
-
val maxBandwidthInt: Int = 0
|
|
43
|
-
|
|
44
34
|
@Field
|
|
45
35
|
val cameraEnabled: Boolean = true
|
|
46
36
|
|
|
@@ -57,12 +47,6 @@ class ScreenShareOptions : Record {
|
|
|
57
47
|
|
|
58
48
|
@Field
|
|
59
49
|
val simulcastConfig: SimulcastConfig = SimulcastConfig()
|
|
60
|
-
|
|
61
|
-
@Field
|
|
62
|
-
val maxBandwidthMap: Map<String, Int> = emptyMap()
|
|
63
|
-
|
|
64
|
-
@Field
|
|
65
|
-
val maxBandwidthInt: Int = 0
|
|
66
50
|
}
|
|
67
51
|
|
|
68
52
|
class ReconnectConfig : Record {
|
|
@@ -152,7 +136,19 @@ class RNFishjamClientModule : Module() {
|
|
|
152
136
|
}
|
|
153
137
|
|
|
154
138
|
Property("peerStatus") {
|
|
155
|
-
return@Property rnFishjamClient.peerStatus
|
|
139
|
+
return@Property rnFishjamClient.peerStatus.status
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
Property("reconnectionStatus") {
|
|
143
|
+
return@Property rnFishjamClient.reconnectionStatus.status
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
Property("isCameraInitialized") {
|
|
147
|
+
return@Property rnFishjamClient.isCameraInitialized
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
Function("getPeers") {
|
|
151
|
+
return@Function rnFishjamClient.getPeers()
|
|
156
152
|
}
|
|
157
153
|
|
|
158
154
|
AsyncFunction(
|
|
@@ -215,12 +211,6 @@ class RNFishjamClientModule : Module() {
|
|
|
215
211
|
}
|
|
216
212
|
}
|
|
217
213
|
|
|
218
|
-
AsyncFunction("getPeers") Coroutine { ->
|
|
219
|
-
withContext(Dispatchers.Main) {
|
|
220
|
-
rnFishjamClient.getPeers()
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
|
|
224
214
|
AsyncFunction("updatePeerMetadata") Coroutine { metadata: Map<String, Any> ->
|
|
225
215
|
withContext(Dispatchers.Main) {
|
|
226
216
|
rnFishjamClient.updatePeerMetadata(metadata)
|
|
@@ -299,7 +289,9 @@ class RNFishjamClientModule : Module() {
|
|
|
299
289
|
}
|
|
300
290
|
}
|
|
301
291
|
|
|
302
|
-
AsyncFunction("getStatistics") {
|
|
292
|
+
AsyncFunction("getStatistics") Coroutine { ->
|
|
293
|
+
return@Coroutine rnFishjamClient.getStatistics()
|
|
294
|
+
}
|
|
303
295
|
|
|
304
296
|
AsyncFunction("startForegroundService") Coroutine { config: ForegroundServiceConfig ->
|
|
305
297
|
rnFishjamClient.startForegroundService(config)
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import type { NativeModule } from 'expo-modules-core/types';
|
|
2
|
+
import type { ConnectionConfig } from './common/client';
|
|
3
3
|
import type { RTCStats } from './debug/stats/types';
|
|
4
|
-
import type {
|
|
5
|
-
import type { CameraConfigInternal,
|
|
4
|
+
import type { OnAudioDeviceEvent } from './hooks/useAudioSettings';
|
|
5
|
+
import type { Camera, CameraConfigInternal, CurrentCameraChangedType } from './hooks/useCamera';
|
|
6
|
+
import type { PeerStatus, ReconnectionStatus } from './hooks/useConnection';
|
|
7
|
+
import type { ForegroundServiceConfig } from './hooks/useForegroundService';
|
|
6
8
|
import type { Peer } from './hooks/usePeers';
|
|
7
9
|
import type { ScreenShareOptionsInternal } from './hooks/useScreenShare';
|
|
8
|
-
import type {
|
|
9
|
-
import { PeerStatus } from './hooks/usePeerStatus';
|
|
10
|
-
import { ForegroundServiceConfig } from './hooks/useForegroundService';
|
|
10
|
+
import type { GenericMetadata, SimulcastConfig } from './types';
|
|
11
11
|
type Metadata = {
|
|
12
|
-
[key: string]:
|
|
12
|
+
[key: string]: unknown;
|
|
13
13
|
};
|
|
14
14
|
type RNFishjamClient = {
|
|
15
15
|
isMicrophoneOn: boolean;
|
|
@@ -19,6 +19,9 @@ type RNFishjamClient = {
|
|
|
19
19
|
cameras: ReadonlyArray<Camera>;
|
|
20
20
|
currentCamera: Camera | null;
|
|
21
21
|
peerStatus: PeerStatus;
|
|
22
|
+
reconnectionStatus: ReconnectionStatus;
|
|
23
|
+
isCameraInitialized: boolean;
|
|
24
|
+
getPeers: <PeerMetadataType extends Metadata, ServerMetadata extends Metadata = GenericMetadata>() => Peer<PeerMetadataType, ServerMetadata>[];
|
|
22
25
|
joinRoom: (url: string, peerToken: string, peerMetadata: Metadata, config: ConnectionConfig) => Promise<void>;
|
|
23
26
|
leaveRoom: () => Promise<void>;
|
|
24
27
|
startCamera: (config: CameraConfigInternal) => Promise<boolean>;
|
|
@@ -29,7 +32,6 @@ type RNFishjamClient = {
|
|
|
29
32
|
handleScreenSharePermission: () => Promise<'granted' | 'denied'>;
|
|
30
33
|
toggleScreenShare: (screenShareOptions: Partial<ScreenShareOptionsInternal>) => Promise<void>;
|
|
31
34
|
toggleAppScreenShare: (screenShareOptions: Partial<ScreenShareOptionsInternal>) => Promise<void>;
|
|
32
|
-
getPeers: <PeerMetadataType extends Metadata, ServerMetadata extends Metadata = GenericMetadata>() => Promise<Peer<PeerMetadataType, ServerMetadata>[]>;
|
|
33
35
|
updatePeerMetadata: <MetadataType extends Metadata>(metadata: MetadataType) => Promise<void>;
|
|
34
36
|
updateVideoTrackMetadata: <MetadataType extends Metadata>(metadata: MetadataType) => Promise<void>;
|
|
35
37
|
updateScreenShareTrackMetadata: <MetadataType extends Metadata>(metadata: MetadataType) => Promise<void>;
|
|
@@ -50,7 +52,38 @@ type RNFishjamClient = {
|
|
|
50
52
|
startForegroundService: (config: ForegroundServiceConfig) => Promise<void>;
|
|
51
53
|
stopForegroundService: () => void;
|
|
52
54
|
};
|
|
53
|
-
export declare const
|
|
54
|
-
|
|
55
|
+
export declare const ReceivableEvents: {
|
|
56
|
+
readonly IsMicrophoneOn: "IsMicrophoneOn";
|
|
57
|
+
readonly IsScreenShareOn: "IsScreenShareOn";
|
|
58
|
+
readonly IsAppScreenShareOn: "IsAppScreenShareOn";
|
|
59
|
+
readonly SimulcastConfigUpdate: "SimulcastConfigUpdate";
|
|
60
|
+
readonly PeersUpdate: "PeersUpdate";
|
|
61
|
+
readonly AudioDeviceUpdate: "AudioDeviceUpdate";
|
|
62
|
+
readonly BandwidthEstimation: "BandwidthEstimation";
|
|
63
|
+
readonly ReconnectionRetriesLimitReached: "ReconnectionRetriesLimitReached";
|
|
64
|
+
readonly ReconnectionStarted: "ReconnectionStarted";
|
|
65
|
+
readonly Reconnected: "Reconnected";
|
|
66
|
+
readonly Warning: "Warning";
|
|
67
|
+
readonly PeerStatusChanged: "PeerStatusChanged";
|
|
68
|
+
readonly ReconnectionStatusChanged: "ReconnectionStatusChanged";
|
|
69
|
+
readonly CurrentCameraChanged: "CurrentCameraChanged";
|
|
70
|
+
};
|
|
71
|
+
export type ReceivableEventPayloads = {
|
|
72
|
+
[ReceivableEvents.IsMicrophoneOn]: boolean;
|
|
73
|
+
[ReceivableEvents.IsScreenShareOn]: boolean;
|
|
74
|
+
[ReceivableEvents.IsAppScreenShareOn]: boolean;
|
|
75
|
+
[ReceivableEvents.SimulcastConfigUpdate]: SimulcastConfig;
|
|
76
|
+
[ReceivableEvents.PeersUpdate]: Peer<GenericMetadata, GenericMetadata>[];
|
|
77
|
+
[ReceivableEvents.AudioDeviceUpdate]: OnAudioDeviceEvent;
|
|
78
|
+
[ReceivableEvents.BandwidthEstimation]: number | null;
|
|
79
|
+
[ReceivableEvents.ReconnectionRetriesLimitReached]: void;
|
|
80
|
+
[ReceivableEvents.ReconnectionStarted]: void;
|
|
81
|
+
[ReceivableEvents.Reconnected]: void;
|
|
82
|
+
[ReceivableEvents.Warning]: string;
|
|
83
|
+
[ReceivableEvents.PeerStatusChanged]: PeerStatus;
|
|
84
|
+
[ReceivableEvents.ReconnectionStatusChanged]: ReconnectionStatus;
|
|
85
|
+
[ReceivableEvents.CurrentCameraChanged]: CurrentCameraChangedType;
|
|
86
|
+
};
|
|
87
|
+
declare const _default: RNFishjamClient & NativeModule<Record<keyof typeof ReceivableEvents, (payload: ReceivableEventPayloads) => void>>;
|
|
55
88
|
export default _default;
|
|
56
89
|
//# sourceMappingURL=RNFishjamClientModule.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RNFishjamClientModule.d.ts","sourceRoot":"","sources":["../src/RNFishjamClientModule.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RNFishjamClientModule.d.ts","sourceRoot":"","sources":["../src/RNFishjamClientModule.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
const
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { requireNativeModule } from 'expo-modules-core';
|
|
2
|
+
export const ReceivableEvents = {
|
|
3
|
+
IsMicrophoneOn: 'IsMicrophoneOn',
|
|
4
|
+
IsScreenShareOn: 'IsScreenShareOn',
|
|
5
|
+
IsAppScreenShareOn: 'IsAppScreenShareOn', // only for iOS
|
|
6
|
+
SimulcastConfigUpdate: 'SimulcastConfigUpdate',
|
|
7
|
+
PeersUpdate: 'PeersUpdate',
|
|
8
|
+
AudioDeviceUpdate: 'AudioDeviceUpdate',
|
|
9
|
+
BandwidthEstimation: 'BandwidthEstimation',
|
|
10
|
+
ReconnectionRetriesLimitReached: 'ReconnectionRetriesLimitReached',
|
|
11
|
+
ReconnectionStarted: 'ReconnectionStarted',
|
|
12
|
+
Reconnected: 'Reconnected',
|
|
13
|
+
Warning: 'Warning',
|
|
14
|
+
PeerStatusChanged: 'PeerStatusChanged',
|
|
15
|
+
ReconnectionStatusChanged: 'ReconnectionStatusChanged',
|
|
16
|
+
CurrentCameraChanged: 'CurrentCameraChanged',
|
|
17
|
+
};
|
|
18
|
+
export default requireNativeModule('RNFishjamClient');
|
|
5
19
|
//# sourceMappingURL=RNFishjamClientModule.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RNFishjamClientModule.js","sourceRoot":"","sources":["../src/RNFishjamClientModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"RNFishjamClientModule.js","sourceRoot":"","sources":["../src/RNFishjamClientModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAyFxD,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,cAAc,EAAE,gBAAgB;IAChC,eAAe,EAAE,iBAAiB;IAClC,kBAAkB,EAAE,oBAAoB,EAAE,eAAe;IACzD,qBAAqB,EAAE,uBAAuB;IAC9C,WAAW,EAAE,aAAa;IAC1B,iBAAiB,EAAE,mBAAmB;IACtC,mBAAmB,EAAE,qBAAqB;IAC1C,+BAA+B,EAAE,iCAAiC;IAClE,mBAAmB,EAAE,qBAAqB;IAC1C,WAAW,EAAE,aAAa;IAC1B,OAAO,EAAE,SAAS;IAClB,iBAAiB,EAAE,mBAAmB;IACtC,yBAAyB,EAAE,2BAA2B;IACtD,oBAAoB,EAAE,sBAAsB;CACpC,CAAC;AAmBX,eAAe,mBAAmB,CAAC,iBAAiB,CAMjD,CAAC","sourcesContent":["import { requireNativeModule } from 'expo-modules-core';\n\nimport type { NativeModule } from 'expo-modules-core/types';\nimport type { ConnectionConfig } from './common/client';\nimport type { RTCStats } from './debug/stats/types';\nimport type { OnAudioDeviceEvent } from './hooks/useAudioSettings';\nimport type {\n Camera,\n CameraConfigInternal,\n CurrentCameraChangedType,\n} from './hooks/useCamera';\nimport type { PeerStatus, ReconnectionStatus } from './hooks/useConnection';\nimport type { ForegroundServiceConfig } from './hooks/useForegroundService';\nimport type { Peer } from './hooks/usePeers';\nimport type { ScreenShareOptionsInternal } from './hooks/useScreenShare';\nimport type { GenericMetadata, SimulcastConfig } from './types';\n\ntype Metadata = { [key: string]: unknown };\n\ntype RNFishjamClient = {\n isMicrophoneOn: boolean;\n isCameraOn: boolean;\n isScreenShareOn: boolean;\n isAppScreenShareOn: boolean; // only available on ios\n cameras: ReadonlyArray<Camera>;\n currentCamera: Camera | null;\n peerStatus: PeerStatus;\n reconnectionStatus: ReconnectionStatus;\n isCameraInitialized: boolean;\n\n getPeers: <\n PeerMetadataType extends Metadata,\n ServerMetadata extends Metadata = GenericMetadata,\n >() => Peer<PeerMetadataType, ServerMetadata>[];\n\n joinRoom: (\n url: string,\n peerToken: string,\n peerMetadata: Metadata,\n config: ConnectionConfig,\n ) => Promise<void>;\n leaveRoom: () => Promise<void>;\n startCamera: (config: CameraConfigInternal) => Promise<boolean>;\n toggleMicrophone: () => Promise<boolean>;\n toggleCamera: () => Promise<boolean>;\n flipCamera: () => Promise<void>;\n switchCamera: (cameraId: string) => Promise<void>;\n handleScreenSharePermission: () => Promise<'granted' | 'denied'>;\n toggleScreenShare: (\n screenShareOptions: Partial<ScreenShareOptionsInternal>,\n ) => Promise<void>;\n toggleAppScreenShare: (\n screenShareOptions: Partial<ScreenShareOptionsInternal>,\n ) => Promise<void>;\n updatePeerMetadata: <MetadataType extends Metadata>(\n metadata: MetadataType,\n ) => Promise<void>;\n updateVideoTrackMetadata: <MetadataType extends Metadata>(\n metadata: MetadataType,\n ) => Promise<void>;\n updateScreenShareTrackMetadata: <MetadataType extends Metadata>(\n metadata: MetadataType,\n ) => Promise<void>;\n setOutputAudioDevice: (audioDevice: string) => Promise<void>;\n startAudioSwitcher: () => Promise<void>;\n stopAudioSwitcher: () => Promise<void>;\n selectAudioSessionMode: (sessionMode: string) => Promise<void>;\n showAudioRoutePicker: () => Promise<void>;\n toggleScreenShareTrackEncoding: (\n encoding: string,\n ) => Promise<SimulcastConfig>;\n setScreenShareTrackBandwidth: (bandwidth: number) => Promise<void>;\n setScreenShareTrackEncodingBandwidth: (\n encoding: string,\n bandwidth: number,\n ) => Promise<void>;\n setTargetTrackEncoding: (trackId: string, encoding: string) => Promise<void>;\n toggleVideoTrackEncoding: (encoding: string) => Promise<SimulcastConfig>;\n setVideoTrackEncodingBandwidth: (\n encoding: string,\n bandwidth: number,\n ) => Promise<void>;\n setVideoTrackBandwidth: (bandwidth: number) => Promise<void>;\n changeWebRTCLoggingSeverity: (severity: string) => Promise<void>;\n getStatistics: () => Promise<RTCStats>;\n startForegroundService: (config: ForegroundServiceConfig) => Promise<void>;\n stopForegroundService: () => void;\n};\n\nexport const ReceivableEvents = {\n IsMicrophoneOn: 'IsMicrophoneOn',\n IsScreenShareOn: 'IsScreenShareOn',\n IsAppScreenShareOn: 'IsAppScreenShareOn', // only for iOS\n SimulcastConfigUpdate: 'SimulcastConfigUpdate',\n PeersUpdate: 'PeersUpdate',\n AudioDeviceUpdate: 'AudioDeviceUpdate',\n BandwidthEstimation: 'BandwidthEstimation',\n ReconnectionRetriesLimitReached: 'ReconnectionRetriesLimitReached',\n ReconnectionStarted: 'ReconnectionStarted',\n Reconnected: 'Reconnected',\n Warning: 'Warning',\n PeerStatusChanged: 'PeerStatusChanged',\n ReconnectionStatusChanged: 'ReconnectionStatusChanged',\n CurrentCameraChanged: 'CurrentCameraChanged',\n} as const;\n\nexport type ReceivableEventPayloads = {\n [ReceivableEvents.IsMicrophoneOn]: boolean;\n [ReceivableEvents.IsScreenShareOn]: boolean;\n [ReceivableEvents.IsAppScreenShareOn]: boolean;\n [ReceivableEvents.SimulcastConfigUpdate]: SimulcastConfig;\n [ReceivableEvents.PeersUpdate]: Peer<GenericMetadata, GenericMetadata>[];\n [ReceivableEvents.AudioDeviceUpdate]: OnAudioDeviceEvent;\n [ReceivableEvents.BandwidthEstimation]: number | null;\n [ReceivableEvents.ReconnectionRetriesLimitReached]: void;\n [ReceivableEvents.ReconnectionStarted]: void;\n [ReceivableEvents.Reconnected]: void;\n [ReceivableEvents.Warning]: string;\n [ReceivableEvents.PeerStatusChanged]: PeerStatus;\n [ReceivableEvents.ReconnectionStatusChanged]: ReconnectionStatus;\n [ReceivableEvents.CurrentCameraChanged]: CurrentCameraChangedType;\n};\n\nexport default requireNativeModule('RNFishjamClient') as RNFishjamClient &\n NativeModule<\n Record<\n keyof typeof ReceivableEvents,\n (payload: ReceivableEventPayloads) => void\n >\n >;\n"]}
|