@100mslive/react-native-hms 1.7.0 → 1.7.2

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 (205) hide show
  1. package/README.md +30 -39
  2. package/android/.gradle/6.7.1/executionHistory/executionHistory.bin +0 -0
  3. package/android/.gradle/6.7.1/executionHistory/executionHistory.lock +0 -0
  4. package/android/.gradle/6.7.1/fileChanges/last-build.bin +0 -0
  5. package/android/.gradle/6.7.1/fileHashes/fileHashes.bin +0 -0
  6. package/android/.gradle/6.7.1/fileHashes/fileHashes.lock +0 -0
  7. package/android/.gradle/6.7.1/gc.properties +0 -0
  8. package/android/.gradle/6.9/executionHistory/executionHistory.bin +0 -0
  9. package/android/.gradle/6.9/executionHistory/executionHistory.lock +0 -0
  10. package/android/.gradle/6.9/fileChanges/last-build.bin +0 -0
  11. package/android/.gradle/6.9/fileHashes/fileHashes.bin +0 -0
  12. package/android/.gradle/6.9/fileHashes/fileHashes.lock +0 -0
  13. package/android/.gradle/6.9/gc.properties +0 -0
  14. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  15. package/android/.gradle/buildOutputCleanup/cache.properties +2 -0
  16. package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
  17. package/android/.gradle/checksums/checksums.lock +0 -0
  18. package/android/.gradle/checksums/md5-checksums.bin +0 -0
  19. package/android/.gradle/checksums/sha1-checksums.bin +0 -0
  20. package/android/.gradle/configuration-cache/gc.properties +0 -0
  21. package/android/.gradle/vcs-1/gc.properties +0 -0
  22. package/android/build.gradle +16 -9
  23. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  24. package/android/gradle/wrapper/gradle-wrapper.properties +1 -1
  25. package/android/gradlew +103 -104
  26. package/android/gradlew.bat +3 -18
  27. package/android/local.properties +0 -7
  28. package/android/src/main/java/com/reactnativehmssdk/HMSDecoder.kt +37 -9
  29. package/android/src/main/java/com/reactnativehmssdk/HMSHelper.kt +2 -1
  30. package/android/src/main/java/com/reactnativehmssdk/HMSManager.kt +7 -0
  31. package/android/src/main/java/com/reactnativehmssdk/HMSRNSDK.kt +39 -10
  32. package/ios/HMSDecoder.swift +9 -10
  33. package/ios/HMSHelper.swift +6 -2
  34. package/ios/HMSManager.m +4 -0
  35. package/ios/HMSManager.swift +8 -0
  36. package/ios/HMSRNSDK.swift +54 -24
  37. package/lib/commonjs/classes/HMSAudioTrack.js.map +1 -1
  38. package/lib/commonjs/classes/HMSBrowserRecordingState.js +2 -0
  39. package/lib/commonjs/classes/HMSBrowserRecordingState.js.map +1 -1
  40. package/lib/commonjs/classes/HMSCameraControl.js +3 -5
  41. package/lib/commonjs/classes/HMSCameraControl.js.map +1 -1
  42. package/lib/commonjs/classes/HMSEncoder.js +42 -40
  43. package/lib/commonjs/classes/HMSEncoder.js.map +1 -1
  44. package/lib/commonjs/classes/HMSEventEmitter.js +10 -0
  45. package/lib/commonjs/classes/HMSEventEmitter.js.map +1 -0
  46. package/lib/commonjs/classes/HMSHelper.js +1 -1
  47. package/lib/commonjs/classes/HMSHelper.js.map +1 -1
  48. package/lib/commonjs/classes/HMSLocalAudioTrack.js +2 -2
  49. package/lib/commonjs/classes/HMSLocalAudioTrack.js.map +1 -1
  50. package/lib/commonjs/classes/HMSLocalPeer.js.map +1 -1
  51. package/lib/commonjs/classes/HMSLocalVideoTrack.js +2 -2
  52. package/lib/commonjs/classes/HMSLocalVideoTrack.js.map +1 -1
  53. package/lib/commonjs/classes/HMSLogger.js +4 -4
  54. package/lib/commonjs/classes/HMSLogger.js.map +1 -1
  55. package/lib/commonjs/classes/HMSManagerModule.js +18 -0
  56. package/lib/commonjs/classes/HMSManagerModule.js.map +1 -0
  57. package/lib/commonjs/classes/HMSMessage.js.map +1 -1
  58. package/lib/commonjs/classes/HMSNativeEventEmitter.js +6 -6
  59. package/lib/commonjs/classes/HMSNativeEventEmitter.js.map +1 -1
  60. package/lib/commonjs/classes/HMSNativeEventListener.js +13 -0
  61. package/lib/commonjs/classes/HMSNativeEventListener.js.map +1 -0
  62. package/lib/commonjs/classes/HMSPeer.js +2 -15
  63. package/lib/commonjs/classes/HMSPeer.js.map +1 -1
  64. package/lib/commonjs/classes/HMSPeersCache.js +3 -5
  65. package/lib/commonjs/classes/HMSPeersCache.js.map +1 -1
  66. package/lib/commonjs/classes/HMSRemoteAudioTrack.js +2 -2
  67. package/lib/commonjs/classes/HMSRemoteAudioTrack.js.map +1 -1
  68. package/lib/commonjs/classes/HMSRemotePeer.js.map +1 -1
  69. package/lib/commonjs/classes/HMSRemoteVideoTrack.js +5 -5
  70. package/lib/commonjs/classes/HMSRemoteVideoTrack.js.map +1 -1
  71. package/lib/commonjs/classes/HMSRoom.js.map +1 -1
  72. package/lib/commonjs/classes/HMSRoomCache.js +10 -5
  73. package/lib/commonjs/classes/HMSRoomCache.js.map +1 -1
  74. package/lib/commonjs/classes/HMSSDK.js +165 -170
  75. package/lib/commonjs/classes/HMSSDK.js.map +1 -1
  76. package/lib/commonjs/classes/HMSSessionStore.js +9 -10
  77. package/lib/commonjs/classes/HMSSessionStore.js.map +1 -1
  78. package/lib/commonjs/classes/HMSTrack.js.map +1 -1
  79. package/lib/commonjs/classes/HMSVideoTrack.js.map +1 -1
  80. package/lib/commonjs/classes/HmsView.js +1 -1
  81. package/lib/commonjs/classes/HmsView.js.map +1 -1
  82. package/lib/commonjs/components/HMSHLSPlayer/HMSHLSPlayer.js +8 -8
  83. package/lib/commonjs/components/HMSHLSPlayer/HMSHLSPlayer.js.map +1 -1
  84. package/lib/commonjs/components/HMSHLSPlayer/RCTHMSHLSPlayer.js.map +1 -1
  85. package/lib/commonjs/components/HMSHLSPlayer/hooks.js.map +1 -1
  86. package/lib/commonjs/hooks/useHMSPeerUpdates.js +77 -0
  87. package/lib/commonjs/hooks/useHMSPeerUpdates.js.map +1 -0
  88. package/lib/commonjs/index.js +25 -13
  89. package/lib/commonjs/index.js.map +1 -1
  90. package/lib/module/classes/HMSAudioTrack.js.map +1 -1
  91. package/lib/module/classes/HMSBrowserRecordingState.js +2 -0
  92. package/lib/module/classes/HMSBrowserRecordingState.js.map +1 -1
  93. package/lib/module/classes/HMSCameraControl.js +1 -4
  94. package/lib/module/classes/HMSCameraControl.js.map +1 -1
  95. package/lib/module/classes/HMSEncoder.js +40 -39
  96. package/lib/module/classes/HMSEncoder.js.map +1 -1
  97. package/lib/module/classes/HMSEventEmitter.js +3 -0
  98. package/lib/module/classes/HMSEventEmitter.js.map +1 -0
  99. package/lib/module/classes/HMSHelper.js +1 -1
  100. package/lib/module/classes/HMSHelper.js.map +1 -1
  101. package/lib/module/classes/HMSLocalAudioTrack.js +2 -2
  102. package/lib/module/classes/HMSLocalAudioTrack.js.map +1 -1
  103. package/lib/module/classes/HMSLocalPeer.js.map +1 -1
  104. package/lib/module/classes/HMSLocalVideoTrack.js +2 -2
  105. package/lib/module/classes/HMSLocalVideoTrack.js.map +1 -1
  106. package/lib/module/classes/HMSLogger.js +4 -4
  107. package/lib/module/classes/HMSLogger.js.map +1 -1
  108. package/lib/module/classes/HMSManagerModule.js +11 -0
  109. package/lib/module/classes/HMSManagerModule.js.map +1 -0
  110. package/lib/module/classes/HMSMessage.js.map +1 -1
  111. package/lib/module/classes/HMSNativeEventEmitter.js +6 -6
  112. package/lib/module/classes/HMSNativeEventEmitter.js.map +1 -1
  113. package/lib/module/classes/HMSNativeEventListener.js +5 -0
  114. package/lib/module/classes/HMSNativeEventListener.js.map +1 -0
  115. package/lib/module/classes/HMSPeer.js +2 -15
  116. package/lib/module/classes/HMSPeer.js.map +1 -1
  117. package/lib/module/classes/HMSPeersCache.js +1 -4
  118. package/lib/module/classes/HMSPeersCache.js.map +1 -1
  119. package/lib/module/classes/HMSRemoteAudioTrack.js +2 -2
  120. package/lib/module/classes/HMSRemoteAudioTrack.js.map +1 -1
  121. package/lib/module/classes/HMSRemotePeer.js.map +1 -1
  122. package/lib/module/classes/HMSRemoteVideoTrack.js +5 -5
  123. package/lib/module/classes/HMSRemoteVideoTrack.js.map +1 -1
  124. package/lib/module/classes/HMSRoom.js.map +1 -1
  125. package/lib/module/classes/HMSRoomCache.js +8 -4
  126. package/lib/module/classes/HMSRoomCache.js.map +1 -1
  127. package/lib/module/classes/HMSSDK.js +113 -118
  128. package/lib/module/classes/HMSSDK.js.map +1 -1
  129. package/lib/module/classes/HMSSessionStore.js +5 -7
  130. package/lib/module/classes/HMSSessionStore.js.map +1 -1
  131. package/lib/module/classes/HMSTrack.js.map +1 -1
  132. package/lib/module/classes/HMSVideoTrack.js.map +1 -1
  133. package/lib/module/classes/HmsView.js +1 -1
  134. package/lib/module/classes/HmsView.js.map +1 -1
  135. package/lib/module/components/HMSHLSPlayer/HMSHLSPlayer.js +8 -8
  136. package/lib/module/components/HMSHLSPlayer/HMSHLSPlayer.js.map +1 -1
  137. package/lib/module/components/HMSHLSPlayer/RCTHMSHLSPlayer.js.map +1 -1
  138. package/lib/module/components/HMSHLSPlayer/hooks.js.map +1 -1
  139. package/lib/module/hooks/useHMSPeerUpdates.js +67 -0
  140. package/lib/module/hooks/useHMSPeerUpdates.js.map +1 -0
  141. package/lib/module/index.js +6 -1
  142. package/lib/module/index.js.map +1 -1
  143. package/lib/typescript/classes/HMSAudioTrack.d.ts +2 -1
  144. package/lib/typescript/classes/HMSBrowserRecordingState.d.ts +2 -0
  145. package/lib/typescript/classes/HMSEventEmitter.d.ts +2 -0
  146. package/lib/typescript/classes/HMSLocalAudioTrack.d.ts +2 -1
  147. package/lib/typescript/classes/HMSLocalPeer.d.ts +4 -2
  148. package/lib/typescript/classes/HMSLocalVideoTrack.d.ts +2 -1
  149. package/lib/typescript/classes/HMSManagerModule.d.ts +3 -0
  150. package/lib/typescript/classes/HMSMessage.d.ts +2 -3
  151. package/lib/typescript/classes/HMSNativeEventListener.d.ts +4 -0
  152. package/lib/typescript/classes/HMSPeer.d.ts +2 -3
  153. package/lib/typescript/classes/HMSRemoteAudioTrack.d.ts +2 -1
  154. package/lib/typescript/classes/HMSRemotePeer.d.ts +4 -2
  155. package/lib/typescript/classes/HMSRemoteVideoTrack.d.ts +2 -1
  156. package/lib/typescript/classes/HMSRoom.d.ts +1 -1
  157. package/lib/typescript/classes/HMSSDK.d.ts +8 -7
  158. package/lib/typescript/classes/HMSTrack.d.ts +3 -2
  159. package/lib/typescript/classes/HMSVideoTrack.d.ts +2 -1
  160. package/lib/typescript/classes/HmsView.d.ts +1 -1
  161. package/lib/typescript/components/HMSHLSPlayer/RCTHMSHLSPlayer.d.ts +1 -1
  162. package/lib/typescript/components/HMSHLSPlayer/hooks.d.ts +1 -1
  163. package/lib/typescript/hooks/useHMSPeerUpdates.d.ts +7 -0
  164. package/lib/typescript/index.d.ts +2 -1
  165. package/package.json +2 -2
  166. package/sdk-versions.json +2 -2
  167. package/src/classes/HMSAudioTrack.ts +2 -1
  168. package/src/classes/HMSBrowserRecordingState.ts +3 -0
  169. package/src/classes/HMSCameraControl.ts +1 -2
  170. package/src/classes/HMSEncoder.ts +7 -5
  171. package/src/classes/HMSEventEmitter.ts +3 -0
  172. package/src/classes/HMSLocalAudioTrack.ts +2 -1
  173. package/src/classes/HMSLocalPeer.ts +4 -2
  174. package/src/classes/HMSLocalVideoTrack.ts +2 -1
  175. package/src/classes/HMSManagerModule.ts +18 -0
  176. package/src/classes/HMSMessage.ts +2 -3
  177. package/src/classes/HMSNativeEventEmitter.ts +2 -1
  178. package/src/classes/HMSNativeEventListener.ts +8 -0
  179. package/src/classes/HMSPeer.ts +3 -26
  180. package/src/classes/HMSPeersCache.ts +2 -3
  181. package/src/classes/HMSRemoteAudioTrack.ts +2 -1
  182. package/src/classes/HMSRemotePeer.ts +4 -2
  183. package/src/classes/HMSRemoteVideoTrack.ts +2 -1
  184. package/src/classes/HMSRoom.ts +1 -1
  185. package/src/classes/HMSRoomCache.ts +11 -3
  186. package/src/classes/HMSSDK.tsx +47 -52
  187. package/src/classes/HMSSessionStore.ts +6 -8
  188. package/src/classes/HMSTrack.ts +3 -2
  189. package/src/classes/HMSVideoTrack.ts +2 -1
  190. package/src/classes/HmsView.tsx +4 -2
  191. package/src/components/HMSHLSPlayer/HMSHLSPlayer.tsx +36 -10
  192. package/src/components/HMSHLSPlayer/RCTHMSHLSPlayer.ts +2 -3
  193. package/src/components/HMSHLSPlayer/hooks.ts +3 -2
  194. package/src/hooks/useHMSPeerUpdates.ts +85 -0
  195. package/src/index.ts +6 -1
  196. package/ios/Hmssdk.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  197. package/ios/Hmssdk.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  198. package/ios/Hmssdk.xcodeproj/project.xcworkspace/xcuserdata/yogesh.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  199. package/ios/Hmssdk.xcodeproj/xcuserdata/yogesh.xcuserdatad/xcschemes/xcschememanagement.plist +0 -14
  200. package/lib/commonjs/classes/HMSMessageType.js +0 -13
  201. package/lib/commonjs/classes/HMSMessageType.js.map +0 -1
  202. package/lib/module/classes/HMSMessageType.js +0 -6
  203. package/lib/module/classes/HMSMessageType.js.map +0 -1
  204. package/lib/typescript/classes/HMSMessageType.d.ts +0 -4
  205. package/src/classes/HMSMessageType.ts +0 -4
