omikit-plugin 3.2.51 → 3.2.52

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.
@@ -39,6 +39,7 @@ let GET_USER_INFO = "GET_USER_INFO"
39
39
  let CALL_STATE_CHANGED = "CALL_STATE_CHANGED"
40
40
  let SPEAKER = "SPEAKER"
41
41
  let MUTED = "MUTED"
42
+ let HOLD = "HOLD"
42
43
  let REMOTE_VIDEO_READY = "REMOTE_VIDEO_READY"
43
44
  let CLICK_MISSED_CALL = "CLICK_MISSED_CALL"
44
45
  let SWITCHBOARD_ANSWER = "SWITCHBOARD_ANSWER"
@@ -6,13 +6,7 @@
6
6
  //
7
7
 
8
8
  #import <Foundation/Foundation.h>
9
-
10
- #if __has_include("omikit_plugin-Swift.h")
11
- #import "omikit_plugin-Swift.h"
12
- #else
13
- #import <omikit_plugin/omikit_plugin-Swift.h>
14
- #endif
15
-
9
+ #import <OmikitPlugin-Swift.h>
16
10
 
17
11
  @implementation OmikitNotification : NSObject
18
12
  + (void)didRecieve:(NSDictionary*) userInfo{
@@ -2,107 +2,122 @@
2
2
 
3
3
  @interface RCT_EXTERN_MODULE(OmikitPlugin, NSObject)
4
4
 
5
- RCT_EXTERN_METHOD(startServices:
6
- (RCTPromiseResolveBlock)resolve
7
- withRejecter:(RCTPromiseRejectBlock)reject)
5
+ // Start services
6
+ RCT_EXTERN_METHOD(startServices:(RCTPromiseResolveBlock)resolve
7
+ rejecter:(RCTPromiseRejectBlock)reject)
8
8
 
9
+ // Configure push notification
9
10
  RCT_EXTERN_METHOD(configPushNotification:(id)data
10
- withResolver:(RCTPromiseResolveBlock)resolve
11
- withRejecter:(RCTPromiseRejectBlock)reject)
11
+ resolver:(RCTPromiseResolveBlock)resolve
12
+ rejecter:(RCTPromiseRejectBlock)reject)
12
13
 
13
- RCT_EXTERN_METHOD(getInitialCall:
14
- (RCTPromiseResolveBlock)resolve
15
- withRejecter:(RCTPromiseRejectBlock)reject)
14
+ // Get initial call
15
+ RCT_EXTERN_METHOD(getInitialCall:(RCTPromiseResolveBlock)resolve
16
+ rejecter:(RCTPromiseRejectBlock)reject)
16
17
 
18
+ // Initialize call with user password
17
19
  RCT_EXTERN_METHOD(initCallWithUserPassword:(id)data
18
- withResolver:(RCTPromiseResolveBlock)resolve
19
- withRejecter:(RCTPromiseRejectBlock)reject)
20
+ resolver:(RCTPromiseResolveBlock)resolve
21
+ rejecter:(RCTPromiseRejectBlock)reject)
20
22
 
23
+ // Initialize call with API key
21
24
  RCT_EXTERN_METHOD(initCallWithApiKey:(id)data
22
- withResolver:(RCTPromiseResolveBlock)resolve
23
- withRejecter:(RCTPromiseRejectBlock)reject)
24
-
25
+ resolver:(RCTPromiseResolveBlock)resolve
26
+ rejecter:(RCTPromiseRejectBlock)reject)
25
27
 
28
+ // Start a call
26
29
  RCT_EXTERN_METHOD(startCall:(id)data
27
- withResolver:(RCTPromiseResolveBlock)resolve
28
- withRejecter:(RCTPromiseRejectBlock)reject)
30
+ resolver:(RCTPromiseResolveBlock)resolve
31
+ rejecter:(RCTPromiseRejectBlock)reject)
29
32
 
