@100mslive/react-native-hms 0.9.92 → 0.9.93

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 (68) hide show
  1. package/README.md +13 -7
  2. package/ios/HMSDecoder.swift +21 -24
  3. package/ios/HMSHelper.swift +42 -8
  4. package/ios/HMSManager.m +8 -0
  5. package/ios/HMSManager.swift +70 -22
  6. package/ios/HMSRNSDK.swift +237 -89
  7. package/ios/HMSView.swift +3 -4
  8. package/lib/commonjs/classes/HMSAudioFilePlayerNode.js +87 -0
  9. package/lib/commonjs/classes/HMSAudioFilePlayerNode.js.map +1 -0
  10. package/lib/commonjs/classes/HMSAudioMixerSource.js +26 -0
  11. package/lib/commonjs/classes/HMSAudioMixerSource.js.map +1 -0
  12. package/lib/commonjs/classes/HMSAudioNode.js +26 -0
  13. package/lib/commonjs/classes/HMSAudioNode.js.map +1 -0
  14. package/lib/commonjs/classes/HMSAudioTrackSettings.js +6 -0
  15. package/lib/commonjs/classes/HMSAudioTrackSettings.js.map +1 -1
  16. package/lib/commonjs/classes/HMSEncoder.js +3 -2
  17. package/lib/commonjs/classes/HMSEncoder.js.map +1 -1
  18. package/lib/commonjs/classes/HMSException.js +7 -0
  19. package/lib/commonjs/classes/HMSException.js.map +1 -1
  20. package/lib/commonjs/classes/HMSMicNode.js +35 -0
  21. package/lib/commonjs/classes/HMSMicNode.js.map +1 -0
  22. package/lib/commonjs/classes/HMSSDK.js +12 -15
  23. package/lib/commonjs/classes/HMSSDK.js.map +1 -1
  24. package/lib/commonjs/classes/HMSScreenBroadcastAudioReceiverNode.js +18 -0
  25. package/lib/commonjs/classes/HMSScreenBroadcastAudioReceiverNode.js.map +1 -0
  26. package/lib/commonjs/index.js +70 -0
  27. package/lib/commonjs/index.js.map +1 -1
  28. package/lib/module/classes/HMSAudioFilePlayerNode.js +75 -0
  29. package/lib/module/classes/HMSAudioFilePlayerNode.js.map +1 -0
  30. package/lib/module/classes/HMSAudioMixerSource.js +17 -0
  31. package/lib/module/classes/HMSAudioMixerSource.js.map +1 -0
  32. package/lib/module/classes/HMSAudioNode.js +17 -0
  33. package/lib/module/classes/HMSAudioNode.js.map +1 -0
  34. package/lib/module/classes/HMSAudioTrackSettings.js +6 -0
  35. package/lib/module/classes/HMSAudioTrackSettings.js.map +1 -1
  36. package/lib/module/classes/HMSEncoder.js +3 -2
  37. package/lib/module/classes/HMSEncoder.js.map +1 -1
  38. package/lib/module/classes/HMSException.js +7 -0
  39. package/lib/module/classes/HMSException.js.map +1 -1
  40. package/lib/module/classes/HMSMicNode.js +23 -0
  41. package/lib/module/classes/HMSMicNode.js.map +1 -0
  42. package/lib/module/classes/HMSSDK.js +11 -14
  43. package/lib/module/classes/HMSSDK.js.map +1 -1
  44. package/lib/module/classes/HMSScreenBroadcastAudioReceiverNode.js +8 -0
  45. package/lib/module/classes/HMSScreenBroadcastAudioReceiverNode.js.map +1 -0
  46. package/lib/module/index.js +5 -0
  47. package/lib/module/index.js.map +1 -1
  48. package/lib/typescript/classes/HMSAudioFilePlayerNode.d.ts +12 -0
  49. package/lib/typescript/classes/HMSAudioMixerSource.d.ts +8 -0
  50. package/lib/typescript/classes/HMSAudioNode.d.ts +6 -0
  51. package/lib/typescript/classes/HMSAudioTrackSettings.d.ts +4 -2
  52. package/lib/typescript/classes/HMSException.d.ts +8 -6
  53. package/lib/typescript/classes/HMSMicNode.d.ts +5 -0
  54. package/lib/typescript/classes/HMSSDK.d.ts +26 -26
  55. package/lib/typescript/classes/HMSScreenBroadcastAudioReceiverNode.d.ts +4 -0
  56. package/lib/typescript/index.d.ts +5 -0
  57. package/package.json +1 -1
  58. package/react-native-hms.podspec +2 -2
  59. package/src/classes/HMSAudioFilePlayerNode.ts +75 -0
  60. package/src/classes/HMSAudioMixerSource.ts +15 -0
  61. package/src/classes/HMSAudioNode.ts +12 -0
  62. package/src/classes/HMSAudioTrackSettings.ts +7 -4
  63. package/src/classes/HMSEncoder.ts +1 -0
  64. package/src/classes/HMSException.ts +9 -6
  65. package/src/classes/HMSMicNode.ts +23 -0
  66. package/src/classes/HMSSDK.tsx +38 -46
  67. package/src/classes/HMSScreenBroadcastAudioReceiverNode.ts +7 -0
  68. package/src/index.ts +5 -0
