omikit-plugin 3.2.49 → 3.2.51

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.
@@ -6,7 +6,13 @@
6
6
  //
7
7
 
8
8
  #import <Foundation/Foundation.h>
9
- #import <omikit_plugin-Swift.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
+
10
16
 
11
17
  @implementation OmikitNotification : NSObject
12
18
  + (void)didRecieve:(NSDictionary*) userInfo{
@@ -1,234 +1,116 @@
1
- import Foundation
2
- import React
3
- import OmiKit
4
-
5
1
  @objc(OmikitPlugin)
6
2
  public class OmikitPlugin: RCTEventEmitter {
7
3
 
8
- @objc public static var instance : OmikitPlugin!
4
+ @objc public static var instance: OmikitPlugin!
9
5
 
10
6
  override init() {
11
7
  super.init()
12
8
  OmikitPlugin.instance = self
13
9
  }
14
-
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
17
+ }
18
+
19
+ private func validateDictionary(_ value: Any?) -> [String: Any]? {
20
+ return value as? [String: Any]
21
+ }
22
+
23
+ // MARK: - Native Methods
15
24
  @objc(startServices:withRejecter:)
16
- func startServices(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
25
+ func startServices(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) {
17
26
  CallManager.shareInstance().registerNotificationCenter(showMissedCall: true)
18
27
  resolve(true)
19
28
  }
20
-
21
- @objc(configPushNotification:withResolver:withRejecter:)
22
- func configPushNotification(data: Any, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
23
- if let dataOmi = data as? [String: Any] {
24
- CallManager.shareInstance().configNotification(data: dataOmi)
25
- }
26
- resolve(true)
27
- }
28
-
29
- @objc(getInitialCall:withRejecter:)
30
- func getInitialCall(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
31
- if let call = CallManager.shareInstance().getAvailableCall() {
32
- let data : [String: Any] = [
33
- "callerNumber" : call.callerNumber,
34
- "status": call.lastStatus,
35
- "muted": call.muted,
36
- "isVideo": call.isVideo,
37
- ]
38
- resolve(data)
39
- return
40
- }
41
- resolve(nil)
42
- }
43
-
29
+
44
30
  @objc(initCallWithUserPassword:withResolver:withRejecter:)
45
- func initCallWithUserPassword(data: Any, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
46
- if let dataOmi = data as? [String: Any] {
47
- let result = CallManager.shareInstance().initWithUserPasswordEndpoint(params: dataOmi)
48
- resolve(result)
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
49
35
  }
36
+
37
+ let result = CallManager.shareInstance().initWithUserPasswordEndpoint(params: dataOmi)
38
+ resolve(result)
50
39
  }
51
-
40
+
52
41
  @objc(initCallWithApiKey:withResolver:withRejecter:)
53
- func initCallWithApiKey(data: Any, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
54
- if let dataOmi = data as? [String: Any] {
55
- let result = CallManager.shareInstance().initWithApiKeyEndpoint(params: dataOmi)
56
- resolve(result)
57
- }
58
- }
59
-
60
-
61
- @objc(startCall:withResolver:withRejecter:)
62
- func startCall(data: Any, resolve: @escaping RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
63
- if let dataOmi = data as? [String: Any] {
64
- let phoneNumber = dataOmi["phoneNumber"] as! String
65
- var isVideo = false
66
- if let isVideoCall = dataOmi["isVideo"] as? Bool {
67
- isVideo = isVideoCall
68
- }
69
- CallManager.shareInstance().startCall(phoneNumber, isVideo: isVideo) { callResult in
70
- resolve(callResult)
71
- }
72
- }
73
- }
74
-
75
- @objc(startCallWithUuid:withResolver:withRejecter:)
76
- func startCallWithUuid(data: Any, resolve: @escaping RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
77
- if let dataOmi = data as? [String: Any] {
78
- let uuid = dataOmi["usrUuid"] as! String
79
- var isVideo = false
80
- if let isVideoCall = dataOmi["isVideo"] as? Bool {
81
- isVideo = isVideoCall
82
- }
83
- CallManager.shareInstance().startCallWithUuid(uuid, isVideo: isVideo) { callResult in
84
- resolve(callResult)
85
- }
86
- }
87
- }
88
-
89
- @objc(joinCall:withRejecter:)
90
- func joinCall(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
91
- CallManager.shareInstance().joinCall()
92
- resolve(true)
93
- }
94
-
95
- @objc(endCall:withRejecter:)
96
- func endCall(resolve:RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) -> Void {
97
- CallManager.shareInstance().endCall()
98
- resolve(true)
99
- }
100
-
101
- @objc(toggleMute:withRejecter:)
102
- func toggleMute(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
103
- CallManager.shareInstance().toggleMute()
104
- if let call = CallManager.shareInstance().getAvailableCall() {
105
- resolve(call.muted)
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
106
46
  }
107
- sendMuteStatus()
108
- }
109
-
110
- @objc(toggleSpeaker:withRejecter:)
111
- func toggleSpeaker(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
112
- CallManager.shareInstance().toogleSpeaker()
113
- resolve(CallManager.shareInstance().isSpeaker)
47
+
48
+ let result = CallManager.shareInstance().initWithApiKeyEndpoint(params: dataOmi)
49
+ resolve(result)
114
50
  }
115
-
116
- @objc(sendDTMF:withResolver:withRejecter:)
117
- func sendDTMF(data: Any, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
118
- if let dataOmi = data as? [String: Any] {
119
- CallManager.shareInstance().sendDTMF(character: dataOmi["character"] as! String)
120
- resolve(true)
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
121
57
  }
122
- }
123
-
124
- @objc(switchOmiCamera:withRejecter:)
125
- func switchOmiCamera(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
126
- CallManager.shareInstance().switchCamera()
127
- resolve(true)
128
- }
129
-
130
- @objc(toggleOmiVideo:withRejecter:)
131
- func toggleOmiVideo(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
132
- CallManager.shareInstance().toggleCamera()
133
- resolve(true)
134
- }
135
-
136
- @objc(logout:withRejecter:)
137
- func logout(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
138
- CallManager.shareInstance().logout()
139
- resolve(true)
140
- }
141
-
142
- @objc(registerVideoEvent:withRejecter:)
143
- func registerVideoEvent(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
144
- CallManager.shareInstance().registerVideoEvent()
145
- resolve(true)
146
- }
147
-
148
- @objc(removeVideoEvent:withRejecter:)
149
- func removeVideoEvent(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
150
- CallManager.shareInstance().removeVideoEvent()
58
+
59
+ CallManager.shareInstance().configNotification(data: dataOmi)
151
60
  resolve(true)
152
61
  }
153
-
154
- @objc(getCurrentUser:withRejecter:)
155
- func getCurrentUser(resolve: @escaping RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) -> Void {
156
- CallManager.shareInstance().getCurrentUser { user in
157
- resolve(user)
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
158
70
  }
159
- }
160
71
 
161
- @objc(getGuestUser:withRejecter:)
162
- func getGuestUser(resolve: @escaping RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) -> Void {
163
- CallManager.shareInstance().getGuestUser { user in
164
- resolve(user)
72
+ CallManager.shareInstance().startCall(phoneNumber, isVideo: isVideo) { callResult in
73
+ resolve(callResult)
165
74
  }
166
75
  }
167
-
168
- @objc(getUserInfor:withResolver:withRejecter:)
169
- func getUserInfor(data: Any, resolve: @escaping RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) -> Void {
170
- CallManager.shareInstance().getUserInfo(phone: data as! String) { user in
171
- resolve(user)
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
172
84
  }
173
- }
174
-
175
- @objc(getAudio:withRejecter:)
176
- func getAudio(resolve: @escaping RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) -> Void {
177
- let audios = CallManager.shareInstance().getAudioOutputs()
178
- resolve(audios)
179
- }
180
-
181
- @objc(setAudio:withResolver:withRejecter:)
182
- func setAudio(data: Any, resolve: @escaping RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) -> Void {
183
- if let dataOmi = data as? [String: Any] {
184
- let portType = dataOmi["portType"] as! String
185
- CallManager.shareInstance().setAudioOutputs(portType: portType)
85
+
86
+ CallManager.shareInstance().startCallWithUuid(uuid, isVideo: isVideo) { callResult in
87
+ resolve(callResult)
186
88
  }
187
89
  }
188
-
189
- @objc(getCurrentAudio:withRejecter:)
190
- func getCurrentAudio(resolve: @escaping RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) -> Void {
191
- let currentAudio = CallManager.shareInstance().getCurrentAudio()
192
- resolve(currentAudio)
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
+ ]
193
103
  }
194
-
104
+
105
+ // Helper to send mute status
195
106
  func sendMuteStatus() {
196
107
  if let call = CallManager.shareInstance().getAvailableCall() {
197
- sendEvent(withName: MUTED, body: call.muted)
198
- }
199
- }
200
-
201
- func sendSpeakerStatus() {
202
- sendEvent(withName: SPEAKER, body: CallManager.shareInstance().isSpeaker)
203
- }
204
-
205
- @objc public func didReceive(data: [String: Any]) {
206
- if let callerNumber = data["omisdkCallerNumber"] as? String, let isVideo = data["omisdkIsVideo"] as? Bool {
207
- sendEvent(withName: CLICK_MISSED_CALL, body: [
208
- "callerNumber": callerNumber,
209
- "isVideo": isVideo,
210
- ])
108
+ sendEvent(withName: "MUTED", body: call.muted)
211
109
  }
212
110
  }
213
111
 
214
- @objc(transferCall:withResolver:withRejecter:)
215
- func transferCall(data: Any, resolve: @escaping RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
216
- if let dataOmi = data as? [String: Any] {
217
- let phoneNumber = dataOmi["phoneNumber"] as! String
218
- CallManager.shareInstance().transferCall(phoneNumber)
219
- }
220
- }
221
-
222
- public override func supportedEvents() -> [String]! {
223
- return [
224
- CALL_STATE_CHANGED,
225
- MUTED,
226
- SPEAKER,
227
- REMOTE_VIDEO_READY,
228
- CLICK_MISSED_CALL,
229
- SWITCHBOARD_ANSWER,
230
- CALL_QUALITY,
231
- AUDIO_CHANGE,
232
- ]
112
+ // Helper to send speaker status
113
+ func sendSpeakerStatus() {
114
+ sendEvent(withName: "SPEAKER", body: CallManager.shareInstance().isSpeaker)
233
115
  }
234
116
  }
@@ -22,9 +22,13 @@ Pod::Spec.new do |s|
22
22
  # Định nghĩa module để tránh lỗi Swift bridging header
23
23
  s.static_framework = true
24
24
  s.pod_target_xcconfig = {
25
- "DEFINES_MODULE" => "YES"
25
+ "DEFINES_MODULE" => "YES",
26
+ "SWIFT_VERSION" => "5.0"
26
27
  }
27
28
 
29
+ # Xác định module name
30
+ s.module_name = "omikit_plugin"
31
+
28
32
  # Thêm dependency bắt buộc
29
33
  s.dependency "React-Core"
30
34
  s.dependency "OmiKit", "1.8.1"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omikit-plugin",
3
- "version": "3.2.49",
3
+ "version": "3.2.51",
4
4
  "description": "Omikit Plugin by ViHAT",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",