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

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 (202) hide show
  1. package/README.md +37 -39
  2. package/android/.gradle/6.9/executionHistory/executionHistory.lock +0 -0
  3. package/android/.gradle/6.9/fileHashes/fileHashes.lock +0 -0
  4. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  5. package/android/.gradle/buildOutputCleanup/cache.properties +1 -1
  6. package/android/.gradle/checksums/checksums.lock +0 -0
  7. package/android/.gradle/checksums/md5-checksums.bin +0 -0
  8. package/android/.gradle/checksums/sha1-checksums.bin +0 -0
  9. package/android/build.gradle +1 -2
  10. package/android/src/main/java/com/reactnativehmssdk/HmsDecoder.kt +249 -230
  11. package/android/src/main/java/com/reactnativehmssdk/HmsHelper.kt +145 -13
  12. package/android/src/main/java/com/reactnativehmssdk/HmsModule.kt +56 -21
  13. package/android/src/main/java/com/reactnativehmssdk/HmsSDK.kt +463 -247
  14. package/android/src/main/java/com/reactnativehmssdk/HmsView.kt +15 -18
  15. package/android/src/main/java/com/reactnativehmssdk/HmssdkPackage.kt +1 -2
  16. package/android/src/main/java/com/reactnativehmssdk/HmssdkViewManager.kt +4 -10
  17. package/ios/HmsDecoder.swift +135 -35
  18. package/ios/HmsHelper.swift +103 -1
  19. package/ios/HmsManager.m +13 -9
  20. package/ios/HmsManager.swift +59 -24
  21. package/ios/HmsSDK.swift +322 -85
  22. package/ios/HmsView.swift +1 -1
  23. package/lib/commonjs/classes/HMSAudioTrackSettings.js +3 -0
  24. package/lib/commonjs/classes/HMSAudioTrackSettings.js.map +1 -1
  25. package/lib/commonjs/classes/HMSBrowserRecordingState.js +23 -0
  26. package/lib/commonjs/classes/HMSBrowserRecordingState.js.map +1 -0
  27. package/lib/commonjs/classes/HMSCameraFacing.js +14 -0
  28. package/lib/commonjs/classes/HMSCameraFacing.js.map +1 -0
  29. package/lib/commonjs/classes/HMSChangeTrackStateRequest.js +3 -0
  30. package/lib/commonjs/classes/HMSChangeTrackStateRequest.js.map +1 -1
  31. package/lib/commonjs/classes/HMSConfig.js +3 -1
  32. package/lib/commonjs/classes/HMSConfig.js.map +1 -1
  33. package/lib/commonjs/classes/HMSEncoder.js +27 -7
  34. package/lib/commonjs/classes/HMSEncoder.js.map +1 -1
  35. package/lib/commonjs/classes/HMSException.js +30 -0
  36. package/lib/commonjs/classes/HMSException.js.map +1 -0
  37. package/lib/commonjs/classes/HMSHelper.js +2 -2
  38. package/lib/commonjs/classes/HMSHelper.js.map +1 -1
  39. package/lib/commonjs/classes/HMSLocalAudioTrack.js +32 -0
  40. package/lib/commonjs/classes/HMSLocalAudioTrack.js.map +1 -1
  41. package/lib/commonjs/classes/HMSLocalPeer.js.map +1 -1
  42. package/lib/commonjs/classes/HMSLocalVideoTrack.js +18 -0
  43. package/lib/commonjs/classes/HMSLocalVideoTrack.js.map +1 -1
  44. package/lib/commonjs/classes/HMSLogger.js +28 -1
  45. package/lib/commonjs/classes/HMSLogger.js.map +1 -1
  46. package/lib/commonjs/classes/HMSPeer.js +3 -0
  47. package/lib/commonjs/classes/HMSPeer.js.map +1 -1
  48. package/lib/commonjs/classes/HMSPeerUpdate.js +1 -0
  49. package/lib/commonjs/classes/HMSPeerUpdate.js.map +1 -1
  50. package/lib/commonjs/classes/HMSPermissions.js +6 -0
  51. package/lib/commonjs/classes/HMSPermissions.js.map +1 -1
  52. package/lib/commonjs/classes/HMSRTMPConfig.js +26 -0
  53. package/lib/commonjs/classes/HMSRTMPConfig.js.map +1 -0
  54. package/lib/commonjs/classes/HMSRemoteAudioTrack.js +19 -0
  55. package/lib/commonjs/classes/HMSRemoteAudioTrack.js.map +1 -1
  56. package/lib/commonjs/classes/HMSRemotePeer.js.map +1 -1
  57. package/lib/commonjs/classes/HMSRemoteVideoTrack.js +19 -0
  58. package/lib/commonjs/classes/HMSRemoteVideoTrack.js.map +1 -1
  59. package/lib/commonjs/classes/HMSRoom.js +9 -0
  60. package/lib/commonjs/classes/HMSRoom.js.map +1 -1
  61. package/lib/commonjs/classes/HMSRtmpStreamingState.js +23 -0
  62. package/lib/commonjs/classes/HMSRtmpStreamingState.js.map +1 -0
  63. package/lib/commonjs/classes/HMSSDK.js +229 -125
  64. package/lib/commonjs/classes/HMSSDK.js.map +1 -1
  65. package/lib/commonjs/classes/HMSServerRecordingState.js +23 -0
  66. package/lib/commonjs/classes/HMSServerRecordingState.js.map +1 -0
  67. package/lib/commonjs/classes/HMSTrack.js +2 -19
  68. package/lib/commonjs/classes/HMSTrack.js.map +1 -1
  69. package/lib/commonjs/classes/HMSTrackSettings.js +3 -0
  70. package/lib/commonjs/classes/HMSTrackSettings.js.map +1 -1
  71. package/lib/commonjs/classes/HMSVideoCodec.js +4 -4
  72. package/lib/commonjs/classes/HMSVideoCodec.js.map +1 -1
  73. package/lib/commonjs/classes/HMSVideoResolution.js +23 -0
  74. package/lib/commonjs/classes/HMSVideoResolution.js.map +1 -0
  75. package/lib/commonjs/classes/HMSVideoSettings.js.map +1 -1
  76. package/lib/commonjs/classes/HMSVideoTrackSettings.js +0 -3
  77. package/lib/commonjs/classes/HMSVideoTrackSettings.js.map +1 -1
  78. package/lib/commonjs/index.js +98 -0
  79. package/lib/commonjs/index.js.map +1 -1
  80. package/lib/module/classes/HMSAudioTrackSettings.js +3 -0
  81. package/lib/module/classes/HMSAudioTrackSettings.js.map +1 -1
  82. package/lib/module/classes/HMSBrowserRecordingState.js +14 -0
  83. package/lib/module/classes/HMSBrowserRecordingState.js.map +1 -0
  84. package/lib/module/classes/HMSCameraFacing.js +7 -0
  85. package/lib/module/classes/HMSCameraFacing.js.map +1 -0
  86. package/lib/module/classes/HMSChangeTrackStateRequest.js +3 -0
  87. package/lib/module/classes/HMSChangeTrackStateRequest.js.map +1 -1
  88. package/lib/module/classes/HMSConfig.js +3 -1
  89. package/lib/module/classes/HMSConfig.js.map +1 -1
  90. package/lib/module/classes/HMSEncoder.js +26 -7
  91. package/lib/module/classes/HMSEncoder.js.map +1 -1
  92. package/lib/module/classes/HMSException.js +21 -0
  93. package/lib/module/classes/HMSException.js.map +1 -0
  94. package/lib/module/classes/HMSHelper.js +2 -2
  95. package/lib/module/classes/HMSHelper.js.map +1 -1
  96. package/lib/module/classes/HMSLocalAudioTrack.js +30 -1
  97. package/lib/module/classes/HMSLocalAudioTrack.js.map +1 -1
  98. package/lib/module/classes/HMSLocalPeer.js.map +1 -1
  99. package/lib/module/classes/HMSLocalVideoTrack.js +15 -0
  100. package/lib/module/classes/HMSLocalVideoTrack.js.map +1 -1
  101. package/lib/module/classes/HMSLogger.js +28 -1
  102. package/lib/module/classes/HMSLogger.js.map +1 -1
  103. package/lib/module/classes/HMSPeer.js +3 -0
  104. package/lib/module/classes/HMSPeer.js.map +1 -1
  105. package/lib/module/classes/HMSPeerUpdate.js +1 -0
  106. package/lib/module/classes/HMSPeerUpdate.js.map +1 -1
  107. package/lib/module/classes/HMSPermissions.js +6 -0
  108. package/lib/module/classes/HMSPermissions.js.map +1 -1
  109. package/lib/module/classes/HMSRTMPConfig.js +17 -0
  110. package/lib/module/classes/HMSRTMPConfig.js.map +1 -0
  111. package/lib/module/classes/HMSRemoteAudioTrack.js +16 -0
  112. package/lib/module/classes/HMSRemoteAudioTrack.js.map +1 -1
  113. package/lib/module/classes/HMSRemotePeer.js.map +1 -1
  114. package/lib/module/classes/HMSRemoteVideoTrack.js +16 -0
  115. package/lib/module/classes/HMSRemoteVideoTrack.js.map +1 -1
  116. package/lib/module/classes/HMSRoom.js +9 -0
  117. package/lib/module/classes/HMSRoom.js.map +1 -1
  118. package/lib/module/classes/HMSRtmpStreamingState.js +14 -0
  119. package/lib/module/classes/HMSRtmpStreamingState.js.map +1 -0
  120. package/lib/module/classes/HMSSDK.js +227 -125
  121. package/lib/module/classes/HMSSDK.js.map +1 -1
  122. package/lib/module/classes/HMSServerRecordingState.js +14 -0
  123. package/lib/module/classes/HMSServerRecordingState.js.map +1 -0
  124. package/lib/module/classes/HMSTrack.js +2 -17
  125. package/lib/module/classes/HMSTrack.js.map +1 -1
  126. package/lib/module/classes/HMSTrackSettings.js +3 -0
  127. package/lib/module/classes/HMSTrackSettings.js.map +1 -1
  128. package/lib/module/classes/HMSVideoCodec.js +4 -4
  129. package/lib/module/classes/HMSVideoCodec.js.map +1 -1
  130. package/lib/module/classes/HMSVideoResolution.js +14 -0
  131. package/lib/module/classes/HMSVideoResolution.js.map +1 -0
  132. package/lib/module/classes/HMSVideoSettings.js.map +1 -1
  133. package/lib/module/classes/HMSVideoTrackSettings.js +0 -3
  134. package/lib/module/classes/HMSVideoTrackSettings.js.map +1 -1
  135. package/lib/module/index.js +7 -0
  136. package/lib/module/index.js.map +1 -1
  137. package/lib/typescript/classes/HMSAudioTrackSettings.d.ts +3 -0
  138. package/lib/typescript/classes/HMSBrowserRecordingState.d.ts +9 -0
  139. package/lib/typescript/classes/HMSCameraFacing.d.ts +4 -0
  140. package/lib/typescript/classes/HMSChangeTrackStateRequest.d.ts +2 -0
  141. package/lib/typescript/classes/HMSConfig.d.ts +2 -0
  142. package/lib/typescript/classes/HMSEncoder.d.ts +3 -1
  143. package/lib/typescript/classes/HMSException.d.ts +22 -0
  144. package/lib/typescript/classes/HMSLocalAudioTrack.d.ts +1 -0
  145. package/lib/typescript/classes/HMSLocalPeer.d.ts +4 -0
  146. package/lib/typescript/classes/HMSLogger.d.ts +7 -0
  147. package/lib/typescript/classes/HMSPeer.d.ts +2 -0
  148. package/lib/typescript/classes/HMSPeerUpdate.d.ts +1 -0
  149. package/lib/typescript/classes/HMSPermissions.d.ts +4 -0
  150. package/lib/typescript/classes/HMSRTMPConfig.d.ts +10 -0
  151. package/lib/typescript/classes/HMSRemotePeer.d.ts +1 -0
  152. package/lib/typescript/classes/HMSRoom.d.ts +9 -0
  153. package/lib/typescript/classes/HMSRtmpStreamingState.d.ts +9 -0
  154. package/lib/typescript/classes/HMSSDK.d.ts +22 -13
  155. package/lib/typescript/classes/HMSServerRecordingState.d.ts +9 -0
  156. package/lib/typescript/classes/HMSTrack.d.ts +1 -1
  157. package/lib/typescript/classes/HMSTrackSettings.d.ts +2 -0
  158. package/lib/typescript/classes/HMSVideoCodec.d.ts +4 -4
  159. package/lib/typescript/classes/HMSVideoResolution.d.ts +8 -0
  160. package/lib/typescript/classes/HMSVideoSettings.d.ts +3 -3
  161. package/lib/typescript/classes/HMSVideoTrackSettings.d.ts +13 -10
  162. package/lib/typescript/index.d.ts +7 -0
  163. package/package.json +2 -1
  164. package/src/classes/HMSAudioTrackSettings.ts +9 -1
  165. package/src/classes/HMSBrowserRecordingState.ts +11 -0
  166. package/src/classes/HMSCameraFacing.ts +4 -0
  167. package/src/classes/HMSChangeTrackStateRequest.ts +7 -1
  168. package/src/classes/HMSConfig.ts +3 -1
  169. package/src/classes/HMSEncoder.ts +22 -2
  170. package/src/classes/HMSException.ts +33 -0
  171. package/src/classes/HMSHelper.ts +2 -2
  172. package/src/classes/HMSLocalAudioTrack.ts +29 -1
  173. package/src/classes/HMSLocalPeer.ts +4 -0
  174. package/src/classes/HMSLocalVideoTrack.ts +15 -0
  175. package/src/classes/HMSLogger.ts +14 -1
  176. package/src/classes/HMSPeer.ts +3 -0
  177. package/src/classes/HMSPeerUpdate.ts +1 -0
  178. package/src/classes/HMSPermissions.ts +6 -0
  179. package/src/classes/HMSRTMPConfig.ts +15 -0
  180. package/src/classes/HMSRemoteAudioTrack.ts +16 -0
  181. package/src/classes/HMSRemotePeer.ts +1 -0
  182. package/src/classes/HMSRemoteVideoTrack.ts +16 -0
  183. package/src/classes/HMSRoom.ts +12 -0
  184. package/src/classes/HMSRtmpStreamingState.ts +11 -0
  185. package/src/classes/HMSSDK.tsx +170 -71
  186. package/src/classes/HMSServerRecordingState.ts +11 -0
  187. package/src/classes/HMSTrack.ts +2 -15
  188. package/src/classes/HMSTrackSettings.ts +3 -0
  189. package/src/classes/HMSVideoCodec.ts +4 -4
  190. package/src/classes/HMSVideoResolution.ts +9 -0
  191. package/src/classes/HMSVideoSettings.ts +3 -3
  192. package/src/classes/HMSVideoTrackSettings.ts +13 -10
  193. package/src/index.ts +7 -0
  194. package/android/.gradle/6.9/executionHistory/executionHistory.bin +0 -0
  195. package/android/.gradle/6.9/fileHashes/fileHashes.bin +0 -0
  196. package/android/.gradle/6.9/fileHashes/resourceHashesCache.bin +0 -0
  197. package/android/.gradle/6.9/javaCompile/classAnalysis.bin +0 -0
  198. package/android/.gradle/6.9/javaCompile/jarAnalysis.bin +0 -0
  199. package/android/.gradle/6.9/javaCompile/javaCompile.lock +0 -0
  200. package/android/.gradle/6.9/javaCompile/taskHistory.bin +0 -0
  201. package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
  202. package/android/.project +0 -34