@@ -19,10 +19,10 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
19
19
  var rtcStatsAttached = false
20
20
  var recentPreviewTracks: [HMSTrack]? = []
21
21
  private var reconnectingStage: Bool = false
22
- private var preferredExtension: String? = nil
23
- private var systemBroadcastPicker: RPSystemBroadcastPickerView? = nil
24
- private var startScreenshareResolve: RCTPromiseResolveBlock? = nil
25
- private var stopScreenshareResolve: RCTPromiseResolveBlock? = nil
22
+ private var preferredExtension: String?
23
+ private var systemBroadcastPicker: RPSystemBroadcastPickerView?
24
+ private var startScreenshareResolve: RCTPromiseResolveBlock?
25
+ private var stopScreenshareResolve: RCTPromiseResolveBlock?
26
26
  private var isScreenShared: Bool? = false
27
27
  private var previewInProgress = false
28
28
 
@@ -46,16 +46,15 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
46
46
 
47
47
  // MARK: - Setup
48
48
  init(data: NSDictionary?, delegate manager: HMSManager?, uid id: String) {
49
- let trackSettings = data?.value(forKey: "trackSettings") as? NSDictionary
50
- let videoSettings = HMSHelper.getLocalVideoSettings(trackSettings?.value(forKey: "video") as? NSDictionary)
51
- let audioSettings = HMSHelper.getLocalAudioSettings(trackSettings?.value(forKey: "audio") as? NSDictionary)
52
49
  preferredExtension = data?.value(forKey: "preferredExtension") as? String
53
50
 
54
51
  DispatchQueue.main.async { [weak self] in
55
- let hmsTrackSettings = HMSTrackSettings(videoSettings: videoSettings, audioSettings: audioSettings)
56
52
  self?.hms = HMSSDK.build { sdk in
57
- sdk.trackSettings = hmsTrackSettings
58
53
  sdk.appGroup = data?.value(forKey: "appGroup") as? String
54
+ let trackSettings = data?.value(forKey: "trackSettings") as? NSDictionary
55
+ let videoSettings = HMSHelper.getLocalVideoSettings(trackSettings?.value(forKey: "video") as? NSDictionary)
56
+ let audioSettings = HMSHelper.getLocalAudioSettings(trackSettings?.value(forKey: "audio") as? NSDictionary, sdk, self?.delegate, id)
57
+ sdk.trackSettings = HMSTrackSettings(videoSettings: videoSettings, audioSettings: audioSettings)
59
58
  }
60
59
  }
61
60
  self.delegate = manager
@@ -66,8 +65,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
66
65
  func preview(_ credentials: NSDictionary) {
67
66
 
68
67
  guard !previewInProgress else {
69
- let error = HMSError(id: "PREVIEW", code: .joinErrorServer, message: "PREVIEW_IS_IN_PROGRESS", params: ["function": #function, "credentials": credentials])
70
- on(error: error)
68
+ delegate?.emitEvent(ON_ERROR, ["error": ["code": 5000, "description": "Preview is in progress", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
71
69
  return
72
70
  }
73
71
 
@@ -81,7 +79,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
81
79
 
82
80
  let metadata = credentials.value(forKey: "metadata") as? String
83
81
  let captureNetworkQualityInPreview = credentials.value(forKey: "captureNetworkQualityInPreview") as? Bool ?? false
84
-
82
+
85
83
  DispatchQueue.main.async { [weak self] in
86
84
  guard let strongSelf = self else { return }
87
85
  if let endpoint = credentials.value(forKey: "endpoint") as? String {
@@ -94,7 +92,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
94
92
  strongSelf.previewInProgress = true
95
93
  }
96
94
  }
97
-
95
+
98
96
  func previewForRole(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
99
97
  guard let role = data.value(forKey: "role") as? String
100
98
  else {
@@ -103,26 +101,26 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
103
101
  reject?(errorMessage, errorMessage, nil)
104
102
  return
105
103
  }
106
-
104
+
107
105
  let roleObj = HMSHelper.getRoleFromRoleName(role, roles: hms?.roles)
108
-
106
+
109
107
  if let extractedRole = roleObj {
110
108
  hms?.preview(role: extractedRole, completion: { tracks, error in
111
- if (error != nil) {
109
+ if error != nil {
112
110
  delegate?.emitEvent(ON_ERROR, ["error": HMSDecoder.getError(error), "id": id])
113
- reject?(error?.message, error?.localizedDescription, nil)
111
+ reject?(error?.localizedDescription, error?.localizedDescription, nil)
114
112
  return
115
113
  }
116
114
  self.recentPreviewTracks = tracks
117
-
115
+
118
116
  let decodedTracks = HMSDecoder.getAllTracks(tracks ?? [])
119
-
117
+
120
118
  resolve?(["success": true, "tracks": decodedTracks])
121
119
  return
122
120
  })
123
121
  }
124
122
  }
125
-
123
+
126
124
  func cancelPreview() {
127
125
  self.recentPreviewTracks = []
128
126
  hms?.cancelPreview()
@@ -131,8 +129,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
131
129
  func join(_ credentials: NSDictionary) {
132
130
 
133
131
  guard !previewInProgress else {
134
- let error = HMSError(id: "PREVIEW", code: .joinErrorServer, message: "PREVIEW_IS_IN_PROGRESS", params: ["function": #function, "credentials": credentials])
135
- on(error: error)
132
+ delegate?.emitEvent("ON_ERROR", ["error": ["code": 5000, "description": "Preview is in progress", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
136
133
  return
137
134
  }
138
135
 
@@ -196,7 +193,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
196
193
  }
197
194
 
198
195
  func leave(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
199
- if(reconnectingStage) {
196
+ if reconnectingStage {
200
197
  reject?("Still in reconnecting stage", "Still in reconnecting stage", nil)
201
198
  } else {
202
199
  DispatchQueue.main.async { [weak self] in
@@ -238,7 +235,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
238
235
  return
239
236
  } else {
240
237
  self?.delegate?.emitEvent("ON_ERROR", ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
241
- reject?(error?.message, error?.localizedDescription, nil)
238
+ reject?(error?.localizedDescription, error?.localizedDescription, nil)
242
239
  return
243
240
  }
244
241
  })
@@ -264,7 +261,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
264
261
  return
265
262
  } else {
266
263
  self?.delegate?.emitEvent("ON_ERROR", ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
267
- reject?(error?.message, error?.localizedDescription, nil)
264
+ reject?(error?.localizedDescription, error?.localizedDescription, nil)
268
265
  return
269
266
  }
270
267
  })
@@ -290,7 +287,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
290
287
  return
291
288
  } else {
292
289
  self?.delegate?.emitEvent("ON_ERROR", ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
293
- reject?(error?.message, error?.localizedDescription, nil)
290
+ reject?(error?.localizedDescription, error?.localizedDescription, nil)
294
291
  return
295
292
  }
296
293
  })
@@ -314,7 +311,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
314
311
  resolve?(["success": success])
315
312
  } else {
316
313
  self?.delegate?.emitEvent("ON_ERROR", ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
317
- reject?(error?.message, error?.localizedDescription, nil)
314
+ reject?(error?.localizedDescription, error?.localizedDescription, nil)
318
315
  }
319
316
  })
320
317
  self?.recentPreviewTracks = []
@@ -345,7 +342,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
345
342
  resolve?(["success": success])
346
343
  } else {
347
344
  self?.delegate?.emitEvent("ON_ERROR", ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
348
- reject?(error?.message, error?.localizedDescription, nil)
345
+ reject?(error?.localizedDescription, error?.localizedDescription, nil)
349
346
  }
350
347
  })
351
348
  }
@@ -366,9 +363,9 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
366
363
  DispatchQueue.main.async { [weak self] in
367
364
  guard let remotePeers = self?.hms?.remotePeers,
368
365
  let track = HMSHelper.getTrackFromTrackId(trackId, remotePeers)
369
- else {
366
+ else {
370
367
  reject?("TRACK_NOT_FOUND", "TRACK_NOT_FOUND", nil)
371
- return
368
+ return
372
369
  }
373
370
 
374
371
  self?.hms?.changeTrackState(for: track, mute: mute, completion: { success, error in
@@ -376,7 +373,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
376
373
  resolve?(["success": success])
377
374
  } else {
378
375
  self?.delegate?.emitEvent("ON_ERROR", ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
379
- reject?(error?.message, error?.localizedDescription, nil)
376
+ reject?(error?.localizedDescription, error?.localizedDescription, nil)
380
377
  }
381
378
  })
382
379
  }
@@ -411,7 +408,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
411
408
  resolve?(["success": success])
412
409
  } else {
413
410
  self?.delegate?.emitEvent("ON_ERROR", ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
414
- reject?(error?.message, error?.localizedDescription, nil)
411
+ reject?(error?.localizedDescription, error?.localizedDescription, nil)
415
412
  }
416
413
  })
417
414
  }
@@ -434,9 +431,8 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
434
431
  guard let remotePeers = self?.hms?.remotePeers,
435
432
  let track = HMSHelper.getTrackFromTrackId(trackId, remotePeers)
436
433
  else {
437
- let error = HMSError(id: "120", code: HMSErrorCode.genericErrorUnknown, message: "TRACK_NOT_FOUND")
438
- strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["error": HMSDecoder.getError(error), "id": strongSelf.id])
439
- reject?("TRACK_NOT_FOUND", "TRACK_NOT_FOUND", nil)
434
+ strongSelf.delegate?.emitEvent("ON_ERROR", ["error": ["code": 6002, "description": "Track not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": strongSelf.id])
435
+ reject?("Track not found", "Track not found", nil)
440
436
  return
441
437
  }
442
438
  let mute = track.isMute()
@@ -464,9 +460,9 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
464
460
 
465
461
  guard let remotePeers = self?.hms?.remotePeers,
466
462
  let peer = HMSHelper.getRemotePeerFromPeerId(peerId, remotePeers: remotePeers)
467
- else {
463
+ else {
468
464
  reject?("PEER_NOT_FOUND", "PEER_NOT_FOUND", nil)
469
- return
465
+ return
470
466
  }
471
467
 
472
468
  self?.hms?.removePeer(peer, reason: reason ?? "Removed from room", completion: { success, error in
@@ -474,7 +470,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
474
470
  resolve?(["success": success])
475
471
  } else {
476
472
  self?.delegate?.emitEvent("ON_ERROR", ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
477
- reject?(error?.message, error?.localizedDescription, nil)
473
+ reject?(error?.localizedDescription, error?.localizedDescription, nil)
478
474
  }
479
475
  })
480
476
  }
@@ -497,7 +493,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
497
493
  resolve?(["success": success])
498
494
  } else {
499
495
  self?.delegate?.emitEvent("ON_ERROR", ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
500
- reject?(error?.message, error?.localizedDescription, nil)
496
+ reject?(error?.localizedDescription, error?.localizedDescription, nil)
501
497
  }
502
498
  })
503
499
  }
@@ -582,7 +578,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
582
578
  return
583
579
  } else {
584
580
  self.delegate?.emitEvent(self.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self.id])
585
- reject?(error?.message, error?.localizedDescription, nil)
581
+ reject?(error?.localizedDescription, error?.localizedDescription, nil)
586
582
  return
587
583
  }
