@100mslive/react-native-hms 1.10.4 → 1.10.5

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 (75) hide show
  1. package/android/build.gradle +9 -2
  2. package/android/src/main/java/com/reactnativehmssdk/HMSDecoder.kt +8 -0
  3. package/android/src/main/java/com/reactnativehmssdk/HMSManager.kt +38 -0
  4. package/android/src/main/java/com/reactnativehmssdk/HMSRNSDK.kt +6 -4
  5. package/android/src/main/java/com/reactnativehmssdk/Interactivity/HMSInteractivityDecoder.kt +50 -25
  6. package/android/src/main/java/com/reactnativehmssdk/Interactivity/HMSRNInteractivityCenter.kt +69 -1
  7. package/ios/HMSConstants.swift +1 -0
  8. package/ios/HMSDecoder.swift +10 -2
  9. package/ios/HMSHLSPlayerManager.swift +4 -1
  10. package/ios/HMSInteractivityDecoder.swift +41 -0
  11. package/ios/HMSManager.m +12 -0
  12. package/ios/HMSManager.swift +20 -1
  13. package/ios/HMSRNInteractivityCenter.swift +41 -0
  14. package/lib/commonjs/classes/HMSInteractivityCenter.js +58 -4
  15. package/lib/commonjs/classes/HMSInteractivityCenter.js.map +1 -1
  16. package/lib/commonjs/classes/HMSInteractivityEncoder.js +6 -0
  17. package/lib/commonjs/classes/HMSInteractivityEncoder.js.map +1 -1
  18. package/lib/commonjs/classes/HMSPermissions.js +2 -0
  19. package/lib/commonjs/classes/HMSPermissions.js.map +1 -1
  20. package/lib/commonjs/classes/whiteboard/HMSWhiteboard.js +6 -0
  21. package/lib/commonjs/classes/whiteboard/HMSWhiteboard.js.map +1 -0
  22. package/lib/commonjs/classes/whiteboard/HMSWhiteboardListenerActions.js +11 -0
  23. package/lib/commonjs/classes/whiteboard/HMSWhiteboardListenerActions.js.map +1 -0
  24. package/lib/commonjs/classes/whiteboard/HMSWhiteboardState.js +12 -0
  25. package/lib/commonjs/classes/whiteboard/HMSWhiteboardState.js.map +1 -0
  26. package/lib/commonjs/classes/whiteboard/HMSWhiteboardUpdateType.js +12 -0
  27. package/lib/commonjs/classes/whiteboard/HMSWhiteboardUpdateType.js.map +1 -0
  28. package/lib/commonjs/classes/whiteboard/index.js +39 -0
  29. package/lib/commonjs/classes/whiteboard/index.js.map +1 -0
  30. package/lib/commonjs/classes/whiteboard/registerCallbacks.js +26 -0
  31. package/lib/commonjs/classes/whiteboard/registerCallbacks.js.map +1 -0
  32. package/lib/commonjs/index.js +12 -0
  33. package/lib/commonjs/index.js.map +1 -1
  34. package/lib/module/classes/HMSInteractivityCenter.js +58 -4
  35. package/lib/module/classes/HMSInteractivityCenter.js.map +1 -1
  36. package/lib/module/classes/HMSInteractivityEncoder.js +6 -0
  37. package/lib/module/classes/HMSInteractivityEncoder.js.map +1 -1
  38. package/lib/module/classes/HMSPermissions.js +2 -0
  39. package/lib/module/classes/HMSPermissions.js.map +1 -1
  40. package/lib/module/classes/whiteboard/HMSWhiteboard.js +2 -0
  41. package/lib/module/classes/whiteboard/HMSWhiteboard.js.map +1 -0
  42. package/lib/module/classes/whiteboard/HMSWhiteboardListenerActions.js +5 -0
  43. package/lib/module/classes/whiteboard/HMSWhiteboardListenerActions.js.map +1 -0
  44. package/lib/module/classes/whiteboard/HMSWhiteboardState.js +6 -0
  45. package/lib/module/classes/whiteboard/HMSWhiteboardState.js.map +1 -0
  46. package/lib/module/classes/whiteboard/HMSWhiteboardUpdateType.js +6 -0
  47. package/lib/module/classes/whiteboard/HMSWhiteboardUpdateType.js.map +1 -0
  48. package/lib/module/classes/whiteboard/index.js +4 -0
  49. package/lib/module/classes/whiteboard/index.js.map +1 -0
  50. package/lib/module/classes/whiteboard/registerCallbacks.js +18 -0
  51. package/lib/module/classes/whiteboard/registerCallbacks.js.map +1 -0
  52. package/lib/module/index.js +1 -0
  53. package/lib/module/index.js.map +1 -1
  54. package/lib/typescript/classes/HMSInteractivityCenter.d.ts +19 -2
  55. package/lib/typescript/classes/HMSInteractivityEncoder.d.ts +2 -0
  56. package/lib/typescript/classes/HMSPermissions.d.ts +7 -0
  57. package/lib/typescript/classes/whiteboard/HMSWhiteboard.d.ts +10 -0
  58. package/lib/typescript/classes/whiteboard/HMSWhiteboardListenerActions.d.ts +3 -0
  59. package/lib/typescript/classes/whiteboard/HMSWhiteboardState.d.ts +4 -0
  60. package/lib/typescript/classes/whiteboard/HMSWhiteboardUpdateType.d.ts +4 -0
  61. package/lib/typescript/classes/whiteboard/index.d.ts +3 -0
  62. package/lib/typescript/classes/whiteboard/registerCallbacks.d.ts +8 -0
  63. package/lib/typescript/index.d.ts +1 -0
  64. package/package.json +1 -1
  65. package/sdk-versions.json +2 -2
  66. package/src/classes/HMSInteractivityCenter.ts +89 -10
  67. package/src/classes/HMSInteractivityEncoder.ts +8 -0
  68. package/src/classes/HMSPermissions.ts +9 -0
  69. package/src/classes/whiteboard/HMSWhiteboard.tsx +16 -0
  70. package/src/classes/whiteboard/HMSWhiteboardListenerActions.ts +3 -0
  71. package/src/classes/whiteboard/HMSWhiteboardState.tsx +4 -0
  72. package/src/classes/whiteboard/HMSWhiteboardUpdateType.tsx +4 -0
  73. package/src/classes/whiteboard/index.ts +3 -0
  74. package/src/classes/whiteboard/registerCallbacks.ts +34 -0
  75. package/src/index.ts +1 -0
@@ -12,7 +12,14 @@ buildscript {
12
12
  if (ext.has("kotlinVersion")) {
13
13
  ext.kotlinVersion()
14
14
  } else {
15
- ext.safeExtGet("kotlinVersion", "1.6.0")
15
+ ext.safeExtGet("kotlinVersion", "1.7.20")
16
+ }
17
+ }
18
+ ext.getKotlinGradlePluginVersion = {
19
+ if (ext.has("kotlinGradlePluginVersion")) {
20
+ ext.kotlinGradlePluginVersion()
21
+ } else {
22
+ ext.safeExtGet("kotlinGradlePluginVersion", "1.8.0")
16
23
  }
17
24
  }
18
25
  if (project == rootProject) {
@@ -30,7 +37,7 @@ buildscript {
30
37
  mavenCentral()
31
38
  }
32
39
  dependencies {
33
- classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${getKotlinVersion()}"
40
+ classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${getKotlinGradlePluginVersion()}"
34
41
  }
35
42
  }
36
43
 