@@ -31,7 +31,9 @@ object HMSDecoder {
31
31
 
32
32
  when (hmsRoomUpdateType) {
33
33
  HMSRoomUpdate.ROOM_PEER_COUNT_UPDATED -> {
34
- room.putInt("peerCount", hmsRoom.peerCount)
34
+ // When ROOM_PEER_COUNT_UPDATED update type is received then `peerCount` should be a valid value
35
+ // using `0` as default
36
+ room.putInt("peerCount", hmsRoom.peerCount ?: 0)
35
37
  }
36
38
  HMSRoomUpdate.HLS_RECORDING_STATE_UPDATED -> {
37
39
  hmsRoom.hlsRecordingState?.let {
@@ -67,6 +69,15 @@ object HMSDecoder {
67
69
  )
68
70
  }
69
71
  }
72
+ HMSRoomUpdate.ROOM_MUTED -> {
73
+ print("ROOM_MUTED received")
74
+ }
75
+ HMSRoomUpdate.ROOM_UNMUTED -> {
76
+ print("ROOM_UNMUTED received")
77
+ }
78
+ else -> {
79
+ print("Unknown Room Update Type received")
80
+ }
70
81
  }
71
82
  }
72
83
  return room
@@ -120,7 +131,13 @@ object HMSDecoder {
120
131
 
121
132
  room.putArray("peers", this.getAllPeers(hmsRoom.peerList))
122
133
 
123
- room.putInt("peerCount", hmsRoom.peerCount)
134
+ hmsRoom.peerCount.let {
135
+ if (it == null) {
136
+ room.putNull("peerCount")
137
+ } else {
138
+ room.putInt("peerCount", it)
139
+ }
140
+ }
124
141
  }