package/ios/HmsSDK.swift CHANGED
@@ -7,14 +7,15 @@
7
7
 
8
8
  import Foundation
9
9
  import HMSSDK
10
+
11
+
10
12
  class HmsSDK: HMSUpdateListener, HMSPreviewListener {
11
13
 
12
14
  var hms: HMSSDK?
13
15
  var config: HMSConfig?
14
16
  var recentRoleChangeRequest: HMSRoleChangeRequest?
15
- var recentChangeTrackStateRequest: HMSChangeTrackStateRequest?
16
17
  var delegate: HmsManager?
17
- var id: String?
18
+ var id: String = "12345"
18
19
 
19
20
  let ON_PREVIEW = "ON_PREVIEW"
20
21
  let ON_JOIN = "ON_JOIN"
@@ -31,72 +32,71 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
31
32
 
32
33
  // MARK: - Setup
33
34
 
34
- init(delegate manager: HmsManager?, uid id: String) {
35
+ init(data: NSDictionary?, delegate manager: HmsManager?, uid id: String) {
36
+ let videoSettings = HmsHelper.getLocalVideoSettings(data?.value(forKey: "video") as? NSDictionary)
37
+ let audioSettings = HmsHelper.getLocalAudioSettings(data?.value(forKey: "audio") as? NSDictionary)
35
38
  DispatchQueue.main.async { [weak self] in
36
- self?.hms = HMSSDK.build()
39
+ let hmsTrackSettings = HMSTrackSettings(videoSettings: videoSettings, audioSettings: audioSettings)
40
+ self?.hms = HMSSDK.build { sdk in
41
+ sdk.trackSettings = hmsTrackSettings
42
+ }
37
43
  }
38
44
  self.delegate = manager
39
45
  self.id = id
40
46
  }
41
47
 
42
48
  // MARK: - HMS SDK Actions
43
-
49
+
50
+ private var previewInProgress = false
51
+
44
52
  func preview(_ credentials: NSDictionary) {
45
53
 
54
+ guard !previewInProgress else {
55
+ let error = HMSError(id: "PREVIEW", code: .joinErrorServer, message: "PREVIEW_IS_IN_PROGRESS", params: ["function": #function, "credentials": credentials])
56
+ on(error: error)
57
+ return
58
+ }
59
+
46
60
  guard let authToken = credentials.value(forKey: "authToken") as? String,
47
61
  let user = credentials.value(forKey: "username") as? String
48
62
  else {
49
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": "REQUIRED_KEYS_NOT_FOUND"])
63
+ 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])
50
65
  return
51
66
  }
52
67
 
68
+ let metadata = credentials.value(forKey: "metadata") as? String
53
69
  DispatchQueue.main.async { [weak self] in
54
70
  guard let strongSelf = self else { return }
55
71
  if let endpoint = credentials.value(forKey: "endpoint") as? String {
56
- strongSelf.config = HMSConfig(userName: user, authToken: authToken, endpoint: endpoint)
72
+ strongSelf.config = HMSConfig(userName: user, authToken: authToken, metadata: metadata, endpoint: endpoint)
57
73
  strongSelf.hms?.preview(config: strongSelf.config!, delegate: strongSelf)
58
74
  } else {
59
- strongSelf.config = HMSConfig(userName: user, authToken: authToken)
75
+ strongSelf.config = HMSConfig(userName: user, authToken: authToken, metadata: metadata)
60
76
  strongSelf.hms?.preview(config: strongSelf.config!, delegate: strongSelf)
61
77
  }
78
+ strongSelf.previewInProgress = true
62
79
  }
63
80
  }
64
81
 
82
+
65
83
  func join(_ credentials: NSDictionary) {
66
84
 
85
+ guard !previewInProgress else {
86
+ let error = HMSError(id: "PREVIEW", code: .joinErrorServer, message: "PREVIEW_IS_IN_PROGRESS", params: ["function": #function, "credentials": credentials])
87
+ on(error: error)
88
+ return
89
+ }
90
+
67
91
  guard let authToken = credentials.value(forKey: "authToken") as? String,
68
92
  let user = credentials.value(forKey: "username") as? String
69
93
  else {
70
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": "REQUIRED_KEYS_NOT_FOUND"])
94
+ 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])
71
96
  return
72
97
  }
73
98
 
74
- DispatchQueue.main.async { [weak self] in
75
- guard let strongSelf = self else { return }
76
- if let config = strongSelf.config {
77
- do{
78
- try strongSelf.hms?.join(config: config, delegate: strongSelf)
79
- } catch let error{
80
- strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["event": strongSelf.ON_ERROR, "error": error.localizedDescription])
81
- }
82
- } else {
83
- if let endpoint = credentials.value(forKey: "endpoint") as? String {
84
- do{
85
- strongSelf.config = HMSConfig(userName: user, authToken: authToken, endpoint: endpoint)
86
- try strongSelf.hms?.join(config: strongSelf.config!, delegate: strongSelf)
87
- } catch let error{
88
- strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["event": strongSelf.ON_ERROR, "error": error.localizedDescription])
89
- }
90
- } else {
91
- do{
92
- strongSelf.config = HMSConfig(userName: user, authToken: authToken)
93
- try strongSelf.hms?.join(config: strongSelf.config!, delegate: strongSelf)
94
- } catch let error{
95
- strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["event": strongSelf.ON_ERROR, "error": error.localizedDescription])
96
- }
97
- }
98
- }
99
- }
99
+ let metadata = credentials.value(forKey: "metadata") as? String
100
100
 