@@ -344,6 +344,14 @@ object HMSDecoder {
344
344
  permissions.putBoolean("changeRole", hmsPermissions.changeRole)
345
345
  permissions.putBoolean("pollRead", hmsPermissions.pollRead)
346
346
  permissions.putBoolean("pollWrite", hmsPermissions.pollWrite)
347
+
348
+ val whiteboardPermissionMap: WritableMap = Arguments.createMap()
349
+ hmsPermissions.whiteboard.let { whiteBoardPermission ->
350
+ whiteboardPermissionMap.putBoolean("admin", whiteBoardPermission.admin)
351
+ whiteboardPermissionMap.putBoolean("read", whiteBoardPermission.read)
352
+ whiteboardPermissionMap.putBoolean("write", whiteBoardPermission.write)
353
+ }
354
+ permissions.putMap("whiteboard", whiteboardPermissionMap)
347
355
  }
348
356
  return permissions
349
357
  }
@@ -1458,6 +1458,44 @@ class HMSManager(reactContext: ReactApplicationContext) :
1458
1458
  }
1459
1459
  // endregion
1460
1460
 
1461
+ //region Whiteboard
1462
+ @ReactMethod
1463
+ fun startWhiteboard(
1464
+ data: ReadableMap,
1465
+ promise: Promise?,
1466
+ ) {
1467
+ val rnSDK = HMSHelper.getHms(data, hmsCollection)
1468
+ rnSDK?.let { sdk ->
1469
+ sdk.interactivityCenter?.let { center ->
1470
+ center.startWhiteboard(data, promise)
1471
+ return
1472
+ }
1473
+ }
1474
+ promise?.reject(
1475
+ "6004",
1476
+ "HMS SDK not initialized",
1477
+ )
1478
+ }
1479
+
1480
+ @ReactMethod
1481
+ fun stopWhiteboard(
1482
+ data: ReadableMap,
1483
+ promise: Promise?,
1484
+ ) {
1485
+ val rnSDK = HMSHelper.getHms(data, hmsCollection)
1486
+ rnSDK?.let { sdk ->
1487
+ sdk.interactivityCenter?.let { center ->
1488
+ center.stopWhiteboard(promise)
1489
+ return
1490
+ }
1491
+ }
1492
+ promise?.reject(
1493
+ "6004",
1494
+ "HMS SDK not initialized",
1495
+ )
1496
+ }
1497
+ //endregion
1498
+
1461
1499
  // region Noise Cancellation Plugin
1462
1500
  @ReactMethod
1463
1501
  fun enableNoiseCancellationPlugin(
@@ -256,9 +256,11 @@ class HMSRNSDK(
256
256
  delegate.emitEvent("ON_PREVIEW", data)
257
257
  }
258
258
 
259
- /*
260
- override fun peerListUpdated(addedPeers: ArrayList<HMSPeer>?, removedPeers: ArrayList<HMSPeer>?) {
261
-
259
+ override fun peerListUpdated(
260
+ addedPeers: ArrayList<HMSPeer>?,
261
+ removedPeers: ArrayList<HMSPeer>?,
262
+ ) {
263
+ super.peerListUpdated(addedPeers, removedPeers)
262
264
  if (eventsEnableStatus["ON_PEER_LIST_UPDATED"] != true) {
263
265
  return
264
266
  }
@@ -278,11 +280,11 @@ class HMSRNSDK(
278
280
  }
279
281
  }
280
282
 
283
+ data.putString("id", id)
281
284
  data.putArray("addedPeers", addedPeersArray)
282
285
  data.putArray("removedPeers", removedPeersArray)
283
286
  delegate.emitEvent("ON_PEER_LIST_UPDATED", data)
284
287
  }
285
- */
286
288
  },
287
289
  )