33
+ // Start a call with UUID
30
34
  RCT_EXTERN_METHOD(startCallWithUuid:(id)data
31
- withResolver:(RCTPromiseResolveBlock)resolve
32
- withRejecter:(RCTPromiseRejectBlock)reject)
35
+ resolver:(RCTPromiseResolveBlock)resolve
36
+ rejecter:(RCTPromiseRejectBlock)reject)
33
37
 
34
- RCT_EXTERN_METHOD(joinCall:
35
- (RCTPromiseResolveBlock)resolve
36
- withRejecter:(RCTPromiseRejectBlock)reject)
38
+ // Join a call
39
+ RCT_EXTERN_METHOD(joinCall:(RCTPromiseResolveBlock)resolve
40
+ rejecter:(RCTPromiseRejectBlock)reject)
37
41
 
42
+ // End a call
38
43
  RCT_EXTERN_METHOD(endCall:(RCTPromiseResolveBlock)resolve
39
- withRejecter:(RCTPromiseRejectBlock)reject)
44
+ rejecter:(RCTPromiseRejectBlock)reject)
45
+
46
+ // Toggle mute
47
+ RCT_EXTERN_METHOD(toggleMute:(RCTPromiseResolveBlock)resolve
48
+ rejecter:(RCTPromiseRejectBlock)reject)
40
49
 
41
- RCT_EXTERN_METHOD(toggleMute:
42
- (RCTPromiseResolveBlock)resolve
43
- withRejecter:(RCTPromiseRejectBlock)reject)
50
+ // Toggle speaker
51
+ RCT_EXTERN_METHOD(toggleSpeaker:(RCTPromiseResolveBlock)resolve
52
+ rejecter:(RCTPromiseRejectBlock)reject)
44
53
 
45
- RCT_EXTERN_METHOD(toggleSpeaker:
46
- (RCTPromiseResolveBlock)resolve
47
- withRejecter:(RCTPromiseRejectBlock)reject)
54
+ // Toggle hold
55
+ RCT_EXTERN_METHOD(toggleHold:(RCTPromiseResolveBlock)resolve
56
+ rejecter:(RCTPromiseRejectBlock)reject)
48
57
 
58
+ // Send DTMF
49
59
  RCT_EXTERN_METHOD(sendDTMF:(id)data
50
- withResolver: (RCTPromiseResolveBlock)resolve
51
- withRejecter:(RCTPromiseRejectBlock)reject)
60
+ resolver:(RCTPromiseResolveBlock)resolve
61
+ rejecter:(RCTPromiseRejectBlock)reject)
52
62
 
53
- RCT_EXTERN_METHOD(switchOmiCamera:
54
- (RCTPromiseResolveBlock)resolve
55
- withRejecter:(RCTPromiseRejectBlock)reject)
63
+ // Switch camera
64
+ RCT_EXTERN_METHOD(switchOmiCamera:(RCTPromiseResolveBlock)resolve
65
+ rejecter:(RCTPromiseRejectBlock)reject)
56
66
 
57
- RCT_EXTERN_METHOD(toggleOmiVideo:
58
- (RCTPromiseResolveBlock)resolve
59
- withRejecter:(RCTPromiseRejectBlock)reject)
67
+ // Toggle video
68
+ RCT_EXTERN_METHOD(toggleOmiVideo:(RCTPromiseResolveBlock)resolve
69
+ rejecter:(RCTPromiseRejectBlock)reject)
60
70
 
61
- RCT_EXTERN_METHOD(logout:
62
- (RCTPromiseResolveBlock)resolve
63
- withRejecter:(RCTPromiseRejectBlock)reject)
71
+ // Logout
72
+ RCT_EXTERN_METHOD(logout:(RCTPromiseResolveBlock)resolve
73
+ rejecter:(RCTPromiseRejectBlock)reject)
64
74
 
65
- RCT_EXTERN_METHOD(registerVideoEvent:
66
- (RCTPromiseResolveBlock)resolve
67
- withRejecter:(RCTPromiseRejectBlock)reject)
75
+ // Register video event
76
+ RCT_EXTERN_METHOD(registerVideoEvent:(RCTPromiseResolveBlock)resolve
77
+ rejecter:(RCTPromiseRejectBlock)reject)
68
78
 