588
584
  })
@@ -606,8 +602,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
606
602
  if remoteAudioTrack != nil {
607
603
  remoteAudioTrack?.setVolume(volume)
608
604
  } else {
609
- let error = HMSError(id: "125", code: HMSErrorCode.genericErrorUnknown, message: "TRACK_NOT_FOUND")
610
- strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["error": HMSDecoder.getError(error), "id": strongSelf.id])
605
+ strongSelf.delegate?.emitEvent("ON_ERROR", ["error": ["code": 6002, "description": "Track not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": strongSelf.id])
611
606
  }
612
607
  }
613
608
  }
@@ -628,9 +623,8 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
628
623
  if let meetLink = URL(string: meetingString) {
629
624
  meetingUrl = meetLink
630
625
  } else {
631
- let error = HMSError(id: "127", code: HMSErrorCode.genericErrorUnknown, message: "INVALID_MEETING_URL_PASSED")
632
- delegate?.emitEvent(ON_ERROR, ["error": HMSDecoder.getError(error), "id": id])
633
- reject?("INVALID_MEETING_URL_PASSED", "INVALID_MEETING_URL_PASSED", nil)
626
+ delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": "Invalid meeting url passed", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
627
+ reject?("Invalid meeting url passed", "Invalid meeting url passed", nil)
634
628
  }