288
290
  } else {
@@ -17,8 +17,12 @@ import live.hms.video.polls.network.HMSPollLeaderboardEntry
17
17
  import live.hms.video.polls.network.HMSPollLeaderboardSummary
18
18
  import live.hms.video.polls.network.PollLeaderboardResponse
19
19
  import live.hms.video.polls.network.PollResultsDisplay
20
+ import live.hms.video.whiteboard.HMSWhiteboard
21
+ import live.hms.video.whiteboard.HMSWhiteboardUpdate
22
+ import live.hms.video.whiteboard.State
20
23
 
21
24
  object HMSInteractivityDecoder {
25
+ //region poll methods
22
26
  fun getPollUpdateType(hmsPollUpdateType: HMSPollUpdateType): Int {
23
27
  return when (hmsPollUpdateType) {
24
28
  HMSPollUpdateType.started -> 0
@@ -280,31 +284,6 @@ object HMSInteractivityDecoder {
280
284
  return readableArray
281
285
  }
282
286
 
283
- /*
284
-
285
- static func getHMSPollQuestionResponseResults(_ hmsPollQuestionResponseResults: [HMSPollQuestionResponseResult]) -> [[String: AnyHashable]] {
286
- var results = [[String: AnyHashable]]()
287
-
288
- hmsPollQuestionResponseResults.forEach { result in
289
- results.append(getHMSPollQuestionResponseResult(result))
290
- }
291
- return results
292
- }
293
-
294
- static func getHMSPollQuestionResponseResult(_ hmsPollQuestionResponseResult: HMSPollQuestionResponseResult) -> [String: AnyHashable] {
295
- var result: [String: AnyHashable] = [
296
- "question": hmsPollQuestionResponseResult.question
297
- ]
298
- if let correct = hmsPollQuestionResponseResult.correct {
299
- result["correct"] = correct
300
- }
301
- if let error = hmsPollQuestionResponseResult.error {
302
- result["error"] = error.localizedDescription
303
- }
304
- return result
305
- }
306
-
307
- */
308
287
  fun getHMSPollQuestionResponseResults(hmsPollQuestionResponseResults: PollAnswerResponse): WritableArray {
309
288
  val results = Arguments.createArray()
310
289
 
@@ -410,4 +389,50 @@ object HMSInteractivityDecoder {
410
389
 
411
390
  return result
412
391
  }
392
+ //endregion
393
+
394
+ //region whiteboard methods
395
+ fun getHMSWhiteboard(hmsWhiteboard: HMSWhiteboard): WritableMap {
396
+ val data: WritableMap = Arguments.createMap()
397
+
398
+ data.putString("id", hmsWhiteboard.id)
399
+ data.putBoolean("isOwner", hmsWhiteboard.isOwner)
400
+ data.putString("state", getWhiteboardState(hmsWhiteboard.state))
401
+ hmsWhiteboard.title?.let { title ->
402
+ data.putString("title", title)
403
+ }
404
+ hmsWhiteboard.owner?.let { owner ->
405
+ data.putMap("owner", HMSDecoder.getHmsPeerSubset(owner))
406
+ }
407
+ data.putString("url", hmsWhiteboard.url)
408
+ return data
409
+ }
410
+
411
+ enum class JSWhiteboardState(val label: String) {
412
+ Start("STARTED"),
413
+ Stop("STOPPED"),
414
+ }
415
+
416
+ private fun getWhiteboardState(hmsWhiteboardState: State): String {
417
+ return when (hmsWhiteboardState) {
418
+ State.Started -> {
419
+ JSWhiteboardState.Start.label
420
+ }
421
+ State.Stopped -> {
422
+ JSWhiteboardState.Stop.label
423
+ }
424
+ }
425
+ }
426
+
427
+ fun getWhiteboardUpdateType(hmsWhiteboardUpdate: HMSWhiteboardUpdate): String {
428
+ return when (hmsWhiteboardUpdate) {
429
+ is HMSWhiteboardUpdate.Start -> {
430
+ JSWhiteboardState.Start.label
431
+ }
432
+ is HMSWhiteboardUpdate.Stop -> {
433
+ JSWhiteboardState.Stop.label
434
+ }
435
+ }
436
+ }
437
+ //endregion
413
438
  }
@@ -13,10 +13,12 @@ import live.hms.video.polls.network.PollLeaderboardResponse
13
13
  import live.hms.video.sdk.HMSActionResultListener
14
14
  import live.hms.video.sdk.HMSSDK
15
15
  import live.hms.video.sdk.HmsTypedActionResultListener
16
+ import live.hms.video.whiteboard.HMSWhiteboardUpdate
17
+ import live.hms.video.whiteboard.HMSWhiteboardUpdateListener
16
18
 
17
19
  class HMSRNInteractivityCenter(private val sdk: HMSSDK, private val rnSDK: HMSRNSDK) {
18
20
  init {
19
- // Listen for poll updates
21
+ //region Listen for poll updates
20
22
  this.sdk.getHmsInteractivityCenter().pollUpdateListener =
21
23
  object : HmsPollUpdateListener {
22
24
  override fun onPollUpdate(
@@ -35,8 +37,34 @@ class HMSRNInteractivityCenter(private val sdk: HMSSDK, private val rnSDK: HMSRN
35
37
  rnSDK.delegate.emitEvent("ON_POLL_UPDATE", data)
36
38
  }
37
39
  }
40
+ //endregion
41
+
42
+ //region Listen for whiteboard updates
43
+ this.sdk.getHmsInteractivityCenter().setWhiteboardUpdateListener(
44
+ object : HMSWhiteboardUpdateListener {
45
+ override fun onUpdate(hmsWhiteboardUpdate: HMSWhiteboardUpdate) {
46
+ if (rnSDK.eventsEnableStatus["ON_WHITEBOARD_UPDATE"] != true) {
47
+ return
48
+ }
49
+ val data: WritableMap = Arguments.createMap()
50
+ when (hmsWhiteboardUpdate) {
51
+ is HMSWhiteboardUpdate.Start -> {
52
+ data.putMap("hmsWhiteboard", HMSInteractivityDecoder.getHMSWhiteboard(hmsWhiteboardUpdate.hmsWhiteboard))
53
+ data.putString("updateType", HMSInteractivityDecoder.getWhiteboardUpdateType(hmsWhiteboardUpdate))
54
+ }
55
+ is HMSWhiteboardUpdate.Stop -> {
56
+ data.putMap("hmsWhiteboard", HMSInteractivityDecoder.getHMSWhiteboard(hmsWhiteboardUpdate.hmsWhiteboard))
57
+ data.putString("updateType", HMSInteractivityDecoder.getWhiteboardUpdateType(hmsWhiteboardUpdate))
58
+ }
59
+ }
60
+ rnSDK.delegate.emitEvent("ON_WHITEBOARD_UPDATE", data)
61
+ }
62
+ },
63
+ )
64
+ //endregion
38
65
  }
39
66
 
67
+ //region poll methods
40
68
  fun quickStartPoll(
41
69
  data: ReadableMap,
42
70
  promise: Promise?,
@@ -159,4 +187,44 @@ class HMSRNInteractivityCenter(private val sdk: HMSSDK, private val rnSDK: HMSRN
159
187
  },
160
188
  )
161
189
  }
190
+ //endregion
191
+
192
+ //region whiteboard methods
193
+ fun startWhiteboard(
194
+ data: ReadableMap,
195
+ promise: Promise?,
196
+ ) {
197
+ val whiteboardTitle = data.getString("title")
198
+ if (whiteboardTitle == null) {
199
+ promise?.reject("6004", "whiteboard title is required")
200
+ return
201
+ }
202
+ sdk.getHmsInteractivityCenter().startWhiteboard(
203
+ whiteboardTitle,
204
+ object : HMSActionResultListener {
205
+ override fun onSuccess() {
206
+ promise?.resolve(true)
207
+ }
208
+
209
+ override fun onError(error: HMSException) {
210
+ promise?.reject(error.code.toString(), error.description)
211
+ }
212
+ },
213
+ )
214
+ }
215
+
216
+ fun stopWhiteboard(promise: Promise?) {
217
+ sdk.getHmsInteractivityCenter().stopWhiteboard(
218
+ object : HMSActionResultListener {
219
+ override fun onSuccess() {
220
+ promise?.resolve(true)
221
+ }
222
+
223
+ override fun onError(error: HMSException) {
224
+ promise?.reject(error.code.toString(), error.description)
225
+ }
226
+ },
227
+ )
228
+ }
229
+ //endregion
162
230
  }
@@ -32,4 +32,5 @@ struct HMSConstants {
32
32
  static let ON_SESSION_STORE_AVAILABLE = "ON_SESSION_STORE_AVAILABLE"
33
33
  static let ON_SESSION_STORE_CHANGED = "ON_SESSION_STORE_CHANGED"
34
34
  static let ON_POLL_UPDATE = "ON_POLL_UPDATE"
35
+ static let ON_WHITEBOARD_UPDATE = "ON_WHITEBOARD_UPDATE"
35
36
  }
@@ -451,7 +451,7 @@ class HMSDecoder: NSObject {
451
451
  }
452
452
 
453
453
  static private func getPermissions (_ permissions: HMSPermissions) -> [String: Any] {
454
- [
454
+ var permissionsDict: [String: Any] = [
455
455
  "endRoom": permissions.endRoom ?? false,
456
456
  "removeOthers": permissions.removeOthers ?? false,
457
457
  "browserRecording": permissions.browserRecording ?? false,
@@ -461,8 +461,16 @@ class HMSDecoder: NSObject {
461
461
  "unmute": permissions.unmute ?? false,
462
462
  "changeRole": permissions.changeRole ?? false,
463
463
  "pollRead": permissions.pollRead ?? false,
464
- "pollWrite": permissions.pollWrite ?? false
464
+ "pollWrite": permissions.pollWrite ?? false,
465
465
  ]
466
+ if let whiteboardPermissions = permissions.whiteboard {
467
+ permissionsDict["whiteboard"] = [
468
+ "admin": whiteboardPermissions.admin,
469
+ "read": whiteboardPermissions.read,
470
+ "write": whiteboardPermissions.write
471
+ ]
472
+ }
473
+ return permissionsDict
466
474
  }
467
475
 
468
476
  // MARK: - HMSRole Publish Settings and Utility functions
@@ -339,7 +339,10 @@ class HMSHLSPlayer: UIView {
339
339
  attachPlayerPlaybackListeners()
340
340
 
341
341
  hmsHLSPlayerViewController?.showsPlaybackControls = false
342
- hmsHLSPlayerViewController?.allowsPictureInPicturePlayback = false
342
+ hmsHLSPlayerViewController?.allowsPictureInPicturePlayback = true
343
+ if #available(iOS 14.2, *) {
344
+ hmsHLSPlayerViewController?.canStartPictureInPictureAutomaticallyFromInline = true
345
+ }
343
346
  }
344
347
 
345
348
  required init?(coder: NSCoder) {
@@ -270,4 +270,45 @@ class HMSInteractivityDecoder {
270
270
 
271
271
  return result
272
272
  }
273
+
274
+ static func getHMSWhiteboard(_ hmsWhiteboard: HMSWhiteboard) -> [String: Any] {
275
+ var result: [String: Any] = [
276
+ "id": hmsWhiteboard.id,
277
+ "state": getWhiteboardState(hmsWhiteboard.state)
278
+ ]
279
+ if let owner = hmsWhiteboard.owner {
280
+ result["owner"] = HMSDecoder.getHmsPeerSubset(owner)
281
+ }
282
+ if let title = hmsWhiteboard.title {
283
+ result["title"] = title
284
+ }
285
+ if let urlString = hmsWhiteboard.url?.absoluteString {
286
+ result["url"] = urlString
287
+ }
288
+ return result
289
+ }
290
+
291
+ static func getWhiteboardState(_ state: HMSWhiteboard.WhiteboardState) -> String {
292
+ switch state {
293
+ case .started:
294
+ return "STARTED"
295
+ case .stopped:
296
+ return "STOPPED"
297
+ @unknown default:
298
+ print("@unknown default case: Invalid HMSWhiteboardUpdateType")
299
+ return "STOPPED"
300
+ }
301
+ }
302
+
303
+ static func getWhiteboardUpdateType(_ type: HMSWhiteboardUpdateType) -> String {
304
+ switch type {
305
+ case .started:
306
+ return "STARTED"
307
+ case .stopped:
308
+ return "STOPPED"
309
+ @unknown default:
310
+ print("@unknown default case: Invalid HMSWhiteboardUpdateType")
311
+ return "STOPPED"
312
+ }
313
+ }
273
314
  }
package/ios/HMSManager.m CHANGED
@@ -353,4 +353,16 @@ RCT_EXTERN_METHOD(isNoiseCancellationPluginAvailable
353
353
  : (RCTPromiseResolveBlock)resolve
354
354
  : (RCTPromiseRejectBlock)reject)
355
355
 
356
+ #pragma mark - Interactivity Center - Whiteboard
357
+
358
+ RCT_EXTERN_METHOD(startWhiteboard
359
+ : (NSDictionary)data
360
+ : (RCTPromiseResolveBlock)resolve
361
+ : (RCTPromiseRejectBlock)reject)
362
+
363
+ RCT_EXTERN_METHOD(stopWhiteboard
364
+ : (NSDictionary)data
365
+ : (RCTPromiseResolveBlock)resolve
366
+ : (RCTPromiseRejectBlock)reject)
367
+
356
368
  @end
@@ -37,7 +37,7 @@ class HMSManager: RCTEventEmitter {
37
37
  }
38
38
 
39
39
  override func supportedEvents() -> [String]! {
40
- return [ON_JOIN, ON_PREVIEW, ON_ROOM_UPDATE, ON_PEER_UPDATE, ON_TRACK_UPDATE, ON_ERROR, ON_MESSAGE, ON_SPEAKER, RECONNECTING, RECONNECTED, ON_ROLE_CHANGE_REQUEST, ON_CHANGE_TRACK_STATE_REQUEST, ON_REMOVED_FROM_ROOM, ON_RTC_STATS, ON_LOCAL_AUDIO_STATS, ON_LOCAL_VIDEO_STATS, ON_REMOTE_AUDIO_STATS, ON_REMOTE_VIDEO_STATS, ON_AUDIO_DEVICE_CHANGED, HMSConstants.ON_SESSION_STORE_AVAILABLE, HMSConstants.ON_SESSION_STORE_CHANGED, HMSConstants.ON_PEER_LIST_UPDATED, HMSConstants.ON_POLL_UPDATE]
40
+ return [ON_JOIN, ON_PREVIEW, ON_ROOM_UPDATE, ON_PEER_UPDATE, ON_TRACK_UPDATE, ON_ERROR, ON_MESSAGE, ON_SPEAKER, RECONNECTING, RECONNECTED, ON_ROLE_CHANGE_REQUEST, ON_CHANGE_TRACK_STATE_REQUEST, ON_REMOVED_FROM_ROOM, ON_RTC_STATS, ON_LOCAL_AUDIO_STATS, ON_LOCAL_VIDEO_STATS, ON_REMOTE_AUDIO_STATS, ON_REMOTE_VIDEO_STATS, ON_AUDIO_DEVICE_CHANGED, HMSConstants.ON_SESSION_STORE_AVAILABLE, HMSConstants.ON_SESSION_STORE_CHANGED, HMSConstants.ON_PEER_LIST_UPDATED, HMSConstants.ON_POLL_UPDATE, HMSConstants.ON_WHITEBOARD_UPDATE]
41
41
  }
42
42
 
43
43
  // MARK: - HMS SDK Delegate Callbacks
@@ -762,4 +762,23 @@ class HMSManager: RCTEventEmitter {
762
762
  }
763
763
  rnsdk.isNoiseCancellationPluginAvailable(data, resolve, reject)
764
764
  }
765
+
766
+ // MARK: - Interactivity Center - Whiteboard
767
+ @objc
768
+ func startWhiteboard(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
769
+ guard let rnsdk = HMSHelper.getHms(data, hmsCollection), let interactivity = rnsdk.interactivity else {
770
+ reject?("6004", "HMSRNSDK instance not found!", nil)
771
+ return
772
+ }
773
+ interactivity.startWhiteboard(resolve, reject)
774
+ }
775
+
776
+ @objc
777
+ func stopWhiteboard(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
778
+ guard let rnsdk = HMSHelper.getHms(data, hmsCollection), let interactivity = rnsdk.interactivity else {
779
+ reject?("6004", "HMSRNSDK instance not found!", nil)
780
+ return
781
+ }
782
+ interactivity.stopWhiteboard(resolve, reject)
783
+ }
765
784
  }
@@ -27,8 +27,27 @@ class HMSRNInteractivityCenter {
27
27
  ["update": update.rawValue, "updatedPoll": HMSInteractivityDecoder.getHMSPoll(updatedPoll)]
28
28
  )
29
29
  }
30
+
31
+ hmssdk.interactivityCenter.addWhiteboardUpdateListener { [weak self] hmsWhiteboard, hmsWhiteboardUpdateType in
32
+ guard let self = self else { return }
33
+ guard let enabledEvents = self.hmsrnsdk?.eventsEnableStatus, enabledEvents[HMSConstants.ON_WHITEBOARD_UPDATE] == true else {
34
+ print("HMSConstants.ON_WHITEBOARD_UPDATE event is not enabled")
35
+ return
36
+ }
37
+ var hmsWhiteboardDict = HMSInteractivityDecoder.getHMSWhiteboard(hmsWhiteboard)
38
+ hmsWhiteboardDict["isOwner"] = hmsWhiteboard.owner?.peerID == self.hmssdk?.localPeer?.peerID
39
+
40
+ self.hmsrnsdk?.delegate?.emitEvent(
41
+ HMSConstants.ON_WHITEBOARD_UPDATE,
42
+ [
43
+ "hmsWhiteboard": hmsWhiteboardDict,
44
+ "updateType": HMSInteractivityDecoder.getWhiteboardUpdateType(hmsWhiteboardUpdateType)
45
+ ]
46
+ )
47
+ }
30
48
  }
31
49
 
50
+ // MARK: Poll Methods
32
51
  func quickStartPoll(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
33
52
  let pollBuilder = HMSInteractivityHelper.getPollBuilderFromDict(data, sdkRoles: hmssdk?.roles)
34
53
 
@@ -117,4 +136,26 @@ class HMSRNInteractivityCenter {
117
136
  }
118
137
  }
119
138
  }
