@100mslive/react-native-hms 0.8.0 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/README.md +37 -39
  2. package/android/.gradle/checksums/checksums.lock +0 -0
  3. package/android/.gradle/checksums/md5-checksums.bin +0 -0
  4. package/android/.gradle/checksums/sha1-checksums.bin +0 -0
  5. package/android/build.gradle +1 -1
  6. package/android/src/main/java/com/reactnativehmssdk/HmsDecoder.kt +91 -17
  7. package/android/src/main/java/com/reactnativehmssdk/HmsHelper.kt +106 -0
  8. package/android/src/main/java/com/reactnativehmssdk/HmsModule.kt +38 -3
  9. package/android/src/main/java/com/reactnativehmssdk/HmsSDK.kt +342 -183
  10. package/android/src/main/java/com/reactnativehmssdk/HmsView.kt +4 -1
  11. package/ios/HmsDecoder.swift +105 -18
  12. package/ios/HmsHelper.swift +92 -0
  13. package/ios/HmsManager.m +5 -1
  14. package/ios/HmsManager.swift +41 -6
  15. package/ios/HmsSDK.swift +199 -60
  16. package/ios/HmsView.swift +1 -1
  17. package/lib/commonjs/classes/HMSAudioTrackSettings.js +3 -0
  18. package/lib/commonjs/classes/HMSAudioTrackSettings.js.map +1 -1
  19. package/lib/commonjs/classes/HMSBrowserRecordingState.js +23 -0
  20. package/lib/commonjs/classes/HMSBrowserRecordingState.js.map +1 -0
  21. package/lib/commonjs/classes/HMSCameraFacing.js +14 -0
  22. package/lib/commonjs/classes/HMSCameraFacing.js.map +1 -0
  23. package/lib/commonjs/classes/HMSConfig.js +3 -1
  24. package/lib/commonjs/classes/HMSConfig.js.map +1 -1
  25. package/lib/commonjs/classes/HMSEncoder.js +20 -3
  26. package/lib/commonjs/classes/HMSEncoder.js.map +1 -1
  27. package/lib/commonjs/classes/HMSException.js +30 -0
  28. package/lib/commonjs/classes/HMSException.js.map +1 -0
  29. package/lib/commonjs/classes/HMSHelper.js +2 -2
  30. package/lib/commonjs/classes/HMSHelper.js.map +1 -1
  31. package/lib/commonjs/classes/HMSLocalAudioTrack.js +12 -0
  32. package/lib/commonjs/classes/HMSLocalAudioTrack.js.map +1 -1
  33. package/lib/commonjs/classes/HMSLocalPeer.js.map +1 -1
  34. package/lib/commonjs/classes/HMSPeer.js +3 -0
  35. package/lib/commonjs/classes/HMSPeer.js.map +1 -1
  36. package/lib/commonjs/classes/HMSPeerUpdate.js +1 -0
  37. package/lib/commonjs/classes/HMSPeerUpdate.js.map +1 -1
  38. package/lib/commonjs/classes/HMSPermissions.js +6 -0
  39. package/lib/commonjs/classes/HMSPermissions.js.map +1 -1
  40. package/lib/commonjs/classes/HMSRTMPConfig.js +26 -0
  41. package/lib/commonjs/classes/HMSRTMPConfig.js.map +1 -0
  42. package/lib/commonjs/classes/HMSRemotePeer.js.map +1 -1
  43. package/lib/commonjs/classes/HMSRoom.js +9 -0
  44. package/lib/commonjs/classes/HMSRoom.js.map +1 -1
  45. package/lib/commonjs/classes/HMSRtmpStreamingState.js +23 -0
  46. package/lib/commonjs/classes/HMSRtmpStreamingState.js.map +1 -0
  47. package/lib/commonjs/classes/HMSSDK.js +129 -70
  48. package/lib/commonjs/classes/HMSSDK.js.map +1 -1
  49. package/lib/commonjs/classes/HMSServerRecordingState.js +23 -0
  50. package/lib/commonjs/classes/HMSServerRecordingState.js.map +1 -0
  51. package/lib/commonjs/classes/HMSTrack.js +2 -19
  52. package/lib/commonjs/classes/HMSTrack.js.map +1 -1
  53. package/lib/commonjs/classes/HMSVideoResolution.js +23 -0
  54. package/lib/commonjs/classes/HMSVideoResolution.js.map +1 -0
  55. package/lib/commonjs/classes/HMSVideoSettings.js.map +1 -1
  56. package/lib/commonjs/classes/HMSVideoTrackSettings.js +0 -3
  57. package/lib/commonjs/classes/HMSVideoTrackSettings.js.map +1 -1
  58. package/lib/commonjs/index.js +84 -0
  59. package/lib/commonjs/index.js.map +1 -1
  60. package/lib/module/classes/HMSAudioTrackSettings.js +3 -0
  61. package/lib/module/classes/HMSAudioTrackSettings.js.map +1 -1
  62. package/lib/module/classes/HMSBrowserRecordingState.js +14 -0
  63. package/lib/module/classes/HMSBrowserRecordingState.js.map +1 -0
  64. package/lib/module/classes/HMSCameraFacing.js +7 -0
  65. package/lib/module/classes/HMSCameraFacing.js.map +1 -0
  66. package/lib/module/classes/HMSConfig.js +3 -1
  67. package/lib/module/classes/HMSConfig.js.map +1 -1
  68. package/lib/module/classes/HMSEncoder.js +19 -3
  69. package/lib/module/classes/HMSEncoder.js.map +1 -1
  70. package/lib/module/classes/HMSException.js +21 -0
  71. package/lib/module/classes/HMSException.js.map +1 -0
  72. package/lib/module/classes/HMSHelper.js +2 -2
  73. package/lib/module/classes/HMSHelper.js.map +1 -1
  74. package/lib/module/classes/HMSLocalAudioTrack.js +13 -1
  75. package/lib/module/classes/HMSLocalAudioTrack.js.map +1 -1
  76. package/lib/module/classes/HMSLocalPeer.js.map +1 -1
  77. package/lib/module/classes/HMSPeer.js +3 -0
  78. package/lib/module/classes/HMSPeer.js.map +1 -1
  79. package/lib/module/classes/HMSPeerUpdate.js +1 -0
  80. package/lib/module/classes/HMSPeerUpdate.js.map +1 -1
  81. package/lib/module/classes/HMSPermissions.js +6 -0
  82. package/lib/module/classes/HMSPermissions.js.map +1 -1
  83. package/lib/module/classes/HMSRTMPConfig.js +17 -0
  84. package/lib/module/classes/HMSRTMPConfig.js.map +1 -0
  85. package/lib/module/classes/HMSRemotePeer.js.map +1 -1
  86. package/lib/module/classes/HMSRoom.js +9 -0
  87. package/lib/module/classes/HMSRoom.js.map +1 -1
  88. package/lib/module/classes/HMSRtmpStreamingState.js +14 -0
  89. package/lib/module/classes/HMSRtmpStreamingState.js.map +1 -0
  90. package/lib/module/classes/HMSSDK.js +130 -70
  91. package/lib/module/classes/HMSSDK.js.map +1 -1
  92. package/lib/module/classes/HMSServerRecordingState.js +14 -0
  93. package/lib/module/classes/HMSServerRecordingState.js.map +1 -0
  94. package/lib/module/classes/HMSTrack.js +2 -17
  95. package/lib/module/classes/HMSTrack.js.map +1 -1
  96. package/lib/module/classes/HMSVideoResolution.js +14 -0
  97. package/lib/module/classes/HMSVideoResolution.js.map +1 -0
  98. package/lib/module/classes/HMSVideoSettings.js.map +1 -1
  99. package/lib/module/classes/HMSVideoTrackSettings.js +0 -3
  100. package/lib/module/classes/HMSVideoTrackSettings.js.map +1 -1
  101. package/lib/module/index.js +6 -0
  102. package/lib/module/index.js.map +1 -1
  103. package/lib/typescript/classes/HMSAudioTrackSettings.d.ts +3 -0
  104. package/lib/typescript/classes/HMSBrowserRecordingState.d.ts +9 -0
  105. package/lib/typescript/classes/HMSCameraFacing.d.ts +4 -0
  106. package/lib/typescript/classes/HMSConfig.d.ts +2 -0
  107. package/lib/typescript/classes/HMSEncoder.d.ts +3 -1
  108. package/lib/typescript/classes/HMSException.d.ts +22 -0
  109. package/lib/typescript/classes/HMSLocalAudioTrack.d.ts +1 -0
  110. package/lib/typescript/classes/HMSLocalPeer.d.ts +1 -0
  111. package/lib/typescript/classes/HMSPeer.d.ts +2 -0
  112. package/lib/typescript/classes/HMSPeerUpdate.d.ts +1 -0
  113. package/lib/typescript/classes/HMSPermissions.d.ts +4 -0
  114. package/lib/typescript/classes/HMSRTMPConfig.d.ts +10 -0
  115. package/lib/typescript/classes/HMSRemotePeer.d.ts +1 -0
  116. package/lib/typescript/classes/HMSRoom.d.ts +9 -0
  117. package/lib/typescript/classes/HMSRtmpStreamingState.d.ts +9 -0
  118. package/lib/typescript/classes/HMSSDK.d.ts +10 -1
  119. package/lib/typescript/classes/HMSServerRecordingState.d.ts +9 -0
  120. package/lib/typescript/classes/HMSTrack.d.ts +1 -1
  121. package/lib/typescript/classes/HMSVideoResolution.d.ts +8 -0
  122. package/lib/typescript/classes/HMSVideoSettings.d.ts +3 -3
  123. package/lib/typescript/classes/HMSVideoTrackSettings.d.ts +13 -10
  124. package/lib/typescript/index.d.ts +6 -0
  125. package/package.json +1 -1
  126. package/src/classes/HMSAudioTrackSettings.ts +9 -1
  127. package/src/classes/HMSBrowserRecordingState.ts +11 -0
  128. package/src/classes/HMSCameraFacing.ts +4 -0
  129. package/src/classes/HMSConfig.ts +3 -1
  130. package/src/classes/HMSEncoder.ts +19 -2
  131. package/src/classes/HMSException.ts +33 -0
  132. package/src/classes/HMSHelper.ts +2 -2
  133. package/src/classes/HMSLocalAudioTrack.ts +13 -1
  134. package/src/classes/HMSLocalPeer.ts +1 -0
  135. package/src/classes/HMSPeer.ts +3 -0
  136. package/src/classes/HMSPeerUpdate.ts +1 -0
  137. package/src/classes/HMSPermissions.ts +6 -0
  138. package/src/classes/HMSRTMPConfig.ts +15 -0
  139. package/src/classes/HMSRemotePeer.ts +1 -0
  140. package/src/classes/HMSRoom.ts +12 -0
  141. package/src/classes/HMSRtmpStreamingState.ts +11 -0
  142. package/src/classes/HMSSDK.tsx +40 -2
  143. package/src/classes/HMSServerRecordingState.ts +11 -0
  144. package/src/classes/HMSTrack.ts +2 -15
  145. package/src/classes/HMSVideoResolution.ts +9 -0
  146. package/src/classes/HMSVideoSettings.ts +3 -3
  147. package/src/classes/HMSVideoTrackSettings.ts +13 -10
  148. package/src/index.ts +6 -0
