@100mslive/react-native-hms 1.8.0 → 1.9.1-beta.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.
Files changed (214) hide show
  1. package/android/build.gradle +3 -3
  2. package/android/local.properties +8 -1
  3. package/android/src/main/java/com/reactnativehmssdk/HMSAudioshareActivity.kt +1 -1
  4. package/android/src/main/java/com/reactnativehmssdk/HMSDecoder.kt +15 -5
  5. package/android/src/main/java/com/reactnativehmssdk/HMSHLSPlayer.kt +4 -3
  6. package/android/src/main/java/com/reactnativehmssdk/HMSHelper.kt +43 -5
  7. package/android/src/main/java/com/reactnativehmssdk/HMSManager.kt +147 -47
  8. package/android/src/main/java/com/reactnativehmssdk/HMSRNSDK.kt +419 -248
  9. package/android/src/main/java/com/reactnativehmssdk/HMSView.kt +24 -4
  10. package/android/src/main/java/com/reactnativehmssdk/HmsScreenshareActivity.kt +1 -1
  11. package/ios/HMSConstants.swift +1 -0
  12. package/ios/HMSDecoder.swift +16 -5
  13. package/ios/HMSHLSPlayerManager.swift +20 -11
  14. package/ios/HMSHelper.swift +33 -4
  15. package/ios/HMSManager.m +66 -10
  16. package/ios/HMSManager.swift +65 -21
  17. package/ios/HMSRNSDK.swift +244 -100
  18. package/ios/Hmssdk.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  19. package/ios/Hmssdk.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  20. package/ios/Hmssdk.xcodeproj/project.xcworkspace/xcuserdata/jatinnagar.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  21. package/ios/Hmssdk.xcodeproj/xcuserdata/jatinnagar.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
  22. package/lib/commonjs/classes/HMSAudioCodec.js +1 -2
  23. package/lib/commonjs/classes/HMSAudioCodec.js.map +1 -1
  24. package/lib/commonjs/classes/HMSAudioDevice.js +1 -2
  25. package/lib/commonjs/classes/HMSAudioDevice.js.map +1 -1
  26. package/lib/commonjs/classes/HMSAudioMixingMode.js +1 -2
  27. package/lib/commonjs/classes/HMSAudioMixingMode.js.map +1 -1
  28. package/lib/commonjs/classes/HMSAudioMode.js +1 -2
  29. package/lib/commonjs/classes/HMSAudioMode.js.map +1 -1
  30. package/lib/commonjs/classes/HMSCameraFacing.js +1 -2
  31. package/lib/commonjs/classes/HMSCameraFacing.js.map +1 -1
  32. package/lib/commonjs/classes/HMSConstants.js +1 -2
  33. package/lib/commonjs/classes/HMSConstants.js.map +1 -1
  34. package/lib/commonjs/classes/HMSEventEmitter.js +1 -2
  35. package/lib/commonjs/classes/HMSEventEmitter.js.map +1 -1
  36. package/lib/commonjs/classes/HMSIOSAudioMode.js +1 -2
  37. package/lib/commonjs/classes/HMSIOSAudioMode.js.map +1 -1
  38. package/lib/commonjs/classes/HMSLayer.js +1 -2
  39. package/lib/commonjs/classes/HMSLayer.js.map +1 -1
  40. package/lib/commonjs/classes/HMSLogAlarmManager.js +1 -2
  41. package/lib/commonjs/classes/HMSLogAlarmManager.js.map +1 -1
  42. package/lib/commonjs/classes/HMSLogLevel.js +1 -2
  43. package/lib/commonjs/classes/HMSLogLevel.js.map +1 -1
  44. package/lib/commonjs/classes/HMSLogger.js +1 -2
  45. package/lib/commonjs/classes/HMSLogger.js.map +1 -1
  46. package/lib/commonjs/classes/HMSManagerModule.js +1 -2
  47. package/lib/commonjs/classes/HMSManagerModule.js.map +1 -1
  48. package/lib/commonjs/classes/HMSMessageRecipientType.js +1 -2
  49. package/lib/commonjs/classes/HMSMessageRecipientType.js.map +1 -1
  50. package/lib/commonjs/classes/HMSNativeEventListener.js +1 -2
  51. package/lib/commonjs/classes/HMSNativeEventListener.js.map +1 -1
  52. package/lib/commonjs/classes/HMSPIPConfig.js +4 -0
  53. package/lib/commonjs/classes/HMSPIPConfig.js.map +1 -0
  54. package/lib/commonjs/classes/HMSPIPListenerActions.js +2 -2
  55. package/lib/commonjs/classes/HMSPIPListenerActions.js.map +1 -1
  56. package/lib/commonjs/classes/HMSPeer.js +15 -0
  57. package/lib/commonjs/classes/HMSPeer.js.map +1 -1
  58. package/lib/commonjs/classes/HMSPeerListIterator.js +64 -0
  59. package/lib/commonjs/classes/HMSPeerListIterator.js.map +1 -0
  60. package/lib/commonjs/classes/HMSPeerListIteratorOptions.js +2 -0
  61. package/lib/commonjs/classes/HMSPeerListIteratorOptions.js.map +1 -0
  62. package/lib/commonjs/classes/HMSPeerUpdate.js +3 -4
  63. package/lib/commonjs/classes/HMSPeerUpdate.js.map +1 -1
  64. package/lib/commonjs/classes/HMSPeersCache.js +8 -2
  65. package/lib/commonjs/classes/HMSPeersCache.js.map +1 -1
  66. package/lib/commonjs/classes/HMSQualityLimitationReason.js +1 -2
  67. package/lib/commonjs/classes/HMSQualityLimitationReason.js.map +1 -1
  68. package/lib/commonjs/classes/HMSRoomCache.js +1 -2
  69. package/lib/commonjs/classes/HMSRoomCache.js.map +1 -1
  70. package/lib/commonjs/classes/HMSRoomUpdate.js +1 -2
  71. package/lib/commonjs/classes/HMSRoomUpdate.js.map +1 -1
  72. package/lib/commonjs/classes/HMSSDK.js +152 -8
  73. package/lib/commonjs/classes/HMSSDK.js.map +1 -1
  74. package/lib/commonjs/classes/HMSTrackSettingsInitState.js +1 -2
  75. package/lib/commonjs/classes/HMSTrackSettingsInitState.js.map +1 -1
  76. package/lib/commonjs/classes/HMSTrackSource.js +1 -2
  77. package/lib/commonjs/classes/HMSTrackSource.js.map +1 -1
  78. package/lib/commonjs/classes/HMSTrackType.js +1 -2
  79. package/lib/commonjs/classes/HMSTrackType.js.map +1 -1
  80. package/lib/commonjs/classes/HMSTrackUpdate.js +1 -2
  81. package/lib/commonjs/classes/HMSTrackUpdate.js.map +1 -1
  82. package/lib/commonjs/classes/HMSUpdateListenerActions.js +2 -2
  83. package/lib/commonjs/classes/HMSUpdateListenerActions.js.map +1 -1
  84. package/lib/commonjs/classes/HMSVideoCodec.js +1 -2
  85. package/lib/commonjs/classes/HMSVideoCodec.js.map +1 -1
  86. package/lib/commonjs/classes/HMSVideoViewMode.js +1 -2
  87. package/lib/commonjs/classes/HMSVideoViewMode.js.map +1 -1
  88. package/lib/commonjs/classes/HmsView.js +17 -5
  89. package/lib/commonjs/classes/HmsView.js.map +1 -1
  90. package/lib/commonjs/components/HMSHLSPlayer/HMSHLSPlayer.js +11 -9
  91. package/lib/commonjs/components/HMSHLSPlayer/HMSHLSPlayer.js.map +1 -1
  92. package/lib/commonjs/components/HMSHLSPlayer/RCTHMSHLSPlayer.js +2 -4
  93. package/lib/commonjs/components/HMSHLSPlayer/RCTHMSHLSPlayer.js.map +1 -1
  94. package/lib/commonjs/components/HMSHLSPlayer/hooks.js +11 -11
  95. package/lib/commonjs/components/HMSHLSPlayer/hooks.js.map +1 -1
  96. package/lib/commonjs/components/HMSHLSPlayer/index.js +8 -1
  97. package/lib/commonjs/components/HMSHLSPlayer/index.js.map +1 -1
  98. package/lib/commonjs/hooks/hmsviews.js +17 -0
  99. package/lib/commonjs/hooks/hmsviews.js.map +1 -0
  100. package/lib/commonjs/hooks/useHMSPeerUpdates.js +2 -2
  101. package/lib/commonjs/hooks/useHMSPeerUpdates.js.map +1 -1
  102. package/lib/commonjs/index.js +10 -3
  103. package/lib/commonjs/index.js.map +1 -1
  104. package/lib/commonjs/stores/hls-player-playback-slice.js +4 -0
  105. package/lib/commonjs/stores/hls-player-playback-slice.js.map +1 -1
  106. package/lib/commonjs/stores/hls-player-stats-store.js +1 -2
  107. package/lib/commonjs/stores/hls-player-stats-store.js.map +1 -1
  108. package/lib/commonjs/stores/hms-store.js +4 -3
  109. package/lib/commonjs/stores/hms-store.js.map +1 -1
  110. package/lib/commonjs/stores/hmsviews-slice.js +19 -0
  111. package/lib/commonjs/stores/hmsviews-slice.js.map +1 -0
  112. package/lib/commonjs/stores/types.js +9 -0
  113. package/lib/commonjs/stores/types.js.map +1 -1
  114. package/lib/commonjs/types.js +4 -7
  115. package/lib/commonjs/types.js.map +1 -1
  116. package/lib/module/classes/HMSPIPConfig.js +2 -0
  117. package/lib/module/classes/HMSPIPConfig.js.map +1 -0
  118. package/lib/module/classes/HMSPIPListenerActions.js +1 -0
  119. package/lib/module/classes/HMSPIPListenerActions.js.map +1 -1
  120. package/lib/module/classes/HMSPeer.js +15 -0
  121. package/lib/module/classes/HMSPeer.js.map +1 -1
  122. package/lib/module/classes/HMSPeerListIterator.js +58 -0
  123. package/lib/module/classes/HMSPeerListIterator.js.map +1 -0
  124. package/lib/module/classes/HMSPeerListIteratorOptions.js +2 -0
  125. package/lib/module/classes/HMSPeerListIteratorOptions.js.map +1 -0
  126. package/lib/module/classes/HMSPeerUpdate.js +2 -1
  127. package/lib/module/classes/HMSPeerUpdate.js.map +1 -1
  128. package/lib/module/classes/HMSPeersCache.js +7 -0
  129. package/lib/module/classes/HMSPeersCache.js.map +1 -1
  130. package/lib/module/classes/HMSSDK.js +153 -10
  131. package/lib/module/classes/HMSSDK.js.map +1 -1
  132. package/lib/module/classes/HMSUpdateListenerActions.js +1 -0
  133. package/lib/module/classes/HMSUpdateListenerActions.js.map +1 -1
  134. package/lib/module/classes/HmsView.js +14 -1
  135. package/lib/module/classes/HmsView.js.map +1 -1
  136. package/lib/module/components/HMSHLSPlayer/HMSHLSPlayer.js +9 -6
  137. package/lib/module/components/HMSHLSPlayer/HMSHLSPlayer.js.map +1 -1
  138. package/lib/module/components/HMSHLSPlayer/hooks.js +4 -0
  139. package/lib/module/components/HMSHLSPlayer/hooks.js.map +1 -1
  140. package/lib/module/components/HMSHLSPlayer/index.js +1 -1
  141. package/lib/module/components/HMSHLSPlayer/index.js.map +1 -1
  142. package/lib/module/hooks/hmsviews.js +12 -0
  143. package/lib/module/hooks/hmsviews.js.map +1 -0
  144. package/lib/module/index.js +1 -0
  145. package/lib/module/index.js.map +1 -1
  146. package/lib/module/stores/hls-player-playback-slice.js +4 -0
  147. package/lib/module/stores/hls-player-playback-slice.js.map +1 -1
  148. package/lib/module/stores/hms-store.js +3 -1
  149. package/lib/module/stores/hms-store.js.map +1 -1
  150. package/lib/module/stores/hmsviews-slice.js +12 -0
  151. package/lib/module/stores/hmsviews-slice.js.map +1 -0
  152. package/lib/module/stores/types.js +9 -0
  153. package/lib/module/stores/types.js.map +1 -1
  154. package/lib/module/types.js +1 -1
  155. package/lib/module/types.js.map +1 -1
  156. package/lib/typescript/classes/HMSPIPConfig.d.ts +7 -0
  157. package/lib/typescript/classes/HMSPIPListenerActions.d.ts +1 -0
  158. package/lib/typescript/classes/HMSPeer.d.ts +3 -0
  159. package/lib/typescript/classes/HMSPeerListIterator.d.ts +9 -0
  160. package/lib/typescript/classes/HMSPeerListIteratorOptions.d.ts +24 -0
  161. package/lib/typescript/classes/HMSPeerUpdate.d.ts +2 -1
  162. package/lib/typescript/classes/HMSPeersCache.d.ts +1 -0
  163. package/lib/typescript/classes/HMSSDK.d.ts +47 -8
  164. package/lib/typescript/classes/HMSUpdateListenerActions.d.ts +2 -1
  165. package/lib/typescript/components/HMSHLSPlayer/hooks.d.ts +2 -0
  166. package/lib/typescript/components/HMSHLSPlayer/index.d.ts +1 -1
  167. package/lib/typescript/hooks/hmsviews.d.ts +3 -0
  168. package/lib/typescript/index.d.ts +2 -0
  169. package/lib/typescript/stores/hms-store.d.ts +4 -3
  170. package/lib/typescript/stores/hmsviews-slice.d.ts +5 -0
  171. package/lib/typescript/stores/types.d.ts +14 -2
  172. package/lib/typescript/types.d.ts +9 -5
  173. package/package.json +3 -1
  174. package/sdk-versions.json +2 -2
  175. package/src/classes/HMSPIPConfig.ts +7 -0
  176. package/src/classes/HMSPIPListenerActions.ts +1 -0
  177. package/src/classes/HMSPeer.ts +25 -0
  178. package/src/classes/HMSPeerListIterator.ts +60 -0
  179. package/src/classes/HMSPeerListIteratorOptions.ts +26 -0
  180. package/src/classes/HMSPeerUpdate.ts +2 -0
  181. package/src/classes/HMSPeersCache.ts +7 -0
  182. package/src/classes/HMSSDK.tsx +188 -13
  183. package/src/classes/HMSUpdateListenerActions.ts +1 -0
  184. package/src/classes/HmsView.tsx +16 -2
  185. package/src/components/HMSHLSPlayer/HMSHLSPlayer.tsx +11 -5
  186. package/src/components/HMSHLSPlayer/hooks.ts +7 -0
  187. package/src/components/HMSHLSPlayer/index.ts +1 -0
  188. package/src/hooks/hmsviews.ts +13 -0
  189. package/src/index.ts +2 -0
  190. package/src/stores/hls-player-playback-slice.ts +3 -0
  191. package/src/stores/hms-store.ts +2 -0
  192. package/src/stores/hmsviews-slice.ts +20 -0
  193. package/src/stores/types.ts +20 -1
  194. package/src/types.ts +13 -3
  195. package/android/.gradle/6.7.1/executionHistory/executionHistory.bin +0 -0
  196. package/android/.gradle/6.7.1/executionHistory/executionHistory.lock +0 -0
  197. package/android/.gradle/6.7.1/fileChanges/last-build.bin +0 -0
  198. package/android/.gradle/6.7.1/fileHashes/fileHashes.bin +0 -0
  199. package/android/.gradle/6.7.1/fileHashes/fileHashes.lock +0 -0
  200. package/android/.gradle/6.7.1/gc.properties +0 -0
  201. package/android/.gradle/6.9/executionHistory/executionHistory.bin +0 -0
  202. package/android/.gradle/6.9/executionHistory/executionHistory.lock +0 -0
  203. package/android/.gradle/6.9/fileChanges/last-build.bin +0 -0
  204. package/android/.gradle/6.9/fileHashes/fileHashes.bin +0 -0
  205. package/android/.gradle/6.9/fileHashes/fileHashes.lock +0 -0
  206. package/android/.gradle/6.9/gc.properties +0 -0
  207. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  208. package/android/.gradle/buildOutputCleanup/cache.properties +0 -2
  209. package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
  210. package/android/.gradle/checksums/checksums.lock +0 -0
  211. package/android/.gradle/checksums/md5-checksums.bin +0 -0
  212. package/android/.gradle/checksums/sha1-checksums.bin +0 -0
  213. package/android/.gradle/configuration-cache/gc.properties +0 -0
  214. package/android/.gradle/vcs-1/gc.properties +0 -0