69
- RCT_EXTERN_METHOD(removeVideoEvent:
70
- (RCTPromiseResolveBlock)resolve
71
- withRejecter:(RCTPromiseRejectBlock)reject)
79
+ // Remove video event
80
+ RCT_EXTERN_METHOD(removeVideoEvent:(RCTPromiseResolveBlock)resolve
81
+ rejecter:(RCTPromiseRejectBlock)reject)
72
82
 
73
- RCT_EXTERN_METHOD(getCurrentUser:
74
- (RCTPromiseResolveBlock)resolve
75
- withRejecter:(RCTPromiseRejectBlock)reject)
83
+ // Get current user
84
+ RCT_EXTERN_METHOD(getCurrentUser:(RCTPromiseResolveBlock)resolve
85
+ rejecter:(RCTPromiseRejectBlock)reject)
76
86
 
77
- RCT_EXTERN_METHOD(getGuestUser:
78
- (RCTPromiseResolveBlock)resolve
79
- withRejecter:(RCTPromiseRejectBlock)reject)
87
+ // Get guest user
88
+ RCT_EXTERN_METHOD(getGuestUser:(RCTPromiseResolveBlock)resolve
89
+ rejecter:(RCTPromiseRejectBlock)reject)
80
90
 
81
- RCT_EXTERN_METHOD(getUserInfo: (id)data
82
- withResolver:(RCTPromiseResolveBlock)resolve
83
- withRejecter:(RCTPromiseRejectBlock)reject)
91
+ // Get user info
92
+ RCT_EXTERN_METHOD(getUserInfo:(id)data
93
+ resolver:(RCTPromiseResolveBlock)resolve
94
+ rejecter:(RCTPromiseRejectBlock)reject)
84
95
 
85
- RCT_EXTERN_METHOD(getAudio:
86
- (RCTPromiseResolveBlock)resolve
87
- withRejecter:(RCTPromiseRejectBlock)reject)
96
+ // Get audio
97
+ RCT_EXTERN_METHOD(getAudio:(RCTPromiseResolveBlock)resolve
98
+ rejecter:(RCTPromiseRejectBlock)reject)
88
99
 
89
- RCT_EXTERN_METHOD(setAudio: (id)data
90
- withResolver:(RCTPromiseResolveBlock)resolve
91
- withRejecter:(RCTPromiseRejectBlock)reject)
100
+ // Set audio
101
+ RCT_EXTERN_METHOD(setAudio:(id)data
102
+ resolver:(RCTPromiseResolveBlock)resolve
103
+ rejecter:(RCTPromiseRejectBlock)reject)
92
104
 
93
- RCT_EXTERN_METHOD(getCurrentAudio:
94
- (RCTPromiseResolveBlock)resolve
95
- withRejecter:(RCTPromiseRejectBlock)reject)
105
+ // Get current audio
106
+ RCT_EXTERN_METHOD(getCurrentAudio:(RCTPromiseResolveBlock)resolve
107
+ rejecter:(RCTPromiseRejectBlock)reject)
96
108
 
109
+ // Transfer call
97
110
  RCT_EXTERN_METHOD(transferCall:(id)data
98
- withResolver:(RCTPromiseResolveBlock)resolve
99
- withRejecter:(RCTPromiseRejectBlock)reject)
111
+ resolver:(RCTPromiseResolveBlock)resolve
112
+ rejecter:(RCTPromiseRejectBlock)reject)
100
113
 
114
+ // Required to run on the main thread
101
115
  + (BOOL)requiresMainQueueSetup
102
116
  {
103
117
  return YES;
104
118
  }
105
119
 
120
+ // Queue to run methods
106
121
  - (dispatch_queue_t)methodQueue {
107
122
  return dispatch_get_main_queue();
108
123
  }
@@ -1,116 +1,290 @@
1
+ import Foundation
2
+ import React
3
+ import OmiKit
4
+
1
5
  @objc(OmikitPlugin)