@@ -4,6 +4,7 @@ import com.facebook.react.bridge.*
4
4
  import java.util.*
5
5
  import kotlinx.coroutines.launch
6
6
  import live.hms.video.error.HMSException
7
+ import live.hms.video.media.settings.HMSTrackSettings
7
8
  import live.hms.video.media.tracks.*
8
9
  import live.hms.video.sdk.*
9
10
  import live.hms.video.sdk.models.*
@@ -11,11 +12,11 @@ import live.hms.video.sdk.models.HMSConfig
11
12
  import live.hms.video.sdk.models.enums.HMSPeerUpdate
12
13
  import live.hms.video.sdk.models.enums.HMSRoomUpdate
13
14
  import live.hms.video.sdk.models.enums.HMSTrackUpdate
14
- import live.hms.video.sdk.models.role.HMSRole
15
15
  import live.hms.video.sdk.models.trackchangerequest.HMSChangeTrackStateRequest
16
16
  import live.hms.video.utils.HMSCoroutineScope
17
17
 
18
18
  class HmsSDK(
19
+ data: ReadableMap?,
19
20
  HmsDelegate: HmsModule,
20
21
  sdkId: String,
21
22
  reactApplicationContext: ReactApplicationContext
@@ -25,9 +26,40 @@ class HmsSDK(
25
26
  private var changeTrackStateRequest: HMSChangeTrackStateRequest? = null
26
27
  val delegate: HmsModule = HmsDelegate
27
28
  val id: String = sdkId
29
+ val self = this
28
30
 
29
31
  init {
30
- this.hmsSDK = HMSSDK.Builder(reactApplicationContext).build()
32
+ val videoSettings = HmsHelper.getVideoTrackSettings(data?.getMap("video"))
33
+ val audioSettings = HmsHelper.getAudioTrackSettings(data?.getMap("audio"))
34
+
35
+ val trackSettingsBuilder = HMSTrackSettings.Builder()
36
+ val trackSettings = trackSettingsBuilder.audio(audioSettings).video(videoSettings).build()
37
+
38
+ this.hmsSDK = HMSSDK.Builder(reactApplicationContext).setTrackSettings(trackSettings).build()
39
+ }
40
+
41
+ fun emitRequiredKeysError() {
42
+ val data: WritableMap = Arguments.createMap()
43
+ val hmsError =
44
+ HMSException(
45
+ 102,
46
+ "NOT_FOUND",
47
+ "SEND_ALL_REQUIRED_KEYS",
48
+ "REQUIRED_KEYS_NOT_FOUND",
49
+ "REQUIRED_KEYS_NOT_FOUND"
50
+ )
51
+ data.putString("event", "ON_ERROR")
52
+ data.putString("id", id)
53
+ data.putMap("error", HmsDecoder.getError(hmsError))
54
+ delegate.emitEvent("ON_ERROR", data)
55
+ }
56
+
57
+ fun emitHMSError(error: HMSException) {
58
+ val data: WritableMap = Arguments.createMap()
59
+ data.putString("event", "ON_ERROR")
60
+ data.putString("id", id)
61
+ data.putMap("error", HmsDecoder.getError(error))
62
+ delegate.emitEvent("ON_ERROR", data)
31
63
  }
32
64
 
33
65
  fun preview(credentials: ReadableMap) {
@@ -40,15 +72,42 @@ class HmsSDK(
40
72
  var config =
41
73
  HMSConfig(
42
74
  credentials.getString("username") as String,
43
- credentials.getString("authToken") as String
75
+ credentials.getString("authToken") as String,
44
76
  )
45
77
 
46
- if (HmsHelper.areAllRequiredKeysAvailable(credentials, arrayOf(Pair("endpoint", "String")))) {
78
+ if (HmsHelper.areAllRequiredKeysAvailable(
79
+ credentials,
80
+ arrayOf(Pair("endpoint", "String"), Pair("metadata", "String"))
81
+ )
82
+ ) {
83
+ config =
84
+ HMSConfig(
85
+ credentials.getString("username") as String,
86
+ credentials.getString("authToken") as String,
87
+ initEndpoint = credentials.getString("endpoint") as String,
88
+ metadata = credentials.getString("metadata") as String,
89
+ )
90
+ } else if (HmsHelper.areAllRequiredKeysAvailable(
91
+ credentials,
92
+ arrayOf(Pair("endpoint", "String"))
93
+ )
94
+ ) {
95
+ config =
96
+ HMSConfig(
97
+ credentials.getString("username") as String,
98
+ credentials.getString("authToken") as String,
99
+ initEndpoint = credentials.getString("endpoint") as String,
100
+ )
101
+ } else if (HmsHelper.areAllRequiredKeysAvailable(
102
+ credentials,
103
+ arrayOf(Pair("metadata", "String"))
104
+ )
105
+ ) {
47
106
  config =
48
107
  HMSConfig(
49
108
  credentials.getString("username") as String,
50
109
  credentials.getString("authToken") as String,
51
- initEndpoint = credentials.getString("endpoint") as String
110
+ metadata = credentials.getString("metadata") as String,
52
111
  )
53
112
  }
54
113
 
@@ -56,7 +115,7 @@ class HmsSDK(
56
115
  config,
57
116
  object : HMSPreviewListener {
58
117
  override fun onError(error: HMSException) {
59
- delegate.emitEvent("ON_ERROR", HmsDecoder.getError(error))
118
+ self.emitHMSError(error)
60
119
  }
61
120
 
62
121
  override fun onPreview(room: HMSRoom, localTracks: Array<HMSTrack>) {
@@ -74,18 +133,7 @@ class HmsSDK(
74
133
  }
75
134
  )
76
135
  } else {
77
- delegate.emitEvent(
78
- "ON_ERROR",
79
- HmsDecoder.getError(
80
- HMSException(
81
- 102,
82
- "NOT_FOUND",
83
- "SEND_ALL_REQUIRED_KEYS",
84
- "REQUIRED_KEYS_NOT_FOUND",
85
- "REQUIRED_KEYS_NOT_FOUND"
86
- )
87
- )
88
- )
136
+ self.emitRequiredKeysError()
89
137
  }
90
138
  }
91
139
 
@@ -102,12 +150,39 @@ class HmsSDK(
102
150
  credentials.getString("authToken") as String
103
151
  )
104
152
 
105
- if (HmsHelper.areAllRequiredKeysAvailable(credentials, arrayOf(Pair("endpoint", "String")))) {
153
+ if (HmsHelper.areAllRequiredKeysAvailable(
154
+ credentials,
155
+ arrayOf(Pair("endpoint", "String"), Pair("metadata", "String"))
156
+ )
157
+ ) {
158
+ config =
159
+ HMSConfig(
160
+ credentials.getString("username") as String,
161
+ credentials.getString("authToken") as String,
162
+ initEndpoint = credentials.getString("endpoint") as String,
163
+ metadata = credentials.getString("metadata") as String,
164
+ )
165
+ } else if (HmsHelper.areAllRequiredKeysAvailable(
166
+ credentials,
167
+ arrayOf(Pair("endpoint", "String"))
168
+ )
169
+ ) {
170
+ config =
171
+ HMSConfig(
172
+ credentials.getString("username") as String,
173
+ credentials.getString("authToken") as String,
174
+ initEndpoint = credentials.getString("endpoint") as String,
175
+ )
176
+ } else if (HmsHelper.areAllRequiredKeysAvailable(
177
+ credentials,
178
+ arrayOf(Pair("metadata", "String"))
179
+ )
180
+ ) {
106
181
  config =
107
182
  HMSConfig(
108
183
  credentials.getString("username") as String,
109
184
  credentials.getString("authToken") as String,
110
- initEndpoint = credentials.getString("endpoint") as String
185
+ metadata = credentials.getString("metadata") as String,
111
186
  )
112
187
  }
113
188
 
@@ -130,7 +205,8 @@ class HmsSDK(
130
205
  super.onRemovedFromRoom(notification)
131
206
 
132
207
  val data: WritableMap = Arguments.createMap()
133
- val requestedBy = HmsDecoder.getHmsRemotePeer(notification.peerWhoRemoved as HMSRemotePeer?)
208
+ val requestedBy =
209
+ HmsDecoder.getHmsRemotePeer(notification.peerWhoRemoved as HMSRemotePeer?)
134
210
  val roomEnded = notification.roomWasEnded
135
211
  val reason = notification.reason
136
212
 
@@ -143,7 +219,7 @@ class HmsSDK(
143
219
  }
144
220
 
145
221
  override fun onError(error: HMSException) {
146
- delegate.emitEvent("ON_ERROR", HmsDecoder.getError(error))
222
+ self.emitHMSError(error)
147
223
  }
148
224
 
149
225
  override fun onJoin(room: HMSRoom) {
@@ -163,7 +239,6 @@ class HmsSDK(
163
239
  }
164
240
 
165
241
  override fun onPeerUpdate(type: HMSPeerUpdate, hmsPeer: HMSPeer) {
166
-
167
242
  val type = type.name
168
243
  val roomData = HmsDecoder.getHmsRoom(hmsSDK?.getRoom())
169
244
  val localPeerData = HmsDecoder.getHmsLocalPeer(hmsSDK?.getLocalPeer())
@@ -246,11 +321,7 @@ class HmsSDK(
246
321
  }
247
322
  )
248
323
  } catch (e: HMSException) {
249
- val error: WritableMap = Arguments.createMap()
250
- error.putString("message", e.localizedMessage)
251
- error.putInt("code", e.code)
252
- error.putString("id", id)
253
- delegate.emitEvent("ON_ERROR", error)
324
+ self.emitHMSError(e)
254
325
  }
255
326
 
256
327
  hmsSDK?.addAudioObserver(
@@ -276,24 +347,26 @@ class HmsSDK(
276
347
  )
277
348
  }
278
349
  } else {
279
- delegate.emitEvent(
280
- "ON_ERROR",
281
- HmsDecoder.getError(
282
- HMSException(
283
- 102,
284
- "NOT_FOUND",
285
- "SEND_ALL_REQUIRED_KEYS",
286
- "REQUIRED_KEYS_NOT_FOUND",
287
- "REQUIRED_KEYS_NOT_FOUND"
288
- )
289
- )
290
- )
350
+ self.emitRequiredKeysError()
291
351
  }
292
352
  }
293
353
 
294
354
  fun setLocalMute(data: ReadableMap) {
295
355
  val isMute = data.getBoolean("isMute")
296
356
  hmsSDK?.getLocalPeer()?.audioTrack?.setMute(isMute)
357
+ val type = if (isMute) "TRACK_MUTED" else "TRACK_UNMUTED"
358
+ val localPeerData = HmsDecoder.getHmsLocalPeer(hmsSDK?.getLocalPeer())
359
+ val remotePeerData = HmsDecoder.getHmsRemotePeers(hmsSDK?.getRemotePeers())
360
+ val roomData = HmsDecoder.getHmsRoom(hmsSDK?.getRoom())
361
+
362
+ val data: WritableMap = Arguments.createMap()
363
+
364
+ data.putMap("room", roomData)
365
+ data.putString("type", type)
366
+ data.putMap("localPeer", localPeerData)
367
+ data.putArray("remotePeers", remotePeerData)
368
+ data.putString("id", id)
369
+ delegate.emitEvent("ON_TRACK_UPDATE", data)
297
370
  }
298
371
 
299
372
  fun setLocalVideoMute(data: ReadableMap) {
@@ -308,15 +381,18 @@ class HmsSDK(
308
381
  }
309
382
 
310
383
  fun leave(callback: Promise?) {
311
- hmsSDK?.leave(object : HMSActionResultListener {
312
- override fun onSuccess() {
313
- callback?.resolve("")
314
- }
384
+ hmsSDK?.leave(
385
+ object : HMSActionResultListener {
386
+ override fun onSuccess() {
387
+ callback?.resolve("")
388
+ }
315
389
 
316
- override fun onError(error: HMSException) {
317
- callback?.reject("101", "NOT_FOUND")
318
- }
319
- })
390
+ override fun onError(error: HMSException) {
391
+ callback?.reject("101", "NOT_FOUND")
392
+ self.emitHMSError(error)
393
+ }
394
+ }
395
+ )
320
396
  }
321
397
 
322
398
  fun sendBroadcastMessage(data: ReadableMap) {
@@ -331,23 +407,14 @@ class HmsSDK(
331
407
  data.getString("message") as String,
332
408
  type as String,
333
409
  object : HMSMessageResultListener {
334
- override fun onError(error: HMSException) {}
410
+ override fun onError(error: HMSException) {
411
+ self.emitHMSError(error)
412
+ }
335
413
  override fun onSuccess(hmsMessage: HMSMessage) {}
336
414
  }
337
415
  )
338
416
  } else {
339
- delegate.emitEvent(
340
- "ON_ERROR",
341
- HmsDecoder.getError(
342
- HMSException(
343
- 102,
344
- "NOT_FOUND",
345
- "SEND_ALL_REQUIRED_KEYS",
346
- "REQUIRED_KEYS_NOT_FOUND",
347
- "REQUIRED_KEYS_NOT_FOUND"
348
- )
349
- )
350
- )
417
+ self.emitRequiredKeysError()
351
418
  }
352
419
  }
353
420
 
@@ -373,24 +440,15 @@ class HmsSDK(
373
440
  type as String,
374
441
  encodedTargetedRoles,
375
442
  object : HMSMessageResultListener {
376
- override fun onError(error: HMSException) {}
443
+ override fun onError(error: HMSException) {
444
+ self.emitHMSError(error)
445
+ }
377
446
  override fun onSuccess(hmsMessage: HMSMessage) {}
378
447
  }
379
448
  )
380
449
  }
381
450
  } else {
382
- delegate.emitEvent(
383
- "ON_ERROR",
384
- HmsDecoder.getError(
385
- HMSException(
386
- 102,
387
- "NOT_FOUND",
388
- "SEND_ALL_REQUIRED_KEYS",
389
- "REQUIRED_KEYS_NOT_FOUND",
390
- "REQUIRED_KEYS_NOT_FOUND"
391
- )
392
- )
393
- )
451
+ self.emitRequiredKeysError()
394
452
  }
395
453
  }
396
454
 
@@ -415,24 +473,15 @@ class HmsSDK(
415
473
  type as String,
416
474
  peer,
417
475
  object : HMSMessageResultListener {
418
- override fun onError(error: HMSException) {}
476
+ override fun onError(error: HMSException) {
477
+ self.emitHMSError(error)
478
+ }
419
479
  override fun onSuccess(hmsMessage: HMSMessage) {}
420
480
  }
421
481
  )
422
482
  }
423
483
  } else {
424
- delegate.emitEvent(
425
- "ON_ERROR",
426
- HmsDecoder.getError(
427
- HMSException(
428
- 102,
429
- "NOT_FOUND",
430
- "SEND_ALL_REQUIRED_KEYS",
431
- "REQUIRED_KEYS_NOT_FOUND",
432
- "REQUIRED_KEYS_NOT_FOUND"
433
- )
434
- )
435
- )
484
+ self.emitRequiredKeysError()
436
485
  }