125
142
  return room
126
143
  }
@@ -129,11 +146,9 @@ object HMSDecoder {
129
146
  val peer: WritableMap = Arguments.createMap()
130
147
  if (hmsPeer != null) {
131
148
  peer.putString(peerUpdateType.ordinal.toString(), hmsPeer.peerID)
149
+ peer.putString("name", hmsPeer.name)
132
150
 
133
151
  when (peerUpdateType) {
134
- HMSPeerUpdate.NAME_CHANGED -> {
135
- peer.putString("name", hmsPeer.name)
136
- }
137
152
  HMSPeerUpdate.METADATA_CHANGED -> {
138
153
  peer.putString("metadata", hmsPeer.metadata)
139
154
  }
@@ -145,7 +160,12 @@ object HMSDecoder {
145
160
  peer.putMap("networkQuality", this.getHmsNetworkQuality(it))
146
161
  }
147
162
  }
148
- else -> {}
163
+ HMSPeerUpdate.NAME_CHANGED -> {
164
+ print("$peerUpdateType received")
165
+ }
166
+ else -> {
167
+ print("Unhandled Peer Update Type received: $peerUpdateType")
168
+ }
149
169
  }
150
170
  }
151
171
  return peer
@@ -155,12 +175,10 @@ object HMSDecoder {
155
175
  val peer: WritableMap = Arguments.createMap()
156
176
  if (hmsPeer != null) {
157
177
  peer.putString("peerID", hmsPeer.peerID)
178
+ peer.putString("name", hmsPeer.name)
158
179
 
159
180
  if (peerUpdateType !== null) {
160
181
  when (peerUpdateType) {
161
- HMSPeerUpdate.NAME_CHANGED -> {
162
- peer.putString("name", hmsPeer.name)
163
- }
164
182
  HMSPeerUpdate.METADATA_CHANGED -> {
165
183
  peer.putString("metadata", hmsPeer.metadata)
166
184
  }
@@ -172,6 +190,12 @@ object HMSDecoder {
172
190
  peer.putMap("networkQuality", this.getHmsNetworkQuality(it))
173
191
  }
174
192
  }
193
+ HMSPeerUpdate.NAME_CHANGED -> {
194
+ print("$peerUpdateType received")
195
+ }
196
+ else -> {
197
+ print("Unhandled Peer Update Type received: $peerUpdateType")
198
+ }
175
199
  }
176
200
  }
177
201
  }