2
6
  public class OmikitPlugin: RCTEventEmitter {
7
+
8
+ @objc public static var instance : OmikitPlugin!
9
+
10
+ public override init() {
11
+ super.init()
12
+ OmikitPlugin.instance = self
13
+ }
14
+
15
+
16
+ // MARK: - Service Methods
17
+ @objc(startServices:rejecter:)
18
+ func startServices(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) {
19
+ CallManager.shareInstance().registerNotificationCenter(showMissedCall: true)
20
+ resolve(true)
21
+ }
22
+
23
+ @objc(configPushNotification:resolver:rejecter:)
24
+ func configPushNotification(data: Any, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) {
25
+ guard let dataOmi = data as? [String: Any] else {
26
+ reject("INVALID_DATA", "Expected a dictionary with push notification data.", nil)
27
+ return
28
+ }
29
+ CallManager.shareInstance().configNotification(data: dataOmi)
30
+ resolve(true)
31
+ }
32
+
33
+
34
+ @objc(getInitialCall:rejecter:)
35
+ func getInitialCall(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) {
36
+ if let call = CallManager.shareInstance().getAvailableCall() {
37
+ let data: [String: Any] = [
38
+ "callerNumber": call.callerNumber,
39
+ "status": call.lastStatus,
40
+ "muted": call.muted,
41
+ "isVideo": call.isVideo
42
+ ]
43
+ resolve(data)
44
+ } else {
45
+ resolve(nil)
46
+ }
47
+ }
48
+
49
+ // MARK: - Call Methods
50
+ @objc(initCallWithUserPassword:resolver:rejecter:)
51
+ func initCallWithUserPassword(data: Any, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
52
+ guard let dataOmi = data as? [String: Any] else {
53
+ reject("INVALID_DATA", "Expected a dictionary with user credentials.", nil)
54
+ return
55
+ }
56
+ let result = CallManager.shareInstance().initWithUserPasswordEndpoint(params: dataOmi)
57
+ resolve(result)
58
+ }
59
+
60
+
61
+ @objc(initCallWithApiKey:resolver:rejecter:)
62
+ func initCallWithApiKey(data: Any, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) {
63
+ guard let dataOmi = data as? [String: Any] else {
64
+ reject("INVALID_DATA", "Expected a dictionary with API key.", nil)
65
+ return
66
+ }
67
+ let result = CallManager.shareInstance().initWithApiKeyEndpoint(params: dataOmi)
68
+ resolve(result)
69
+ }
70
+
71
+
72
+ @objc(startCall:resolver:rejecter:)
73
+ func startCall(data: Any, resolve: @escaping RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) {
74
+ guard let dataOmi = data as? [String: Any],
75
+ let phoneNumber = dataOmi["phoneNumber"] as? String else {
76
+ reject("INVALID_DATA", "Expected a dictionary with phone number.", nil)
77
+ return
78
+ }
3
79
 
4
- @objc public static var instance: OmikitPlugin!
5
-
6
- override init() {
7
- super.init()
8
- OmikitPlugin.instance = self
80
+ let isVideo = dataOmi["isVideo"] as? Bool ?? false
81
+ CallManager.shareInstance().startCall(phoneNumber, isVideo: isVideo) { callResult in
82
+ resolve(callResult)
9
83
  }
10
-
11
- // MARK: - Helpers
12
- private func validateString(_ value: Any?) -> String? {
13
- guard let string = value as? String, !string.isEmpty else {
14
- return nil
15
- }
16
- return string
84
+ }
85
+
86
+ @objc(startCallWithUuid:resolver:rejecter:)
87
+ func startCallWithUuid(data: Any, resolve: @escaping RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
88
+ if let dataOmi = data as? [String: Any] {
89
+ let uuid = dataOmi["usrUuid"] as! String
90
+ var isVideo = false
91
+ if let isVideoCall = dataOmi["isVideo"] as? Bool {
92
+ isVideo = isVideoCall
93
+ }
94
+ CallManager.shareInstance().startCallWithUuid(uuid, isVideo: isVideo) { callResult in
95
+ resolve(callResult)
96
+ }
17
97
  }
18
-
19
- private func validateDictionary(_ value: Any?) -> [String: Any]? {
20
- return value as? [String: Any]
98
+ }
99
+
100
+ @objc(joinCall:rejecter:)
101
+ func joinCall(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
102
+ CallManager.shareInstance().joinCall()
103
+ resolve(true)
104
+ }
105
+
106
+ @objc(endCall:rejecter:)
107
+ func endCall(resolve:RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) -> Void {
108
+ CallManager.shareInstance().endCall()
109
+ resolve(true)
110
+ }
111
+
112
+ @objc(toggleMute:rejecter:)
113
+ func toggleMute(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
114
+ CallManager.shareInstance().toggleMute()
115
+ if let call = CallManager.shareInstance().getAvailableCall() {
116
+ resolve(call.muted)
21
117
  }
22
-
23
- // MARK: - Native Methods
24
- @objc(startServices:withRejecter:)
25
- func startServices(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) {
26
- CallManager.shareInstance().registerNotificationCenter(showMissedCall: true)
27
- resolve(true)
118
+ sendMuteStatus()
119
+ }
120
+
121
+ @objc(toggleSpeaker:rejecter:)
122
+ func toggleSpeaker(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
123
+ CallManager.shareInstance().toogleSpeaker()
124
+ resolve(CallManager.shareInstance().isSpeaker)
125
+ }
126
+
127
+
128
+ @objc(toggleHold:rejecter:)
129
+ func toggleHold(resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
130
+ let result = CallManager.shareInstance().toggleHold()
131
+ if let call = CallManager.shareInstance().getAvailableCall() {
132
+ resolve(call.onHold)
28
133
  }
29
-
30
- @objc(initCallWithUserPassword:withResolver:withRejecter:)
31
- func initCallWithUserPassword(data: Any, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
32
- guard let dataOmi = validateDictionary(data) else {
33
- reject("E_INVALID_DATA", "Invalid data format", nil)
34
- return
35
- }
36
-
37
- let result = CallManager.shareInstance().initWithUserPasswordEndpoint(params: dataOmi)
38
- resolve(result)
134
+ sendHoldStatus()
135
+ }
136
+
137
+ @objc(sendDTMF:resolver:rejecter:)
138
+ func sendDTMF(data: Any, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
139
+ guard let dataOmi = data as? [String: Any],
140
+ let character = dataOmi["character"] as? String else {
141
+ reject("INVALID_DATA", "Expected a dictionary with a 'character' key.", nil)
142
+ return
39
143
  }
40
-
41
- @objc(initCallWithApiKey:withResolver:withRejecter:)
42
- func initCallWithApiKey(data: Any, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
43
- guard let dataOmi = validateDictionary(data) else {
44
- reject("E_INVALID_DATA", "Invalid data format", nil)
45
- return
46
- }
47
-
48
- let result = CallManager.shareInstance().initWithApiKeyEndpoint(params: dataOmi)
49
- resolve(result)
144
+
145
+ CallManager.shareInstance().sendDTMF(character: character)
146
+ resolve(true)
147
+ }
148
+
149
+
150
+ @objc(switchOmiCamera:rejecter:)
151
+ func switchOmiCamera(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
152
+ CallManager.shareInstance().switchCamera()
153
+ resolve(true)
154
+ }
155
+
156
+ @objc(toggleOmiVideo:rejecter:)
157
+ func toggleOmiVideo(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
158
+ CallManager.shareInstance().toggleCamera()
159
+ resolve(true)
160
+ }
161
+
162
+
163
+ @objc(logout:rejecter:)
164
+ func logout(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
165
+ CallManager.shareInstance().logout()
166
+ resolve(true)
167
+ }
168
+
169
+
170
+ @objc(registerVideoEvent:rejecter:)
171
+ func registerVideoEvent(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
172
+ CallManager.shareInstance().registerVideoEvent()
173
+ resolve(true)
174
+ }
175
+
176
+ @objc(removeVideoEvent:rejecter:)
177
+ func removeVideoEvent(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
178
+ CallManager.shareInstance().removeVideoEvent()
179
+ resolve(true)
180
+ }
181
+
182
+ @objc(getCurrentUser:rejecter:)
183
+ func getCurrentUser(resolve: @escaping RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) -> Void {
184
+ CallManager.shareInstance().getCurrentUser { user in
185
+ resolve(user)
50
186
  }
51
-
52
- @objc(configPushNotification:withResolver:withRejecter:)
53
- func configPushNotification(data: Any, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) {
54
- guard let dataOmi = validateDictionary(data) else {
55
- reject("E_INVALID_DATA", "Invalid data format", nil)
56
- return
57
- }
58
-
59
- CallManager.shareInstance().configNotification(data: dataOmi)
60
- resolve(true)
187
+ }
188
+
189
+ @objc(getGuestUser:rejecter:)
190
+ func getGuestUser(resolve: @escaping RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) -> Void {
191
+ CallManager.shareInstance().getGuestUser { user in
192
+ resolve(user)
61
193
  }
62
-
63
- @objc(startCall:withResolver:withRejecter:)
64
- func startCall(data: Any, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
65
- guard let dataOmi = validateDictionary(data),
66
- let phoneNumber = validateString(dataOmi["phoneNumber"]),
67
- let isVideo = dataOmi["isVideo"] as? Bool else {
68
- reject("E_INVALID_DATA", "Invalid or missing call parameters", nil)
69
- return
70
- }
71
-
72
- CallManager.shareInstance().startCall(phoneNumber, isVideo: isVideo) { callResult in
73
- resolve(callResult)
74
- }
194
+ }
195
+
196
+ @objc(getUserInfor:resolver:rejecter:)
197
+ func getUserInfor(data: Any, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
198
+ guard let phone = data as? String else {
199
+ reject("INVALID_DATA", "Expected a phone number as a string.", nil)
200
+ return
75
201
  }
76
-
77
- @objc(startCallWithUuid:withResolver:withRejecter:)
78
- func startCallWithUuid(data: Any, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
79
- guard let dataOmi = validateDictionary(data),
80
- let uuid = validateString(dataOmi["usrUuid"]),
81
- let isVideo = dataOmi["isVideo"] as? Bool else {
82
- reject("E_INVALID_DATA", "Invalid or missing call parameters", nil)
83
- return
84
- }
85
-
86
- CallManager.shareInstance().startCallWithUuid(uuid, isVideo: isVideo) { callResult in
87
- resolve(callResult)
88
- }
202
+
203
+ CallManager.shareInstance().getUserInfo(phone: phone) { userInfo in
204
+ if userInfo.isEmpty {
205
+ reject("USER_NOT_FOUND", "User not found for phone number: \(phone)", nil)
206
+ } else {
207
+ resolve(userInfo)
208
+ }
89
209
  }
90
-
91
- // MARK: - Utility Functions
92
- public override func supportedEvents() -> [String]! {
93
- return [
94
- "CALL_STATE_CHANGED",
95
- "MUTED",
96
- "SPEAKER",
97
- "REMOTE_VIDEO_READY",
98
- "CLICK_MISSED_CALL",
99
- "SWITCHBOARD_ANSWER",
100
- "CALL_QUALITY",
101
- "AUDIO_CHANGE"
102
- ]
210
+ }
211
+
212
+ // MARK: - Audio Methods
213
+ @objc(getAudio:rejecter:)
214
+ func getAudio(resolve: @escaping RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) {
215
+ let audios = CallManager.shareInstance().getAudioOutputs()
216
+ resolve(audios)
217
+ }
218
+
219
+ @objc(setAudio:resolver:rejecter:)
220
+ func setAudio(data: Any, resolve: @escaping RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) {
221
+ guard let dataOmi = data as? [String: Any],
222
+ let portType = dataOmi["portType"] as? String else {
223
+ reject("INVALID_DATA", "Expected a dictionary with port type.", nil)
224
+ return
103
225
  }
104
-
105
- // Helper to send mute status
106
- func sendMuteStatus() {
107
- if let call = CallManager.shareInstance().getAvailableCall() {
108
- sendEvent(withName: "MUTED", body: call.muted)
109
- }
226
+
227
+ CallManager.shareInstance().setAudioOutputs(portType: portType)
228
+ resolve(true)
229
+ }
230
+
231
+
232
+ @objc(getCurrentAudio:rejecter:)
233
+ func getCurrentAudio(resolve: @escaping RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) {
234
+ let currentAudio = CallManager.shareInstance().getCurrentAudio()
235
+ resolve(currentAudio)
236
+ }
237
+
238
+ func sendMuteStatus() {
239
+ if let call = CallManager.shareInstance().getAvailableCall() {
240
+ sendEvent(withName: MUTED, body: call.muted)
110
241
  }
242
+ }
111
243
 
112
- // Helper to send speaker status
113
- func sendSpeakerStatus() {
114
- sendEvent(withName: "SPEAKER", body: CallManager.shareInstance().isSpeaker)
244
+ func sendHoldStatus() {
245
+ if let call = CallManager.shareInstance().getAvailableCall() {
246
+ sendEvent(withName: HOLD, body: call.onHold)
115
247
  }
248
+ }
249
+
250
+ func sendSpeakerStatus() {
251
+ sendEvent(withName: SPEAKER, body: CallManager.shareInstance().isSpeaker)
252
+ }
253
+
254
+ @objc public func didReceive(data: [String: Any]) {
255
+ if let callerNumber = data["omisdkCallerNumber"] as? String, let isVideo = data["omisdkIsVideo"] as? Bool {
256
+ sendEvent(withName: CLICK_MISSED_CALL, body: [
257
+ "callerNumber": callerNumber,
258
+ "isVideo": isVideo,
259
+ ])
260
+ }
261
+ }
262
+
263
+
264
+ @objc(transferCall:resolver:rejecter:)
265
+ func transferCall(data: Any, resolve: @escaping RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) {
266
+ guard let dataOmi = data as? [String: Any],
267
+ let phoneNumber = dataOmi["phoneNumber"] as? String else {
268
+ reject("INVALID_DATA", "Expected a dictionary with phone number.", nil)
269
+ return
270
+ }
271
+
272
+ CallManager.shareInstance().transferCall(phoneNumber)
273
+ resolve(true)
274
+ }
275
+
276
+
277
+ public override func supportedEvents() -> [String]! {
278
+ return [
279
+ CALL_STATE_CHANGED,
280
+ MUTED,
281
+ HOLD,
282
+ SPEAKER,
283
+ REMOTE_VIDEO_READY,
284
+ CLICK_MISSED_CALL,
285
+ SWITCHBOARD_ANSWER,
286
+ CALL_QUALITY,
287
+ AUDIO_CHANGE,
288
+ ]
289
+ }
116
290
  }
@@ -7,9 +7,6 @@
7
7
  objects = {
8
8
 
9
9
  /* Begin PBXBuildFile section */
10
- 9893BD1F2D2B961D00B84BE1 /* OmikitNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = 9893BD1B2D2B961D00B84BE1 /* OmikitNotification.m */; };
11
- 9893BD202D2B961D00B84BE1 /* OmikitPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = 9893BD1C2D2B961D00B84BE1 /* OmikitPlugin.m */; };
12
- 9893BD212D2B961D00B84BE1 /* OmikitPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9893BD1D2D2B961D00B84BE1 /* OmikitPlugin.swift */; };
13
10
  C861229629A6239000F012BB /* OmikitPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = C861229529A6239000F012BB /* OmikitPlugin.swift */; };
14
11
  F4FF95D7245B92E800C19C63 /* OmikitPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4FF95D6245B92E800C19C63 /* OmikitPlugin.swift */; };
15
12
  /* End PBXBuildFile section */
@@ -28,10 +25,6 @@
28
25
 
29
26
  /* Begin PBXFileReference section */
30
27
  134814201AA4EA6300B7C361 /* libOmikitPlugin.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libOmikitPlugin.a; sourceTree = BUILT_PRODUCTS_DIR; };
31
- 9893BD1A2D2B961D00B84BE1 /* OmikitNotification.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OmikitNotification.h; sourceTree = "<group>"; };
32
- 9893BD1B2D2B961D00B84BE1 /* OmikitNotification.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OmikitNotification.m; sourceTree = "<group>"; };
33
- 9893BD1C2D2B961D00B84BE1 /* OmikitPlugin.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OmikitPlugin.m; sourceTree = "<group>"; };
34
- 9893BD1D2D2B961D00B84BE1 /* OmikitPlugin.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OmikitPlugin.swift; sourceTree = "<group>"; };
35
28
  B3E7B5891CC2AC0600A0062D /* OmikitPlugin.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OmikitPlugin.m; sourceTree = "<group>"; };
36
29
  C861229529A6239000F012BB /* OmikitPlugin.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OmikitPlugin.swift; sourceTree = "<group>"; };
37
30
  C8FBCFCE29A5F49600AA4A22 /* CallManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CallManager.swift; sourceTree = "<group>"; };
@@ -66,7 +59,6 @@
66
59
  58B511D21A9E6C8500147676 = {
67
60
  isa = PBXGroup;
68
61
  children = (
69
- 9893BD1E2D2B961D00B84BE1 /* Library */,
70
62
  C861229529A6239000F012BB /* OmikitPlugin.swift */,
71
63
  C8FBCFCD29A5F49600AA4A22 /* CallProcess */,
72
64
  C8FBCFD429A5F49600AA4A22 /* Constant */,
@@ -78,17 +70,6 @@
78
70
  );
79
71
  sourceTree = "<group>";
80
72
  };
81
- 9893BD1E2D2B961D00B84BE1 /* Library */ = {
82
- isa = PBXGroup;
83
- children = (
84
- 9893BD1A2D2B961D00B84BE1 /* OmikitNotification.h */,
85
- 9893BD1B2D2B961D00B84BE1 /* OmikitNotification.m */,
86
- 9893BD1C2D2B961D00B84BE1 /* OmikitPlugin.m */,
87
- 9893BD1D2D2B961D00B84BE1 /* OmikitPlugin.swift */,
88
- );
89
- path = Library;
90
- sourceTree = "<group>";
91
- };
92
73
  C8FBCFCD29A5F49600AA4A22 /* CallProcess */ = {
93
74
  isa = PBXGroup;
94
75
  children = (
@@ -175,9 +156,6 @@
175
156
  files = (
176
157
  F4FF95D7245B92E800C19C63 /* OmikitPlugin.swift in Sources */,
177
158
  C861229629A6239000F012BB /* OmikitPlugin.swift in Sources */,
178
- 9893BD1F2D2B961D00B84BE1 /* OmikitNotification.m in Sources */,
179
- 9893BD202D2B961D00B84BE1 /* OmikitPlugin.m in Sources */,
180
- 9893BD212D2B961D00B84BE1 /* OmikitPlugin.swift in Sources */,
181
159
  );
182
160
  runOnlyForDeploymentPostprocessing = 0;
183
161
  };
@@ -14,5 +14,6 @@ exports.OmiCallState = OmiCallState;
14
14
  OmiCallState[OmiCallState["connecting"] = 4] = "connecting";
15
15
  OmiCallState[OmiCallState["confirmed"] = 5] = "confirmed";
16
16
  OmiCallState[OmiCallState["disconnected"] = 6] = "disconnected";
17
+ OmiCallState[OmiCallState["hold"] = 7] = "hold";
17
18
  })(OmiCallState || (exports.OmiCallState = OmiCallState = {}));
18
19
  //# sourceMappingURL=omi_call_state.js.map