@100mslive/react-native-hms 0.9.0 → 0.9.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 (130) hide show
  1. package/README.md +10 -2
  2. package/android/.idea/gradle.xml +13 -0
  3. package/android/.idea/misc.xml +9 -0
  4. package/android/.idea/modules/android.iml +18 -0
  5. package/android/.idea/modules.xml +8 -0
  6. package/android/.idea/sonarlint/issuestore/f/0/f07866736216be0ee2aba49e392191aeae700a35 +0 -0
  7. package/android/.idea/sonarlint/issuestore/index.pb +3 -0
  8. package/android/.idea/vcs.xml +6 -0
  9. package/android/build.gradle +2 -2
  10. package/android/local.properties +8 -0
  11. package/android/src/main/java/com/reactnativehmssdk/HmsDecoder.kt +31 -4
  12. package/android/src/main/java/com/reactnativehmssdk/HmsHelper.kt +16 -64
  13. package/android/src/main/java/com/reactnativehmssdk/HmsModule.kt +17 -3
  14. package/android/src/main/java/com/reactnativehmssdk/HmsSDK.kt +97 -32
  15. package/android/src/main/java/com/reactnativehmssdk/HmsView.kt +1 -1
  16. package/ios/HmsDecoder.swift +173 -135
  17. package/ios/HmsHelper.swift +38 -41
  18. package/ios/HmsManager.m +7 -1
  19. package/ios/HmsManager.swift +111 -68
  20. package/ios/HmsSDK.swift +335 -199
  21. package/ios/HmsView.swift +45 -31
  22. package/ios/VideoCollectionViewCell.swift +4 -4
  23. package/lib/commonjs/classes/HMSBrowserRecordingState.js +6 -0
  24. package/lib/commonjs/classes/HMSBrowserRecordingState.js.map +1 -1
  25. package/lib/commonjs/classes/HMSEncoder.js +164 -4
  26. package/lib/commonjs/classes/HMSEncoder.js.map +1 -1
  27. package/lib/commonjs/classes/HMSHLSVariant.js.map +1 -1
  28. package/lib/commonjs/classes/HMSLocalAudioStats.js +26 -0
  29. package/lib/commonjs/classes/HMSLocalAudioStats.js.map +1 -0
  30. package/lib/commonjs/classes/HMSLocalVideoStats.js +32 -0
  31. package/lib/commonjs/classes/HMSLocalVideoStats.js.map +1 -0
  32. package/lib/commonjs/classes/HMSPeerUpdate.js +2 -0
  33. package/lib/commonjs/classes/HMSPeerUpdate.js.map +1 -1
  34. package/lib/commonjs/classes/HMSPermissions.js +2 -2
  35. package/lib/commonjs/classes/HMSPermissions.js.map +1 -1
  36. package/lib/commonjs/classes/HMSRTCStats.js +38 -0
  37. package/lib/commonjs/classes/HMSRTCStats.js.map +1 -0
  38. package/lib/commonjs/classes/HMSRTCStatsReport.js +26 -0
  39. package/lib/commonjs/classes/HMSRTCStatsReport.js.map +1 -0
  40. package/lib/commonjs/classes/HMSRemoteAudioStats.js +32 -0
  41. package/lib/commonjs/classes/HMSRemoteAudioStats.js.map +1 -0
  42. package/lib/commonjs/classes/HMSRemoteVideoStats.js +38 -0
  43. package/lib/commonjs/classes/HMSRemoteVideoStats.js.map +1 -0
  44. package/lib/commonjs/classes/HMSRoom.js +3 -0
  45. package/lib/commonjs/classes/HMSRoom.js.map +1 -1
  46. package/lib/commonjs/classes/HMSRoomUpdate.js +1 -0
  47. package/lib/commonjs/classes/HMSRoomUpdate.js.map +1 -1
  48. package/lib/commonjs/classes/HMSRtmpStreamingState.js +6 -0
  49. package/lib/commonjs/classes/HMSRtmpStreamingState.js.map +1 -1
  50. package/lib/commonjs/classes/HMSSDK.js +365 -111
  51. package/lib/commonjs/classes/HMSSDK.js.map +1 -1
  52. package/lib/commonjs/classes/HMSServerRecordingState.js +3 -0
  53. package/lib/commonjs/classes/HMSServerRecordingState.js.map +1 -1
  54. package/lib/commonjs/classes/HMSUpdateListenerActions.js +5 -0
  55. package/lib/commonjs/classes/HMSUpdateListenerActions.js.map +1 -1
  56. package/lib/commonjs/index.js +84 -0
  57. package/lib/commonjs/index.js.map +1 -1
  58. package/lib/module/classes/HMSBrowserRecordingState.js +6 -0
  59. package/lib/module/classes/HMSBrowserRecordingState.js.map +1 -1
  60. package/lib/module/classes/HMSEncoder.js +157 -4
  61. package/lib/module/classes/HMSEncoder.js.map +1 -1
  62. package/lib/module/classes/HMSHLSVariant.js.map +1 -1
  63. package/lib/module/classes/HMSLocalAudioStats.js +17 -0
  64. package/lib/module/classes/HMSLocalAudioStats.js.map +1 -0
  65. package/lib/module/classes/HMSLocalVideoStats.js +23 -0
  66. package/lib/module/classes/HMSLocalVideoStats.js.map +1 -0
  67. package/lib/module/classes/HMSPeerUpdate.js +2 -0
  68. package/lib/module/classes/HMSPeerUpdate.js.map +1 -1
  69. package/lib/module/classes/HMSPermissions.js +2 -2
  70. package/lib/module/classes/HMSPermissions.js.map +1 -1
  71. package/lib/module/classes/HMSRTCStats.js +29 -0
  72. package/lib/module/classes/HMSRTCStats.js.map +1 -0
  73. package/lib/module/classes/HMSRTCStatsReport.js +17 -0
  74. package/lib/module/classes/HMSRTCStatsReport.js.map +1 -0
  75. package/lib/module/classes/HMSRemoteAudioStats.js +23 -0
  76. package/lib/module/classes/HMSRemoteAudioStats.js.map +1 -0
  77. package/lib/module/classes/HMSRemoteVideoStats.js +29 -0
  78. package/lib/module/classes/HMSRemoteVideoStats.js.map +1 -0
  79. package/lib/module/classes/HMSRoom.js +3 -0
  80. package/lib/module/classes/HMSRoom.js.map +1 -1
  81. package/lib/module/classes/HMSRoomUpdate.js +1 -0
  82. package/lib/module/classes/HMSRoomUpdate.js.map +1 -1
  83. package/lib/module/classes/HMSRtmpStreamingState.js +6 -0
  84. package/lib/module/classes/HMSRtmpStreamingState.js.map +1 -1
  85. package/lib/module/classes/HMSSDK.js +352 -111
  86. package/lib/module/classes/HMSSDK.js.map +1 -1
  87. package/lib/module/classes/HMSServerRecordingState.js +3 -0
  88. package/lib/module/classes/HMSServerRecordingState.js.map +1 -1
  89. package/lib/module/classes/HMSUpdateListenerActions.js +5 -0
  90. package/lib/module/classes/HMSUpdateListenerActions.js.map +1 -1
  91. package/lib/module/index.js +6 -0
  92. package/lib/module/index.js.map +1 -1
  93. package/lib/typescript/classes/HMSBrowserRecordingState.d.ts +4 -0
  94. package/lib/typescript/classes/HMSEncoder.d.ts +21 -0
  95. package/lib/typescript/classes/HMSHLSVariant.d.ts +8 -8
  96. package/lib/typescript/classes/HMSLocalAudioStats.d.ts +10 -0
  97. package/lib/typescript/classes/HMSLocalVideoStats.d.ts +15 -0
  98. package/lib/typescript/classes/HMSPeerUpdate.d.ts +3 -1
  99. package/lib/typescript/classes/HMSPermissions.d.ts +2 -2
  100. package/lib/typescript/classes/HMSRTCStats.d.ts +18 -0
  101. package/lib/typescript/classes/HMSRTCStatsReport.d.ts +11 -0
  102. package/lib/typescript/classes/HMSRemoteAudioStats.d.ts +14 -0
  103. package/lib/typescript/classes/HMSRemoteVideoStats.d.ts +19 -0
  104. package/lib/typescript/classes/HMSRoom.d.ts +2 -0
  105. package/lib/typescript/classes/HMSRoomUpdate.d.ts +2 -1
  106. package/lib/typescript/classes/HMSRtmpStreamingState.d.ts +4 -0
  107. package/lib/typescript/classes/HMSSDK.d.ts +16 -1
  108. package/lib/typescript/classes/HMSServerRecordingState.d.ts +2 -0
  109. package/lib/typescript/classes/HMSUpdateListenerActions.d.ts +6 -1
  110. package/lib/typescript/index.d.ts +6 -0
  111. package/package.json +1 -1
  112. package/react-native-hms.podspec +1 -1
  113. package/src/classes/HMSBrowserRecordingState.ts +10 -1
  114. package/src/classes/HMSEncoder.ts +162 -4
  115. package/src/classes/HMSHLSVariant.ts +8 -8
  116. package/src/classes/HMSLocalAudioStats.ts +15 -0
  117. package/src/classes/HMSLocalVideoStats.ts +23 -0
  118. package/src/classes/HMSPeerUpdate.ts +2 -0
  119. package/src/classes/HMSPermissions.ts +3 -3
  120. package/src/classes/HMSRTCStats.ts +27 -0
  121. package/src/classes/HMSRTCStatsReport.ts +17 -0
  122. package/src/classes/HMSRemoteAudioStats.ts +21 -0
  123. package/src/classes/HMSRemoteVideoStats.ts +29 -0
  124. package/src/classes/HMSRoom.ts +3 -0
  125. package/src/classes/HMSRoomUpdate.ts +1 -0
  126. package/src/classes/HMSRtmpStreamingState.ts +10 -1
  127. package/src/classes/HMSSDK.tsx +233 -10
  128. package/src/classes/HMSServerRecordingState.ts +7 -1
  129. package/src/classes/HMSUpdateListenerActions.ts +5 -0
  130. package/src/index.ts +6 -0