@@ -399,6 +423,7 @@ object HMSDecoder {
399
423
  val peer: WritableMap = Arguments.createMap()
400
424
  if (hmsLocalPeer != null) {
401
425
  peer.putString("peerID", hmsLocalPeer.peerID)
426
+ peer.putString("name", hmsLocalPeer.name)
402
427
 
403
428
  hmsLocalPeer.audioTrack?.let {
404
429
  peer.putMap("localAudioTrackData", this.getHmsLocalAudioTrack(it))
@@ -484,6 +509,7 @@ object HMSDecoder {
484
509
  val peer: WritableMap = Arguments.createMap()
485
510
  if (hmsRemotePeer != null) {
486
511
  peer.putString("peerID", hmsRemotePeer.peerID)
512
+ peer.putString("name", hmsRemotePeer.name)
487
513
 
488
514
  hmsRemotePeer.audioTrack?.let {
489
515
  peer.putMap("remoteAudioTrackData", this.getHmsRemoteAudioTrack(it))
@@ -581,6 +607,8 @@ object HMSDecoder {
581
607
  fun getHMSBrowserRecordingState(data: HMSBrowserRecordingState?): ReadableMap {
582
608
  val input = Arguments.createMap()
583
609
  if (data !== null) {
610
+ input.putBoolean("initialising", false)
611
+
584
612
  input.putBoolean("running", data.running)
585
613
 
586
614
  data.startedAt?.let {
@@ -169,7 +169,8 @@ object HMSHelper {
169
169
  ) {
170
170
  val version = data.getString("version") as String
171
171
  val sdkVersion = data.getString("sdkVersion") as String
172
- return FrameworkInfo(AgentType.REACT_NATIVE, sdkVersion, version)
172
+ val isPrebuilt = data.getBoolean("isPrebuilt")
173
+ return FrameworkInfo(AgentType.REACT_NATIVE, sdkVersion, version, isPrebuilt)
173
174
  }
174
175
  return null
175
176
  }
@@ -926,6 +926,13 @@ class HMSManager(reactContext: ReactApplicationContext) :
926
926
  hms?.removeKeyChangeListener(data, promise)
927
927
  }
928
928
 
929
+ @ReactMethod
930
+ fun getRoomLayout(data: ReadableMap, promise: Promise?) {
931
+ val hms = HMSHelper.getHms(data, hmsCollection)
932
+
933
+ hms?.getRoomLayout(data, promise)
934
+ }
935
+
929
936
  fun emitEvent(event: String, data: WritableMap) {
930
937
  reactApplicationContext
931
938
  .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
@@ -20,9 +20,7 @@ import live.hms.video.sdk.models.enums.HMSTrackUpdate
20
20
  import live.hms.video.sdk.models.trackchangerequest.HMSChangeTrackStateRequest
21
21
  import live.hms.video.sessionstore.HMSKeyChangeListener
22
22
  import live.hms.video.sessionstore.HmsSessionStore
23
- import live.hms.video.signal.init.HMSTokenListener
24
- import live.hms.video.signal.init.TokenRequest
25
- import live.hms.video.signal.init.TokenRequestOptions
23
+ import live.hms.video.signal.init.*
26
24
  import live.hms.video.utils.HMSCoroutineScope
27
25
  import live.hms.video.utils.HmsUtilities
28
26
  import java.io.File
@@ -203,9 +201,6 @@ class HMSRNSDK(
203
201
  if (eventsEnableStatus["ON_ROOM_UPDATE"] != true) {
204
202
  return
205
203
  }
206
- if (type == HMSRoomUpdate.ROOM_PEER_COUNT_UPDATED) {
207
- return
208
- }
209
204
 
210
205
  val updateType = type.name
211
206
  val roomData = HMSDecoder.getHmsRoomSubset(hmsRoom, type)
@@ -334,9 +329,6 @@ class HMSRNSDK(
334
329
  if (eventsEnableStatus["ON_ROOM_UPDATE"] != true) {
335
330
  return
336
331
  }
337
- if (type == HMSRoomUpdate.ROOM_PEER_COUNT_UPDATED) {
338
- return
339
- }
340
332
 
341
333
  val updateType = type.name
342
334
  val roomData = HMSDecoder.getHmsRoomSubset(hmsRoom, type)
@@ -1636,7 +1628,13 @@ class HMSRNSDK(
1636
1628
  data.putString("metaData", null)
1637
1629
  }
1638
1630
  "peerCount" -> {
1639
- data.putInt("peerCount", hmsRoom.peerCount)
1631
+ hmsRoom.peerCount.let {
1632
+ if (it == null) {
1633
+ data.putNull("peerCount")
1634
+ } else {
1635
+ data.putInt("peerCount", it)
1636
+ }
1637
+ }
1640
1638
  }
1641
1639
  "peers" -> {
1642
1640
  data.putArray("peers", HMSDecoder.getAllPeers(hmsRoom.peerList))
@@ -2063,4 +2061,35 @@ class HMSRNSDK(
2063
2061
  rejectCallback(promise, errorMessage)
2064
2062
  }
2065
2063
  }
2064
+
2065
+ fun getRoomLayout(data: ReadableMap, promise: Promise?) {
2066
+ val unavailableKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("authToken", "String")))
2067
+
2068
+ if (unavailableKeys != null) {
2069
+ val errorMessage = "getRoomLayout: $unavailableKeys"
2070
+ rejectCallback(promise, errorMessage)
2071
+ return
2072
+ }
2073
+
2074
+ val authToken = data.getString("authToken")!!
2075
+ val endpoint = data.getString("endpoint")
2076
+
2077
+ val layoutRequestOptions = endpoint?.let {
2078
+ LayoutRequestOptions(endpoint)
2079
+ }
2080
+
2081
+ hmsSDK?.getRoomLayout(
2082
+ authToken,
2083
+ layoutRequestOptions,
2084
+ object : HMSLayoutListener {
2085
+ override fun onError(error: HMSException) {
2086
+ promise?.reject(error.code.toString(), error.message)
2087
+ }
2088
+
2089
+ override fun onLayoutSuccess(layout: HMSRoomLayout) {
2090
+ promise?.resolve(layout.toString())
2091
+ }
2092
+ },
2093
+ )
2094
+ }
2066
2095
  }
@@ -22,8 +22,7 @@ class HMSDecoder: NSObject {
22
22
  case .none:
23
23
  return data
24
24
  case .metaDataUpdated:
25
- let count = room.peerCount ?? 0
26
- data["peerCount"] = count
25
+ data["peerCount"] = room.peerCount
27
26
  return data
28
27
  case .hlsRecordingStateUpdated:
29
28
  let hlsRecordingState = HMSDecoder.getHlsRecordingState(hmsRoom?.hlsRecordingState)
@@ -63,7 +62,7 @@ class HMSDecoder: NSObject {
63
62
  if let metaData = room.metaData {
64
63
  data["metaData"] = metaData
65
64
  }
66
- data["peerCount"] = room.peerCount ?? 0
65
+ data["peerCount"] = room.peerCount
67
66
  // if let startedAt = room.sessionStartedAt?.timeIntervalSince1970 {
68
67
  // data["startedAt"] = startedAt * 1000
69
68
  // }
@@ -107,11 +106,9 @@ class HMSDecoder: NSObject {
107
106
  guard let updateType = getPeerUpdateTypeOrdinals(peerUpdateType) else { return peerDict }
108
107
 
109
108
  peerDict[updateType] = peer.peerID
109
+ peerDict["name"] = peer.name
110
110
 
111
111
  switch peerUpdateType {
112
- case .nameUpdated:
113
- peerDict["name"] = peer.name
114
- return peerDict
115
112
  case .metadataUpdated:
116
113
  peerDict["metadata"] = peer.metadata ?? ""
117
114
  return peerDict
@@ -135,11 +132,9 @@ class HMSDecoder: NSObject {
135
132
  var peerDict = [String: Any]()
136
133
 
137
134
  peerDict["peerID"] = peer.peerID
135
+ peerDict["name"] = peer.name
138
136
 
139
137
  switch peerUpdateType {
140
- case .nameUpdated:
141
- peerDict["name"] = peer.name
142
- return peerDict
143
138
  case .metadataUpdated:
144
139
  peerDict["metadata"] = peer.metadata ?? ""
145
140
  return peerDict
@@ -252,6 +247,7 @@ class HMSDecoder: NSObject {
252
247
  var peerDict = [String: Any]()
253
248
 
254
249
  peerDict["peerID"] = peer.peerID
250
+ peerDict["name"] = peer.name
255
251
 
256
252
  if let audio = peer.audioTrack {
257
253
  if let localAudio = audio as? HMSLocalAudioTrack {
@@ -355,7 +351,8 @@ class HMSDecoder: NSObject {
355
351
  var peerDict = [String: Any]()
356
352
 
357
353
  peerDict["peerID"] = peer.peerID
358
-
354
+ peerDict["name"] = peer.name
355
+
359
356
  // joinedAt
360
357
 
361
358
  if let audio = peer.audioTrack {
@@ -668,6 +665,8 @@ class HMSDecoder: NSObject {
668
665
 
669
666
  var state = [String: Any]()
670
667
 
668
+ state["initialising"] = recordingState.initialising
669
+
671
670
  state["running"] = recordingState.running
672
671
 
673
672
  if let startedAt = recordingState.startedAt?.timeIntervalSince1970 {
@@ -139,11 +139,15 @@ class HMSHelper: NSObject {
139
139
  static func getFrameworkInfo(_ frameworkInfo: NSDictionary?) -> HMSFrameworkInfo? {
140
140
  guard let data = frameworkInfo,
141
141
  let version = data.value(forKey: "version") as? String,
142
- let sdkVersion = data.value(forKey: "sdkVersion") as? String
142
+ let sdkVersion = data.value(forKey: "sdkVersion") as? String,
143
+ let isPrebuilt = data["isPrebuilt"] as? Bool
143
144
  else {
144
145
  return nil
145
146
  }
146
- return HMSFrameworkInfo(type: HMSFrameworkType.reactNative, version: version, sdkVersion: sdkVersion)
147
+ return HMSFrameworkInfo(type: HMSFrameworkType.reactNative,
148
+ version: version,
149
+ sdkVersion: sdkVersion,
150
+ isPrebuilt: isPrebuilt)
147
151
  }
148
152
 
149
153
  static func getLocalVideoSettings(_ settings: NSDictionary?) -> HMSVideoTrackSettings? {
package/ios/HMSManager.m CHANGED
@@ -79,4 +79,8 @@ RCT_EXTERN_METHOD(setSessionMetadataForKey: (NSDictionary) data :(RCTPromiseReso
79
79
  RCT_EXTERN_METHOD(addKeyChangeListener: (NSDictionary) data :(RCTPromiseResolveBlock) resolve :(RCTPromiseRejectBlock) reject)
80
80
  RCT_EXTERN_METHOD(removeKeyChangeListener: (NSDictionary) data :(RCTPromiseResolveBlock) resolve :(RCTPromiseRejectBlock) reject)
81
81
 
82
+ #pragma mark - Prebuilt
83
+
84
+ RCT_EXTERN_METHOD(getRoomLayout: (NSDictionary) data :(RCTPromiseResolveBlock) resolve :(RCTPromiseRejectBlock) reject)
85
+
82
86
  @end
@@ -75,6 +75,14 @@ class HMSManager: RCTEventEmitter {
75
75
  resolve?(["success": id + " removed"])
76
76
  }
77
77
 
78
+ // MARK: - Prebuilt
79
+
80
+ @objc
81
+ func getRoomLayout(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
82
+ let hms = HMSHelper.getHms(data, hmsCollection)
83
+ hms?.getRoomLayout(data, resolve, reject)
84
+ }
85
+
78
86
  // MARK: - Preview
79
87
 
80
88
  @objc
@@ -12,7 +12,6 @@ import ReplayKit
12
12
  class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
13
13
 
14
14
  var hms: HMSSDK?
15
- var config: HMSConfig?
16
15
  var recentRoleChangeRequest: HMSRoleChangeRequest?
17
16
  var delegate: HMSManager?
18
17
  var id: String = "12345"
@@ -46,7 +45,40 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
46
45
  self.id = id
47
46
  }
48
47
 
48
+ // MARK: - Prebuilt
49
+
50
+ func getRoomLayout(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
51
+
52
+ guard let token = data["authToken"] as? String else {
53
+ reject?("40000", "\(#function) " + HMSHelper.getUnavailableRequiredKey(data, ["authToken"]), nil)
54
+ return
55
+ }
56
+
57
+ DispatchQueue.main.async { [weak self] in
58
+ guard let strongSelf = self else { return }
59
+
60
+ if let endPoint = data["endpoint"] as? String, (endPoint.contains("mockable") || endPoint.contains("nonprod")) {
61
+ UserDefaults.standard.set(endPoint, forKey: "HMSRoomLayoutEndpointOverride")
62
+ } else {
63
+ UserDefaults.standard.removeObject(forKey: "HMSRoomLayoutEndpointOverride")
64
+ }
65
+
66
+ strongSelf.hms?.getRoomLayout(using: token) { layout, error in
67
+
68
+ if let rawData = layout?.rawData {
69
+ let jsonString = String(decoding: rawData, as: UTF8.self)
70
+ resolve?(jsonString)
71
+ return
72
+ }
73
+
74
+ let errorMessage = "\(#function) Could not parse Room Layout for Token: \(token), error: \(error?.localizedDescription ?? "Could not fetch the error")"
75
+ reject?("40000", errorMessage, nil)
76
+ }
77
+ }
78
+ }
79
+
49
80
  // MARK: - HMS SDK Actions
81
+
50
82
  func preview(_ credentials: NSDictionary) {
51
83
 
52
84
  guard !previewInProgress else {
@@ -65,17 +97,22 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
65
97
  }
66
98
 
67
99
  let metadata = credentials.value(forKey: "metadata") as? String
100
+
101
+ let endpoint = credentials.value(forKey: "endpoint") as? String
102
+
68
103
  let captureNetworkQualityInPreview = credentials.value(forKey: "captureNetworkQualityInPreview") as? Bool ?? false
69
104
 
70
105
  DispatchQueue.main.async { [weak self] in
71
106
  guard let strongSelf = self else { return }
72
- if let endpoint = credentials.value(forKey: "endpoint") as? String {
73
- strongSelf.config = HMSConfig(userName: user, authToken: authToken, metadata: metadata, endpoint: endpoint, captureNetworkQualityInPreview: captureNetworkQualityInPreview)
74
- strongSelf.hms?.preview(config: strongSelf.config!, delegate: strongSelf)
75
- } else {
76
- strongSelf.config = HMSConfig(userName: user, authToken: authToken, metadata: metadata, captureNetworkQualityInPreview: captureNetworkQualityInPreview)
77
- strongSelf.hms?.preview(config: strongSelf.config!, delegate: strongSelf)
78
- }
107
+
108
+ let config = HMSConfig(userName: user,
109
+ authToken: authToken,
110
+ metadata: metadata,
111
+ endpoint: endpoint,
112
+ captureNetworkQualityInPreview: captureNetworkQualityInPreview)
113
+
114
+ strongSelf.hms?.preview(config: config, delegate: strongSelf)
115
+
79
116
  strongSelf.previewInProgress = true
80
117
  }
81
118
  }
@@ -135,17 +172,14 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
135
172
 
136
173
  DispatchQueue.main.async { [weak self] in
137
174
  guard let strongSelf = self else { return }
138
- if let config = strongSelf.config {
139
- strongSelf.hms?.join(config: config, delegate: strongSelf)
140
- } else {
141
- if let endpoint = credentials.value(forKey: "endpoint") as? String {
142
- strongSelf.config = HMSConfig(userName: user, authToken: authToken, metadata: metadata, endpoint: endpoint, captureNetworkQualityInPreview: captureNetworkQualityInPreview)
143
- strongSelf.hms?.join(config: strongSelf.config!, delegate: strongSelf)
144
- } else {
145
- strongSelf.config = HMSConfig(userName: user, authToken: authToken, metadata: metadata, captureNetworkQualityInPreview: captureNetworkQualityInPreview)
146
- strongSelf.hms?.join(config: strongSelf.config!, delegate: strongSelf)
147
- }
148
- }
175
+
176
+ let config = HMSConfig(userName: user,
177
+ authToken: authToken,
178
+ metadata: metadata,
179
+ endpoint: credentials.value(forKey: "endpoint") as? String,
180
+ captureNetworkQualityInPreview: captureNetworkQualityInPreview)
181
+
182
+ strongSelf.hms?.join(config: config, delegate: strongSelf)
149
183
  }
150
184
  }
151
185
 
@@ -1212,7 +1246,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1212
1246
  return ["metaData": hmsRoom.metaData ?? ""]
1213
1247
 
1214
1248
  case "peerCount":
1215
- return ["peerCount": hmsRoom.peerCount ?? 0]
1249
+ return ["peerCount": hmsRoom.peerCount as Any]
1216
1250
 
1217
1251
  case "peers":
1218
1252
  var peers = [[String: Any]]()
@@ -1320,9 +1354,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1320
1354
  if eventsEnableStatus[HMSConstants.ON_ROOM_UPDATE] != true {
1321
1355
  return
1322
1356
  }
1323
- if update == .metaDataUpdated || update == .roomTypeChanged {
1324
- return
1325
- }
1326
1357
 
1327
1358
  let roomData = HMSDecoder.getHmsRoomSubset(room, update)
1328
1359
  let type = getString(from: update)
@@ -1859,7 +1890,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1859
1890
 
1860
1891
  // Handle resetting states and data cleanup
1861
1892
  private func cleanup() {
1862
- self.config = nil
1863
1893
  self.recentRoleChangeRequest = nil
1864
1894
  self.reconnectingStage = false
1865
1895
  self.preferredExtension = nil
@@ -1 +1 @@
1
- {"version":3,"names":["_HMSTrack","require","HMSAudioTrack","HMSTrack","constructor","params","exports"],"sources":["HMSAudioTrack.ts"],"sourcesContent":["import { HMSTrack } from './HMSTrack';\nimport type { HMSTrackType } from './HMSTrackType';\n\nexport class HMSAudioTrack extends HMSTrack {\n constructor(params?: {\n trackId: string;\n source?: number | string;\n trackDescription?: string;\n isMute?: boolean;\n id: string;\n type?: HMSTrackType;\n }) {\n if (params) {\n super(params);\n }\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,SAAA,GAAAC,OAAA;AAGO,MAAMC,aAAa,SAASC,kBAAQ,CAAC;EAC1CC,WAAWA,CAACC,MAOX,EAAE;IACD,IAAIA,MAAM,EAAE;MACV,KAAK,CAACA,MAAM,CAAC;IACf;EACF;AACF;AAACC,OAAA,CAAAJ,aAAA,GAAAA,aAAA"}
1
+ {"version":3,"names":["_HMSTrack","require","HMSAudioTrack","HMSTrack","constructor","params","exports"],"sources":["HMSAudioTrack.ts"],"sourcesContent":["import { HMSTrack } from './HMSTrack';\nimport type { HMSTrackSource } from './HMSTrackSource';\nimport type { HMSTrackType } from './HMSTrackType';\n\nexport class HMSAudioTrack extends HMSTrack {\n constructor(params?: {\n trackId: string;\n source?: HMSTrackSource;\n trackDescription?: string;\n isMute?: boolean;\n id: string;\n type?: HMSTrackType;\n }) {\n if (params) {\n super(params);\n }\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,SAAA,GAAAC,OAAA;AAIO,MAAMC,aAAa,SAASC,kBAAQ,CAAC;EAC1CC,WAAWA,CAACC,MAOX,EAAE;IACD,IAAIA,MAAM,EAAE;MACV,KAAK,CAACA,MAAM,CAAC;IACf;EACF;AACF;AAACC,OAAA,CAAAJ,aAAA,GAAAA,aAAA"}
@@ -9,10 +9,12 @@ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typ
9
9
  function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
10
10
  class HMSBrowserRecordingState {
11
11
  constructor(params) {
12
+ _defineProperty(this, "initialising", void 0);
12
13
  _defineProperty(this, "running", void 0);
13
14
  _defineProperty(this, "error", void 0);
14
15
  _defineProperty(this, "startedAt", void 0);
15
16
  _defineProperty(this, "stoppedAt", void 0);
17
+ this.initialising = params.initialising;
16
18
  this.running = params.running;
17
19
  this.error = params.error;
18
20
  this.startedAt = params.startedAt;
@@ -1 +1 @@
1
- {"version":3,"names":["HMSBrowserRecordingState","constructor","params","_defineProperty","running","error","startedAt","stoppedAt","exports"],"sources":["HMSBrowserRecordingState.ts"],"sourcesContent":["import type { HMSException } from './HMSException';\n\nexport class HMSBrowserRecordingState {\n running: boolean;\n error?: HMSException;\n startedAt?: Date;\n stoppedAt?: Date;\n\n constructor(params: {\n running: boolean;\n error?: HMSException;\n startedAt?: Date;\n stoppedAt?: Date;\n }) {\n this.running = params.running;\n this.error = params.error;\n this.startedAt = params.startedAt;\n this.stoppedAt = params.stoppedAt;\n }\n}\n"],"mappings":";;;;;;;;;AAEO,MAAMA,wBAAwB,CAAC;EAMpCC,WAAWA,CAACC,MAKX,EAAE;IAAAC,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IACD,IAAI,CAACC,OAAO,GAAGF,MAAM,CAACE,OAAO;IAC7B,IAAI,CAACC,KAAK,GAAGH,MAAM,CAACG,KAAK;IACzB,IAAI,CAACC,SAAS,GAAGJ,MAAM,CAACI,SAAS;IACjC,IAAI,CAACC,SAAS,GAAGL,MAAM,CAACK,SAAS;EACnC;AACF;AAACC,OAAA,CAAAR,wBAAA,GAAAA,wBAAA"}
1
+ {"version":3,"names":["HMSBrowserRecordingState","constructor","params","_defineProperty","initialising","running","error","startedAt","stoppedAt","exports"],"sources":["HMSBrowserRecordingState.ts"],"sourcesContent":["import type { HMSException } from './HMSException';\n\nexport class HMSBrowserRecordingState {\n initialising: boolean;\n running: boolean;\n error?: HMSException;\n startedAt?: Date;\n stoppedAt?: Date;\n\n constructor(params: {\n initialising: boolean;\n running: boolean;\n error?: HMSException;\n startedAt?: Date;\n stoppedAt?: Date;\n }) {\n this.initialising = params.initialising;\n this.running = params.running;\n this.error = params.error;\n this.startedAt = params.startedAt;\n this.stoppedAt = params.stoppedAt;\n }\n}\n"],"mappings":";;;;;;;;;AAEO,MAAMA,wBAAwB,CAAC;EAOpCC,WAAWA,CAACC,MAMX,EAAE;IAAAC,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IACD,IAAI,CAACC,YAAY,GAAGF,MAAM,CAACE,YAAY;IACvC,IAAI,CAACC,OAAO,GAAGH,MAAM,CAACG,OAAO;IAC7B,IAAI,CAACC,KAAK,GAAGJ,MAAM,CAACI,KAAK;IACzB,IAAI,CAACC,SAAS,GAAGL,MAAM,CAACK,SAAS;IACjC,IAAI,CAACC,SAAS,GAAGN,MAAM,CAACM,SAAS;EACnC;AACF;AAACC,OAAA,CAAAT,wBAAA,GAAAA,wBAAA"}
@@ -4,11 +4,9 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.HMSCameraControl = void 0;
7
- var _reactNative = require("react-native");
8
7
  var _HMSConstants = require("./HMSConstants");
9
- const {
10
- HMSManager
11
- } = _reactNative.NativeModules;
8
+ var _HMSManagerModule = _interopRequireDefault(require("./HMSManagerModule"));
9
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
10
  class HMSCameraControl {
13
11
  /**
14
12
  * It captures the image from the device camera at max possible resolution.
@@ -18,7 +16,7 @@ class HMSCameraControl {
18
16
  */
19
17
  static captureImageAtMaxSupportedResolution() {
20
18
  let flash = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
21
- return HMSManager.captureImageAtMaxSupportedResolution({
19
+ return _HMSManagerModule.default.captureImageAtMaxSupportedResolution({
22
20
  id: _HMSConstants.HMSConstants.DEFAULT_SDK_ID,
23
21
  flash
24
22
  });
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","_HMSConstants","HMSManager","NativeModules","HMSCameraControl","captureImageAtMaxSupportedResolution","flash","arguments","length","undefined","id","HMSConstants","DEFAULT_SDK_ID","exports"],"sources":["HMSCameraControl.ts"],"sourcesContent":["import { NativeModules } from 'react-native';\nimport { HMSConstants } from './HMSConstants';\n\nconst { HMSManager } = NativeModules;\n\nexport class HMSCameraControl {\n /**\n * It captures the image from the device camera at max possible resolution.\n *\n * @param {boolean} [flash=false] flash - value indicating whether to use flash while capturing image or not\n * @returns Promise - which is resolved with the file path of the captured image saved on the disk\n */\n static captureImageAtMaxSupportedResolution(\n flash: boolean = false\n ): Promise<string> {\n return HMSManager.captureImageAtMaxSupportedResolution({\n id: HMSConstants.DEFAULT_SDK_ID,\n flash,\n });\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AAEA,MAAM;EAAEE;AAAW,CAAC,GAAGC,0BAAa;AAE7B,MAAMC,gBAAgB,CAAC;EAC5B;AACF;AACA;AACA;AACA;AACA;EACE,OAAOC,oCAAoCA,CAAA,EAExB;IAAA,IADjBC,KAAc,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;IAEtB,OAAOL,UAAU,CAACG,oCAAoC,CAAC;MACrDK,EAAE,EAAEC,0BAAY,CAACC,cAAc;MAC/BN;IACF,CAAC,CAAC;EACJ;AACF;AAACO,OAAA,CAAAT,gBAAA,GAAAA,gBAAA"}
1
+ {"version":3,"names":["_HMSConstants","require","_HMSManagerModule","_interopRequireDefault","obj","__esModule","default","HMSCameraControl","captureImageAtMaxSupportedResolution","flash","arguments","length","undefined","HMSManager","id","HMSConstants","DEFAULT_SDK_ID","exports"],"sources":["HMSCameraControl.ts"],"sourcesContent":["import { HMSConstants } from './HMSConstants';\n\nimport HMSManager from './HMSManagerModule';\n\nexport class HMSCameraControl {\n /**\n * It captures the image from the device camera at max possible resolution.\n *\n * @param {boolean} [flash=false] flash - value indicating whether to use flash while capturing image or not\n * @returns Promise - which is resolved with the file path of the captured image saved on the disk\n */\n static captureImageAtMaxSupportedResolution(\n flash: boolean = false\n ): Promise<string> {\n return HMSManager.captureImageAtMaxSupportedResolution({\n id: HMSConstants.DEFAULT_SDK_ID,\n flash,\n });\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,aAAA,GAAAC,OAAA;AAEA,IAAAC,iBAAA,GAAAC,sBAAA,CAAAF,OAAA;AAA4C,SAAAE,uBAAAC,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAErC,MAAMG,gBAAgB,CAAC;EAC5B;AACF;AACA;AACA;AACA;AACA;EACE,OAAOC,oCAAoCA,CAAA,EAExB;IAAA,IADjBC,KAAc,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;IAEtB,OAAOG,yBAAU,CAACL,oCAAoC,CAAC;MACrDM,EAAE,EAAEC,0BAAY,CAACC,cAAc;MAC/BP;IACF,CAAC,CAAC;EACJ;AACF;AAACQ,OAAA,CAAAV,gBAAA,GAAAA,gBAAA"}