437
486
  }
438
487
 
@@ -458,24 +507,15 @@ class HmsSDK(
458
507
  force,
459
508
  object : HMSActionResultListener {
460
509
  override fun onSuccess() {}
461
- override fun onError(error: HMSException) {}
510
+ override fun onError(error: HMSException) {
511
+ self.emitHMSError(error)
512
+ }
462
513
  }
463
514
  )
464
515
  }
465
516
  }
466
517
  } else {
467
- delegate.emitEvent(
468
- "ON_ERROR",
469
- HmsDecoder.getError(
470
- HMSException(
471
- 102,
472
- "NOT_FOUND",
473
- "SEND_ALL_REQUIRED_KEYS",
474
- "REQUIRED_KEYS_NOT_FOUND",
475
- "REQUIRED_KEYS_NOT_FOUND"
476
- )
477
- )
478
- )
518
+ self.emitRequiredKeysError()
479
519
  }
480
520
  }
481
521
 
@@ -496,56 +536,51 @@ class HmsSDK(
496
536
  mute,
497
537
  object : HMSActionResultListener {
498
538
  override fun onSuccess() {}
499
- override fun onError(error: HMSException) {}
539
+ override fun onError(error: HMSException) {
540
+ self.emitHMSError(error)
541
+ }
500
542
  }
501
543
  )