139
+
140
+ // MARK: - Whiteboard Methods
141
+
142
+ func startWhiteboard(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
143
+ self.hmssdk?.interactivityCenter.startWhiteboard { success, error in
144
+ if let error = error {
145
+ reject?("6004", error.localizedDescription, nil)
146
+ return
147
+ }
148
+ resolve?(success)
149
+ }
150
+ }
151
+
152
+ func stopWhiteboard(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
153
+ self.hmssdk?.interactivityCenter.stopWhiteboard { success, error in
154
+ if let error = error {
155
+ reject?("6004", error.localizedDescription, nil)
156
+ return
157
+ }
158
+ resolve?(success)
159
+ }
160
+ }
120
161
  }
@@ -12,6 +12,8 @@ var _HMSPollsListenerActions = require("./HMSPollsListenerActions");
12
12
  var _HMSNativeEventListener = _interopRequireDefault(require("./HMSNativeEventListener"));
13
13
  var _HMSInteractivityEncoder = require("./HMSInteractivityEncoder");
14
14
  var _HMSHelper = require("./HMSHelper");
15
+ var _HMSWhiteboardListenerActions = require("./whiteboard/HMSWhiteboardListenerActions");
16
+ var _registerCallbacks = require("./whiteboard/registerCallbacks");
15
17
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
18
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
17
19
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
@@ -31,8 +33,18 @@ function unregisterPollUpdateListener() {
31
33
  pollUpdateSubscription = null;
32
34
  }