101
101
  DispatchQueue.main.async { [weak self] in
102
102
  guard let strongSelf = self else { return }
@@ -104,10 +104,10 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
104
104
  strongSelf.hms?.join(config: config, delegate: strongSelf)
105
105
  } else {
106
106
  if let endpoint = credentials.value(forKey: "endpoint") as? String {
107
- strongSelf.config = HMSConfig(userName: user, authToken: authToken, endpoint: endpoint)
107
+ strongSelf.config = HMSConfig(userName: user, authToken: authToken, metadata: metadata, endpoint: endpoint)
108
108
  strongSelf.hms?.join(config: strongSelf.config!, delegate: strongSelf)
109
109
  } else {
110
- strongSelf.config = HMSConfig(userName: user, authToken: authToken)
110
+ strongSelf.config = HMSConfig(userName: user, authToken: authToken, metadata: metadata)
111
111
  strongSelf.hms?.join(config: strongSelf.config!, delegate: strongSelf)
112
112
  }
113
113
  }
@@ -117,7 +117,8 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
117
117
  func setLocalMute(_ data: NSDictionary) {
118
118
  guard let isMute = data.value(forKey: "isMute") as? Bool
119
119
  else {
120
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": "REQUIRED_KEYS_NOT_FOUND"])
120
+ 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])
121
122
  return