package/ios/HmsSDK.swift CHANGED
@@ -8,15 +8,16 @@
8
8
  import Foundation
9
9
  import HMSSDK
10
10
 
11
-
12
11
  class HmsSDK: HMSUpdateListener, HMSPreviewListener {
13
-
12
+
14
13
  var hms: HMSSDK?
15
14
  var config: HMSConfig?
16
15
  var recentRoleChangeRequest: HMSRoleChangeRequest?
17
16
  var delegate: HmsManager?
18
17
  var id: String = "12345"
19
-
18
+ var rtcStatsAttached = false
19
+ var recentPreviewTracks: [HMSTrack]? = []
20
+
20
21
  let ON_PREVIEW = "ON_PREVIEW"
21
22
  let ON_JOIN = "ON_JOIN"
22
23
  let ON_ROOM_UPDATE = "ON_ROOM_UPDATE"
@@ -29,9 +30,14 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
29
30
  let ON_SPEAKER = "ON_SPEAKER"
30
31
  let RECONNECTING = "RECONNECTING"
31
32
  let RECONNECTED = "RECONNECTED"
32
-
33
+ let ON_RTC_STATS = "ON_RTC_STATS"
34
+ let ON_LOCAL_AUDIO_STATS = "ON_LOCAL_AUDIO_STATS"
35
+ let ON_LOCAL_VIDEO_STATS = "ON_LOCAL_VIDEO_STATS"
36
+ let ON_REMOTE_AUDIO_STATS = "ON_REMOTE_AUDIO_STATS"
37
+ let ON_REMOTE_VIDEO_STATS = "ON_REMOTE_VIDEO_STATS"
38
+
33
39
  // MARK: - Setup
34
-
40
+
35
41
  init(data: NSDictionary?, delegate manager: HmsManager?, uid id: String) {
36
42
  let videoSettings = HmsHelper.getLocalVideoSettings(data?.value(forKey: "video") as? NSDictionary)
37
43
  let audioSettings = HmsHelper.getLocalAudioSettings(data?.value(forKey: "audio") as? NSDictionary)
@@ -44,27 +50,27 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
44
50
  self.delegate = manager
45
51
  self.id = id
46
52
  }
47
-
53
+
48
54
  // MARK: - HMS SDK Actions
49
-
55
+
50
56
  private var previewInProgress = false
51
57
 
52
58
  func preview(_ credentials: NSDictionary) {
53
-
59
+
54
60
  guard !previewInProgress else {
55
61
  let error = HMSError(id: "PREVIEW", code: .joinErrorServer, message: "PREVIEW_IS_IN_PROGRESS", params: ["function": #function, "credentials": credentials])
56
62
  on(error: error)
57
63
  return
58
64
  }
59
-
65
+
60
66
  guard let authToken = credentials.value(forKey: "authToken") as? String,
61
67
  let user = credentials.value(forKey: "username") as? String
62
68
  else {
63
69
  let error = HMSError(id: "101", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
64
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
70
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
65
71
  return
66
72
  }
67
-
73
+
68
74
  let metadata = credentials.value(forKey: "metadata") as? String
69
75
  DispatchQueue.main.async { [weak self] in
70
76
  guard let strongSelf = self else { return }
@@ -79,25 +85,57 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
79
85
  }
80
86
  }
81
87
 
88
+ func previewForRole(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
89
+ guard let role = data.value(forKey: "role") as? String
90
+ else {
91
+ let error = HMSError(id: "111", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
92
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
93
+ reject?(error.message, "FAILED_TO_INITIATE_PREVIEW_FOR_ROLE",nil)
94
+ return
95
+ }
96
+
97
+ let roleObj = HmsHelper.getRoleFromRoleName(role, roles: hms?.roles)
98
+
99
+ if let extractedRole = roleObj {
100
+ hms?.preview(role: extractedRole, completion: { tracks, error in
101
+ if (error != nil) {
102
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
103
+ reject?(error?.message, error?.localizedDescription, nil)
104
+ return
105
+ }
106
+ self.recentPreviewTracks = tracks
107
+
108
+ let decodedTracks = HmsDecoder.getAllTracks(tracks ?? [])
109
+
110
+ resolve?(["success": true, "tracks": decodedTracks])
111
+ return
112
+ })
113
+ }
114
+ }
82
115
 
116
+ func cancelPreview() {
117
+ self.recentPreviewTracks = []
118
+ hms?.cancelPreview()
119
+ }
120
+
83
121
  func join(_ credentials: NSDictionary) {
84
-
122
+
85
123
  guard !previewInProgress else {
86
124
  let error = HMSError(id: "PREVIEW", code: .joinErrorServer, message: "PREVIEW_IS_IN_PROGRESS", params: ["function": #function, "credentials": credentials])
87
125
  on(error: error)
88
126
  return
89
127
  }
90
-
128
+
91
129
  guard let authToken = credentials.value(forKey: "authToken") as? String,
92
130
  let user = credentials.value(forKey: "username") as? String
93
131
  else {
94
132
  let error = HMSError(id: "102", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
95
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
133
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
96
134
  return
97
135
  }
98
136
 
99
137
  let metadata = credentials.value(forKey: "metadata") as? String
100
-
138
+
101
139
  DispatchQueue.main.async { [weak self] in
102
140
  guard let strongSelf = self else { return }
103
141
  if let config = strongSelf.config {
@@ -113,68 +151,68 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
113
151
  }
114
152
  }
115
153
  }
116
-
154
+
117
155
  func setLocalMute(_ data: NSDictionary) {
118
156
  guard let isMute = data.value(forKey: "isMute") as? Bool
119
157
  else {
120
158
  let error = HMSError(id: "106", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
121
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
159
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
122
160
  return
123
161
  }
124
-
162
+
125
163
  DispatchQueue.main.async { [weak self] in
126
164
  self?.hms?.localPeer?.localAudioTrack()?.setMute(isMute)
127
165
  }
128
166
  }
129
-
167
+
130
168
  func setLocalVideoMute(_ data: NSDictionary) {
131
169
  guard let isMute = data.value(forKey: "isMute") as? Bool
132
170
  else {
133
171
  let error = HMSError(id: "107", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
134
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
172
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
135
173
  return
136
174
  }
137
-
175
+
138
176
  DispatchQueue.main.async { [weak self] in
139
177
  self?.hms?.localPeer?.localVideoTrack()?.setMute(isMute)
140
178
  }
141
179
  }
142
-
180
+
143
181
  func switchCamera() {
144
182
  DispatchQueue.main.async { [weak self] in
145
183
  self?.hms?.localPeer?.localVideoTrack()?.switchCamera()
146
184
  }
147
185
  }
148
-
186
+
149
187
  func leave(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
150
188
  DispatchQueue.main.async { [weak self] in
151
189
  guard let strongSelf = self else { return }
152
190
  self?.config = nil
153
191
  self?.recentRoleChangeRequest = nil
154
192
  self?.hms?.leave({ success, error in
155
- if(success){
193
+ if success {
156
194
  resolve?("")
157
- }else{
158
- strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["event": strongSelf.ON_ERROR, "error": HmsDecoder.getError(error), "id":strongSelf.id])
159
- reject?(nil, "error in leave",nil)
195
+ } else {
196
+ strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["event": strongSelf.ON_ERROR, "error": HmsDecoder.getError(error), "id": strongSelf.id])
197
+ reject?(nil, "error in leave", nil)
160
198
  }
161
199
  })
162
200
  }
163
201
  }
164
-
202
+
165
203
  func sendBroadcastMessage(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
166
204
  guard let message = data.value(forKey: "message") as? String
167
205
  else {
168
206
  let error = HMSError(id: "108", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
169
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
207
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
170
208
  return
171
209
  }
172
-
210
+
173
211
  let type = data.value(forKey: "type") as? String ?? "chat"
174
-
212
+
175
213
  DispatchQueue.main.async { [weak self] in
176
214
  self?.hms?.sendBroadcastMessage(type: type, message: message, completion: { message, error in
177
- if (error == nil) {
215
+ if error == nil {
178
216
  resolve?(["success": true, "data": ["sender": message?.sender?.name ?? "", "message": message?.message ?? "", "type": message?.type]])
179
217
  return
180
218
  } else {
@@ -185,21 +223,21 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
185
223
  })
186
224
  }
187
225
  }
188
-
226
+
189
227
  func sendGroupMessage(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
190
228
  guard let message = data.value(forKey: "message") as? String,
191
229
  let targetedRoles = data.value(forKey: "roles") as? [String]
192
230
  else {
193
231
  let error = HMSError(id: "109", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
194
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
232
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
195
233
  return
196
234
  }
197
-
235
+
198
236
  let type = data.value(forKey: "type") as? String ?? "chat"
199
237
  DispatchQueue.main.async { [weak self] in
200
238
  let encodedTargetedRoles = HmsHelper.getRolesFromRoleNames(targetedRoles, roles: self?.hms?.roles)
201
239
  self?.hms?.sendGroupMessage(type: type, message: message, roles: encodedTargetedRoles, completion: { message, error in
202
- if (error == nil) {
240
+ if error == nil {
203
241
  resolve?(["success": true, "data": ["sender": message?.sender?.name ?? "", "message": message?.message ?? "", "type": message?.type]])
204
242
  return
205
243
  } else {
@@ -210,21 +248,21 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
210
248
  })
211
249
  }
212
250
  }
213
-
251
+
214
252
  func sendDirectMessage(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
215
253
  guard let message = data.value(forKey: "message") as? String,
216
254
  let peerId = data.value(forKey: "peerId") as? String
217
255
  else {
218
256
  let error = HMSError(id: "110", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
219
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
257
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
220
258
  return
221
259
  }
222
-
260
+
223
261
  let type = data.value(forKey: "type") as? String ?? "chat"
224
262
  DispatchQueue.main.async { [weak self] in
225
263
  guard let peer = HmsHelper.getRemotePeerFromPeerId(peerId, remotePeers: self?.hms?.remotePeers) else { return }
226
264
  self?.hms?.sendDirectMessage(type: type, message: message, peer: peer, completion: { message, error in
227
- if (error == nil) {
265
+ if error == nil {
228
266
  resolve?(["success": true, "data": ["sender": message?.sender?.name ?? "", "message": message?.message ?? "", "type": message?.type]])
229
267
  return
230
268
  } else {
@@ -235,124 +273,124 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
235
273
  })
236
274
  }
237
275
  }
238
-
276
+
239
277
  func acceptRoleChange(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
240
-
278
+
241
279
  DispatchQueue.main.async { [weak self] in
242
-
280
+
243
281
  guard let request = self?.recentRoleChangeRequest else { return }
244
-
282
+
245
283
  self?.hms?.accept(changeRole: request, completion: { success, error in
246
- if(success) {
284
+ if success {
247
285
  resolve?(["success": true])
248
- } else{
249
- self?.delegate?.emitEvent("ON_ERROR", ["event": self?.ON_ERROR ?? "", "error": HmsDecoder.getError(error), "id":self?.id ?? "12345"])
250
- reject?(error?.message, error?.localizedDescription,nil)
286
+ } else {
287
+ self?.delegate?.emitEvent("ON_ERROR", ["event": self?.ON_ERROR ?? "", "error": HmsDecoder.getError(error), "id": self?.id ?? "12345"])
288
+ reject?(error?.message, error?.localizedDescription, nil)
251
289
  }
252
290
  })
253
-
291
+ self?.recentPreviewTracks = []
254
292
  self?.recentRoleChangeRequest = nil
255
293
  }
256
294
  }
257
-
295
+
258
296
  func changeRole(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
259
-
297
+
260
298
  guard let peerId = data.value(forKey: "peerId") as? String,
261
299
  let role = data.value(forKey: "role") as? String
262
300
  else {
263
301
  let error = HMSError(id: "111", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
264
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
302
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
265
303
  return
266
304
  }
267
-
305
+
268
306
  let force = data.value(forKey: "force") as? Bool ?? false
269
-
307
+
270
308
  DispatchQueue.main.async { [weak self] in
271
- guard let peer = HmsHelper.getPeerFromPeerId(peerId, remotePeers: self?.hms?.remotePeers, localPeer:self?.hms?.localPeer),
309
+ guard let peer = HmsHelper.getPeerFromPeerId(peerId, remotePeers: self?.hms?.remotePeers, localPeer: self?.hms?.localPeer),
272
310
  let role = HmsHelper.getRoleFromRoleName(role, roles: self?.hms?.roles)
273
311
  else { return }
274
-
312
+
275
313
  self?.hms?.changeRole(for: peer, to: role, force: force, completion: { success, error in
276
- if(success) {
314
+ if success {
277
315
  resolve?(["success": true])
278
- } else{
279
- self?.delegate?.emitEvent("ON_ERROR", ["event": self?.ON_ERROR ?? "", "error": HmsDecoder.getError(error), "id":self?.id ?? "12345"])
280
- reject?(error?.message, error?.localizedDescription,nil)
316
+ } else {
317
+ self?.delegate?.emitEvent("ON_ERROR", ["event": self?.ON_ERROR ?? "", "error": HmsDecoder.getError(error), "id": self?.id ?? "12345"])
318
+ reject?(error?.message, error?.localizedDescription, nil)
281
319
  }
282
320
  })
283
321
  }
284
322
  }
285
-
323
+
286
324
  func changeTrackState(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
287
-
325
+
288
326
  guard let trackId = data.value(forKey: "trackId") as? String
289
327
  else {
290
328
  let error = HMSError(id: "112", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
291
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
329
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
292
330
  return
293
331
  }
294
-
332
+
295
333
  let mute = data.value(forKey: "mute") as? Bool ?? true
296
-
334
+
297
335
  DispatchQueue.main.async { [weak self] in
298
336
  guard let remotePeers = self?.hms?.remotePeers,
299
337
  let track = HmsHelper.getTrackFromTrackId(trackId, remotePeers)
300
338
  else { return }
301
339
 
302
340
  self?.hms?.changeTrackState(for: track, mute: mute, completion: { success, error in
303
- if(success) {
341
+ if success {
304
342
  resolve?(["success": true])
305
- } else{
306
- self?.delegate?.emitEvent("ON_ERROR", ["event": self?.ON_ERROR ?? "", "error": HmsDecoder.getError(error), "id":self?.id ?? "12345"])
343
+ } else {
344
+ self?.delegate?.emitEvent("ON_ERROR", ["event": self?.ON_ERROR ?? "", "error": HmsDecoder.getError(error), "id": self?.id ?? "12345"])
307
345
  reject?(error?.message, error?.localizedDescription, nil)
308
346
  }
309
347
  })
310
348
  }
311
349
  }
312
-
350
+
313
351
  func changeTrackStateForRoles(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
314
-
352
+
315
353
  guard let mute = data.value(forKey: "mute") as? Bool
316
354
  else {
317
355
  let error = HMSError(id: "113", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
318
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
356
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
319
357
  return
320
358
  }
321
359
  let source = data.value(forKey: "source") as? String
322
360
  let targetedRoles = data.value(forKey: "roles") as? [String]
323
361
  let type = data.value(forKey: "type") as? String
324
362
 
325
- var decodeType: HMSTrackKind? = nil;
326
- if( type != nil){
327
- if( type == "AUDIO") {
363
+ var decodeType: HMSTrackKind?
364
+ if type != nil {
365
+ if type == "AUDIO" {
328
366
  decodeType = HMSTrackKind.audio
329
- }else {
367
+ } else {
330
368
  decodeType = HMSTrackKind.video
331
369
  }
332
370
  }
333
-
371
+
334
372
  DispatchQueue.main.async { [weak self] in
335
373
  let encodedTargetedRoles = HmsHelper.getRolesFromRoleNames(targetedRoles, roles: self?.hms?.roles)
336
374
  self?.hms?.changeTrackState(mute: mute, for: decodeType, source: source, roles: encodedTargetedRoles, completion: { success, error in
337
- if(success) {
375
+ if success {
338
376
  resolve?(["success": true])
339
- } else{
340
- self?.delegate?.emitEvent("ON_ERROR", ["event": self?.ON_ERROR ?? "", "error": HmsDecoder.getError(error), "id":self?.id ?? "12345"])
341
- reject?(error?.message, error?.localizedDescription,nil)
377
+ } else {
378
+ self?.delegate?.emitEvent("ON_ERROR", ["event": self?.ON_ERROR ?? "", "error": HmsDecoder.getError(error), "id": self?.id ?? "12345"])
379
+ reject?(error?.message, error?.localizedDescription, nil)
342
380
  }
343
381
  })
344
382
  }
345
383
  }
346
-
384
+
347
385
  func isMute(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
348
386
  guard let trackId = data.value(forKey: "trackId") as? String
349
387
  else {
350
388
  reject?(nil, "NO_SDK_ID", nil)
351
389
  let error = HMSError(id: "114", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
352
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
390
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
353
391
  return
354
392
  }
355
-
393
+
356
394
  DispatchQueue.main.async { [weak self] in
357
395
  guard let strongSelf = self else { return }
358
396
  guard let localPeer = self?.hms?.localPeer,
@@ -362,7 +400,7 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
362
400
  let track = HmsHelper.getTrackFromTrackId(trackId, remotePeers)
363
401
  else {
364
402
  let error = HMSError(id: "120", code: HMSErrorCode.genericErrorUnknown, message: "NOT_FOUND")
365
- strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["event": strongSelf.ON_ERROR, "error": HmsDecoder.getError(error), "id":strongSelf.id])
403
+ strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["event": strongSelf.ON_ERROR, "error": HmsDecoder.getError(error), "id": strongSelf.id])
366
404
  reject?(nil, "NOT_FOUND", nil)
367
405
  return
368
406
  }
@@ -374,64 +412,63 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
374
412
  resolve?(mute)
375
413
  }
376
414
  }
377
-
415
+
378
416
  func removePeer(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
379
-
417
+
380
418
  guard let peerId = data.value(forKey: "peerId") as? String
381
419
  else {
382
420
  let error = HMSError(id: "115", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
383
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
421
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
384
422
  return
385
423
  }
386
-
424
+
387
425
  let reason = data.value(forKey: "reason") as? String
388
-
426
+
389
427
  DispatchQueue.main.async { [weak self] in
390
428
 
391
429
  guard let remotePeers = self?.hms?.remotePeers,
392
430
  let peer = HmsHelper.getRemotePeerFromPeerId(peerId, remotePeers: remotePeers)
393
431
  else { return }
394
-
432
+
395
433
  self?.hms?.removePeer(peer, reason: reason ?? "Removed from room", completion: { success, error in
396
- if(success) {
434
+ if success {
397
435
  resolve?(["success": true])
398
- } else{
399
- self?.delegate?.emitEvent("ON_ERROR", ["event": self?.ON_ERROR ?? "", "error": HmsDecoder.getError(error), "id":self?.id ?? "12345"])
400
- reject?(error?.message, error?.localizedDescription,nil)
436
+ } else {
437
+ self?.delegate?.emitEvent("ON_ERROR", ["event": self?.ON_ERROR ?? "", "error": HmsDecoder.getError(error), "id": self?.id ?? "12345"])
438
+ reject?(error?.message, error?.localizedDescription, nil)
401
439
  }
402
440
  })
403
441
  }
404
442
  }
405
-
406
-
443
+
407
444
  func endRoom(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
408
-
445
+
409
446
  guard let lock = data.value(forKey: "lock") as? Bool,
410
447
  let reason = data.value(forKey: "reason") as? String
411
448
  else {
412
449
  let error = HMSError(id: "116", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
413
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
450
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
414
451
  return
415
452
  }
416
-
453
+
417
454
  DispatchQueue.main.async { [weak self] in
418
455
  self?.hms?.endRoom(lock: lock, reason: reason, completion: { success, error in
419
- if(success) {
456
+ if success {
420
457
  resolve?(["success": true])
421
- } else{
422
- self?.delegate?.emitEvent("ON_ERROR", ["event": self?.ON_ERROR ?? "", "error": HmsDecoder.getError(error), "id":self?.id ?? "12345"])
423
- reject?(error?.message, error?.localizedDescription,nil)
458
+ } else {
459
+ self?.delegate?.emitEvent("ON_ERROR", ["event": self?.ON_ERROR ?? "", "error": HmsDecoder.getError(error), "id": self?.id ?? "12345"])
460
+ reject?(error?.message, error?.localizedDescription, nil)
424
461
  }
425
462
  })
426
463
  }
427
464
  }
428
-
465
+
429
466
  func isPlaybackAllowed(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
430
467
  guard let trackId = data.value(forKey: "trackId") as? String
431
468
  else {
432
469
  reject?(nil, "NOT_FOUND", nil)
433
470
  let error = HMSError(id: "117", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
434
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
471
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
435
472
  return
436
473
  }
437
474
  DispatchQueue.main.async { [weak self] in
@@ -439,41 +476,41 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
439
476
  guard let remotePeers = self?.hms?.remotePeers
440
477
  else {
441
478
  let error = HMSError(id: "121", code: HMSErrorCode.genericErrorUnknown, message: "NOT_FOUND")
442
- strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["event": strongSelf.ON_ERROR, "error": HmsDecoder.getError(error), "id":strongSelf.id])
479
+ strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["event": strongSelf.ON_ERROR, "error": HmsDecoder.getError(error), "id": strongSelf.id])
443
480
  reject?(nil, "NOT_FOUND", nil)
444
481
  return
445
482
  }
446
483
  let remoteAudioTrack = HmsHelper.getRemoteAudioTrackFromTrackId(trackId, remotePeers)
447
484
  let remoteVideoTrack = HmsHelper.getRemoteVideoTrackFromTrackId(trackId, remotePeers)
448
- if (remoteAudioTrack != nil) {
485
+ if remoteAudioTrack != nil {
449
486
  let isPlaybackAllowed = remoteAudioTrack?.isPlaybackAllowed()
450
487
  resolve?(isPlaybackAllowed)
451
488
  return
452
- } else if (remoteVideoTrack != nil) {
489
+ } else if remoteVideoTrack != nil {
453
490
  let isPlaybackAllowed = remoteVideoTrack?.isPlaybackAllowed()
454
491
  resolve?(isPlaybackAllowed)
455
492
  return
456
493
  } else {
457
494
  let error = HMSError(id: "122", code: HMSErrorCode.genericErrorUnknown, message: "NOT_FOUND")
458
- strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["event": strongSelf.ON_ERROR, "error": HmsDecoder.getError(error), "id":strongSelf.id])
459
- reject?(nil, "NOT_FOUND",nil)
495
+ strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["event": strongSelf.ON_ERROR, "error": HmsDecoder.getError(error), "id": strongSelf.id])
496
+ reject?(nil, "NOT_FOUND", nil)
460
497
  return
461
498
  }
462
499
  }
463
500
  }
464
-
501
+
465
502
  func getRoom(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
466
503
  let roomData = HmsDecoder.getHmsRoom(hms?.room)
467
-
504
+
468
505
  resolve?(roomData)
469
506
  }
470
-
507
+
471
508
  func setPlaybackAllowed(_ data: NSDictionary) {
472
509
  guard let trackId = data.value(forKey: "trackId") as? String,
473
510
  let playbackAllowed = data.value(forKey: "playbackAllowed") as? Bool
474
511
  else {
475
512
  let error = HMSError(id: "118", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
476
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
513
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
477
514
  return
478
515
  }
479
516
  DispatchQueue.main.async { [weak self] in
@@ -483,33 +520,33 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
483
520
  }
484
521
  let remoteAudioTrack = HmsHelper.getRemoteAudioTrackFromTrackId(trackId, remotePeers)
485
522
  let remoteVideoTrack = HmsHelper.getRemoteVideoTrackFromTrackId(trackId, remotePeers)
486
- if (remoteAudioTrack != nil) {
487
- if(playbackAllowed){
523
+ if remoteAudioTrack != nil {
524
+ if playbackAllowed {
488
525
  remoteAudioTrack?.setPlaybackAllowed(playbackAllowed)
489
- }else {
526
+ } else {
490
527
  remoteAudioTrack?.setPlaybackAllowed(playbackAllowed)
491
528
  }
492
- } else if (remoteVideoTrack != nil) {
529
+ } else if remoteVideoTrack != nil {
493
530
  remoteVideoTrack?.setPlaybackAllowed(playbackAllowed)
494
531
  }
495
532
  }
496
533
  }
497
-
534
+
498
535
  func changeMetadata(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
499
536
  guard let metadata = data.value(forKey: "metadata") as? String
500
537
  else {
501
538
  let error = HMSError(id: "123", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
502
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
539
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
503
540
  reject?(nil, "REQUIRED_KEYS_NOT_FOUND", nil)
504
541
  return
505
542
  }
506
-
543
+
507
544
  hms?.change(metadata: metadata, completion: { success, error in
508
- if (success) {
545
+ if success {
509
546
  resolve?(["success": success])
510
547
  return
511
548
  } else {
512
- self.delegate?.emitEvent(self.ON_ERROR, ["event": self.ON_ERROR, "error": HmsDecoder.getError(error), "id":self.id])
549
+ self.delegate?.emitEvent(self.ON_ERROR, ["event": self.ON_ERROR, "error": HmsDecoder.getError(error), "id": self.id])
513
550
  reject?(error?.message, error?.localizedDescription, nil)
514
551
  return
515
552
  }
@@ -521,134 +558,160 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
521
558
  let volume = data.value(forKey: "volume") as? Double
522
559
  else {
523
560
  let error = HMSError(id: "124", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
524
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
561
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
525
562
  return
526
563
  }
527
564
 
528
565
  DispatchQueue.main.async { [weak self] in
529
566
  guard let strongSelf = self else { return }
530
567
  let remotePeers = self?.hms?.remotePeers
531
-
568
+
532
569
  let remoteAudioTrack = HmsHelper.getRemoteAudioAuxiliaryTrackFromTrackId(trackId, remotePeers)
533
-
534
- if (remoteAudioTrack != nil) {
570
+
571
+ if remoteAudioTrack != nil {
535
572
  remoteAudioTrack?.setVolume(volume)
536
573
  } else {
537
574
  let error = HMSError(id: "125", code: HMSErrorCode.genericErrorUnknown, message: "TRACK_ID_NOT_FOUND_IN_REMOTE_TRACKS")
538
- strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["event": strongSelf.ON_ERROR, "error": HmsDecoder.getError(error), "id":strongSelf.id])
575
+ strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["event": strongSelf.ON_ERROR, "error": HmsDecoder.getError(error), "id": strongSelf.id])
539
576
  }
540
577
  }
541
578
  }
542
-
579
+
543
580
  func startRTMPOrRecording(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
544
581
  guard let record = data.value(forKey: "record") as? Bool
545
582
  else {
546
583
  let error = HMSError(id: "126", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
547
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
584
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
548
585
  return
549
586
  }
550
-
587
+
551
588
  let meetingString = data.value(forKey: "meetingURL") as? String
552
589
  let rtmpStrings = data.value(forKey: "rtmpURLs") as? [String]
553
-
554
- var meetingUrl: URL? = nil
590
+
591
+ var meetingUrl: URL?
555
592
  if let meetLink = meetingString {
556
593
  meetingUrl = URL(string: meetLink)
557
594
  } else {
558
595
  let error = HMSError(id: "127", code: HMSErrorCode.genericErrorUnknown, message: "INVALID_MEETING_URL_PASSED")
559
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
596
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
560
597
  }
561
-
598
+
562
599
  let URLs = HmsHelper.getRtmpUrls(rtmpStrings)
563
-
564
-
600
+
565
601
  let config = HMSRTMPConfig(meetingURL: meetingUrl, rtmpURLs: URLs, record: record)
566
602
  hms?.startRTMPOrRecording(config: config, completion: { success, error in
567
- if (success) {
603
+ if success {
568
604
  let roomData = HmsDecoder.getHmsRoom(self.hms?.room)
569
605
  let type = self.getString(from: HMSRoomUpdate.browserRecordingStateUpdated)
570
-
606
+
571
607
  let localPeerData = HmsDecoder.getHmsLocalPeer(self.hms?.localPeer)
572
608
  let remotePeerData = HmsDecoder.getHmsRemotePeers(self.hms?.remotePeers)
573
609
  self.delegate?.emitEvent(self.ON_ROOM_UPDATE, ["event": self.ON_ROOM_UPDATE, "id": self.id, "type": type, "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData])
574
610
  resolve?(["success": success])
575
611
  return
576
612
  } else {
577
- self.delegate?.emitEvent(self.ON_ERROR, ["event": self.ON_ERROR, "error": HmsDecoder.getError(error), "id":self.id])
613
+ self.delegate?.emitEvent(self.ON_ERROR, ["event": self.ON_ERROR, "error": HmsDecoder.getError(error), "id": self.id])
578
614
  reject?(error?.message, error?.localizedDescription, nil)
579
615
  return
580
616
  }
581
617
  })
582
618
  }
583
-
619
+
584
620
  func stopRtmpAndRecording(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
585
621
  hms?.stopRTMPAndRecording(completion: { success, error in
586
- if (success) {
622
+ if success {
587
623
  let roomData = HmsDecoder.getHmsRoom(self.hms?.room)
588
624
  let type = self.getString(from: HMSRoomUpdate.browserRecordingStateUpdated)
589
-
625
+
590
626
  let localPeerData = HmsDecoder.getHmsLocalPeer(self.hms?.localPeer)
591
627
  let remotePeerData = HmsDecoder.getHmsRemotePeers(self.hms?.remotePeers)
592
628
  self.delegate?.emitEvent(self.ON_ROOM_UPDATE, ["event": self.ON_ROOM_UPDATE, "id": self.id, "type": type, "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData])
593
629
  resolve?(["success": success])
594
630
  return
595
631
  } else {
596
- self.delegate?.emitEvent(self.ON_ERROR, ["event": self.ON_ERROR, "error": HmsDecoder.getError(error), "id":self.id])
632
+ self.delegate?.emitEvent(self.ON_ERROR, ["event": self.ON_ERROR, "error": HmsDecoder.getError(error), "id": self.id])
597
633
  reject?(error?.message, error?.localizedDescription, nil)
598
634
  return
599
635
  }
600
636
  })
601
637
  }
602
-
638
+
603
639
  func startHLSStreaming(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
604
640
  guard let meetingURLVariants = data.value(forKey: "meetingURLVariants") as? [[String: Any]]?
605
641
  else {
606
642
  let error = HMSError(id: "126", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
607
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
643
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
608
644
  return
609
645
  }
610
-
646
+
611
647
  let hlsMeetingUrlVariant = HmsHelper.getHMSHLSMeetingURLVariants(meetingURLVariants)
612
648
  let config = HMSHLSConfig(variants: hlsMeetingUrlVariant)
613
-
649
+
614
650
  hms?.startHLSStreaming(config: config, completion: { success, error in
615
- if (success) {
651
+ if success {
616
652
  let roomData = HmsDecoder.getHmsRoom(self.hms?.room)
617
653
  let type = self.getString(from: HMSRoomUpdate.hlsStreamingStateUpdated)
618
-
654
+
619
655
  let localPeerData = HmsDecoder.getHmsLocalPeer(self.hms?.localPeer)
620
656
  let remotePeerData = HmsDecoder.getHmsRemotePeers(self.hms?.remotePeers)
621
657
  self.delegate?.emitEvent(self.ON_ROOM_UPDATE, ["event": self.ON_ROOM_UPDATE, "id": self.id, "type": type, "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData])
622
658
  resolve?(["success": success])
623
659
  return
624
660
  } else {
625
- self.delegate?.emitEvent(self.ON_ERROR, ["event": self.ON_ERROR, "error": HmsDecoder.getError(error), "id":self.id])
661
+ self.delegate?.emitEvent(self.ON_ERROR, ["event": self.ON_ERROR, "error": HmsDecoder.getError(error), "id": self.id])
626
662
  reject?(error?.message, error?.localizedDescription, nil)
627
663
  return
628
664
  }
629
665
  })
630
666
  }
631
-
667
+
632
668
  func stopHLSStreaming(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
633
669
  hms?.stopHLSStreaming(config: nil, completion: { success, error in
634
- if (success) {
670
+ if success {
635
671
  let roomData = HmsDecoder.getHmsRoom(self.hms?.room)
636
672
  let type = self.getString(from: HMSRoomUpdate.browserRecordingStateUpdated)
637
-
673
+
638
674
  let localPeerData = HmsDecoder.getHmsLocalPeer(self.hms?.localPeer)
639
675
  let remotePeerData = HmsDecoder.getHmsRemotePeers(self.hms?.remotePeers)
640
676
  self.delegate?.emitEvent(self.ON_ROOM_UPDATE, ["event": self.ON_ROOM_UPDATE, "id": self.id, "type": type, "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData])
641
677
  resolve?(["success": success])
642
678
  return
643
679
  } else {
644
- self.delegate?.emitEvent(self.ON_ERROR, ["event": self.ON_ERROR, "error": HmsDecoder.getError(error), "id":self.id])
680
+ self.delegate?.emitEvent(self.ON_ERROR, ["event": self.ON_ERROR, "error": HmsDecoder.getError(error), "id": self.id])
645
681
  reject?(error?.message, error?.localizedDescription, nil)
646
682
  return
647
683
  }
648
684
  })
649
685
  }
650
686
 
651
- //TODO: to be implemented after volume is exposed for iOS
687
+ func changeName(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
688
+ guard let name = data.value(forKey: "name") as? String
689
+ else {
690
+ let error = HMSError(id: "123", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
691
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
692
+ reject?(nil, "REQUIRED_KEYS_NOT_FOUND", nil)
693
+ return
694
+ }
695
+
696
+ hms?.change(name: name) { success, error in
697
+ if success {
698
+ resolve?(["success": success])
699
+ } else {
700
+ self.delegate?.emitEvent(self.ON_ERROR, ["event": self.ON_ERROR, "error": HmsDecoder.getError(error), "id": self.id])
701
+ reject?(error?.message, error?.localizedDescription, nil)
702
+ }
703
+ }
704
+ }
705
+
706
+ func enableRTCStats() {
707
+ rtcStatsAttached = true
708
+ }
709
+
710
+ func disableRTCStats() {
711
+ rtcStatsAttached = false
712
+ }
713
+
714
+ // TODO: to be implemented after volume is exposed for iOS
652
715
  // func getVolume(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
653
716
  // guard let trackId = data.value(forKey: "trackId") as? String
654
717
  // else {
@@ -662,7 +725,7 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
662
725
  //
663
726
  // }
664
727
  // }
665
-
728
+
666
729
  // func setLocalVideoSettings(_ data: NSDictionary) {
667
730
  // let localVideoTrack = self.hms?.localPeer?.localVideoTrack()
668
731
  //
@@ -673,104 +736,104 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
673
736
  // }
674
737
  // localVideoTrack?.settings = settings
675
738
  // }
676
-
739
+
677
740
  // MARK: - HMS SDK Delegate Callbacks
678
-
741
+
679
742
  func on(join room: HMSRoom) {
680
743
  // Callback from join action
681
744
  let roomData = HmsDecoder.getHmsRoom(room)
682
745
  let localPeerData = HmsDecoder.getHmsLocalPeer(hms?.localPeer)
683
746
  let remotePeerData = HmsDecoder.getHmsRemotePeers(hms?.remotePeers)
684
-
747
+
685
748
  let decodedRoles = HmsDecoder.getAllRoles(hms?.roles)
686
-
687
- self.delegate?.emitEvent(ON_JOIN, ["event": ON_JOIN, "id": self.id , "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData, "roles": decodedRoles])
749
+ self.recentPreviewTracks = []
750
+ self.delegate?.emitEvent(ON_JOIN, ["event": ON_JOIN, "id": self.id, "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData, "roles": decodedRoles])
688
751
  }
689
-
752
+
690
753
  func onPreview(room: HMSRoom, localTracks: [HMSTrack]) {
691
754
  let previewTracks = HmsDecoder.getPreviewTracks(localTracks)
692
755
  let hmsRoom = HmsDecoder.getHmsRoom(room)
693
756
  let localPeerData = HmsDecoder.getHmsLocalPeer(hms?.localPeer)
694
-
757
+
695
758
  previewInProgress = false
696
- self.delegate?.emitEvent(ON_PREVIEW, ["event": ON_PREVIEW, "id": self.id , "room": hmsRoom, "previewTracks": previewTracks, "localPeer": localPeerData])
759
+ self.delegate?.emitEvent(ON_PREVIEW, ["event": ON_PREVIEW, "id": self.id, "room": hmsRoom, "previewTracks": previewTracks, "localPeer": localPeerData])
697
760
  }
698
-
761
+
699
762
  func on(room: HMSRoom, update: HMSRoomUpdate) {
700
763
  // Listener for any updation in room
701
764
  let roomData = HmsDecoder.getHmsRoom(room)
702
765
  let type = getString(from: update)
703
-
766
+
704
767
  let localPeerData = HmsDecoder.getHmsLocalPeer(hms?.localPeer)
705
768
  let remotePeerData = HmsDecoder.getHmsRemotePeers(hms?.remotePeers)
706
-
707
- self.delegate?.emitEvent(ON_ROOM_UPDATE, ["event": ON_ROOM_UPDATE, "id": self.id , "type": type, "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData])
769
+
770
+ self.delegate?.emitEvent(ON_ROOM_UPDATE, ["event": ON_ROOM_UPDATE, "id": self.id, "type": type, "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData])
708
771
  }
709
-
772
+
710
773
  func on(peer: HMSPeer, update: HMSPeerUpdate) {
711
774
  // Listener for updates in Peers
712
775
  let roomData = HmsDecoder.getHmsRoom(hms?.room)
713
776
  let type = getString(from: update)
714
-
777
+
715
778
  let localPeerData = HmsDecoder.getHmsLocalPeer(hms?.localPeer)
716
779
  let remotePeerData = HmsDecoder.getHmsRemotePeers(hms?.remotePeers)
717
780
  let hmsPeer = HmsDecoder.getHmsPeer(peer)
718
-
781
+
719
782
  self.delegate?.emitEvent(ON_PEER_UPDATE, ["event": ON_PEER_UPDATE, "id": self.id, "type": type, "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData, "peer": hmsPeer])
720
783
  }
721
-
784
+
722
785
  func on(track: HMSTrack, update: HMSTrackUpdate, for peer: HMSPeer) {
723
786
  // Listener for updates in Tracks
724
787
  let roomData = HmsDecoder.getHmsRoom(hms?.room)
725
788
  let type = getString(from: update)
726
-
789
+
727
790
  let localPeerData = HmsDecoder.getHmsLocalPeer(hms?.localPeer)
728
791
  let remotePeerData = HmsDecoder.getHmsRemotePeers(hms?.remotePeers)
729
792
  let hmsPeer = HmsDecoder.getHmsPeer(peer)
730
793
  let hmsTrack = HmsDecoder.getHmsTrack(track)
731
-
794
+
732
795
  self.delegate?.emitEvent(ON_TRACK_UPDATE, ["event": ON_TRACK_UPDATE, "id": self.id, "room": roomData, "type": type, "localPeer": localPeerData, "remotePeers": remotePeerData, "peer": hmsPeer, "track": hmsTrack])
733
796
  }
734
-
797
+
735
798
  func on(error: HMSError) {
736
- if (previewInProgress) { previewInProgress = false }
737
- self.delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
799
+ if previewInProgress { previewInProgress = false }
800
+ self.delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
738
801
  }
739
-
802
+
740
803
  func on(message: HMSMessage) {
741
- self.delegate?.emitEvent(ON_MESSAGE, ["event": ON_MESSAGE, "id": self.id , "sender": message.sender?.name ?? "", "time": message.time, "message": message.message, "type": message.type])
804
+ self.delegate?.emitEvent(ON_MESSAGE, ["event": ON_MESSAGE, "id": self.id, "sender": message.sender?.name ?? "", "time": message.time, "message": message.message, "type": message.type])
742
805
  }
743
-
806
+
744
807
  func on(updated speakers: [HMSSpeaker]) {
745
- var speakerPeerIds: [[String : Any]] = []
808
+ var speakerPeerIds: [[String: Any]] = []
746
809
  for speaker in speakers {
747
810
  speakerPeerIds.append(["peer": HmsDecoder.getHmsPeer(speaker.peer), "level": speaker.level, "track": HmsDecoder.getHmsTrack(speaker.track)])
748
811
  }
749
- self.delegate?.emitEvent(ON_SPEAKER, ["event": ON_SPEAKER, "id": self.id , "count": speakers.count, "peers" :speakerPeerIds])
812
+ self.delegate?.emitEvent(ON_SPEAKER, ["event": ON_SPEAKER, "id": self.id, "count": speakers.count, "peers": speakerPeerIds])
750
813
  }
751
-
814
+
752
815
  func onReconnecting() {
753
816
  self.delegate?.emitEvent(RECONNECTING, ["event": RECONNECTING, "id": self.id ])
754
817
  }
755
-
818
+
756
819
  func onReconnected() {
757
820
  self.delegate?.emitEvent(RECONNECTED, ["event": RECONNECTED, "id": self.id ])
758
821
  }
759
-
822
+
760
823
  func on(roleChangeRequest: HMSRoleChangeRequest) {
761
824
  let decodedRoleChangeRequest = HmsDecoder.getHmsRoleChangeRequest(roleChangeRequest, self.id)
762
825
  recentRoleChangeRequest = roleChangeRequest
763
826
  self.delegate?.emitEvent(ON_ROLE_CHANGE_REQUEST, decodedRoleChangeRequest)
764
827
  }
765
-
828
+
766
829
  func on(changeTrackStateRequest: HMSChangeTrackStateRequest) {
767
830
  let decodedChangeTrackStateRequest = HmsDecoder.getHmsChangeTrackStateRequest(changeTrackStateRequest, id)
768
831
  delegate?.emitEvent("ON_CHANGE_TRACK_STATE_REQUEST", decodedChangeTrackStateRequest)
769
832
  }
770
-
833
+
771
834
  func on(removedFromRoom notification: HMSRemovedFromRoomNotification) {
772
835
  let requestedBy = notification.requestedBy as HMSPeer?
773
- var decodedRequestedBy: [String: Any]? = nil
836
+ var decodedRequestedBy: [String: Any]?
774
837
  if let requested = requestedBy {
775
838
  decodedRequestedBy = HmsDecoder.getHmsPeer(requested)
776
839
  }
@@ -779,17 +842,86 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
779
842
  self.delegate?.emitEvent(ON_REMOVED_FROM_ROOM, ["event": ON_REMOVED_FROM_ROOM, "id": self.id, "requestedBy": decodedRequestedBy as Any, "reason": reason, "roomEnded": roomEnded ])
780
843
  }
781
844
 
845
+ func on(rtcStats: HMSRTCStatsReport) {
846
+ if (!rtcStatsAttached) {
847
+ return
848
+ }
849
+ let video = HmsDecoder.getHMSRTCStats(rtcStats.video)
850
+ let audio = HmsDecoder.getHMSRTCStats(rtcStats.audio)
851
+ let combined = HmsDecoder.getHMSRTCStats(rtcStats.combined)
852
+
853
+ self.delegate?.emitEvent(ON_RTC_STATS, ["video": video, "audio": audio, "combined": combined, "id": self.id])
854
+ }
782
855
 
783
- // MARK: Helper Functions
856
+ func on(localAudioStats: HMSLocalAudioStats, track: HMSLocalAudioTrack, peer: HMSPeer) {
857
+ if (!rtcStatsAttached) {
858
+ return
859
+ }
860
+ let localStats = HmsDecoder.getLocalAudioStats(localAudioStats)
861
+ let localTrack = HmsDecoder.getHmsLocalAudioTrack(track)
862
+ let decodedPeer = HmsDecoder.getHmsPeer(peer)
863
+
864
+ self.delegate?.emitEvent(ON_LOCAL_AUDIO_STATS, ["localAudioStats": localStats, "track": localTrack, "peer": decodedPeer, "id": self.id])
865
+ }
866
+
867
+ func on(localVideoStats: HMSLocalVideoStats, track: HMSLocalVideoTrack, peer: HMSPeer) {
868
+ if (!rtcStatsAttached) {
869
+ return
870
+ }
871
+ let localStats = HmsDecoder.getLocalVideoStats(localVideoStats)
872
+ let decodedPeer = HmsDecoder.getHmsPeer(peer)
873
+ let localTrack = HmsDecoder.getHmsLocalVideoTrack(track)
874
+
875
+ self.delegate?.emitEvent(ON_LOCAL_VIDEO_STATS, ["localVideoStats": localStats, "track": localTrack, "peer": decodedPeer, "id": self.id])
876
+ }
877
+
878
+ func on(remoteAudioStats: HMSRemoteAudioStats, track: HMSRemoteAudioTrack, peer: HMSPeer) {
879
+ if (!rtcStatsAttached) {
880
+ return
881
+ }
882
+ let remoteStats = HmsDecoder.getRemoteAudioStats(remoteAudioStats)
883
+ let remoteTrack = HmsDecoder.getHMSRemoteAudioTrack(track)
884
+ let decodedPeer = HmsDecoder.getHmsPeer(peer)
885
+
886
+ self.delegate?.emitEvent(ON_REMOTE_AUDIO_STATS, ["remoteAudioStats": remoteStats, "track": remoteTrack, "peer": decodedPeer, "id": self.id])
887
+ }
784
888
 
785
- func muteAllPeersAudio(_ data: NSDictionary) {
889
+ func on(remoteVideoStats: HMSRemoteVideoStats, track: HMSRemoteVideoTrack, peer: HMSPeer) {
890
+ if (!rtcStatsAttached) {
891
+ return
892
+ }
893
+ let remoteStats = HmsDecoder.getRemoteVideoStats(remoteVideoStats)
894
+ let decodedPeer = HmsDecoder.getHmsPeer(peer)
895
+ let remoteTrack = HmsDecoder.getHMSRemoteVideoTrack(track)
896
+
897
+ self.delegate?.emitEvent(ON_REMOTE_VIDEO_STATS, ["remoteVideoStats": remoteStats, "track": remoteTrack, "peer": decodedPeer, "id": self.id])
898
+ }
899
+
900
+ // MARK: Helper Functions
901
+ func remoteMuteAllAudio() {
902
+ let allAudioTracks = HMSUtilities.getAllAudioTracks(in: (self.hms?.room)!!)
903
+ var customError: HMSError? = nil
904
+ for audioTrack in allAudioTracks {
905
+ self.hms?.changeTrackState(for: audioTrack, mute: true, completion: { success, error in
906
+ if success {
907
+ } else {
908
+ customError = error
909
+ }
910
+ })
911
+ }
912
+ if (customError != nil) {
913
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(customError), "id": id])
914
+ }
915
+ }
916
+
917
+ func setPlaybackForAllAudio(_ data: NSDictionary) {
786
918
  guard let mute = data.value(forKey: "mute") as? Bool
787
919
  else {
788
920
  let error = HMSError(id: "119", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
789
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
921
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
790
922
  return
791
923
  }
792
-
924
+
793
925
  DispatchQueue.main.async { [weak self] in
794
926
  let remotePeers = self?.hms?.remotePeers
795
927
  for peer in remotePeers ?? [] {
@@ -799,10 +931,10 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
799
931
  let roomData = HmsDecoder.getHmsRoom(hms?.room)
800
932
  let localPeerData = HmsDecoder.getHmsLocalPeer(hms?.localPeer)
801
933
  let remotePeerData = HmsDecoder.getHmsRemotePeers(hms?.remotePeers)
802
-
934
+
803
935
  self.delegate?.emitEvent(ON_PEER_UPDATE, ["event": ON_PEER_UPDATE, "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData])
804
936
  }
805
-
937
+
806
938
  private func getString(from update: HMSPeerUpdate) -> String {
807
939
  switch update {
808
940
  case .peerJoined:
@@ -813,11 +945,15 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
813
945
  return "ROLE_CHANGED"
814
946
  case .metadataUpdated:
815
947
  return "METADATA_CHANGED"
948
+ case .nameUpdated:
949
+ return "NAME_CHANGED"
950
+ case .defaultUpdate:
951
+ return "DEFAULT_UPDATE"
816
952
  default:
817
953
  return ""
818
954
  }
819
955
  }
820
-
956
+
821
957
  private func getString(from update: HMSTrackUpdate) -> String {
822
958
  switch update {
823
959
  case .trackAdded:
@@ -838,7 +974,7 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
838
974
  return ""
839
975
  }
840
976
  }
841
-
977
+
842
978
  func getString(from update: HMSRoomUpdate) -> String {
843
979
  switch update {
844
980
  case .roomTypeChanged:
@@ -859,8 +995,8 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
859
995
  }
860
996
  }
861
997
 
862
- //extension HmsSDK: HMSLogger {
998
+ // extension HmsSDK: HMSLogger {
863
999
  // func log(_ message: String, _ level: HMSLogLevel) {
864
1000
  //
865
1001
  // }
866
- //}
1002
+ // }