33
35
  class HMSInteractivityCenter {
36
+ onUpdateListenerRemoved(eventType) {
37
+ if (eventType === _HMSPollsListenerActions.HMSPollsListenerActions.ON_POLL_UPDATE) {
38
+ unregisterPollUpdateListener();
39
+ } else if (eventType === _HMSWhiteboardListenerActions.HMSWhiteboardListenerActions.ON_WHITEBOARD_UPDATE) {
40
+ (0, _registerCallbacks.unregisterWhiteboardUpdateListener)();
41
+ } else {
42
+ console.warn('Unknown update listener removed: ', eventType);
43
+ }
44
+ }
34
45
  constructor() {
35
46
  _defineProperty(this, "_eventEmitter", new _utils.EventEmitter());
47
+ //#region Poll Methods & Listeners
36
48
  _defineProperty(this, "_pollUpdateListener", (...args) => {
37
49
  const {
38
50
  updatedPoll,
@@ -44,12 +56,21 @@ class HMSInteractivityCenter {
44
56
  });
45
57
  this._eventEmitter.emit(_HMSPollsListenerActions.HMSPollsListenerActions.ON_POLL_UPDATE, _HMSInteractivityEncoder.HMSInteractivityEncoder.transformPoll(updatedPoll), update);
46
58
  });
47
- _defineProperty(this, "_onAllPollUpdateListenerRemoved", () => {
48
- unregisterPollUpdateListener();
59
+ //#endregion Poll Methods & Listeners
60
+ //#region Whiteboard Methods & Listeners
61
+ _defineProperty(this, "_whiteboardUpdateListener", (...args) => {
62
+ const {
63
+ hmsWhiteboard,
64
+ updateType
65
+ } = args[0];
66
+ _HMSLogger.logger === null || _HMSLogger.logger === void 0 || _HMSLogger.logger.verbose('#Listener ON_WHITEBOARD_UPDATE', {
67
+ updateType,
68
+ hmsWhiteboard
69
+ });
70
+ this._eventEmitter.emit(_HMSWhiteboardListenerActions.HMSWhiteboardListenerActions.ON_WHITEBOARD_UPDATE, _HMSInteractivityEncoder.HMSInteractivityEncoder.transformHMSWhiteboard(hmsWhiteboard), updateType);
49
71
  });
50
- this._eventEmitter.registerOnAllListenersRemoved(this._onAllPollUpdateListenerRemoved);
72
+ this._eventEmitter.registerOnAllListenersRemoved(this.onUpdateListenerRemoved);
51
73
  }
52
-
53
74
  /**
54
75
  * Adds a listener for poll updates
55
76
  * @param listener - Callback to be called when a poll is updated
@@ -115,6 +136,39 @@ class HMSInteractivityCenter {
115
136
  const response = await _HMSManagerModule.default.fetchLeaderboard(data);
116
137
  return _HMSInteractivityEncoder.HMSInteractivityEncoder.transformPollLeaderboardResponse(response);
117
138
  }
139
+ /**
140
+ * Adds a listener for Whiteboard updates
141
+ * @param listener - Callback to be called when whiteboard is updated
142
+ * @returns HMSEventSubscription
143
+ */
144
+ addWhiteboardUpdateListener(listener) {
145
+ (0, _registerCallbacks.registerWhiteboardUpdateListener)(this._whiteboardUpdateListener);
146
+ return this._eventEmitter.addListener(_HMSWhiteboardListenerActions.HMSWhiteboardListenerActions.ON_WHITEBOARD_UPDATE, listener, null);
147
+ }
148
+
149
+ /**
150
+ * Starts Whiteboard
151
+ */
152
+ async startWhiteboard(title) {
153
+ const data = {
154
+ id: _HMSConstants.HMSConstants.DEFAULT_SDK_ID,
155
+ title
156
+ };
157
+ _HMSLogger.logger === null || _HMSLogger.logger === void 0 || _HMSLogger.logger.verbose('#Function startWhiteboard', data);
158
+ return _HMSManagerModule.default.startWhiteboard(data);
159
+ }
160
+
161
+ /**
162
+ * Stops Whiteboard
163
+ */
164
+ async stopWhiteboard() {
165
+ const data = {
166
+ id: _HMSConstants.HMSConstants.DEFAULT_SDK_ID
167
+ };
168
+ _HMSLogger.logger === null || _HMSLogger.logger === void 0 || _HMSLogger.logger.verbose('#Function stopWhiteboard', data);
169
+ return _HMSManagerModule.default.stopWhiteboard(data);
170
+ }
171
+ //#endregion Whiteboard Methods & Listeners
118
172
  }
119
173
  exports.HMSInteractivityCenter = HMSInteractivityCenter;
120
174
  //# sourceMappingURL=HMSInteractivityCenter.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_utils","require","_HMSManagerModule","_interopRequireDefault","_HMSConstants","_HMSLogger","_HMSPollsListenerActions","_HMSNativeEventListener","_HMSInteractivityEncoder","_HMSHelper","obj","__esModule","default","_defineProperty","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","t","i","_toPrimitive","r","e","Symbol","toPrimitive","call","TypeError","String","Number","pollUpdateSubscription","registerPollUpdateListener","listener","HMSNativeEventListener","addListener","HMSConstants","DEFAULT_SDK_ID","HMSPollsListenerActions","ON_POLL_UPDATE","unregisterPollUpdateListener","remove","HMSInteractivityCenter","constructor","EventEmitter","args","updatedPoll","update","logger","verbose","_eventEmitter","emit","HMSInteractivityEncoder","transformPoll","registerOnAllListenersRemoved","_onAllPollUpdateListenerRemoved","addPollUpdateListener","_pollUpdateListener","startPoll","pollParams","transformedPollParams","rolesThatCanVote","HMSHelper","getRoleNames","undefined","rolesThatCanViewResponses","data","id","JSON","stringify","HMSManager","quickStartPoll","add","pollQuestionResponseParams","addResponseOnPollQuestion","stop","pollId","stopPoll","fetchLeaderboard","count","startIndex","includeCurrentPeer","response","transformPollLeaderboardResponse","exports"],"sources":["HMSInteractivityCenter.ts"],"sourcesContent":["import { EventEmitter } from '../utils';\nimport HMSManager from '../modules/HMSManagerModule';\nimport { HMSConstants } from './HMSConstants';\nimport { logger } from './HMSLogger';\nimport type { HMSPoll } from './polls/HMSPoll';\nimport type { HMSPollCreateParams } from './polls/HMSPollCreateParams';\nimport type { HMSPollUpdateType } from './polls/HMSPollUpdateType';\nimport { HMSPollsListenerActions } from './HMSPollsListenerActions';\nimport HMSNativeEventListener from './HMSNativeEventListener';\nimport type { HMSEventSubscription } from './HMSNativeEventEmitter';\nimport { HMSInteractivityEncoder } from './HMSInteractivityEncoder';\nimport { HMSHelper } from './HMSHelper';\nimport type { PollLeaderboardResponse } from './polls/PollLeaderboardResponse';\nimport type { DecodedPollLeaderboardResponse } from './polls/DecodedPollLeaderboardResponse';\n\ntype PollUpdateListener = (data: {\n updatedPoll: HMSPoll;\n update: HMSPollUpdateType;\n}) => void;\n\ntype PollQuestionResponseCreateParams = {\n pollId: string;\n pollQuestionIndex: number;\n responses:\n | {\n text: string;\n duration?: number;\n }\n | {\n options: number[];\n duration?: number;\n };\n};\n\nlet pollUpdateSubscription: null | HMSEventSubscription = null;\n\nfunction registerPollUpdateListener(listener: PollUpdateListener) {\n if (pollUpdateSubscription !== null) {\n return;\n }\n pollUpdateSubscription = HMSNativeEventListener.addListener(\n HMSConstants.DEFAULT_SDK_ID,\n HMSPollsListenerActions.ON_POLL_UPDATE,\n listener\n );\n}\n\nfunction unregisterPollUpdateListener() {\n if (pollUpdateSubscription === null) {\n return;\n }\n pollUpdateSubscription.remove();\n pollUpdateSubscription = null;\n}\n\nexport class HMSInteractivityCenter {\n private _eventEmitter = new EventEmitter();\n\n private _pollUpdateListener = (...args: Parameters<PollUpdateListener>) => {\n const { updatedPoll, update } = args[0];\n logger?.verbose('#Listener ON_POLL_UPDATE', {\n update,\n updatedPoll,\n });\n this._eventEmitter.emit(\n HMSPollsListenerActions.ON_POLL_UPDATE,\n HMSInteractivityEncoder.transformPoll(updatedPoll),\n update\n );\n };\n\n private _onAllPollUpdateListenerRemoved = () => {\n unregisterPollUpdateListener();\n };\n\n constructor() {\n this._eventEmitter.registerOnAllListenersRemoved(\n this._onAllPollUpdateListenerRemoved\n );\n }\n\n /**\n * Adds a listener for poll updates\n * @param listener - Callback to be called when a poll is updated\n * @returns HMSEventSubscription\n */\n addPollUpdateListener(\n listener: (updatedPoll: HMSPoll, update: HMSPollUpdateType) => void\n ) {\n registerPollUpdateListener(this._pollUpdateListener);\n return this._eventEmitter.addListener(\n HMSPollsListenerActions.ON_POLL_UPDATE,\n listener,\n null\n );\n }\n\n /**\n * Starts a poll\n *\n * @param pollParams\n */\n async startPoll(pollParams: HMSPollCreateParams) {\n const transformedPollParams = {\n ...pollParams,\n rolesThatCanVote: pollParams.rolesThatCanVote\n ? HMSHelper.getRoleNames(pollParams.rolesThatCanVote)\n : undefined,\n rolesThatCanViewResponses: pollParams.rolesThatCanViewResponses\n ? HMSHelper.getRoleNames(pollParams.rolesThatCanViewResponses)\n : undefined,\n };\n\n const data = {\n ...transformedPollParams,\n id: HMSConstants.DEFAULT_SDK_ID,\n };\n logger?.verbose('#Function startPoll', JSON.stringify(data));\n return HMSManager.quickStartPoll(data);\n }\n\n async add(pollQuestionResponseParams: PollQuestionResponseCreateParams) {\n const data = {\n ...pollQuestionResponseParams,\n id: HMSConstants.DEFAULT_SDK_ID,\n };\n logger?.verbose('#Function add', JSON.stringify(data));\n return HMSManager.addResponseOnPollQuestion(data);\n }\n\n async stop(pollId: string) {\n const data = {\n id: HMSConstants.DEFAULT_SDK_ID,\n pollId,\n };\n logger?.verbose('#Function stop', JSON.stringify(data));\n return HMSManager.stopPoll(data);\n }\n\n /**\n * Fetches the leaderboard for a poll\n * @param pollId - The id of the poll\n * @param count - The number of entries to fetch\n * @param startIndex - The index to start fetching from\n * @param includeCurrentPeer - Whether to include the current peer in the fetched leaderboard entries\n * @returns Promise<PollLeaderboardResponse>\n */\n async fetchLeaderboard(\n pollId: string,\n count: number,\n startIndex: number,\n includeCurrentPeer: boolean\n ): Promise<PollLeaderboardResponse> {\n const data = {\n id: HMSConstants.DEFAULT_SDK_ID,\n pollId,\n count,\n startIndex,\n includeCurrentPeer,\n };\n logger?.verbose('#Function fetchLeaderboard', data);\n\n const response: DecodedPollLeaderboardResponse =\n await HMSManager.fetchLeaderboard(data);\n return HMSInteractivityEncoder.transformPollLeaderboardResponse(response);\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,iBAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,aAAA,GAAAH,OAAA;AACA,IAAAI,UAAA,GAAAJ,OAAA;AAIA,IAAAK,wBAAA,GAAAL,OAAA;AACA,IAAAM,uBAAA,GAAAJ,sBAAA,CAAAF,OAAA;AAEA,IAAAO,wBAAA,GAAAP,OAAA;AACA,IAAAQ,UAAA,GAAAR,OAAA;AAAwC,SAAAE,uBAAAO,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAAA,SAAAG,gBAAAH,GAAA,EAAAI,GAAA,EAAAC,KAAA,IAAAD,GAAA,GAAAE,cAAA,CAAAF,GAAA,OAAAA,GAAA,IAAAJ,GAAA,IAAAO,MAAA,CAAAC,cAAA,CAAAR,GAAA,EAAAI,GAAA,IAAAC,KAAA,EAAAA,KAAA,EAAAI,UAAA,QAAAC,YAAA,QAAAC,QAAA,oBAAAX,GAAA,CAAAI,GAAA,IAAAC,KAAA,WAAAL,GAAA;AAAA,SAAAM,eAAAM,CAAA,QAAAC,CAAA,GAAAC,YAAA,CAAAF,CAAA,uCAAAC,CAAA,GAAAA,CAAA,GAAAA,CAAA;AAAA,SAAAC,aAAAF,CAAA,EAAAG,CAAA,2BAAAH,CAAA,KAAAA,CAAA,SAAAA,CAAA,MAAAI,CAAA,GAAAJ,CAAA,CAAAK,MAAA,CAAAC,WAAA,kBAAAF,CAAA,QAAAH,CAAA,GAAAG,CAAA,CAAAG,IAAA,CAAAP,CAAA,EAAAG,CAAA,uCAAAF,CAAA,SAAAA,CAAA,YAAAO,SAAA,yEAAAL,CAAA,GAAAM,MAAA,GAAAC,MAAA,EAAAV,CAAA;AAuBxC,IAAIW,sBAAmD,GAAG,IAAI;AAE9D,SAASC,0BAA0BA,CAACC,QAA4B,EAAE;EAChE,IAAIF,sBAAsB,KAAK,IAAI,EAAE;IACnC;EACF;EACAA,sBAAsB,GAAGG,+BAAsB,CAACC,WAAW,CACzDC,0BAAY,CAACC,cAAc,EAC3BC,gDAAuB,CAACC,cAAc,EACtCN,QACF,CAAC;AACH;AAEA,SAASO,4BAA4BA,CAAA,EAAG;EACtC,IAAIT,sBAAsB,KAAK,IAAI,EAAE;IACnC;EACF;EACAA,sBAAsB,CAACU,MAAM,CAAC,CAAC;EAC/BV,sBAAsB,GAAG,IAAI;AAC/B;AAEO,MAAMW,sBAAsB,CAAC;EAoBlCC,WAAWA,CAAA,EAAG;IAAAhC,eAAA,wBAnBU,IAAIiC,mBAAY,CAAC,CAAC;IAAAjC,eAAA,8BAEZ,CAAC,GAAGkC,IAAoC,KAAK;MACzE,MAAM;QAAEC,WAAW;QAAEC;MAAO,CAAC,GAAGF,IAAI,CAAC,CAAC,CAAC;MACvCG,iBAAM,aAANA,iBAAM,eAANA,iBAAM,CAAEC,OAAO,CAAC,0BAA0B,EAAE;QAC1CF,MAAM;QACND;MACF,CAAC,CAAC;MACF,IAAI,CAACI,aAAa,CAACC,IAAI,CACrBb,gDAAuB,CAACC,cAAc,EACtCa,gDAAuB,CAACC,aAAa,CAACP,WAAW,CAAC,EAClDC,MACF,CAAC;IACH,CAAC;IAAApC,eAAA,0CAEyC,MAAM;MAC9C6B,4BAA4B,CAAC,CAAC;IAChC,CAAC;IAGC,IAAI,CAACU,aAAa,CAACI,6BAA6B,CAC9C,IAAI,CAACC,+BACP,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;EACEC,qBAAqBA,CACnBvB,QAAmE,EACnE;IACAD,0BAA0B,CAAC,IAAI,CAACyB,mBAAmB,CAAC;IACpD,OAAO,IAAI,CAACP,aAAa,CAACf,WAAW,CACnCG,gDAAuB,CAACC,cAAc,EACtCN,QAAQ,EACR,IACF,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;EACE,MAAMyB,SAASA,CAACC,UAA+B,EAAE;IAC/C,MAAMC,qBAAqB,GAAG;MAC5B,GAAGD,UAAU;MACbE,gBAAgB,EAAEF,UAAU,CAACE,gBAAgB,GACzCC,oBAAS,CAACC,YAAY,CAACJ,UAAU,CAACE,gBAAgB,CAAC,GACnDG,SAAS;MACbC,yBAAyB,EAAEN,UAAU,CAACM,yBAAyB,GAC3DH,oBAAS,CAACC,YAAY,CAACJ,UAAU,CAACM,yBAAyB,CAAC,GAC5DD;IACN,CAAC;IAED,MAAME,IAAI,GAAG;MACX,GAAGN,qBAAqB;MACxBO,EAAE,EAAE/B,0BAAY,CAACC;IACnB,CAAC;IACDW,iBAAM,aAANA,iBAAM,eAANA,iBAAM,CAAEC,OAAO,CAAC,qBAAqB,EAAEmB,IAAI,CAACC,SAAS,CAACH,IAAI,CAAC,CAAC;IAC5D,OAAOI,yBAAU,CAACC,cAAc,CAACL,IAAI,CAAC;EACxC;EAEA,MAAMM,GAAGA,CAACC,0BAA4D,EAAE;IACtE,MAAMP,IAAI,GAAG;MACX,GAAGO,0BAA0B;MAC7BN,EAAE,EAAE/B,0BAAY,CAACC;IACnB,CAAC;IACDW,iBAAM,aAANA,iBAAM,eAANA,iBAAM,CAAEC,OAAO,CAAC,eAAe,EAAEmB,IAAI,CAACC,SAAS,CAACH,IAAI,CAAC,CAAC;IACtD,OAAOI,yBAAU,CAACI,yBAAyB,CAACR,IAAI,CAAC;EACnD;EAEA,MAAMS,IAAIA,CAACC,MAAc,EAAE;IACzB,MAAMV,IAAI,GAAG;MACXC,EAAE,EAAE/B,0BAAY,CAACC,cAAc;MAC/BuC;IACF,CAAC;IACD5B,iBAAM,aAANA,iBAAM,eAANA,iBAAM,CAAEC,OAAO,CAAC,gBAAgB,EAAEmB,IAAI,CAACC,SAAS,CAACH,IAAI,CAAC,CAAC;IACvD,OAAOI,yBAAU,CAACO,QAAQ,CAACX,IAAI,CAAC;EAClC;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAMY,gBAAgBA,CACpBF,MAAc,EACdG,KAAa,EACbC,UAAkB,EAClBC,kBAA2B,EACO;IAClC,MAAMf,IAAI,GAAG;MACXC,EAAE,EAAE/B,0BAAY,CAACC,cAAc;MAC/BuC,MAAM;MACNG,KAAK;MACLC,UAAU;MACVC;IACF,CAAC;IACDjC,iBAAM,aAANA,iBAAM,eAANA,iBAAM,CAAEC,OAAO,CAAC,4BAA4B,EAAEiB,IAAI,CAAC;IAEnD,MAAMgB,QAAwC,GAC5C,MAAMZ,yBAAU,CAACQ,gBAAgB,CAACZ,IAAI,CAAC;IACzC,OAAOd,gDAAuB,CAAC+B,gCAAgC,CAACD,QAAQ,CAAC;EAC3E;AACF;AAACE,OAAA,CAAA1C,sBAAA,GAAAA,sBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_utils","require","_HMSManagerModule","_interopRequireDefault","_HMSConstants","_HMSLogger","_HMSPollsListenerActions","_HMSNativeEventListener","_HMSInteractivityEncoder","_HMSHelper","_HMSWhiteboardListenerActions","_registerCallbacks","obj","__esModule","default","_defineProperty","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","t","i","_toPrimitive","r","e","Symbol","toPrimitive","call","TypeError","String","Number","pollUpdateSubscription","registerPollUpdateListener","listener","HMSNativeEventListener","addListener","HMSConstants","DEFAULT_SDK_ID","HMSPollsListenerActions","ON_POLL_UPDATE","unregisterPollUpdateListener","remove","HMSInteractivityCenter","onUpdateListenerRemoved","eventType","HMSWhiteboardListenerActions","ON_WHITEBOARD_UPDATE","unregisterWhiteboardUpdateListener","console","warn","constructor","EventEmitter","args","updatedPoll","update","logger","verbose","_eventEmitter","emit","HMSInteractivityEncoder","transformPoll","hmsWhiteboard","updateType","transformHMSWhiteboard","registerOnAllListenersRemoved","addPollUpdateListener","_pollUpdateListener","startPoll","pollParams","transformedPollParams","rolesThatCanVote","HMSHelper","getRoleNames","undefined","rolesThatCanViewResponses","data","id","JSON","stringify","HMSManager","quickStartPoll","add","pollQuestionResponseParams","addResponseOnPollQuestion","stop","pollId","stopPoll","fetchLeaderboard","count","startIndex","includeCurrentPeer","response","transformPollLeaderboardResponse","addWhiteboardUpdateListener","registerWhiteboardUpdateListener","_whiteboardUpdateListener","startWhiteboard","title","stopWhiteboard","exports"],"sources":["HMSInteractivityCenter.ts"],"sourcesContent":["import { EventEmitter } from '../utils';\nimport HMSManager from '../modules/HMSManagerModule';\nimport { HMSConstants } from './HMSConstants';\nimport { logger } from './HMSLogger';\nimport type { HMSPoll } from './polls/HMSPoll';\nimport type { HMSPollCreateParams } from './polls/HMSPollCreateParams';\nimport type { HMSPollUpdateType } from './polls/HMSPollUpdateType';\nimport { HMSPollsListenerActions } from './HMSPollsListenerActions';\nimport HMSNativeEventListener from './HMSNativeEventListener';\nimport type { HMSEventSubscription } from './HMSNativeEventEmitter';\nimport { HMSInteractivityEncoder } from './HMSInteractivityEncoder';\nimport { HMSHelper } from './HMSHelper';\nimport type { PollLeaderboardResponse } from './polls/PollLeaderboardResponse';\nimport type { DecodedPollLeaderboardResponse } from './polls/DecodedPollLeaderboardResponse';\nimport type { HMSWhiteboardUpdateType } from './whiteboard/HMSWhiteboardUpdateType';\nimport type { HMSWhiteboard } from './whiteboard/HMSWhiteboard';\nimport { HMSWhiteboardListenerActions } from './whiteboard/HMSWhiteboardListenerActions';\nimport {\n WhiteboardUpdateListener,\n registerWhiteboardUpdateListener,\n unregisterWhiteboardUpdateListener,\n} from './whiteboard/registerCallbacks';\n\ntype PollUpdateListener = (data: {\n updatedPoll: HMSPoll;\n update: HMSPollUpdateType;\n}) => void;\n\ntype PollQuestionResponseCreateParams = {\n pollId: string;\n pollQuestionIndex: number;\n responses:\n | {\n text: string;\n duration?: number;\n }\n | {\n options: number[];\n duration?: number;\n };\n};\n\nlet pollUpdateSubscription: null | HMSEventSubscription = null;\n\nfunction registerPollUpdateListener(listener: PollUpdateListener) {\n if (pollUpdateSubscription !== null) {\n return;\n }\n pollUpdateSubscription = HMSNativeEventListener.addListener(\n HMSConstants.DEFAULT_SDK_ID,\n HMSPollsListenerActions.ON_POLL_UPDATE,\n listener\n );\n}\n\nfunction unregisterPollUpdateListener() {\n if (pollUpdateSubscription === null) {\n return;\n }\n pollUpdateSubscription.remove();\n pollUpdateSubscription = null;\n}\n\nexport class HMSInteractivityCenter {\n private _eventEmitter = new EventEmitter();\n\n private onUpdateListenerRemoved(eventType: string) {\n if (eventType === HMSPollsListenerActions.ON_POLL_UPDATE) {\n unregisterPollUpdateListener();\n } else if (\n eventType === HMSWhiteboardListenerActions.ON_WHITEBOARD_UPDATE\n ) {\n unregisterWhiteboardUpdateListener();\n } else {\n console.warn('Unknown update listener removed: ', eventType);\n }\n }\n\n constructor() {\n this._eventEmitter.registerOnAllListenersRemoved(\n this.onUpdateListenerRemoved\n );\n }\n\n //#region Poll Methods & Listeners\n\n private _pollUpdateListener = (...args: Parameters<PollUpdateListener>) => {\n const { updatedPoll, update } = args[0];\n logger?.verbose('#Listener ON_POLL_UPDATE', {\n update,\n updatedPoll,\n });\n this._eventEmitter.emit(\n HMSPollsListenerActions.ON_POLL_UPDATE,\n HMSInteractivityEncoder.transformPoll(updatedPoll),\n update\n );\n };\n\n /**\n * Adds a listener for poll updates\n * @param listener - Callback to be called when a poll is updated\n * @returns HMSEventSubscription\n */\n addPollUpdateListener(\n listener: (updatedPoll: HMSPoll, update: HMSPollUpdateType) => void\n ) {\n registerPollUpdateListener(this._pollUpdateListener);\n return this._eventEmitter.addListener(\n HMSPollsListenerActions.ON_POLL_UPDATE,\n listener,\n null\n );\n }\n\n /**\n * Starts a poll\n *\n * @param pollParams\n */\n async startPoll(pollParams: HMSPollCreateParams) {\n const transformedPollParams = {\n ...pollParams,\n rolesThatCanVote: pollParams.rolesThatCanVote\n ? HMSHelper.getRoleNames(pollParams.rolesThatCanVote)\n : undefined,\n rolesThatCanViewResponses: pollParams.rolesThatCanViewResponses\n ? HMSHelper.getRoleNames(pollParams.rolesThatCanViewResponses)\n : undefined,\n };\n\n const data = {\n ...transformedPollParams,\n id: HMSConstants.DEFAULT_SDK_ID,\n };\n logger?.verbose('#Function startPoll', JSON.stringify(data));\n return HMSManager.quickStartPoll(data);\n }\n\n async add(pollQuestionResponseParams: PollQuestionResponseCreateParams) {\n const data = {\n ...pollQuestionResponseParams,\n id: HMSConstants.DEFAULT_SDK_ID,\n };\n logger?.verbose('#Function add', JSON.stringify(data));\n return HMSManager.addResponseOnPollQuestion(data);\n }\n\n async stop(pollId: string) {\n const data = {\n id: HMSConstants.DEFAULT_SDK_ID,\n pollId,\n };\n logger?.verbose('#Function stop', JSON.stringify(data));\n return HMSManager.stopPoll(data);\n }\n\n /**\n * Fetches the leaderboard for a poll\n * @param pollId - The id of the poll\n * @param count - The number of entries to fetch\n * @param startIndex - The index to start fetching from\n * @param includeCurrentPeer - Whether to include the current peer in the fetched leaderboard entries\n * @returns Promise<PollLeaderboardResponse>\n */\n async fetchLeaderboard(\n pollId: string,\n count: number,\n startIndex: number,\n includeCurrentPeer: boolean\n ): Promise<PollLeaderboardResponse> {\n const data = {\n id: HMSConstants.DEFAULT_SDK_ID,\n pollId,\n count,\n startIndex,\n includeCurrentPeer,\n };\n logger?.verbose('#Function fetchLeaderboard', data);\n\n const response: DecodedPollLeaderboardResponse =\n await HMSManager.fetchLeaderboard(data);\n return HMSInteractivityEncoder.transformPollLeaderboardResponse(response);\n }\n //#endregion Poll Methods & Listeners\n\n //#region Whiteboard Methods & Listeners\n\n private _whiteboardUpdateListener = (\n ...args: Parameters<WhiteboardUpdateListener>\n ) => {\n const { hmsWhiteboard, updateType } = args[0];\n logger?.verbose('#Listener ON_WHITEBOARD_UPDATE', {\n updateType,\n hmsWhiteboard,\n });\n this._eventEmitter.emit(\n HMSWhiteboardListenerActions.ON_WHITEBOARD_UPDATE,\n HMSInteractivityEncoder.transformHMSWhiteboard(hmsWhiteboard),\n updateType\n );\n };\n\n /**\n * Adds a listener for Whiteboard updates\n * @param listener - Callback to be called when whiteboard is updated\n * @returns HMSEventSubscription\n */\n addWhiteboardUpdateListener(\n listener: (\n hmsWhiteboard: HMSWhiteboard,\n updateType: HMSWhiteboardUpdateType\n ) => void\n ) {\n registerWhiteboardUpdateListener(this._whiteboardUpdateListener);\n return this._eventEmitter.addListener(\n HMSWhiteboardListenerActions.ON_WHITEBOARD_UPDATE,\n listener,\n null\n );\n }\n\n /**\n * Starts Whiteboard\n */\n async startWhiteboard(title: string) {\n const data = {\n id: HMSConstants.DEFAULT_SDK_ID,\n title,\n };\n logger?.verbose('#Function startWhiteboard', data);\n return HMSManager.startWhiteboard(data);\n }\n\n /**\n * Stops Whiteboard\n */\n async stopWhiteboard() {\n const data = {\n id: HMSConstants.DEFAULT_SDK_ID,\n };\n logger?.verbose('#Function stopWhiteboard', data);\n return HMSManager.stopWhiteboard(data);\n }\n //#endregion Whiteboard Methods & Listeners\n}\n"],"mappings":"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","ignoreList":[]}