122
123
  }
123
124
 
@@ -129,7 +130,8 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
129
130
  func setLocalVideoMute(_ data: NSDictionary) {
130
131
  guard let isMute = data.value(forKey: "isMute") as? Bool
131
132
  else {
132
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": "REQUIRED_KEYS_NOT_FOUND"])
133
+ 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])
133
135
  return
134
136
  }
135
137
 
@@ -146,100 +148,148 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
146
148
 
147
149
  func leave(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
148
150
  DispatchQueue.main.async { [weak self] in
151
+ guard let strongSelf = self else { return }
149
152
  self?.config = nil
150
153
  self?.recentRoleChangeRequest = nil
151
- self?.recentChangeTrackStateRequest = nil
152
154
  self?.hms?.leave({ success, error in
153
155
  if(success){
154
156
  resolve?("")
155
157
  }else{
158
+ strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["event": strongSelf.ON_ERROR, "error": HmsDecoder.getError(error), "id":strongSelf.id])
156
159
  reject?(nil, "error in leave",nil)
157
160
  }
158
161
  })
159
162
  }
160
163
  }
161
164
 
162
- func sendBroadcastMessage(_ data: NSDictionary) {
165
+ func sendBroadcastMessage(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
163
166
  guard let message = data.value(forKey: "message") as? String
164
167
  else {
165
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": "REQUIRED_KEYS_NOT_FOUND"])
168
+ 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])
166
170
  return
167
171
  }
168
172
 
169
173
  let type = data.value(forKey: "type") as? String ?? "chat"
170
174
 
171
175
  DispatchQueue.main.async { [weak self] in
172
- self?.hms?.sendBroadcastMessage(type: type, message: message)
176
+ self?.hms?.sendBroadcastMessage(type: type, message: message, completion: { message, error in
177
+ if (error == nil) {
178
+ resolve?(["success": true, "data": ["sender": message?.sender?.name ?? "", "message": message?.message ?? "", "type": message?.type]])
179
+ return
180
+ } else {
181
+ self?.delegate?.emitEvent("ON_ERROR", ["event": "ON_ERROR", "error": HmsDecoder.getError(error), "id": self?.id ?? "12345"])
182
+ reject?(error?.message, error?.localizedDescription, nil)
183
+ return
184
+ }
185
+ })
173
186
  }
174
187
  }
175
188
 
176
- func sendGroupMessage(_ data: NSDictionary) {
189
+ func sendGroupMessage(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
177
190
  guard let message = data.value(forKey: "message") as? String,
178
191
  let targetedRoles = data.value(forKey: "roles") as? [String]
179
192
  else {
180
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": "REQUIRED_KEYS_NOT_FOUND"])
193
+ 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])
181
195
  return
182
196
  }
183
197
 
184
198
  let type = data.value(forKey: "type") as? String ?? "chat"
185
199
  DispatchQueue.main.async { [weak self] in
186
200
  let encodedTargetedRoles = HmsHelper.getRolesFromRoleNames(targetedRoles, roles: self?.hms?.roles)
187
- self?.hms?.sendGroupMessage(type: type, message: message, roles: encodedTargetedRoles)
201
+ self?.hms?.sendGroupMessage(type: type, message: message, roles: encodedTargetedRoles, completion: { message, error in
202
+ if (error == nil) {
203
+ resolve?(["success": true, "data": ["sender": message?.sender?.name ?? "", "message": message?.message ?? "", "type": message?.type]])
204
+ return
205
+ } else {
206
+ self?.delegate?.emitEvent("ON_ERROR", ["event": "ON_ERROR", "error": HmsDecoder.getError(error), "id": self?.id ?? "12345"])
207
+ reject?(error?.message, error?.localizedDescription, nil)
208
+ return
209
+ }
210
+ })
188
211
  }