@@ -29,6 +29,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
29
29
  private var eventsEnableStatus: [String: Bool] = [:]
30
30
  private var sessionStore: HMSSessionStore?
31
31
  private var sessionStoreChangeObservers = [String: NSObjectProtocol]()
32
+ private var peerListIterators = [String: HMSPeerListIterator]()
32
33
 
33
34
  // MARK: - Setup
34
35
  init(data: NSDictionary?, delegate manager: HMSManager?, uid id: String) {
@@ -124,7 +125,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
124
125
  guard let role = data.value(forKey: "role") as? String
125
126
  else {
126
127
  let errorMessage = "previewForRole: " + HMSHelper.getUnavailableRequiredKey(data, ["role"])
127
- emitRequiredKeysError(errorMessage)
128
128
  reject?(errorMessage, errorMessage, nil)
129
129
  return
130
130
  }
@@ -210,8 +210,8 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
210
210
  DispatchQueue.main.async { [weak self] in
211
211
  self?.hms?.getAuthTokenByRoomCode(roomCode, userID: userId) { token, error in
212
212
  // error occurred
213
- if error != nil {
214
- reject?(error?.localizedDescription, error?.localizedDescription, nil)
213
+ if let error = error as? NSError {
214
+ reject?(String(error.code), error.localizedDescription, nil)
215
215
  return
216
216
  }
217
217
  // no error and token is valid
@@ -228,44 +228,48 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
228
228
  }
229
229
  }
230
230
 
231
- func setLocalMute(_ data: NSDictionary) {
231
+ func setLocalMute(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
232
232
  guard let isMute = data.value(forKey: "isMute") as? Bool
233
233
  else {
234
234
  let errorMessage = "setLocalMute: " + HMSHelper.getUnavailableRequiredKey(data, ["isMute"])
235
- emitRequiredKeysError(errorMessage)
235
+ reject?(errorMessage, errorMessage, nil)
236
236
  return
237
237
  }
238
238
 
239
239
  DispatchQueue.main.async { [weak self] in
240
240
  if let audioTrack = self?.hms?.localPeer?.localAudioTrack() {
241
241
  audioTrack.setMute(isMute)
242
- } else if let tracks = self?.previewForRoleTracks {
243
- if let audioTrack = tracks.first(where: { $0.kind == HMSTrackKind.audio }) as? HMSLocalAudioTrack {
244
- audioTrack.setMute(isMute)
245
- }
242
+ resolve?(true)
243
+ } else if let tracks = self?.previewForRoleTracks, let audioTrack = tracks.first(where: { $0.kind == HMSTrackKind.audio }) as? HMSLocalAudioTrack {
244
+ audioTrack.setMute(isMute)
245
+ resolve?(true)
246
246
  } else {
247
- print(#function, "No local audio track available for setting mute state.")
247
+ let errorMessage = "setLocalMute: No local audio track available for setting mute state."
248
+ print(#function, errorMessage)
249
+ reject?(errorMessage, errorMessage, nil)
248
250
  }
249
251
  }
250
252
  }
251
253
 
252
- func setLocalVideoMute(_ data: NSDictionary) {
254
+ func setLocalVideoMute(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
253
255
  guard let isMute = data.value(forKey: "isMute") as? Bool
254
256
  else {
255
257
  let errorMessage = "setLocalVideoMute: " + HMSHelper.getUnavailableRequiredKey(data, ["isMute"])
256
- emitRequiredKeysError(errorMessage)
258
+ reject?(errorMessage, errorMessage, nil)
257
259
  return
258
260
  }
259
261
 
260
262
  DispatchQueue.main.async { [weak self] in
261
263
  if let videoTrack = self?.hms?.localPeer?.localVideoTrack() {
262
264
  videoTrack.setMute(isMute)
263
- } else if let tracks = self?.previewForRoleTracks {
264
- if let videoTrack = tracks.first(where: { $0.kind == HMSTrackKind.video }) as? HMSLocalVideoTrack {
265
- videoTrack.setMute(isMute)
266
- }
265
+ resolve?(true)
266
+ } else if let tracks = self?.previewForRoleTracks, let videoTrack = tracks.first(where: { $0.kind == HMSTrackKind.video }) as? HMSLocalVideoTrack {
267
+ videoTrack.setMute(isMute)
268
+ resolve?(true)
267
269
  } else {
268
- print(#function, "No local video track available for setting mute state.")
270
+ let errorMessage = "setLocalVideoMute: No local video track available for setting mute state."
271
+ print(#function, errorMessage)
272
+ reject?(errorMessage, errorMessage, nil)
269
273
  }
270
274
  }
271
275
  }
@@ -287,24 +291,27 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
287
291
  func leave(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
288
292
  DispatchQueue.main.async { [weak self] in
289
293
  guard let strongSelf = self else {
290
- print(#function, "Could not find reference to self while executing Room leave")
294
+ let errorMessage = "\(#function): Could not find reference to self while executing Room leave"
295
+ print(#function, errorMessage)
296
+ reject?(errorMessage, errorMessage, nil)
291
297
  return
292
298
  }
293
299
 
294
300
  strongSelf.hms?.leave { [weak self] success, error in
295
301
 
296
302
  guard let strongSelf = self else {
297
- print(#function, "Could not find reference to self when callback is received while executing Room leave")
303
+ let errorMessage = "\(#function): Could not find reference to self when callback is received while executing Room leave"
304
+ print(#function, errorMessage)
305
+ reject?(errorMessage, errorMessage, nil)
298
306
  return
299
307
  }
300
308
 
301
- if success {
309
+ if let nonnilError = error {
310
+ reject?(nonnilError.localizedDescription, nonnilError.localizedDescription, nil)
311
+ } else if success {
302
312
  resolve?(["success": success])
303
313
  strongSelf.cleanup() // resetting states and doing data cleanup
304
314
  } else {
305
- if strongSelf.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
306
- strongSelf.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": strongSelf.id])
307
- }
308
315
  reject?("error in leave", "error in leave", nil)
309
316
  }
310
317
  }
@@ -315,7 +322,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
315
322
  guard let message = data.value(forKey: "message") as? String
316
323
  else {
317
324
  let errorMessage = "sendBroadcastMessage: " + HMSHelper.getUnavailableRequiredKey(data, ["message"])
318
- emitRequiredKeysError(errorMessage)
319
325
  reject?(errorMessage, errorMessage, nil)
320
326
  return
321
327
  }
@@ -340,7 +346,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
340
346
  let targetedRoles = data.value(forKey: "roles") as? [String]
341
347
  else {
342
348
  let errorMessage = "sendGroupMessage: " + HMSHelper.getUnavailableRequiredKey(data, ["message", "roles"])
343
- emitRequiredKeysError(errorMessage)
344
349
  reject?(errorMessage, errorMessage, nil)
345
350
  return
346
351
  }
@@ -365,14 +370,14 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
365
370
  let peerId = data.value(forKey: "peerId") as? String
366
371
  else {
367
372
  let errorMessage = "sendDirectMessage: " + HMSHelper.getUnavailableRequiredKey(data, ["message", "peerId"])
368
- emitRequiredKeysError(errorMessage)
369
373
  reject?(errorMessage, errorMessage, nil)
370
374
  return
371
375
  }
372
376
 
373
377
  let type = data.value(forKey: "type") as? String ?? "chat"
374
378
  DispatchQueue.main.async { [weak self] in
375
- guard let peer = HMSHelper.getRemotePeerFromPeerId(peerId, remotePeers: self?.hms?.remotePeers) else { return }
379
+ guard let peer = HMSHelper.getPeerFromPeerId(peerId, remotePeers: self?.hms?.remotePeers) else { return }
380
+
376
381
  self?.hms?.sendDirectMessage(type: type, message: message, peer: peer, completion: { message, error in
377
382
  if error == nil {
378
383
  resolve?(["messageId": message?.messageID ?? "", "data": ["sender": message?.sender?.name ?? "", "message": message?.message ?? "", "type": message?.type]] as [String: Any])
@@ -392,7 +397,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
392
397
  guard let request = self?.recentRoleChangeRequest
393
398
  else {
394
399
  let errorMessage = "acceptRoleChange: recentRoleChangeRequest not found"
395
- self?.emitRequiredKeysError(errorMessage)
396
400
  reject?(errorMessage, errorMessage, nil)
397
401
  return
398
402
  }
@@ -415,7 +419,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
415
419
  let role = data.value(forKey: "role") as? String
416
420
  else {
417
421
  let errorMessage = "changeRole: " + HMSHelper.getUnavailableRequiredKey(data, ["peerId", "role"])
418
- emitRequiredKeysError(errorMessage)
419
422
  reject?(errorMessage, errorMessage, nil)
420
423
  return
421
424
  }
@@ -450,7 +453,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
450
453
  guard let toRoleString = data.object(forKey: "toRole") as? String
451
454
  else {
452
455
  let errorMessage = "changeRolesOfAllPeers: " + HMSHelper.getUnavailableRequiredKey(data, ["toRole"])
453
- emitRequiredKeysError(errorMessage)
454
456
  reject?(errorMessage, errorMessage, nil)
455
457
  return
456
458
  }
@@ -459,7 +461,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
459
461
 
460
462
  guard let toRole = HMSHelper.getRoleFromRoleName(toRoleString, roles: self?.hms?.roles) else {
461
463
  let errorMessage = "changeRolesOfAllPeers: " + HMSHelper.getUnavailableRequiredKey(data, ["toRole"])
462
- self?.emitRequiredKeysError(errorMessage)
463
464
  reject?(errorMessage, errorMessage, nil)
464
465
  return
465
466
  }
@@ -485,7 +486,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
485
486
  guard let trackId = data.value(forKey: "trackId") as? String
486
487
  else {
487
488
  let errorMessage = "changeTrackState: " + HMSHelper.getUnavailableRequiredKey(data, ["trackId"])
488
- emitRequiredKeysError(errorMessage)
489
489
  reject?(errorMessage, errorMessage, nil)
490
490
  return
491
491
  }
@@ -515,7 +515,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
515
515
  guard let mute = data.value(forKey: "mute") as? Bool
516
516
  else {
517
517
  let errorMessage = "changeTrackStateForRoles: " + HMSHelper.getUnavailableRequiredKey(data, ["mute"])
518
- emitRequiredKeysError(errorMessage)
519
518
  reject?(errorMessage, errorMessage, nil)
520
519
  return
521
520
  }
@@ -548,7 +547,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
548
547
  guard let trackId = data.value(forKey: "trackId") as? String
549
548
  else {
550
549
  let errorMessage = "isMute: " + HMSHelper.getUnavailableRequiredKey(data, ["trackId"])
551
- emitRequiredKeysError(errorMessage)
552
550
  reject?(errorMessage, errorMessage, nil)
553
551
  return
554
552
  }
@@ -578,29 +576,28 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
578
576
  guard let peerId = data.value(forKey: "peerId") as? String
579
577
  else {
580
578
  let errorMessage = "removePeer: " + HMSHelper.getUnavailableRequiredKey(data, ["peerId"])
581
- emitRequiredKeysError(errorMessage)
582
579
  reject?(errorMessage, errorMessage, nil)
583
580
  return
584
581
  }
585
582
 
586
583
  let reason = data.value(forKey: "reason") as? String
587
584
 
588
- DispatchQueue.main.async { [weak self] in
589
-
590
- guard let remotePeers = self?.hms?.remotePeers,
591
- let peer = HMSHelper.getRemotePeerFromPeerId(peerId, remotePeers: remotePeers)
592
- else {
593
- reject?("PEER_NOT_FOUND", "PEER_NOT_FOUND", nil)
594
- return
595
- }
585
+ HMSHelper.getRemotePeerFromPeerId(peerId, hmsSDK: self.hms) { peer in
596
586
 
597
- self?.hms?.removePeer(peer, reason: reason ?? "Removed from room", completion: { success, error in
598
- if success {
599
- resolve?(["success": success])
600
- } else {
601
- reject?(error?.localizedDescription, error?.localizedDescription, nil)
587
+ DispatchQueue.main.async { [weak self] in
588
+ guard let nonnilPeer = peer else {
589
+ reject?("PEER_NOT_FOUND", "PEER_NOT_FOUND", nil)
590
+ return
602
591
  }
603
- })
592
+
593
+ self?.hms?.removePeer(nonnilPeer, reason: reason ?? "Removed from room", completion: { success, error in
594
+ if success {
595
+ resolve?(["success": success])
596
+ } else {
597
+ reject?(error?.localizedDescription, error?.localizedDescription, nil)
598
+ }
599
+ })
600
+ }
604
601
  }
605
602
  }
606
603
 
@@ -610,7 +607,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
610
607
  let reason = data.value(forKey: "reason") as? String
611
608
  else {
612
609
  let errorMessage = "endRoom: " + HMSHelper.getUnavailableRequiredKey(data, ["lock", "reason"])
613
- emitRequiredKeysError(errorMessage)
614
610
  reject?(errorMessage, errorMessage, nil)
615
611
  return
616
612
  }
@@ -631,7 +627,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
631
627
  guard let trackId = data.value(forKey: "trackId") as? String
632
628
  else {
633
629
  let errorMessage = "isPlaybackAllowed: " + HMSHelper.getUnavailableRequiredKey(data, ["trackId"])
634
- emitRequiredKeysError(errorMessage)
635
630
  reject?(errorMessage, errorMessage, nil)
636
631
  return
637
632
  }
@@ -658,29 +653,35 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
658
653
  }
659
654
  }
660
655
 
661
- func setPlaybackAllowed(_ data: NSDictionary) {
656
+ func setPlaybackAllowed(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
662
657
  guard let trackId = data.value(forKey: "trackId") as? String,
663
658
  let playbackAllowed = data.value(forKey: "playbackAllowed") as? Bool
664
659
  else {
665
660
  let errorMessage = "setPlaybackAllowed: " + HMSHelper.getUnavailableRequiredKey(data, ["trackId", "playbackAllowed"])
666
- emitRequiredKeysError(errorMessage)
661
+ reject?(errorMessage, errorMessage, nil)
667
662
  return
668
663
  }
664
+
669
665
  DispatchQueue.main.async { [weak self] in
670
666
  guard let remotePeers = self?.hms?.remotePeers
671
667
  else {
668
+ let errorMessage = "setPlaybackAllowed: No remote peers found"
669
+ reject?(errorMessage, errorMessage, nil)
672
670
  return
673
671
  }
672
+
674
673
  let remoteAudioTrack = HMSHelper.getRemoteAudioTrackFromTrackId(trackId, remotePeers)
675
674
  let remoteVideoTrack = HMSHelper.getRemoteVideoTrackFromTrackId(trackId, remotePeers)
675
+
676
676
  if remoteAudioTrack != nil {
677
- if playbackAllowed {
678
- remoteAudioTrack?.setPlaybackAllowed(playbackAllowed)
679
- } else {
680
- remoteAudioTrack?.setPlaybackAllowed(playbackAllowed)
681
- }
677
+ remoteAudioTrack?.setPlaybackAllowed(playbackAllowed)
678
+ resolve?(true)
682
679
  } else if remoteVideoTrack != nil {
683
680
  remoteVideoTrack?.setPlaybackAllowed(playbackAllowed)
681
+ resolve?(true)
682
+ } else {
683
+ let errorMessage = "setPlaybackAllowed: No remote audio or video track to set playback"
684
+ reject?(errorMessage, errorMessage, nil)
684
685
  }
685
686
  }
686
687
  }
@@ -689,7 +690,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
689
690
  guard let metadata = data.value(forKey: "metadata") as? String
690
691
  else {
691
692
  let errorMessage = "changeMetadata: " + HMSHelper.getUnavailableRequiredKey(data, ["metadata"])
692
- emitRequiredKeysError(errorMessage)
693
693
  reject?(errorMessage, errorMessage, nil)
694
694
  return
695
695
  }
@@ -705,23 +705,27 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
705
705
  })
706
706
  }
707
707
 
708
- func setVolume(_ data: NSDictionary) {
708
+ func setVolume(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
709
709
  guard let trackId = data.value(forKey: "trackId") as? String,
710
710
  let volume = data.value(forKey: "volume") as? Double
711
711
  else {
712
712
  let errorMessage = "setVolume: " + HMSHelper.getUnavailableRequiredKey(data, ["trackId", "volume"])
713
- emitRequiredKeysError(errorMessage)
713
+ reject?(errorMessage, errorMessage, nil)
714
714
  return
715
715
  }
716
716
 
717
717
  DispatchQueue.main.async { [weak self] in
718
718
  guard let strongSelf = self else { return }
719
- let remotePeers = self?.hms?.remotePeers
719
+ let remotePeers = strongSelf.hms?.remotePeers
720
720
 
721
721
  let remoteAudioTrack = HMSHelper.getRemoteAudioAuxiliaryTrackFromTrackId(trackId, remotePeers)
722
722
 
723
723
  if remoteAudioTrack != nil {
724
724
  remoteAudioTrack?.setVolume(volume)
725
+ resolve?(true)
726
+ } else {
727
+ let errorMessage = "setVolume: No remote audio track not available"
728
+ reject?(errorMessage, errorMessage, nil)
725
729
  }
726
730
  }
727
731
  }
@@ -730,7 +734,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
730
734
  guard let record = data.value(forKey: "record") as? Bool
731
735
  else {
732
736
  let errorMessage = "startRTMPOrRecording: " + HMSHelper.getUnavailableRequiredKey(data, ["record"])
733
- emitRequiredKeysError(errorMessage)
734
737
  reject?(errorMessage, errorMessage, nil)
735
738
  return
736
739
  }
@@ -745,6 +748,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
745
748
  meetingUrl = meetLink
746
749
  } else {
747
750
  reject?("Invalid meeting url passed", "Invalid meeting url passed", nil)
751
+ return
748
752
  }
749
753
  }
750
754
 
@@ -809,7 +813,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
809
813
  guard let name = data.value(forKey: "name") as? String
810
814
  else {
811
815
  let errorMessage = "changeName: " + HMSHelper.getUnavailableRequiredKey(data, ["name"])
812
- emitRequiredKeysError(errorMessage)
813
816
  reject?(errorMessage, errorMessage, nil)
814
817
  return
815
818
  }
@@ -841,18 +844,23 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
841
844
  }
842
845
  }
843
846
 
844
- func setPlaybackForAllAudio(_ data: NSDictionary) {
847
+ func setPlaybackForAllAudio(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
845
848
  guard let mute = data.value(forKey: "mute") as? Bool
846
849
  else {
847
- let errorMessage = "setPlaybackForAllAudio: " + HMSHelper.getUnavailableRequiredKey(data, ["setPlaybackForAllAudio"])
848
- emitRequiredKeysError(errorMessage)
850
+ let errorMessage = "setPlaybackForAllAudio: " + HMSHelper.getUnavailableRequiredKey(data, ["mute"])
851
+ reject?(errorMessage, errorMessage, nil)
849
852
  return
850
853
  }
851
854
 
852
855
  DispatchQueue.main.async { [weak self] in
853
- let remotePeers = self?.hms?.remotePeers
854
- for peer in remotePeers ?? [] {
855
- peer.remoteAudioTrack()?.setPlaybackAllowed(!mute)
856
+ if let remotePeers = self?.hms?.remotePeers {
857
+ for peer in remotePeers {
858
+ peer.remoteAudioTrack()?.setPlaybackAllowed(!mute)
859
+ }
860
+ resolve?(true)
861
+ } else {
862
+ let errorMessage = "setPlaybackForAllAudio: No Audio is available to set playback"
863
+ reject?(errorMessage, errorMessage, nil)
856
864
  }
857
865
  }
858
866
  }
@@ -903,6 +911,48 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
903
911
  resolve?(isScreenShared)
904
912
  }
905
913
 
914
+ func raiseLocalPeerHand(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
915
+ self.hms?.raiseLocalPeerHand { success, error in
916
+ if error != nil {
917
+ reject?(error?.localizedDescription, error?.localizedDescription, nil)
918
+ return
919
+ }
920
+ resolve?(success)
921
+ }
922
+ }
923
+
924
+ func lowerLocalPeerHand(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
925
+ self.hms?.lowerLocalPeerHand { success, error in
926
+ if error != nil {
927
+ reject?(error?.localizedDescription, error?.localizedDescription, nil)
928
+ return
929
+ }
930
+ resolve?(success)
931
+ }
932
+ }
933
+
934
+ func lowerRemotePeerHand(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
935
+ guard let peerId = data.value(forKey: "peerId") as? String else {
936
+ let errorMessage = "lowerRemotePeerHand: " + HMSHelper.getUnavailableRequiredKey(data, ["peerId"])
937
+ reject?(errorMessage, errorMessage, nil)
938
+ return
939
+ }
940
+
941
+ guard let remotePeer = HMSHelper.getPeerFromPeerId(peerId, remotePeers: self.hms?.remotePeers) else {
942
+ let errorMessage = "lowerRemotePeerHand: Could not find remote peer with peerID - " + peerId
943
+ reject?(errorMessage, errorMessage, nil)
944
+ return
945
+ }
946
+
947
+ self.hms?.lowerRemotePeerHand(remotePeer) { success, error in
948
+ if error != nil {
949
+ reject?(error?.localizedDescription, error?.localizedDescription, nil)
950
+ return
951
+ }
952
+ resolve?(success)
953
+ }
954
+ }
955
+
906
956
  func playAudioShare(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
907
957
  guard let fileUrl = data.value(forKey: "fileUrl") as? String,
908
958
  let audioNodeName = data.value(forKey: "audioNode") as? String,
@@ -910,7 +960,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
910
960
  let playerNode = audioMixerSourceMap[audioNodeName]
911
961
  else {
912
962
  let errorMessage = "playAudioShare: " + HMSHelper.getUnavailableRequiredKey(data, ["audioNode", "fileUrl"])
913
- emitRequiredKeysError(errorMessage)
914
963
  reject?(errorMessage, errorMessage, nil)
915
964
  return
916
965
  }
@@ -932,14 +981,14 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
932
981
  }
933
982
  }
934
983
 
935
- func setAudioShareVolume(_ data: NSDictionary) {
984
+ func setAudioShareVolume(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
936
985
  guard let volume = data.value(forKey: "volume") as? NSNumber,
937
986
  let audioNodeName = data.value(forKey: "audioNode") as? String,
938
987
  let audioMixerSourceMap = HMSHelper.getAudioMixerSourceMap(),
939
988
  let playerNode = audioMixerSourceMap[audioNodeName]
940
989
  else {
941
990
  let errorMessage = "setAudioShareVolume: " + HMSHelper.getUnavailableRequiredKey(data, ["audioNode", "volume"])
942
- emitRequiredKeysError(errorMessage)
991
+ reject?(errorMessage, errorMessage, nil)
943
992
  return
944
993
  }
945
994
  if let audioMicNode = playerNode as? HMSMicNode {
@@ -948,53 +997,64 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
948
997
  if let audioFilePlayerNode = playerNode as? HMSAudioFilePlayerNode {
949
998
  audioFilePlayerNode.volume = volume.floatValue
950
999
  }
1000
+ resolve?(true)
951
1001
  }
952
1002
 
953
- func stopAudioShare(_ data: NSDictionary) {
1003
+ func stopAudioShare(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
954
1004
  guard let audioNodeName = data.value(forKey: "audioNode") as? String,
955
1005
  let audioMixerSourceMap = HMSHelper.getAudioMixerSourceMap(),
956
1006
  let playerNode = audioMixerSourceMap[audioNodeName]
957
1007
  else {
958
1008
  let errorMessage = "stopAudioShare: " + HMSHelper.getUnavailableRequiredKey(data, ["audioNode"])
959
- emitRequiredKeysError(errorMessage)
1009
+ reject?(errorMessage, errorMessage, nil)
960
1010
  return
961
1011
  }
962
1012
  if let audioFilePlayerNode = playerNode as? HMSAudioFilePlayerNode {
963
1013
  audioFilePlayerNode.stop()
1014
+ resolve?(true)
1015
+ } else {
1016
+ let errorMessage = "stopAudioShare: HMSAudioFilePlayerNode not available!"
1017
+ reject?(errorMessage, errorMessage, nil)
964
1018
  }
965
1019
  }
966
1020
 
967
- func resumeAudioShare(_ data: NSDictionary) {
1021
+ func resumeAudioShare(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
968
1022
  guard let audioNodeName = data.value(forKey: "audioNode") as? String,
969
1023
  let audioMixerSourceMap = HMSHelper.getAudioMixerSourceMap(),
970
1024
  let playerNode = audioMixerSourceMap[audioNodeName]
971
1025
  else {
972
1026
  let errorMessage = "resumeAudioShare: " + HMSHelper.getUnavailableRequiredKey(data, ["audioNode"])
973
- emitRequiredKeysError(errorMessage)
1027
+ reject?(errorMessage, errorMessage, nil)
974
1028
  return
975
1029
  }
976
1030
  if let audioFilePlayerNode = playerNode as? HMSAudioFilePlayerNode {
977
1031
  do {
978
1032
  try audioFilePlayerNode.resume()
1033
+ resolve?(true)
979
1034
  } catch {
980
- if eventsEnableStatus[HMSConstants.ON_ERROR] == true {
981
- delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": ["code": 6002, "description": error.localizedDescription, "isTerminal": false, "canRetry": true, "params": ["function": #function]] as [String: Any], "id": id])
982
- }
1035
+ reject?(error.localizedDescription, error.localizedDescription, nil)
983
1036
  }
1037
+ } else {
1038
+ let errorMessage = "resumeAudioShare: HMSAudioFilePlayerNode not available!"
1039
+ reject?(errorMessage, errorMessage, nil)
984
1040
  }
985
1041
  }
986
1042
 
987
- func pauseAudioShare(_ data: NSDictionary) {
1043
+ func pauseAudioShare(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
988
1044
  guard let audioNodeName = data.value(forKey: "audioNode") as? String,
989
1045
  let audioMixerSourceMap = HMSHelper.getAudioMixerSourceMap(),
990
1046
  let playerNode = audioMixerSourceMap[audioNodeName]
991
1047
  else {
992
1048
  let errorMessage = "pauseAudioShare: " + HMSHelper.getUnavailableRequiredKey(data, ["audioNode"])
993
- emitRequiredKeysError(errorMessage)
1049
+ reject?(errorMessage, errorMessage, nil)
994
1050
  return
995
1051
  }
996
1052
  if let audioFilePlayerNode = playerNode as? HMSAudioFilePlayerNode {
997
1053
  audioFilePlayerNode.pause()
1054
+ resolve?(true)
1055
+ } else {
1056
+ let errorMessage = "pauseAudioShare: HMSAudioFilePlayerNode not available!"
1057
+ reject?(errorMessage, errorMessage, nil)
998
1058
  }
999
1059
  }
1000
1060
 
@@ -1004,7 +1064,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1004
1064
  let playerNode = audioMixerSourceMap[audioNodeName]
1005
1065
  else {
1006
1066
  let errorMessage = "pauseAudioShare: " + HMSHelper.getUnavailableRequiredKey(data, ["audioNode"])
1007
- emitRequiredKeysError(errorMessage)
1008
1067
  reject?(errorMessage, errorMessage, nil)
1009
1068
  return
1010
1069
  }
@@ -1021,7 +1080,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1021
1080
  let playerNode = audioMixerSourceMap[audioNodeName]
1022
1081
  else {
1023
1082
  let errorMessage = "pauseAudioShare: " + HMSHelper.getUnavailableRequiredKey(data, ["audioNode"])
1024
- emitRequiredKeysError(errorMessage)
1025
1083
  reject?(errorMessage, errorMessage, nil)
1026
1084
  return
1027
1085
  }
@@ -1038,7 +1096,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1038
1096
  let playerNode = audioMixerSourceMap[audioNodeName]
1039
1097
  else {
1040
1098
  let errorMessage = "pauseAudioShare: " + HMSHelper.getUnavailableRequiredKey(data, ["audioNode"])
1041
- emitRequiredKeysError(errorMessage)
1042
1099
  reject?(errorMessage, errorMessage, nil)
1043
1100
  return
1044
1101
  }
@@ -1060,7 +1117,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1060
1117
  func enableEvent(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
1061
1118
  guard let eventType = data.value(forKey: "eventType") as? String else {
1062
1119
  let errorMessage = "enableEvent: " + HMSHelper.getUnavailableRequiredKey(data, ["eventType"])
1063
- emitRequiredKeysError(errorMessage)
1064
1120
  reject?(errorMessage, errorMessage, nil)
1065
1121
  return
1066
1122
  }
@@ -1072,7 +1128,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1072
1128
  func disableEvent(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
1073
1129
  guard let eventType = data.value(forKey: "eventType") as? String else {
1074
1130
  let errorMessage = "disableEvent: " + HMSHelper.getUnavailableRequiredKey(data, ["eventType"])
1075
- emitRequiredKeysError(errorMessage)
1076
1131
  reject?(errorMessage, errorMessage, nil)
1077
1132
  return
1078
1133
  }
@@ -1081,14 +1136,15 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1081
1136
  resolve?(["success": true, "message": "function call executed successfully"] as [String: Any])
1082
1137
  }
1083
1138
 
1084
- func restrictData(_ data: NSDictionary) {
1139
+ func restrictData(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
1085
1140
  guard let roleName = data.value(forKey: "roleName") as? String else {
1086
1141
  let errorMessage = "restrictData: " + HMSHelper.getUnavailableRequiredKey(data, ["roleName"])
1087
- emitRequiredKeysError(errorMessage)
1142
+ reject?(errorMessage, errorMessage, nil)
1088
1143
  return
1089
1144
  }
1090
1145
 
1091
1146
  HMSDecoder.setRestrictRoleData(roleName, true)
1147
+ resolve?(true)
1092
1148
  }
1093
1149
 
1094
1150
  // MARK: - HMS SDK Get APIs
@@ -1142,6 +1198,8 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1142
1198
  }
1143
1199
  case "metadata":
1144
1200
  return ["metadata": peer.metadata ?? ""]
1201
+ case "isHandRaised":
1202
+ return ["isHandRaised": peer.isHandRaised]
1145
1203
  case "role":
1146
1204
  return ["role": HMSDecoder.getHmsRole(peer.role)]
1147
1205
  case "customerUserID":
@@ -1226,7 +1284,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1226
1284
  guard let trackId = data.value(forKey: "trackId") as? String
1227
1285
  else {
1228
1286
  let errorMessage = "\(#function) " + HMSHelper.getUnavailableRequiredKey(data, ["trackId"])
1229
- emitRequiredKeysError(errorMessage)
1230
1287
  reject?(errorMessage, errorMessage, nil)
1231
1288
  return
1232
1289
  }
@@ -1238,7 +1295,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1238
1295
  let remoteVideoTrack = HMSHelper.getRemoteVideoTrackFromTrackId(trackId, remotePeers)
1239
1296
  else {
1240
1297
  let errorMessage = "\(#function) " + "TRACK_NOT_FOUND"
1241
- self?.emitRequiredKeysError(errorMessage)
1242
1298
  reject?(errorMessage, errorMessage, nil)
1243
1299
  return
1244
1300
  }
@@ -1251,7 +1307,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1251
1307
  guard let trackId = data.value(forKey: "trackId") as? String
1252
1308
  else {
1253
1309
  let errorMessage = "\(#function) " + HMSHelper.getUnavailableRequiredKey(data, ["trackId"])
1254
- emitRequiredKeysError(errorMessage)
1255
1310
  reject?(errorMessage, errorMessage, nil)
1256
1311
  return
1257
1312
  }
@@ -1263,7 +1318,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1263
1318
  let remoteAudioTrack = HMSHelper.getRemoteAudioTrackFromTrackId(trackId, remotePeers)
1264
1319
  else {
1265
1320
  let errorMessage = "\(#function) " + "TRACK_NOT_FOUND"
1266
- self?.emitRequiredKeysError(errorMessage)
1267
1321
  reject?(errorMessage, errorMessage, nil)
1268
1322
  return
1269
1323
  }
@@ -1303,6 +1357,24 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1303
1357
  self.delegate?.emitEvent(HMSConstants.ON_ROOM_UPDATE, ["event": HMSConstants.ON_ROOM_UPDATE, "id": self.id, "type": type, "room": roomData])
1304
1358
  }
1305
1359
 
1360
+ func onPeerListUpdate(added: [HMSPeer], removed: [HMSPeer]) {
1361
+ if eventsEnableStatus["ON_PEER_LIST_UPDATED"] != true {
1362
+ return
1363
+ }
1364
+ var addedPeers = [[String: Any]]()
1365
+ var removedPeers = [[String: Any]]()
1366
+
1367
+ for peer in added {
1368
+ addedPeers.append(HMSDecoder.getHmsPeerSubset(peer))
1369
+ }
1370
+
1371
+ for peer in removed {
1372
+ removedPeers.append(HMSDecoder.getHmsPeerSubset(peer))
1373
+ }
1374
+
1375
+ self.delegate?.emitEvent(HMSConstants.ON_PEER_LIST_UPDATED, ["event": HMSConstants.ON_PEER_LIST_UPDATED, "id": self.id, "addedPeers": addedPeers, "removedPeers": removedPeers])
1376
+ }
1377
+
1306
1378
  func on(peer: HMSPeer, update: HMSPeerUpdate) {
1307
1379
 
1308
1380
  guard let isPeerUpdateEnabled = eventsEnableStatus[HMSConstants.ON_PEER_UPDATE],
@@ -1489,7 +1561,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1489
1561
  guard let trackId = data.value(forKey: "trackId") as? String
1490
1562
  else {
1491
1563
  let errorMessage = "\(#function) " + HMSHelper.getUnavailableRequiredKey(data, ["trackId"])
1492
- emitRequiredKeysError(errorMessage)
1493
1564
  reject?(errorMessage, errorMessage, nil)
1494
1565
  return
1495
1566
  }
@@ -1501,7 +1572,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1501
1572
  let remoteVideoTrack = HMSHelper.getRemoteVideoTrackFromTrackId(trackId, remotePeers)
1502
1573
  else {
1503
1574
  let errorMessage = "\(#function) " + "TRACK_NOT_FOUND"
1504
- self?.emitRequiredKeysError(errorMessage)
1505
1575
  reject?(errorMessage, errorMessage, nil)
1506
1576
  return
1507
1577
  }
@@ -1509,7 +1579,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1509
1579
  guard let layerDefinitions = remoteVideoTrack.layerDefinitions
1510
1580
  else {
1511
1581
  let errorMessage = "\(#function) " + "layer definitions not available for track: '\(trackId)' !"
1512
- self.emitRequiredKeysError(errorMessage)
1513
1582
  reject?(errorMessage, errorMessage, nil)
1514
1583
  return
1515
1584
  }
@@ -1525,7 +1594,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1525
1594
  guard let trackId = data.value(forKey: "trackId") as? String
1526
1595
  else {
1527
1596
  let errorMessage = "\(#function) " + HMSHelper.getUnavailableRequiredKey(data, ["trackId"])
1528
- emitRequiredKeysError(errorMessage)
1529
1597
  reject?(errorMessage, errorMessage, nil)
1530
1598
  return
1531
1599
  }
@@ -1537,7 +1605,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1537
1605
  let remoteVideoTrack = HMSHelper.getRemoteVideoTrackFromTrackId(trackId, remotePeers)
1538
1606
  else {
1539
1607
  let errorMessage = "\(#function) " + "TRACK_NOT_FOUND"
1540
- self?.emitRequiredKeysError(errorMessage)
1541
1608
  reject?(errorMessage, errorMessage, nil)
1542
1609
  return
1543
1610
  }
@@ -1553,7 +1620,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1553
1620
  let layer = data.value(forKey: "layer") as? String
1554
1621
  else {
1555
1622
  let errorMessage = "\(#function) " + HMSHelper.getUnavailableRequiredKey(data, ["trackId", "layer"])
1556
- emitRequiredKeysError(errorMessage)
1557
1623
  reject?(errorMessage, errorMessage, nil)
1558
1624
  return
1559
1625
  }
@@ -1565,7 +1631,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1565
1631
  let remoteVideoTrack = HMSHelper.getRemoteVideoTrackFromTrackId(trackId, remotePeers)
1566
1632
  else {
1567
1633
  let errorMessage = "\(#function) " + "TRACK_NOT_FOUND"
1568
- self?.emitRequiredKeysError(errorMessage)
1569
1634
  reject?(errorMessage, errorMessage, nil)
1570
1635
  return
1571
1636
  }
@@ -1828,6 +1893,84 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1828
1893
  }
1829
1894
  }
1830
1895
 
1896
+ // MARK: - Peer List Iterator
1897
+
1898
+ func getPeerListIterator(_ data: NSDictionary) -> [AnyHashable: Any]? {
1899
+ guard let uniqueId = data["uniqueId"] as? String else {
1900
+ print("Error in getPeerListIterator: uniqueId is not available")
1901
+ return nil
1902
+ }
1903
+
1904
+ guard let hmssdk = hms else {
1905
+ print("Error in getPeerListIterator: HMSSDK is not available")
1906
+ return nil
1907
+ }
1908
+
1909
+ var peerListIterator: HMSPeerListIterator
1910
+
1911
+ if let peerListIteratorOptions = HMSHelper.getPeerListIteratorOptions(data) {
1912
+ peerListIterator = hmssdk.getPeerListIterator(options: peerListIteratorOptions)
1913
+ } else {
1914
+ peerListIterator = hmssdk.getPeerListIterator()
1915
+ }
1916
+
1917
+ peerListIterators[uniqueId] = peerListIterator
1918
+
1919
+ return [
1920
+ "success": true,
1921
+ "uniqueId": uniqueId,
1922
+ "totalCount": peerListIterator.totalCount
1923
+ ]
1924
+ }
1925
+
1926
+ func peerListIteratorHasNext(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
1927
+ guard let uniqueId = data["uniqueId"] as? String else {
1928
+ let errorMessage = "\(#function) uniqueId is not available"
1929
+ reject?("6004", errorMessage, nil)
1930
+ return
1931
+ }
1932
+
1933
+ guard let peerListIterator = peerListIterators[uniqueId] else {
1934
+ let errorMessage = "\(#function) HMSPeerListIterator is not available for uniqueId - \(uniqueId)"
1935
+ reject?("6004", errorMessage, nil)
1936
+ return
1937
+ }
1938
+
1939
+ resolve?(peerListIterator.hasNext)
1940
+ }
1941
+
1942
+ func peerListIteratorNext(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
1943
+ guard let uniqueId = data["uniqueId"] as? String else {
1944
+ let errorMessage = "\(#function) uniqueId is not available"
1945
+ reject?("6004", errorMessage, nil)
1946
+ return
1947
+ }
1948
+
1949
+ guard let peerListIterator = peerListIterators[uniqueId] else {
1950
+ let errorMessage = "\(#function) HMSPeerListIterator is not available for uniqueId - \(uniqueId)"
1951
+ reject?("6004", errorMessage, nil)
1952
+ return
1953
+ }
1954
+
1955
+ peerListIterator.next { peers, error in
1956
+ if let nonnilError = error {
1957
+ reject?("6004", nonnilError.localizedDescription, nil)
1958
+ return
1959
+ }
1960
+
1961
+ if let nonnilPeers = peers {
1962
+ var data = [[String: Any]]()
1963
+ for peer in nonnilPeers {
1964
+ data.append(HMSDecoder.getHmsPeer(peer))
1965
+ }
1966
+ resolve?(["totalCount": peerListIterator.totalCount, "peers": data])
1967
+ } else {
1968
+ let errorMessage = "\(#function) peers is nil"
1969
+ reject?("6004", errorMessage, nil)
1970
+ }
1971
+ }
1972
+ }
1973
+
1831
1974
  // MARK: - Helper Functions
1832
1975
 
1833
1976
  // Handle resetting states and data cleanup
@@ -1845,6 +1988,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1845
1988
  self.eventsEnableStatus.removeAll()
1846
1989
  self.sessionStore = nil
1847
1990
  self.sessionStoreChangeObservers.removeAll()
1991
+ self.peerListIterators.removeAll()
1848
1992
  HMSDecoder.clearRestrictDataStates()
1849
1993
  }
1850
1994