502
544
  }
503
545
  } else {
504
- delegate.emitEvent(
505
- "ON_ERROR",
506
- HmsDecoder.getError(
507
- HMSException(
508
- 102,
509
- "NOT_FOUND",
510
- "SEND_ALL_REQUIRED_KEYS",
511
- "REQUIRED_KEYS_NOT_FOUND",
512
- "REQUIRED_KEYS_NOT_FOUND"
513
- )
514
- )
515
- )
546
+ self.emitRequiredKeysError()
516
547
  }
517
548
  }
518
549
 
519
550
  fun changeTrackStateRoles(data: ReadableMap) {
520
551
  val requiredKeys =
521
- HmsHelper.areAllRequiredKeysAvailable(
522
- data,
523
- arrayOf(Pair("source", "String"), Pair("mute", "Boolean"), Pair("type", "String"), Pair("roles", "Array"))
524
- )
552
+ HmsHelper.areAllRequiredKeysAvailable(
553
+ data,
554
+ arrayOf(
555
+ Pair("source", "String"),
556
+ Pair("mute", "Boolean"),
557
+ Pair("type", "String"),
558
+ Pair("roles", "Array")
559
+ )
560
+ )
525
561
  if (requiredKeys) {
526
562
  val mute: Boolean = data.getBoolean("mute")
527
- val type = if(data.getString("type") == HMSTrackType.AUDIO.toString()) HMSTrackType.AUDIO else HMSTrackType.VIDEO
563
+ val type =
564
+ if (data.getString("type") == HMSTrackType.AUDIO.toString()) HMSTrackType.AUDIO
565
+ else HMSTrackType.VIDEO
528
566
  val source = data.getString("source")
529
567
  val targetedRoles = data.getArray("roles")?.toArrayList() as? ArrayList<String>
530
568
  val roles = hmsSDK?.getRoles()
531
569
  val encodedTargetedRoles = HmsHelper.getRolesFromRoleNames(targetedRoles, roles)
532
- hmsSDK?.changeTrackState(mute, type, source, encodedTargetedRoles, object : HMSActionResultListener {
533
- override fun onSuccess() {}
534
- override fun onError(error: HMSException) {}
535
- })
536
- }else {
537
- delegate.emitEvent(
538
- "ON_ERROR",
539
- HmsDecoder.getError(
540
- HMSException(
541
- 102,
542
- "NOT_FOUND",
543
- "SEND_ALL_REQUIRED_KEYS",
544
- "REQUIRED_KEYS_NOT_FOUND",
545
- "REQUIRED_KEYS_NOT_FOUND"
546
- )
547
- )
570
+ hmsSDK?.changeTrackState(
571
+ mute,
572
+ type,
573
+ source,
574
+ encodedTargetedRoles,
575
+ object : HMSActionResultListener {
576
+ override fun onSuccess() {}
577
+ override fun onError(error: HMSException) {
578
+ self.emitHMSError(error)
579
+ }
580
+ }
548
581
  )
582
+ } else {
583
+ self.emitRequiredKeysError()
549
584
  }
550
585
  }
551
586
 
@@ -575,27 +610,34 @@ class HmsSDK(
575
610
  }
576
611
 
577
612
  fun removePeer(data: ReadableMap) {
578
- val peerId = data.getString("peerId")
579
- var reason = data.getString("reason")
580
-
581
- if (reason == null) {
582
- reason = ""
583
- }
613
+ val requiredKeys =
614
+ HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("peerId", "String")))
615
+ if (requiredKeys) {
616
+ val peerId = data.getString("peerId")
617
+ var reason = data.getString("reason")
584
618
 
585
- val peers = hmsSDK?.getRemotePeers()
619
+ if (reason == null) {
620
+ reason = ""
621
+ }
586
622
 
587
- val peer = HmsHelper.getRemotePeerFromPeerId(peerId, peers)
623
+ val peers = hmsSDK?.getRemotePeers()
588
624
 
589
- if (peer != null) {
590
- hmsSDK?.removePeerRequest(
591
- peer,
592
- reason,
593
- object : HMSActionResultListener {
594
- override fun onSuccess() {}
625
+ val peer = HmsHelper.getRemotePeerFromPeerId(peerId, peers)
595
626
 
596
- override fun onError(error: HMSException) {}
597
- }
598
- )
627
+ if (peer != null) {
628
+ hmsSDK?.removePeerRequest(
629
+ peer,
630
+ reason,
631
+ object : HMSActionResultListener {
632
+ override fun onSuccess() {}
633
+ override fun onError(error: HMSException) {
634
+ self.emitHMSError(error)
635
+ }
636
+ }
637
+ )
638
+ }
639
+ } else {
640
+ self.emitRequiredKeysError()
599
641
  }
600
642
  }