189
212
  }
190
213
 
191
- func sendDirectMessage(_ data: NSDictionary) {
214
+ func sendDirectMessage(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
192
215
  guard let message = data.value(forKey: "message") as? String,
193
216
  let peerId = data.value(forKey: "peerId") as? String
194
217
  else {
195
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": "REQUIRED_KEYS_NOT_FOUND"])
218
+ 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])
196
220
  return
197
221
  }
198
222
 
199
223
  let type = data.value(forKey: "type") as? String ?? "chat"
200
224
  DispatchQueue.main.async { [weak self] in
201
- guard let peer = HmsHelper.getPeerFromPeerId(peerId, remotePeers: self?.hms?.remotePeers) else { return }
225
+ guard let peer = HmsHelper.getRemotePeerFromPeerId(peerId, remotePeers: self?.hms?.remotePeers) else { return }
226
+ self?.hms?.sendDirectMessage(type: type, message: message, peer: peer, completion: { message, error in
227
+ if (error == nil) {
228
+ resolve?(["success": true, "data": ["sender": message?.sender?.name ?? "", "message": message?.message ?? "", "type": message?.type]])
229
+ return
230
+ } else {
231
+ self?.delegate?.emitEvent("ON_ERROR", ["event": "ON_ERROR", "error": HmsDecoder.getError(error), "id": self?.id ?? "12345"])
232
+ reject?(error?.message, error?.localizedDescription, nil)
233
+ return
234
+ }
235
+ })
202
236
  self?.hms?.sendDirectMessage(type: type, message: message, peer: peer)
203
237
  }
204
238
  }
205
239
 