635
629
 
636
630
  let URLs = HMSHelper.getRtmpUrls(rtmpStrings)
@@ -648,7 +642,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
648
642
  return
649
643
  } else {
650
644
  self.delegate?.emitEvent(self.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self.id])
651
- reject?(error?.message, error?.localizedDescription, nil)
645
+ reject?(error?.localizedDescription, error?.localizedDescription, nil)
652
646
  return
653
647
  }
654
648
  })
@@ -667,7 +661,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
667
661
  return
668
662
  } else {
669
663
  self.delegate?.emitEvent(self.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self.id])
670
- reject?(error?.message, error?.localizedDescription, nil)
664
+ reject?(error?.localizedDescription, error?.localizedDescription, nil)
671
665
  return
672
666
  }
673
667
  })
@@ -675,9 +669,9 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
675
669
 
676
670
  func startHLSStreaming(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
677
671
  let recordConfig = HMSHelper.getHlsRecordingConfig(data.value(forKey: "hlsRecordingConfig") as? NSDictionary)
678
- let hlsMeetingUrlVariant = HMSHelper.getHMSHLSMeetingURLVariants(data.value(forKey: "meetingURLVariants") as? [[String : Any]])
679
- var config: HMSHLSConfig? = nil
680
- if(!hlsMeetingUrlVariant.isEmpty || recordConfig !== nil){
672
+ let hlsMeetingUrlVariant = HMSHelper.getHMSHLSMeetingURLVariants(data.value(forKey: "meetingURLVariants") as? [[String: Any]])
673
+ var config: HMSHLSConfig?
674
+ if !hlsMeetingUrlVariant.isEmpty || recordConfig !== nil {
681
675
  config = HMSHLSConfig(variants: hlsMeetingUrlVariant, recording: recordConfig)
682
676
  }
683
677
 
@@ -693,7 +687,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
693
687
  return
694
688
  } else {
695
689
  self.delegate?.emitEvent(self.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self.id])
696
- reject?(error?.message, error?.localizedDescription, nil)
690
+ reject?(error?.localizedDescription, error?.localizedDescription, nil)
697
691
  return
698
692
  }