601
643
 
@@ -611,8 +653,9 @@ class HmsSDK(
611
653
  lock,
612
654
  object : HMSActionResultListener {
613
655
  override fun onSuccess() {}
614
-
615
- override fun onError(error: HMSException) {}
656
+ override fun onError(error: HMSException) {
657
+ self.emitHMSError(error)
658
+ }
616
659
  }
617
660
  )
618
661
  }
@@ -628,6 +671,7 @@ class HmsSDK(
628
671
 
629
672
  override fun onError(error: HMSException) {
630
673
  recentRoleChangeRequest = null
674
+ self.emitHMSError(error)
631
675
  }
632
676
  }
633
677
  )
@@ -635,11 +679,7 @@ class HmsSDK(
635
679
  }
636
680
 
637
681
  fun muteAllPeersAudio(data: ReadableMap) {
638
- val requiredKeys =
639
- HmsHelper.areAllRequiredKeysAvailable(
640
- data,
641
- arrayOf(Pair("mute", "Boolean"))
642
- )
682
+ val requiredKeys = HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("mute", "Boolean")))
643
683
  if (requiredKeys) {
644
684
  val mute = data.getBoolean("mute")
645
685
  val peers = hmsSDK?.getRemotePeers()
@@ -661,19 +701,8 @@ class HmsSDK(
661
701
  data.putString("id", id)
662
702
  delegate.emitEvent("ON_PEER_UPDATE", data)
663
703
  }
664
- }else {
665
- delegate.emitEvent(
666
- "ON_ERROR",
667
- HmsDecoder.getError(
668
- HMSException(
669
- 102,
670
- "NOT_FOUND",
671
- "SEND_ALL_REQUIRED_KEYS",
672
- "REQUIRED_KEYS_NOT_FOUND",
673
- "REQUIRED_KEYS_NOT_FOUND"
674
- )
675
- )
676
- )
704
+ } else {
705
+ this.emitRequiredKeysError()
677
706
  }