206
- func acceptRoleChange() {
240
+ func acceptRoleChange(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
207
241
 
208
242
  DispatchQueue.main.async { [weak self] in
209
243
 
210
244
  guard let request = self?.recentRoleChangeRequest else { return }
211
245
 
212
- self?.hms?.accept(changeRole: request)
246
+ self?.hms?.accept(changeRole: request, completion: { success, error in
247
+ if(success) {
248
+ resolve?(["success": true])
249
+ } else{
250
+ self?.delegate?.emitEvent("ON_ERROR", ["event": self?.ON_ERROR ?? "", "error": HmsDecoder.getError(error), "id":self?.id ?? "12345"])
251
+ reject?(error?.message, error?.localizedDescription,nil)
252
+ }
253
+ })
213
254
 
214
255
  self?.recentRoleChangeRequest = nil
215
256
  }
216
257
  }
217
258
 
218
- func changeRole(_ data: NSDictionary) {
259
+ func changeRole(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
219
260
 
220
261
  guard let peerId = data.value(forKey: "peerId") as? String,
221
262
  let role = data.value(forKey: "role") as? String
222
263
  else {
223
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": "REQUIRED_KEYS_NOT_FOUND"])
264
+ let error = HMSError(id: "111", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
265
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
224
266
  return
225
267
  }
226
268
 
227
269
  let force = data.value(forKey: "force") as? Bool ?? false
228
270
 
229
271
  DispatchQueue.main.async { [weak self] in
230
- guard let peer = HmsHelper.getPeerFromPeerId(peerId, remotePeers: self?.hms?.remotePeers),
272
+ guard let peer = HmsHelper.getPeerFromPeerId(peerId, remotePeers: self?.hms?.remotePeers, localPeer:self?.hms?.localPeer),
231
273
  let role = HmsHelper.getRoleFromRoleName(role, roles: self?.hms?.roles)
232
274
  else { return }
233
-
234
- self?.hms?.changeRole(for: peer, to: role, force: force)
275
+
276
+ self?.hms?.changeRole(for: peer, to: role, force: force, completion: { success, error in
277
+ if(success) {
278
+ resolve?(["success": true])
279
+ } else{
280
+ self?.delegate?.emitEvent("ON_ERROR", ["event": self?.ON_ERROR ?? "", "error": HmsDecoder.getError(error), "id":self?.id ?? "12345"])
281
+ reject?(error?.message, error?.localizedDescription,nil)
282
+ }
283
+ })
235
284
  }
236
285
  }
237
286
 
238
- func changeTrackState(_ data: NSDictionary) {
287
+ func changeTrackState(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
239
288
 
240
289
  guard let trackId = data.value(forKey: "trackId") as? String
241
290
  else {
242
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": "REQUIRED_KEYS_NOT_FOUND"])
291
+ let error = HMSError(id: "112", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
292
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
243
293
  return
244
294
  }
245
295
 
@@ -250,17 +300,25 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
250
300
  let track = HmsHelper.getTrackFromTrackId(trackId, remotePeers)
251
301
  else { return }
252
302
 
253
- self?.hms?.changeTrackState(for: track, mute: mute)
303
+ self?.hms?.changeTrackState(for: track, mute: mute, completion: { success, error in
304
+ if(success) {
305
+ resolve?(["success": true])
306
+ } else{
307
+ self?.delegate?.emitEvent("ON_ERROR", ["event": self?.ON_ERROR ?? "", "error": HmsDecoder.getError(error), "id":self?.id ?? "12345"])
308
+ reject?(error?.message, error?.localizedDescription, nil)
309
+ }
310
+ })
254
311
  }
255
312
  }
256
313
 
257
- func changeTrackStateRoles(_ data: NSDictionary) {
314
+ func changeTrackStateRoles(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
258
315
 
259
316
  guard let source = data.value(forKey: "source") as? String,
260
317
  let targetedRoles = data.value(forKey: "roles") as? [String],
261
318
  let type = data.value(forKey: "type") as? String
262
319
  else {
263
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": "REQUIRED_KEYS_NOT_FOUND"])
320
+ let error = HMSError(id: "113", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
321
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
264
322
  return
265
323
  }
266
324
  var decodeType: HMSTrackKind;
@@ -273,7 +331,14 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
273
331
 
274
332
  DispatchQueue.main.async { [weak self] in
275
333
  let encodedTargetedRoles = HmsHelper.getRolesFromRoleNames(targetedRoles, roles: self?.hms?.roles)
276
- self?.hms?.changeTrackState(mute: mute, for: decodeType, source: source, roles: encodedTargetedRoles)
334
+ self?.hms?.changeTrackState(mute: mute, for: decodeType, source: source, roles: encodedTargetedRoles, completion: { success, error in
335
+ if(success) {
336
+ resolve?(["success": true])
337
+ } else{
338
+ self?.delegate?.emitEvent("ON_ERROR", ["event": self?.ON_ERROR ?? "", "error": HmsDecoder.getError(error), "id":self?.id ?? "12345"])
339
+ reject?(error?.message, error?.localizedDescription,nil)
340
+ }
341
+ })
277
342
  }
278
343
  }
279
344
 
@@ -281,17 +346,21 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
281
346
  guard let trackId = data.value(forKey: "trackId") as? String
282
347
  else {
283
348
  reject?(nil, "NO_SDK_ID", nil)
284
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": "REQUIRED_KEYS_NOT_FOUND"])
349
+ let error = HMSError(id: "114", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
350
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
285
351
  return
286
352
  }
287
353
 
288
354
  DispatchQueue.main.async { [weak self] in
355
+ guard let strongSelf = self else { return }
289
356
  guard let localPeer = self?.hms?.localPeer,
290
357
  let localTrack = HmsHelper.getLocalTrackFromTrackId(trackId, localPeer: localPeer)
291
358
  else {
292
359
  guard let remotePeers = self?.hms?.remotePeers,
293
360
  let track = HmsHelper.getTrackFromTrackId(trackId, remotePeers)
294
361
  else {
362
+ let error = HMSError(id: "120", code: HMSErrorCode.genericErrorUnknown, message: "NOT_FOUND")
363
+ strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["event": strongSelf.ON_ERROR, "error": HmsDecoder.getError(error), "id":strongSelf.id])
295
364
  reject?(nil, "NOT_FOUND", nil)
296
365
  return
297
366
  }
@@ -304,11 +373,12 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
304
373
  }
305
374
  }
306
375
 
307
- func removePeer(_ data: NSDictionary) {
376
+ func removePeer(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
308
377
 
309
378
  guard let peerId = data.value(forKey: "peerId") as? String
310
379
  else {
311
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": "REQUIRED_KEYS_NOT_FOUND"])
380
+ let error = HMSError(id: "115", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
381
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
312
382
  return
313
383
  }
314
384
 
@@ -317,25 +387,40 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
317
387
  DispatchQueue.main.async { [weak self] in
318
388
 
319
389
  guard let remotePeers = self?.hms?.remotePeers,
320
- let peer = HmsHelper.getPeerFromPeerId(peerId, remotePeers: remotePeers)
390
+ let peer = HmsHelper.getRemotePeerFromPeerId(peerId, remotePeers: remotePeers)
321
391
  else { return }
322
392
 
323
- self?.hms?.removePeer(peer, reason: reason ?? "Removed from room")
393
+ self?.hms?.removePeer(peer, reason: reason ?? "Removed from room", completion: { success, error in
394
+ if(success) {
395
+ resolve?(["success": true])
396
+ } else{
397
+ self?.delegate?.emitEvent("ON_ERROR", ["event": self?.ON_ERROR ?? "", "error": HmsDecoder.getError(error), "id":self?.id ?? "12345"])
398
+ reject?(error?.message, error?.localizedDescription,nil)
399
+ }
400
+ })
324
401
  }
325
402
  }
326
403
 
327
404
 
328
- func endRoom(_ data: NSDictionary) {
405
+ func endRoom(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
329
406
 
330
407
  guard let lock = data.value(forKey: "lock") as? Bool,
331
408
  let reason = data.value(forKey: "reason") as? String
332
409
  else {
333
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": "REQUIRED_KEYS_NOT_FOUND"])
410
+ let error = HMSError(id: "116", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
411
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
334
412
  return
335
413
  }
336
414
 
337
415
  DispatchQueue.main.async { [weak self] in
338
- self?.hms?.endRoom(lock: lock ?? false, reason: reason ?? "Room was ended")
416
+ self?.hms?.endRoom(lock: lock, reason: reason, completion: { success, error in
417
+ if(success) {
418
+ resolve?(["success": true])
419
+ } else{
420
+ self?.delegate?.emitEvent("ON_ERROR", ["event": self?.ON_ERROR ?? "", "error": HmsDecoder.getError(error), "id":self?.id ?? "12345"])
421
+ reject?(error?.message, error?.localizedDescription,nil)
422
+ }
423
+ })
339
424
  }
340
425
  }
341
426
 
@@ -343,12 +428,16 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
343
428
  guard let trackId = data.value(forKey: "trackId") as? String
344
429
  else {
345
430
  reject?(nil, "NOT_FOUND", nil)
346
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": "REQUIRED_KEYS_NOT_FOUND"])
431
+ let error = HMSError(id: "117", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
432
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
347
433
  return
348
434
  }
349
435
  DispatchQueue.main.async { [weak self] in
436
+ guard let strongSelf = self else { return }
350
437
  guard let remotePeers = self?.hms?.remotePeers
351
438
  else {
439
+ let error = HMSError(id: "121", code: HMSErrorCode.genericErrorUnknown, message: "NOT_FOUND")
440
+ strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["event": strongSelf.ON_ERROR, "error": HmsDecoder.getError(error), "id":strongSelf.id])
352
441
  reject?(nil, "NOT_FOUND", nil)
353
442
  return
354
443
  }
@@ -363,6 +452,8 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
363
452
  resolve?(isPlaybackAllowed)
364
453
  return
365
454
  } else {
455
+ let error = HMSError(id: "122", code: HMSErrorCode.genericErrorUnknown, message: "NOT_FOUND")
456
+ strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["event": strongSelf.ON_ERROR, "error": HmsDecoder.getError(error), "id":strongSelf.id])
366
457
  reject?(nil, "NOT_FOUND",nil)
367
458
  return
368
459
  }
@@ -379,7 +470,8 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
379
470
  guard let trackId = data.value(forKey: "trackId") as? String,
380
471
  let playbackAllowed = data.value(forKey: "playbackAllowed") as? Bool
381
472
  else {
382
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": "REQUIRED_KEYS_NOT_FOUND"])
473
+ let error = HMSError(id: "118", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
474
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
383
475
  return
384
476
  }
385
477
  DispatchQueue.main.async { [weak self] in
@@ -401,6 +493,137 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
401
493
  }
402
494
  }
403
495
 
496
+ func changeMetadata(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
497
+ guard let metadata = data.value(forKey: "metadata") as? String
498
+ else {
499
+ let error = HMSError(id: "123", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
500
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
501
+ reject?(nil, "REQUIRED_KEYS_NOT_FOUND", nil)
502
+ return
503
+ }
504
+
505
+ hms?.change(metadata: metadata, completion: { success, error in
506
+ if (success) {
507
+ resolve?(["success": success])
508
+ return
509
+ } else {
510
+ self.delegate?.emitEvent(self.ON_ERROR, ["event": self.ON_ERROR, "error": HmsDecoder.getError(error), "id":self.id])
511
+ reject?(error?.message, error?.localizedDescription, nil)
512
+ return
513
+ }
514
+ })
515
+ }
516
+
517
+ func setVolume(_ data: NSDictionary) {
518
+ guard let trackId = data.value(forKey: "trackId") as? String,
519
+ let volume = data.value(forKey: "volume") as? Double
520
+ else {
521
+ let error = HMSError(id: "124", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
522
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
523
+ return
524
+ }
525
+
526
+ DispatchQueue.main.async { [weak self] in
527
+ guard let strongSelf = self else { return }
528
+ let remotePeers = self?.hms?.remotePeers
529
+
530
+ let remoteAudioTrack = HmsHelper.getRemoteAudioAuxiliaryTrackFromTrackId(trackId, remotePeers)
531
+
532
+ if (remoteAudioTrack != nil) {
533
+ remoteAudioTrack?.setVolume(volume)
534
+ } else {
535
+ let error = HMSError(id: "125", code: HMSErrorCode.genericErrorUnknown, message: "TRACK_ID_NOT_FOUND_IN_REMOTE_TRACKS")
536
+ strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["event": strongSelf.ON_ERROR, "error": HmsDecoder.getError(error), "id":strongSelf.id])
537
+ }
538
+ }
539
+ }
540
+
541
+ func startRTMPOrRecording(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
542
+ guard let record = data.value(forKey: "record") as? Bool
543
+ else {
544
+ let error = HMSError(id: "126", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
545
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
546
+ return
547
+ }
548
+
549
+ let meetingString = data.value(forKey: "meetingURL") as? String
550
+ let rtmpStrings = data.value(forKey: "rtmpURLs") as? [String]
551
+
552
+ var meetingUrl: URL? = nil
553
+ if let meetLink = meetingString {
554
+ meetingUrl = URL(string: meetLink)
555
+ } else {
556
+ let error = HMSError(id: "127", code: HMSErrorCode.genericErrorUnknown, message: "INVALID_MEETING_URL_PASSED")
557
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
558
+ }
559
+
560
+ let URLs = HmsHelper.getRtmpUrls(rtmpStrings)
561
+
562
+
563
+ let config = HMSRTMPConfig(meetingURL: meetingUrl, rtmpURLs: URLs, record: record)
564
+ hms?.startRTMPOrRecording(config: config, completion: { success, error in
565
+ if (success) {
566
+ let roomData = HmsDecoder.getHmsRoom(self.hms?.room)
567
+ let type = self.getString(from: HMSRoomUpdate.browserRecordingStateUpdated)
568
+
569
+ let localPeerData = HmsDecoder.getHmsLocalPeer(self.hms?.localPeer)
570
+ let remotePeerData = HmsDecoder.getHmsRemotePeers(self.hms?.remotePeers)
571
+ self.delegate?.emitEvent(self.ON_ROOM_UPDATE, ["event": self.ON_ROOM_UPDATE, "id": self.id, "type": type, "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData])
572
+ resolve?(["success": success])
573
+ return
574
+ } else {
575
+ self.delegate?.emitEvent(self.ON_ERROR, ["event": self.ON_ERROR, "error": HmsDecoder.getError(error), "id":self.id])
576
+ reject?(error?.message, error?.localizedDescription, nil)
577
+ return
578
+ }
579
+ })
580
+ }
581
+
582
+ func stopRtmpAndRecording(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
583
+ hms?.stopRTMPAndRecording(completion: { success, error in
584
+ if (success) {
585
+ let roomData = HmsDecoder.getHmsRoom(self.hms?.room)
586
+ let type = self.getString(from: HMSRoomUpdate.browserRecordingStateUpdated)
587
+
588
+ let localPeerData = HmsDecoder.getHmsLocalPeer(self.hms?.localPeer)
589
+ let remotePeerData = HmsDecoder.getHmsRemotePeers(self.hms?.remotePeers)
590
+ self.delegate?.emitEvent(self.ON_ROOM_UPDATE, ["event": self.ON_ROOM_UPDATE, "id": self.id, "type": type, "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData])
591
+ resolve?(["success": success])
592
+ return
593
+ } else {
594
+ self.delegate?.emitEvent(self.ON_ERROR, ["event": self.ON_ERROR, "error": HmsDecoder.getError(error), "id":self.id])
595
+ reject?(error?.message, error?.localizedDescription, nil)
596
+ return
597
+ }
598
+ })
599
+ }
600
+
601
+ //TODO: to be implemented after volume is exposed for iOS
602
+ // func getVolume(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
603
+ // guard let trackId = data.value(forKey: "trackId") as? String
604
+ // else {
605
+ // delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": "REQUIRED_KEYS_NOT_FOUND"])
606
+ // reject?(nil, "REQUIRED_KEYS_NOT_FOUND", nil)
607
+ // return
608
+ // }
609
+ //
610
+ //
611
+ // if (localPeer?.localAudioTrack()?.trackId == trackId) {
612
+ //
613
+ // }
614
+ // }
615
+
616
+ // func setLocalVideoSettings(_ data: NSDictionary) {
617
+ // let localVideoTrack = self.hms?.localPeer?.localVideoTrack()
618
+ //
619
+ // guard let settings = HmsHelper.getLocalVideoSettings(data)
620
+ // else {
621
+ // //TODO: throw an error for invalid arguements
622
+ // return
623
+ // }
624
+ // localVideoTrack?.settings = settings
625
+ // }
626
+
404
627
  // MARK: - HMS SDK Delegate Callbacks
405
628
 
406
629
  func on(join room: HMSRoom) {
@@ -411,7 +634,7 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
411
634
 
412
635
  let decodedRoles = HmsDecoder.getAllRoles(hms?.roles)
413
636
 
414
- self.delegate?.emitEvent(ON_JOIN, ["event": ON_JOIN, "id": self.id ?? "", "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData, "roles": decodedRoles])
637
+ self.delegate?.emitEvent(ON_JOIN, ["event": ON_JOIN, "id": self.id , "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData, "roles": decodedRoles])
415
638
  }
416
639
 
417
640
  func onPreview(room: HMSRoom, localTracks: [HMSTrack]) {
@@ -419,7 +642,8 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
419
642
  let hmsRoom = HmsDecoder.getHmsRoom(room)
420
643
  let localPeerData = HmsDecoder.getHmsLocalPeer(hms?.localPeer)
421
644
 
422
- self.delegate?.emitEvent(ON_PREVIEW, ["event": ON_PREVIEW, "id": self.id, "room": hmsRoom, "previewTracks": previewTracks, "localPeer": localPeerData])
645
+ previewInProgress = false
646
+ self.delegate?.emitEvent(ON_PREVIEW, ["event": ON_PREVIEW, "id": self.id , "room": hmsRoom, "previewTracks": previewTracks, "localPeer": localPeerData])
423
647
  }
424
648
 
425
649
  func on(room: HMSRoom, update: HMSRoomUpdate) {
@@ -430,7 +654,7 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
430
654
  let localPeerData = HmsDecoder.getHmsLocalPeer(hms?.localPeer)
431
655
  let remotePeerData = HmsDecoder.getHmsRemotePeers(hms?.remotePeers)
432
656
 
433
- self.delegate?.emitEvent(ON_ROOM_UPDATE, ["event": ON_ROOM_UPDATE, "id": self.id, "type": type, "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData])
657
+ self.delegate?.emitEvent(ON_ROOM_UPDATE, ["event": ON_ROOM_UPDATE, "id": self.id , "type": type, "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData])
434
658
  }
435
659
 
436
660
  func on(peer: HMSPeer, update: HMSPeerUpdate) {
@@ -440,8 +664,9 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
440
664
 
441
665
  let localPeerData = HmsDecoder.getHmsLocalPeer(hms?.localPeer)
442
666
  let remotePeerData = HmsDecoder.getHmsRemotePeers(hms?.remotePeers)
667
+ let hmsPeer = HmsDecoder.getHmsPeer(peer)
443
668
 
444
- self.delegate?.emitEvent(ON_PEER_UPDATE, ["event": ON_PEER_UPDATE, "id": self.id, "type": type, "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData])
669
+ self.delegate?.emitEvent(ON_PEER_UPDATE, ["event": ON_PEER_UPDATE, "id": self.id, "type": type, "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData, "peer": hmsPeer])
445
670
  }
446
671
 
447
672
  func on(track: HMSTrack, update: HMSTrackUpdate, for peer: HMSPeer) {
@@ -451,17 +676,19 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
451
676
 
452
677
  let localPeerData = HmsDecoder.getHmsLocalPeer(hms?.localPeer)
453
678
  let remotePeerData = HmsDecoder.getHmsRemotePeers(hms?.remotePeers)
679
+ let hmsPeer = HmsDecoder.getHmsPeer(peer)
680
+ let hmsTrack = HmsDecoder.getHmsTrack(track)
454
681
 
455
- self.delegate?.emitEvent(ON_TRACK_UPDATE, ["event": ON_TRACK_UPDATE, "id": self.id, "room": roomData, "type": type, "localPeer": localPeerData, "remotePeers": remotePeerData])
682
+ 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])
456
683
  }
457
684
 
458
685
  func on(error: HMSError) {
459
- let hmsError = HmsDecoder.getError(error)
460
- self.delegate?.emitEvent(ON_ERROR, hmsError)
686
+ if (previewInProgress) { previewInProgress = false }
687
+ self.delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
461
688
  }
462
689
 
463
690
  func on(message: HMSMessage) {
464
- self.delegate?.emitEvent(ON_MESSAGE, ["event": ON_MESSAGE, "id": self.id, "sender": message.sender?.name ?? "", "time": message.time, "message": message.message, "type": message.type])
691
+ self.delegate?.emitEvent(ON_MESSAGE, ["event": ON_MESSAGE, "id": self.id , "sender": message.sender?.name ?? "", "time": message.time, "message": message.message, "type": message.type])
465
692
  }
466
693
 
467
694
  func on(updated speakers: [HMSSpeaker]) {
@@ -469,15 +696,15 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
469
696
  for speaker in speakers {
470
697
  speakerPeerIds.append(["peer": HmsDecoder.getHmsPeer(speaker.peer), "level": speaker.level, "track": HmsDecoder.getHmsTrack(speaker.track)])
471
698
  }
472
- self.delegate?.emitEvent(ON_SPEAKER, ["event": ON_SPEAKER, "id": self.id, "count": speakers.count, "peers" :speakerPeerIds])
699
+ self.delegate?.emitEvent(ON_SPEAKER, ["event": ON_SPEAKER, "id": self.id , "count": speakers.count, "peers" :speakerPeerIds])
473
700
  }
474
701
 
475
702
  func onReconnecting() {
476
- self.delegate?.emitEvent(RECONNECTING, ["event": RECONNECTING, "id": self.id])
703
+ self.delegate?.emitEvent(RECONNECTING, ["event": RECONNECTING, "id": self.id ])
477
704
  }
478
705
 
479
706
  func onReconnected() {
480
- self.delegate?.emitEvent(RECONNECTED, ["event": RECONNECTED, "id": self.id])
707
+ self.delegate?.emitEvent(RECONNECTED, ["event": RECONNECTED, "id": self.id ])
481
708
  }
482
709
 
483
710
  func on(roleChangeRequest: HMSRoleChangeRequest) {
@@ -487,7 +714,8 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
487
714
  }
488
715
 
489
716
  func on(changeTrackStateRequest: HMSChangeTrackStateRequest) {
490
- // On track state change required
717
+ let decodedChangeTrackStateRequest = HmsDecoder.getHmsChangeTrackStateRequest(changeTrackStateRequest, id)
718
+ delegate?.emitEvent("ON_CHANGE_TRACK_STATE_REQUEST", decodedChangeTrackStateRequest)
491
719
  }
492
720
 
493
721
  func on(removedFromRoom notification: HMSRemovedFromRoomNotification) {
@@ -507,7 +735,8 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
507
735
  func muteAllPeersAudio(_ data: NSDictionary) {
508
736
  guard let mute = data.value(forKey: "mute") as? Bool
509
737
  else {
510
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": "REQUIRED_KEYS_NOT_FOUND"])
738
+ let error = HMSError(id: "119", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
739
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
511
740
  return
512
741
  }
513
742
 
@@ -532,6 +761,8 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
532
761
  return "PEER_LEFT"
533
762
  case .roleUpdated:
534
763
  return "ROLE_CHANGED"
764
+ case .metadataUpdated:
765
+ return "METADATA_CHANGED"
535
766
  default:
536
767
  return ""
537
768
  }
@@ -575,3 +806,9 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
575
806
  }
576
807
  }
577
808
  }
809
+
810
+ //extension HmsSDK: HMSLogger {
811
+ // func log(_ message: String, _ level: HMSLogLevel) {
812
+ //
813
+ // }
814
+ //}