699
693
  })
@@ -712,12 +706,12 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
712
706
  return
713
707
  } else {
714
708
  self.delegate?.emitEvent(self.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self.id])
715
- reject?(error?.message, error?.localizedDescription, nil)
709
+ reject?(error?.localizedDescription, error?.localizedDescription, nil)
716
710
  return
717
711
  }
718
712
  })
719
713
  }
720
-
714
+
721
715
  func changeName(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
722
716
  guard let name = data.value(forKey: "name") as? String
723
717
  else {
@@ -732,14 +726,14 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
732
726
  resolve?(["success": success])
733
727
  } else {
734
728
  self.delegate?.emitEvent(self.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self.id])
735
- reject?(error?.message, error?.localizedDescription, nil)
729
+ reject?(error?.localizedDescription, error?.localizedDescription, nil)
736
730
  }
737
731
  }
738
732
  }
739
-
733
+
740
734
  func remoteMuteAllAudio(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
741
735
  let allAudioTracks = HMSUtilities.getAllAudioTracks(in: (self.hms?.room)!!)
742
- var customError: HMSError? = nil
736
+ var customError: Error?
743
737
  for audioTrack in allAudioTracks {
744
738
  self.hms?.changeTrackState(for: audioTrack, mute: true, completion: { success, error in
745
739
  if success {
@@ -748,10 +742,10 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
748
742
  }
749
743
  })
750
744
  }
751
- if (customError === nil) {
745
+ if customError == nil {
752
746
  resolve?(["success": true])
753
747
  } else {
754
- reject?(customError?.message, customError?.localizedDescription, nil)
748
+ reject?(customError?.localizedDescription, customError?.localizedDescription, nil)
755
749
  }
756
750
  }
757
751
 
@@ -775,20 +769,19 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
775
769
 
776
770
  self.delegate?.emitEvent(ON_PEER_UPDATE, ["event": ON_PEER_UPDATE, "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData])
777
771
  }
778
-
772
+
779
773
  func enableRTCStats() {
780
774
  rtcStatsAttached = true
781
775
  }
782
-
776
+
783
777
  func disableRTCStats() {
784
778
  rtcStatsAttached = false
785
779
  }
786
780
 
787
781
  func startScreenshare(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
788
782
  guard let preferredExtension = preferredExtension else {
789
- let error = HMSError(id: "103", code: .genericErrorUnknown, message: "Could not start Screen share, preferredExtension not passed in Build Method", params: ["function": #function])
790
- on(error: error)
791
- reject?(error.message, error.localizedDescription, nil)
783
+ delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": "Could not start screen share, preferredExtension not passed in Build method", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
784
+ reject?("Could not start screen share, preferredExtension not passed in Build method", "Could not start screen share, preferredExtension not passed in Build method", nil)
792
785
  return
793
786
  }
794
787
  DispatchQueue.main.async { [weak self] in
@@ -797,7 +790,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
797
790
  self?.systemBroadcastPicker!.preferredExtension = preferredExtension
798
791
  self?.systemBroadcastPicker!.showsMicrophoneButton = false
799
792
  }
800
-
793
+
801
794
  for view in self!.systemBroadcastPicker!.subviews {
802
795
  if let button = view as? UIButton {
803
796
  button.sendActions(for: .allEvents)
@@ -806,12 +799,11 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
806
799
  self?.startScreenshareResolve = resolve
807
800
  }
808
801
  }
809
-
802
+
810
803
  func stopScreenshare(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
811
804
  guard let preferredExtension = preferredExtension else {
812
- let error = HMSError(id: "103", code: .genericErrorUnknown, message: "Could not start Screen share, preferredExtension not passed in Build Method", params: ["function": #function])
813
- on(error: error)
814
- reject?(error.message, error.localizedDescription, nil)
805
+ delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": "Could not start screen share, preferredExtension not passed in Build method", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
806
+ reject?("Could not start screen share, preferredExtension not passed in Build method", "Could not start screen share, preferredExtension not passed in Build method", nil)
815
807
  return
816
808
  }
817
809
  DispatchQueue.main.async { [weak self] in
@@ -820,7 +812,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
820
812
  self?.systemBroadcastPicker!.preferredExtension = preferredExtension
821
813
  self?.systemBroadcastPicker!.showsMicrophoneButton = false
822
814
  }
823
-
815
+
824
816
  for view in self!.systemBroadcastPicker!.subviews {
825
817
  if let button = view as? UIButton {
826
818
  button.sendActions(for: .allEvents)
@@ -829,11 +821,167 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
829
821
  self?.stopScreenshareResolve = resolve
830
822
  }
831
823
  }
832
-
824
+
833
825
  func isScreenShared(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
834
826
  resolve?(isScreenShared)
835
827
  }
836
828
 
829
+ func playAudioShare(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
830
+ guard let fileUrl = data.value(forKey: "fileUrl") as? String,
831
+ let audioNodeName = data.value(forKey: "audioNode") as? String,
832
+ let audioMixerSourceMap = HMSHelper.getAudioMixerSourceMap(),
833
+ let playerNode = audioMixerSourceMap[audioNodeName]
834
+ else {
835
+ let errorMessage = "playAudioShare: " + HMSHelper.getUnavailableRequiredKey(data, ["audioNode", "fileUrl"])
836
+ emitRequiredKeysError(errorMessage)
837
+ reject?(errorMessage, errorMessage, nil)
838
+ return
839
+ }
840
+ let loops = data.value(forKey: "loops") as? Bool ?? false
841
+ let interrupts = data.value(forKey: "interrupts") as? Bool ?? false
842
+ if let audioFilePlayerNode = playerNode as? HMSAudioFilePlayerNode {
843
+ if let url = URL(string: fileUrl) {
844
+ do {
845
+ try audioFilePlayerNode.play(fileUrl: url, loops: loops, interrupts: interrupts)
846
+ resolve?(["success": true])
847
+ } catch {
848
+ delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": error.localizedDescription, "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
849
+ reject?(error.localizedDescription, error.localizedDescription, nil)
850
+ }
851
+ } else {
852
+ delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": "Incorrect url", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
853
+ reject?("Incorrect URL", "Incorrect URL", nil)
854
+ }
855
+ } else {
856
+ delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": "AudioFilePlayerNode not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
857
+ reject?("AudioFilePlayerNode not found", "AudioFilePlayerNode not found", nil)
858
+ }
859
+ }
860
+
861
+ func setAudioShareVolume(_ data: NSDictionary) {
862
+ guard let volume = data.value(forKey: "volume") as? NSNumber,
863
+ let audioNodeName = data.value(forKey: "audioNode") as? String,
864
+ let audioMixerSourceMap = HMSHelper.getAudioMixerSourceMap(),
865
+ let playerNode = audioMixerSourceMap[audioNodeName]
866
+ else {
867
+ let errorMessage = "setAudioShareVolume: " + HMSHelper.getUnavailableRequiredKey(data, ["audioNode", "volume"])
868
+ emitRequiredKeysError(errorMessage)
869
+ return
870
+ }
871
+ if let audioMicNode = playerNode as? HMSMicNode {
872
+ audioMicNode.volume = volume.floatValue
873
+ }
874
+ if let audioFilePlayerNode = playerNode as? HMSAudioFilePlayerNode {
875
+ audioFilePlayerNode.volume = volume.floatValue
876
+ }
877
+ }
878
+
879
+ func stopAudioShare(_ data: NSDictionary) {
880
+ guard let audioNodeName = data.value(forKey: "audioNode") as? String,
881
+ let audioMixerSourceMap = HMSHelper.getAudioMixerSourceMap(),
882
+ let playerNode = audioMixerSourceMap[audioNodeName]
883
+ else {
884
+ let errorMessage = "stopAudioShare: " + HMSHelper.getUnavailableRequiredKey(data, ["audioNode"])
885
+ emitRequiredKeysError(errorMessage)
886
+ return
887
+ }
888
+ if let audioFilePlayerNode = playerNode as? HMSAudioFilePlayerNode {
889
+ audioFilePlayerNode.stop()
890
+ } else {
891
+ delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": "AudioFilePlayerNode not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
892
+ }
893
+ }
894
+
895
+ func resumeAudioShare(_ data: NSDictionary) {
896
+ guard let audioNodeName = data.value(forKey: "audioNode") as? String,
897
+ let audioMixerSourceMap = HMSHelper.getAudioMixerSourceMap(),
898
+ let playerNode = audioMixerSourceMap[audioNodeName]
899
+ else {
900
+ let errorMessage = "resumeAudioShare: " + HMSHelper.getUnavailableRequiredKey(data, ["audioNode"])
901
+ emitRequiredKeysError(errorMessage)
902
+ return
903
+ }
904
+ if let audioFilePlayerNode = playerNode as? HMSAudioFilePlayerNode {
905
+ do {
906
+ try audioFilePlayerNode.resume()
907
+ } catch {
908
+ delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": error.localizedDescription, "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
909
+ }
910
+ } else {
911
+ delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": "AudioFilePlayerNode not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
912
+ }
913
+ }
914
+
915
+ func pauseAudioShare(_ data: NSDictionary) {
916
+ guard let audioNodeName = data.value(forKey: "audioNode") as? String,
917
+ let audioMixerSourceMap = HMSHelper.getAudioMixerSourceMap(),
918
+ let playerNode = audioMixerSourceMap[audioNodeName]
919
+ else {
920
+ let errorMessage = "pauseAudioShare: " + HMSHelper.getUnavailableRequiredKey(data, ["audioNode"])
921
+ emitRequiredKeysError(errorMessage)
922
+ return
923
+ }
924
+ if let audioFilePlayerNode = playerNode as? HMSAudioFilePlayerNode {
925
+ audioFilePlayerNode.pause()
926
+ } else {
927
+ delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": "AudioFilePlayerNode not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
928
+ }
929
+ }
930
+
931
+ func audioShareIsPlaying(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
932
+ guard let audioNodeName = data.value(forKey: "audioNode") as? String,
933
+ let audioMixerSourceMap = HMSHelper.getAudioMixerSourceMap(),
934
+ let playerNode = audioMixerSourceMap[audioNodeName]
935
+ else {
936
+ let errorMessage = "pauseAudioShare: " + HMSHelper.getUnavailableRequiredKey(data, ["audioNode"])
937
+ emitRequiredKeysError(errorMessage)
938
+ reject?(errorMessage, errorMessage, nil)
939
+ return
940
+ }
941
+ if let audioFilePlayerNode = playerNode as? HMSAudioFilePlayerNode {
942
+ resolve?(audioFilePlayerNode.isPlaying)
943
+ } else {
944
+ delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": "AudioFilePlayerNode not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
945
+ reject?("AudioFilePlayerNode not found", "AudioFilePlayerNode not found", nil)
946
+ }
947
+ }
948
+
949
+ func audioShareCurrentTime(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
950
+ guard let audioNodeName = data.value(forKey: "audioNode") as? String,
951
+ let audioMixerSourceMap = HMSHelper.getAudioMixerSourceMap(),
952
+ let playerNode = audioMixerSourceMap[audioNodeName]
953
+ else {
954
+ let errorMessage = "pauseAudioShare: " + HMSHelper.getUnavailableRequiredKey(data, ["audioNode"])
955
+ emitRequiredKeysError(errorMessage)
956
+ reject?(errorMessage, errorMessage, nil)
957
+ return
958
+ }
959
+ if let audioFilePlayerNode = playerNode as? HMSAudioFilePlayerNode {
960
+ resolve?(audioFilePlayerNode.currentTime)
961
+ } else {
962
+ delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": "AudioFilePlayerNode not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
963
+ reject?("AudioFilePlayerNode not found", "AudioFilePlayerNode not found", nil)
964
+ }
965
+ }
966
+
967
+ func audioShareDuration(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
968
+ guard let audioNodeName = data.value(forKey: "audioNode") as? String,
969
+ let audioMixerSourceMap = HMSHelper.getAudioMixerSourceMap(),
970
+ let playerNode = audioMixerSourceMap[audioNodeName]
971
+ else {
972
+ let errorMessage = "pauseAudioShare: " + HMSHelper.getUnavailableRequiredKey(data, ["audioNode"])
973
+ emitRequiredKeysError(errorMessage)
974
+ reject?(errorMessage, errorMessage, nil)
975
+ return
976
+ }
977
+ if let audioFilePlayerNode = playerNode as? HMSAudioFilePlayerNode {
978
+ resolve?(audioFilePlayerNode.duration)
979
+ } else {
980
+ delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": "AudioFilePlayerNode not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
981
+ reject?("AudioFilePlayerNode not found", "AudioFilePlayerNode not found", nil)
982
+ }
983
+ }
984
+
837
985
  // MARK: - HMS SDK Delegate Callbacks
838
986
  func on(join room: HMSRoom) {
839
987
  let roomData = HMSDecoder.getHmsRoom(room)
@@ -898,11 +1046,11 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
898
1046
  stopScreenshareResolve = nil
899
1047
  }
900
1048
  }
901
-
1049
+
902
1050
  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])
903
1051
  }
904
1052
 
905
- func on(error: HMSError) {
1053
+ func on(error: Error) {
906
1054
  if previewInProgress { previewInProgress = false }
907
1055
  self.delegate?.emitEvent(ON_ERROR, ["error": HMSDecoder.getError(error), "id": id])
908
1056
  }
@@ -921,7 +1069,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
921
1069
 
922
1070
  func onReconnecting() {
923
1071
  reconnectingStage = true
924
- self.delegate?.emitEvent(RECONNECTING, ["event": RECONNECTING, "error": ["code": HMSErrorCode.websocketConnectionLost, "description": "Software caused connection abort", "localizedDescription": "Network connection lost ", "debugDescription": "Network connection lost ", "message": "Network connection lost ", "name": "WebSocketConnectionLost", "action": "NONE", "id": 101], "id": self.id ])
1072
+ self.delegate?.emitEvent(RECONNECTING, ["event": RECONNECTING, "error": ["code": 1003, "description": "Network connection lost ", "isTerminal": false, "canRetry": true], "id": self.id ])
925
1073
  }
926
1074
 
927
1075
  func onReconnected() {
@@ -950,59 +1098,59 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
950
1098
  let roomEnded = notification.roomEnded
951
1099
  self.delegate?.emitEvent(ON_REMOVED_FROM_ROOM, ["event": ON_REMOVED_FROM_ROOM, "id": self.id, "requestedBy": decodedRequestedBy as Any, "reason": reason, "roomEnded": roomEnded ])
952
1100
  }
953
-
1101
+
954
1102
  func on(rtcStats: HMSRTCStatsReport) {
955
- if (!rtcStatsAttached) {
1103
+ if !rtcStatsAttached {
956
1104
  return
957
1105
  }
958
1106
  let video = HMSDecoder.getHMSRTCStats(rtcStats.video)
959
1107
  let audio = HMSDecoder.getHMSRTCStats(rtcStats.audio)
960
1108
  let combined = HMSDecoder.getHMSRTCStats(rtcStats.combined)
961
-
1109
+
962
1110
  self.delegate?.emitEvent(ON_RTC_STATS, ["video": video, "audio": audio, "combined": combined, "id": self.id])
963
1111
  }
964
-
1112
+
965
1113
  func on(localAudioStats: HMSLocalAudioStats, track: HMSLocalAudioTrack, peer: HMSPeer) {
966
- if (!rtcStatsAttached) {
1114
+ if !rtcStatsAttached {
967
1115
  return
968
1116
  }
969
1117
  let localStats = HMSDecoder.getLocalAudioStats(localAudioStats)
970
1118
  let localTrack = HMSDecoder.getHmsLocalAudioTrack(track)
971
1119
  let decodedPeer = HMSDecoder.getHmsPeer(peer)
972
-
1120
+
973
1121
  self.delegate?.emitEvent(ON_LOCAL_AUDIO_STATS, ["localAudioStats": localStats, "track": localTrack, "peer": decodedPeer, "id": self.id])
974
1122
  }
975
-
1123
+
976
1124
  func on(localVideoStats: HMSLocalVideoStats, track: HMSLocalVideoTrack, peer: HMSPeer) {
977
- if (!rtcStatsAttached) {
1125
+ if !rtcStatsAttached {
978
1126
  return
979
1127
  }
980
1128
  let localStats = HMSDecoder.getLocalVideoStats(localVideoStats)
981
1129
  let decodedPeer = HMSDecoder.getHmsPeer(peer)
982
1130
  let localTrack = HMSDecoder.getHmsLocalVideoTrack(track)
983
-
1131
+
984
1132
  self.delegate?.emitEvent(ON_LOCAL_VIDEO_STATS, ["localVideoStats": localStats, "track": localTrack, "peer": decodedPeer, "id": self.id])
985
1133
  }
986
-
1134
+
987
1135
  func on(remoteAudioStats: HMSRemoteAudioStats, track: HMSRemoteAudioTrack, peer: HMSPeer) {
988
- if (!rtcStatsAttached) {
1136
+ if !rtcStatsAttached {
989
1137
  return
990
1138
  }
991
1139
  let remoteStats = HMSDecoder.getRemoteAudioStats(remoteAudioStats)
992
1140
  let remoteTrack = HMSDecoder.getHMSRemoteAudioTrack(track)
993
1141
  let decodedPeer = HMSDecoder.getHmsPeer(peer)
994
-
1142
+
995
1143
  self.delegate?.emitEvent(ON_REMOTE_AUDIO_STATS, ["remoteAudioStats": remoteStats, "track": remoteTrack, "peer": decodedPeer, "id": self.id])
996
1144
  }
997
-
1145
+
998
1146
  func on(remoteVideoStats: HMSRemoteVideoStats, track: HMSRemoteVideoTrack, peer: HMSPeer) {
999
- if (!rtcStatsAttached) {
1147
+ if !rtcStatsAttached {
1000
1148
  return
1001
1149
  }
1002
1150
  let remoteStats = HMSDecoder.getRemoteVideoStats(remoteVideoStats)
1003
1151
  let decodedPeer = HMSDecoder.getHmsPeer(peer)
1004
1152
  let remoteTrack = HMSDecoder.getHMSRemoteVideoTrack(track)
1005
-
1153
+
1006
1154
  self.delegate?.emitEvent(ON_REMOTE_VIDEO_STATS, ["remoteVideoStats": remoteStats, "track": remoteTrack, "peer": decodedPeer, "id": self.id])
1007
1155
  }
1008
1156
 
@@ -1069,6 +1217,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1069
1217
  }
1070
1218
 
1071
1219
  func emitRequiredKeysError(_ error: String) {
1072
- delegate?.emitEvent(ON_ERROR, ["error": ["code": HMSErrorCode.genericErrorUnknown.rawValue, "description": error, "message": error, "name": "REQUIRED_KEYS_NOT_FOUND", "action": "SEND_ALL_REQUIRED_KEYS", "id": 102, "isTerminal": false], "id": id])
1220
+ delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": error, "isTerminal": false, "canRetry": true], "id": id])
1073
1221
  }
1074
1222
  }