678
707
  }
679
708
 
@@ -695,18 +724,7 @@ class HmsSDK(
695
724
  remoteVideoTrack.isPlaybackAllowed = playbackAllowed
696
725
  }
697
726
  } else {
698
- delegate.emitEvent(
699
- "ON_ERROR",
700
- HmsDecoder.getError(
701
- HMSException(
702
- 102,
703
- "NOT_FOUND",
704
- "SEND_ALL_REQUIRED_KEYS",
705
- "REQUIRED_KEYS_NOT_FOUND",
706
- "REQUIRED_KEYS_NOT_FOUND"
707
- )
708
- )
709
- )
727
+ this.emitRequiredKeysError()
710
728
  }
711
729
  }
712
730
 
@@ -737,4 +755,145 @@ class HmsSDK(
737
755
 
738
756
  callback?.resolve(roomData)
739
757
  }
758
+
759
+ fun setVolume(data: ReadableMap) {
760
+ val requiredKeys =
761
+ HmsHelper.areAllRequiredKeysAvailable(
762
+ data,
763
+ arrayOf(Pair("trackId", "String"), Pair("volume", "Float"))
764
+ )
765
+
766
+ if (requiredKeys) {
767
+ val trackId = data.getString("trackId")
768
+ val volume = data.getDouble("volume")
769
+
770
+ val remotePeers = hmsSDK?.getRemotePeers()
771
+
772
+ if (remotePeers != null) {
773
+ for (peer in remotePeers) {
774
+ val audioTrackId = peer.audioTrack?.trackId
775
+
776
+ if (audioTrackId == trackId) {
777
+ peer.audioTrack?.setVolume(volume)
778
+ return
779
+ }
780
+
781
+ for (auxTrack in peer.auxiliaryTracks) {
782
+ if (auxTrack.trackId == trackId && auxTrack.type == HMSTrackType.AUDIO) {
783
+ val trackExtracted = auxTrack as? HMSRemoteAudioTrack
784
+
785
+ if (trackExtracted != null) {
786
+ trackExtracted.setVolume(volume)
787
+ return
788
+ }
789
+ }
790
+ }
791
+ }
792
+ }
793
+ } else {
794
+ this.emitRequiredKeysError()
795
+ }
796
+ }
797
+
798
+ fun getVolume(data: ReadableMap, callback: Promise?) {
799
+ val requiredKeys =
800
+ HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("trackId", "String")))
801
+
802
+ if (requiredKeys) {
803
+ val trackId = data.getString("trackId")
804
+
805
+ val localPeer = hmsSDK?.getLocalPeer()
806
+
807
+ if (localPeer?.audioTrack?.trackId == trackId) {
808
+ val volume = localPeer?.audioTrack?.volume
809
+ callback?.resolve(volume)
810
+ return
811
+ }
812
+ callback?.reject("101", "TRACK_IDS_DO_NOT_MATCH")
813
+ } else {
814
+ callback?.reject("101", "TRACK_NOT_FOUND")
815
+ }
816
+ }
817
+
818
+ fun changeMetadata(data: ReadableMap, callback: Promise?) {
819
+ val requiredKeys =
820
+ HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("metadata", "String")))
821
+
822
+ if (requiredKeys) {
823
+ val metadata = data.getString("metadata")
824
+
825
+ if (metadata != null) {
826
+ hmsSDK?.changeMetadata(
827
+ metadata,
828
+ object : HMSActionResultListener {
829
+ override fun onSuccess() {
830
+ val result: WritableMap = Arguments.createMap()
831
+
832
+ result.putBoolean("success", true)
833
+
834
+ callback?.resolve(result)
835
+ }
836
+ override fun onError(error: HMSException) {
837
+ callback?.reject(error.message, error.description)
838
+ self.emitHMSError(error)
839
+ }
840
+ }
841
+ )
842
+ }
843
+ } else {
844
+ self.emitRequiredKeysError()
845
+ }
846
+ }
847
+
848
+ fun startRTMPOrRecording(data: ReadableMap, callback: Promise?) {
849
+ val requiredKeys =
850
+ HmsHelper.areAllRequiredKeysAvailable(
851
+ data,
852
+ arrayOf(Pair("record", "Boolean"), Pair("meetingURL", "String"))
853
+ )
854
+ if (requiredKeys) {
855
+ val record = data.getBoolean("record")
856
+ var meetingURL = data.getString("meetingURL") as String
857
+ var rtmpURLs = data.getArray("rtmpURLs")
858
+ if (rtmpURLs == null) {
859
+ rtmpURLs = Arguments.createArray()
860
+ }
861
+ val rtmpURLsList = HmsHelper.getRtmpUrls(rtmpURLs)
862
+ val config = HMSRecordingConfig(meetingURL, rtmpURLsList, record)
863
+
864
+ hmsSDK?.startRtmpOrRecording(
865
+ config,
866
+ object : HMSActionResultListener {
867
+ override fun onSuccess() {
868
+ val result: WritableMap = Arguments.createMap()
869
+ result.putBoolean("success", true)
870
+ callback?.resolve(result)
871
+ }
872
+ override fun onError(error: HMSException) {
873
+ callback?.reject(error.message, error.description)
874
+ self.emitHMSError(error)
875
+ }
876
+ }
877
+ )
878
+ } else {
879
+ callback?.reject("101", "REQUIRED_KEYS_NOT_FOUND")
880
+ self.emitRequiredKeysError()
881
+ }
882
+ }
883
+
884
+ fun stopRtmpAndRecording(callback: Promise?) {
885
+ hmsSDK?.stopRtmpAndRecording(
886
+ object : HMSActionResultListener {
887
+ override fun onSuccess() {
888
+ val result: WritableMap = Arguments.createMap()
889
+ result.putBoolean("success", true)
890
+ callback?.resolve(result)
891
+ }
892
+ override fun onError(error: HMSException) {
893
+ callback?.reject(error.message, error.description)
894
+ self.emitHMSError(error)
895
+ }
896
+ }
897
+ )
898
+ }
740
899
  }