omikit-plugin 3.2.70 → 3.2.72
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.
- package/README.md +55 -12
- package/android/build.gradle +1 -1
- package/android/gradle.properties +1 -1
- package/android/src/main/java/com/omikitplugin/OmikitPluginModule.kt +222 -141
- package/android/src/main/java/com/omikitplugin/utils/OmiKitUtils.kt +11 -0
- package/ios/CallProcess/CallManager.swift +92 -81
- package/ios/CallProcess/OmiUtils.swift +43 -12
- package/ios/Library/OmikitPlugin.swift +30 -18
- package/lib/commonjs/omikit.js +15 -6
- package/lib/commonjs/omikit.js.map +1 -1
- package/lib/module/omikit.js +15 -6
- package/lib/module/omikit.js.map +1 -1
- package/omikit-plugin.podspec +1 -1
- package/package.json +2 -2
- package/src/index.tsx +1 -1
- package/src/omikit.tsx +14 -11
- package/src/types/index.d.ts +25 -7
|
@@ -41,7 +41,7 @@ class CallManager {
|
|
|
41
41
|
func transferCall(_ phoneNumber: String)-> Bool {
|
|
42
42
|
var result = false;
|
|
43
43
|
do {
|
|
44
|
-
if let callInfo =
|
|
44
|
+
if let callInfo = omiLib.getCurrentConfirmCall() {
|
|
45
45
|
if callInfo.callState != .disconnected {
|
|
46
46
|
callInfo.blindTransferCall(withNumber: phoneNumber);
|
|
47
47
|
result = true
|
|
@@ -58,7 +58,7 @@ class CallManager {
|
|
|
58
58
|
do {
|
|
59
59
|
if let callInfo = omiLib.getCurrentCall() {
|
|
60
60
|
if callInfo.callState != .disconnected {
|
|
61
|
-
|
|
61
|
+
omiLib.callManager.end(callInfo) { error in
|
|
62
62
|
if error != nil {
|
|
63
63
|
}
|
|
64
64
|
}
|
|
@@ -93,42 +93,6 @@ class CallManager {
|
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
-
func convertDictionaryToJson(dictionary: [String: Any]) -> String? {
|
|
97
|
-
do {
|
|
98
|
-
let jsonData = try JSONSerialization.data(withJSONObject: dictionary, options: [])
|
|
99
|
-
if let jsonString = String(data: jsonData, encoding: .utf8) {
|
|
100
|
-
return jsonString
|
|
101
|
-
}
|
|
102
|
-
} catch {
|
|
103
|
-
print("Error converting dictionary to JSON: \(error.localizedDescription)")
|
|
104
|
-
}
|
|
105
|
-
return nil
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
private func messageCall(type: Int) -> String {
|
|
109
|
-
switch(type){
|
|
110
|
-
case 0:
|
|
111
|
-
return "INVALID_UUID"
|
|
112
|
-
case 1:
|
|
113
|
-
return "INVALID_PHONE_NUMBER"
|
|
114
|
-
case 2:
|
|
115
|
-
return "SAME_PHONE_NUMBER_WITH_PHONE_REGISTER"
|
|
116
|
-
case 3:
|
|
117
|
-
return "MAX_RETRY"
|
|
118
|
-
case 4:
|
|
119
|
-
return "PERMISSION_DENIED"
|
|
120
|
-
case 5:
|
|
121
|
-
return "COULD_NOT_FIND_END_POINT"
|
|
122
|
-
case 6:
|
|
123
|
-
return "REGISTER_ACCOUNT_FAIL"
|
|
124
|
-
case 7:
|
|
125
|
-
return "START_CALL_FAIL"
|
|
126
|
-
case 9:
|
|
127
|
-
return "HAVE_ANOTHER_CALL"
|
|
128
|
-
default:
|
|
129
|
-
return "START_CALL_SUCCESS"
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
96
|
|
|
133
97
|
private func requestPermission(isVideo: Bool) {
|
|
134
98
|
AVCaptureDevice.requestAccess(for: .audio) { _ in
|
|
@@ -160,18 +124,45 @@ class CallManager {
|
|
|
160
124
|
|
|
161
125
|
|
|
162
126
|
func initWithUserPasswordEndpoint(params: [String: Any]) -> Bool {
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
127
|
+
// Kiểm tra thông tin đầu vào
|
|
128
|
+
guard let userName = params["userName"] as? String,
|
|
129
|
+
let password = params["password"] as? String,
|
|
130
|
+
let realm = params["realm"] as? String,
|
|
131
|
+
let token = params["fcmToken"] as? String else {
|
|
132
|
+
print("🚨 Lỗi: Thiếu thông tin đăng nhập!")
|
|
133
|
+
return false
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
// Nếu `projectId` có giá trị, thiết lập Project ID cho FCM
|
|
138
|
+
if let projectID = params["projectId"] as? String, !projectID.isEmpty {
|
|
139
|
+
OmiClient.setFcmProjectId(projectID)
|
|
167
140
|
}
|
|
168
|
-
|
|
141
|
+
|
|
142
|
+
// Thử khởi tạo OmiClient với username & password
|
|
143
|
+
do {
|
|
144
|
+
try OmiClient.initWithUsername(userName, password: password, realm: realm, proxy: "")
|
|
145
|
+
} catch {
|
|
146
|
+
print("🚨 Lỗi khởi tạo OmiClient: \(error.localizedDescription)")
|
|
147
|
+
return false
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// Thiết lập FCM Token cho user
|
|
169
151
|
OmiClient.setUserPushNotificationToken(token)
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
152
|
+
|
|
153
|
+
// Đảm bảo requestPermission chạy trên main thread
|
|
154
|
+
let isVideo = (params["isVideo"] as? Bool) ?? false
|
|
155
|
+
if isVideo {
|
|
156
|
+
DispatchQueue.main.async { [weak self] in
|
|
157
|
+
guard let strongSelf = self else {
|
|
158
|
+
print("⚠️ Không thể gọi requestPermission vì self đã bị giải phóng!")
|
|
159
|
+
return
|
|
160
|
+
}
|
|
161
|
+
strongSelf.requestPermission(isVideo: isVideo)
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
return true
|
|
175
166
|
}
|
|
176
167
|
|
|
177
168
|
func showMissedCall() {
|
|
@@ -232,7 +223,7 @@ class CallManager {
|
|
|
232
223
|
}
|
|
233
224
|
|
|
234
225
|
func registerVideoEvent() {
|
|
235
|
-
DispatchQueue.main.async {
|
|
226
|
+
DispatchQueue.main.async {
|
|
236
227
|
NotificationCenter.default.addObserver(CallManager.instance!,
|
|
237
228
|
selector: #selector(self.videoUpdate(_:)),
|
|
238
229
|
name: NSNotification.Name.OMICallVideoInfo,
|
|
@@ -268,7 +259,7 @@ class CallManager {
|
|
|
268
259
|
|
|
269
260
|
@objc func videoUpdate(_ notification: NSNotification) {
|
|
270
261
|
guard let userInfo = notification.userInfo,
|
|
271
|
-
let state
|
|
262
|
+
let state = userInfo[OMIVideoInfoState] as? Int else {
|
|
272
263
|
return;
|
|
273
264
|
}
|
|
274
265
|
switch (state) {
|
|
@@ -310,7 +301,8 @@ class CallManager {
|
|
|
310
301
|
"callerNumber": "",
|
|
311
302
|
"isVideo": false,
|
|
312
303
|
"transactionId": "",
|
|
313
|
-
"_id": ""
|
|
304
|
+
"_id": "",
|
|
305
|
+
"typeNumber": ""
|
|
314
306
|
]
|
|
315
307
|
|
|
316
308
|
if(call != nil){
|
|
@@ -322,6 +314,7 @@ class CallManager {
|
|
|
322
314
|
dataToSend["callerNumber"] = call.callerNumber
|
|
323
315
|
dataToSend["isVideo"] = call.isVideo
|
|
324
316
|
dataToSend["transactionId"] = call.omiId
|
|
317
|
+
dataToSend["typeNumber"] = OmiUtils.checkTypeNumber(phoneNumber: call.callerNumber ?? "")
|
|
325
318
|
}
|
|
326
319
|
|
|
327
320
|
if (callState != OMICallState.disconnected.rawValue) {
|
|
@@ -377,56 +370,74 @@ class CallManager {
|
|
|
377
370
|
"time_end" : timeEnd,
|
|
378
371
|
"sip_user": user,
|
|
379
372
|
"disposition" : lastStatusCall == nil ? "no_answered" : "answered",
|
|
380
|
-
"code_end_call" : call.lastStatus
|
|
373
|
+
"code_end_call" : call.lastStatus,
|
|
374
|
+
|
|
375
|
+
"transactionId" : call.omiId,
|
|
376
|
+
"sourceNumber" : user,
|
|
377
|
+
"destinationNumber" : guestPhone,
|
|
378
|
+
"timeStartToAnswer" : call.createDate,
|
|
379
|
+
"timeEnd" : timeEnd,
|
|
380
|
+
"sipUser": user,
|
|
381
|
+
"codeEndCall" : call.lastStatus
|
|
381
382
|
]
|
|
382
383
|
}
|
|
383
384
|
|
|
384
385
|
|
|
385
386
|
/// Start call
|
|
386
387
|
func startCall(_ phoneNumber: String, isVideo: Bool, completion: @escaping (_ : String) -> Void) {
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
388
|
+
let secondsSinceCurrentTime = lastTimeCall.timeIntervalSinceNow
|
|
389
|
+
guestPhone = phoneNumber
|
|
390
|
+
var completionCalled = false // 🔥 Biến kiểm soát callback đã gọi chưa
|
|
391
|
+
|
|
392
|
+
OmiClient.startCall(phoneNumber, isVideo: isVideo) { status in
|
|
393
|
+
DispatchQueue.main.async {
|
|
394
|
+
guard let callCurrent = self.omiLib.getCurrentCall() else {
|
|
395
|
+
if !completionCalled {
|
|
396
|
+
completion("{\"status\": \"6\", \"message\": \"REGISTER_ACCOUNT_FAIL\"}")
|
|
397
|
+
completionCalled = true
|
|
398
|
+
}
|
|
399
|
+
return
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
let dataToSend: [String: Any] = [
|
|
403
|
+
"status": status.rawValue,
|
|
404
|
+
"_id": String(describing: OmiCallModel(omiCall: callCurrent).uuid),
|
|
405
|
+
"message": OmiUtils.messageCall(type: status.rawValue)
|
|
406
|
+
]
|
|
407
|
+
|
|
408
|
+
if let jsonString = OmiUtils.convertDictionaryToJson(dictionary: dataToSend) {
|
|
409
|
+
if !completionCalled {
|
|
410
|
+
completion(jsonString)
|
|
411
|
+
completionCalled = true
|
|
412
|
+
}
|
|
413
|
+
} else {
|
|
414
|
+
if !completionCalled {
|
|
415
|
+
completion("{\"status\": \"error\", \"message\": \"JSON conversion failed\"}")
|
|
416
|
+
completionCalled = true
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
}
|
|
408
420
|
}
|
|
409
|
-
}
|
|
410
421
|
}
|
|
411
422
|
|
|
423
|
+
|
|
412
424
|
/// Start call
|
|
413
425
|
func startCallWithUuid(_ uuid: String, isVideo: Bool, completion: @escaping (_ : String) -> Void) {
|
|
414
426
|
let phoneNumber = OmiClient.getPhone(uuid)
|
|
415
427
|
if let phone = phoneNumber {
|
|
416
428
|
guestPhone = phoneNumber ?? ""
|
|
417
|
-
|
|
418
|
-
OmiClient.startCall(phone, isVideo: isVideo) { statusCall in
|
|
429
|
+
OmiClient.startCall(phone, isVideo: isVideo) { statusCall in
|
|
419
430
|
let callCurrent = self.omiLib.getCurrentCall()
|
|
420
431
|
// completion(status.rawValue)
|
|
421
432
|
var dataToSend: [String: Any] = [
|
|
422
433
|
"status": statusCall.rawValue,
|
|
423
434
|
"_id": "",
|
|
424
|
-
"message":
|
|
435
|
+
"message": OmiUtils.messageCall(type: statusCall.rawValue)
|
|
425
436
|
]
|
|
426
437
|
if(callCurrent != nil){
|
|
427
438
|
dataToSend["_id"] = String(describing: OmiCallModel(omiCall: callCurrent!).uuid)
|
|
428
439
|
}
|
|
429
|
-
if let jsonString =
|
|
440
|
+
if let jsonString = OmiUtils.convertDictionaryToJson(dictionary: dataToSend) {
|
|
430
441
|
completion(jsonString)
|
|
431
442
|
} else {
|
|
432
443
|
completion("Conversion to JSON failed")
|
|
@@ -434,7 +445,7 @@ class CallManager {
|
|
|
434
445
|
return
|
|
435
446
|
|
|
436
447
|
}
|
|
437
|
-
|
|
448
|
+
|
|
438
449
|
return
|
|
439
450
|
}
|
|
440
451
|
}
|
|
@@ -495,8 +506,8 @@ class CallManager {
|
|
|
495
506
|
|
|
496
507
|
/// Toogle speaker
|
|
497
508
|
func toogleSpeaker() {
|
|
498
|
-
let result =
|
|
499
|
-
|
|
509
|
+
let result = omiLib.callManager.audioController.toggleSpeaker();
|
|
510
|
+
isSpeaker = result
|
|
500
511
|
OmikitPlugin.instance.sendSpeakerStatus()
|
|
501
512
|
}
|
|
502
513
|
|
|
@@ -2,6 +2,7 @@ import Foundation
|
|
|
2
2
|
import AVFoundation
|
|
3
3
|
import SwiftUI
|
|
4
4
|
import OmiKit
|
|
5
|
+
import Combine
|
|
5
6
|
|
|
6
7
|
public class OmiUtils {
|
|
7
8
|
|
|
@@ -14,18 +15,6 @@ public class OmiUtils {
|
|
|
14
15
|
return instance!
|
|
15
16
|
}
|
|
16
17
|
|
|
17
|
-
func convertDictionaryToJson(dictionary: [String: Any]) -> String? {
|
|
18
|
-
do {
|
|
19
|
-
let jsonData = try JSONSerialization.data(withJSONObject: dictionary, options: [])
|
|
20
|
-
if let jsonString = String(data: jsonData, encoding: .utf8) {
|
|
21
|
-
return jsonString
|
|
22
|
-
}
|
|
23
|
-
} catch {
|
|
24
|
-
print("Error converting dictionary to JSON: \(error)")
|
|
25
|
-
}
|
|
26
|
-
return nil
|
|
27
|
-
}
|
|
28
|
-
|
|
29
18
|
func messageCall(type: Int) -> String {
|
|
30
19
|
switch(type){
|
|
31
20
|
case 0:
|
|
@@ -50,4 +39,46 @@ public class OmiUtils {
|
|
|
50
39
|
return "START_CALL_SUCCESS"
|
|
51
40
|
}
|
|
52
41
|
}
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
/// Chuyển đổi Dictionary thành JSON String
|
|
45
|
+
static func convertDictionaryToJson(dictionary: [String: Any]) -> String? {
|
|
46
|
+
do {
|
|
47
|
+
let jsonData = try JSONSerialization.data(withJSONObject: dictionary, options: [])
|
|
48
|
+
return String(data: jsonData, encoding: .utf8)
|
|
49
|
+
} catch {
|
|
50
|
+
print("⚠️ Lỗi khi chuyển đổi dictionary sang JSON: \(error.localizedDescription)")
|
|
51
|
+
return nil
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/// Trả về thông điệp lỗi tương ứng với mã lỗi của cuộc gọi
|
|
56
|
+
static func messageCall(type: Int) -> String {
|
|
57
|
+
switch type {
|
|
58
|
+
case 0: return "INVALID_UUID"
|
|
59
|
+
case 1: return "INVALID_PHONE_NUMBER"
|
|
60
|
+
case 2: return "SAME_PHONE_NUMBER_WITH_PHONE_REGISTER"
|
|
61
|
+
case 3: return "MAX_RETRY"
|
|
62
|
+
case 4: return "PERMISSION_DENIED"
|
|
63
|
+
case 5: return "COULD_NOT_FIND_END_POINT"
|
|
64
|
+
case 6: return "REGISTER_ACCOUNT_FAIL"
|
|
65
|
+
case 7: return "START_CALL_FAIL"
|
|
66
|
+
case 9: return "HAVE_ANOTHER_CALL"
|
|
67
|
+
default: return "START_CALL_SUCCESS"
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
static func checkTypeNumber(phoneNumber: String) -> String {
|
|
72
|
+
var result = "phone"
|
|
73
|
+
|
|
74
|
+
if phoneNumber.count < 8 {
|
|
75
|
+
result = "internal"
|
|
76
|
+
} else if phoneNumber.rangeOfCharacter(from: CharacterSet.letters) != nil &&
|
|
77
|
+
phoneNumber.rangeOfCharacter(from: CharacterSet.decimalDigits) != nil {
|
|
78
|
+
result = "zalo"
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return result
|
|
82
|
+
}
|
|
83
|
+
|
|
53
84
|
}
|
|
@@ -49,15 +49,20 @@ public class OmikitPlugin: RCTEventEmitter {
|
|
|
49
49
|
// MARK: - Call Methods
|
|
50
50
|
@objc(initCallWithUserPassword:resolver:rejecter:)
|
|
51
51
|
func initCallWithUserPassword(data: Any, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
52
|
+
// ✅ Bước 1: Kiểm tra dữ liệu đầu vào có đúng định dạng không
|
|
53
|
+
guard let dataOmi = data as? [String: Any] else {
|
|
54
|
+
reject("INVALID_DATA", "Expected a dictionary with user credentials.", nil)
|
|
55
|
+
return
|
|
56
|
+
}
|
|
57
|
+
// ✅ Bước 2: Gọi initWithUserPasswordEndpoint() và kiểm tra kết quả
|
|
58
|
+
let result = CallManager.shareInstance().initWithUserPasswordEndpoint(params: dataOmi)
|
|
59
|
+
if result {
|
|
60
|
+
resolve(true)
|
|
61
|
+
} else {
|
|
62
|
+
reject("INIT_FAILED", "Không thể login vào OMI.", nil)
|
|
63
|
+
}
|
|
58
64
|
}
|
|
59
65
|
|
|
60
|
-
|
|
61
66
|
@objc(initCallWithApiKey:resolver:rejecter:)
|
|
62
67
|
func initCallWithApiKey(data: Any, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) {
|
|
63
68
|
guard let dataOmi = data as? [String: Any] else {
|
|
@@ -70,17 +75,24 @@ public class OmikitPlugin: RCTEventEmitter {
|
|
|
70
75
|
|
|
71
76
|
|
|
72
77
|
@objc(startCall:resolver:rejecter:)
|
|
73
|
-
func startCall(data: Any, resolve: @escaping RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
78
|
+
func startCall(data: Any, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
79
|
+
guard let dataOmi = data as? [String: Any],
|
|
80
|
+
let phoneNumber = dataOmi["phoneNumber"] as? String else {
|
|
81
|
+
reject("INVALID_DATA", "Expected a dictionary with phone number.", nil)
|
|
82
|
+
return
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
let isVideo = dataOmi["isVideo"] as? Bool ?? false
|
|
86
|
+
|
|
87
|
+
CallManager.shareInstance().startCall(phoneNumber, isVideo: isVideo) { callResult in
|
|
88
|
+
DispatchQueue.main.async {
|
|
89
|
+
if let result = callResult as? String, !result.isEmpty {
|
|
90
|
+
resolve(result)
|
|
91
|
+
} else {
|
|
92
|
+
reject("CALL_FAILED", "You have not logged into OMI", nil)
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
84
96
|
}
|
|
85
97
|
|
|
86
98
|
@objc(startCallWithUuid:resolver:rejecter:)
|
package/lib/commonjs/omikit.js
CHANGED
|
@@ -38,11 +38,20 @@ const LINKING_ERROR = `The package 'omikit-plugin' doesn't seem to be linked. Ma
|
|
|
38
38
|
ios: "- You have run 'pod install'\n",
|
|
39
39
|
default: ''
|
|
40
40
|
}) + '- You rebuilt the app after installing the package\n' + '- You are not using Expo Go\n';
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
41
|
+
const {
|
|
42
|
+
OmikitPlugin
|
|
43
|
+
} = _reactNative.NativeModules;
|
|
44
|
+
// ✅ Khai báo chính xác Native Module
|
|
45
|
+
// const OmikitPlugin = NativeModules.OmikitPlugin
|
|
46
|
+
// ? NativeModules.OmikitPlugin
|
|
47
|
+
// : new Proxy(
|
|
48
|
+
// {},
|
|
49
|
+
// {
|
|
50
|
+
// get() {
|
|
51
|
+
// throw new Error(LINKING_ERROR);
|
|
52
|
+
// },
|
|
53
|
+
// }
|
|
54
|
+
// );
|
|
46
55
|
|
|
47
56
|
/**
|
|
48
57
|
* Starts the Omikit services.
|
|
@@ -282,7 +291,7 @@ function transferCall(data) {
|
|
|
282
291
|
function rejectCall() {
|
|
283
292
|
return OmikitPlugin.rejectCall();
|
|
284
293
|
}
|
|
285
|
-
const omiEmitter = new _reactNative.NativeEventEmitter(OmikitPlugin);
|
|
294
|
+
const omiEmitter = _reactNative.Platform.OS === 'ios' ? new _reactNative.NativeEventEmitter(OmikitPlugin) : new _reactNative.NativeEventEmitter();
|
|
286
295
|
exports.omiEmitter = omiEmitter;
|
|
287
296
|
const OmiCallEvent = {
|
|
288
297
|
onCallStateChanged: 'CALL_STATE_CHANGED',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","LINKING_ERROR","Platform","select","ios","default","OmikitPlugin","NativeModules","
|
|
1
|
+
{"version":3,"names":["_reactNative","require","LINKING_ERROR","Platform","select","ios","default","OmikitPlugin","NativeModules","startServices","configPushNotification","data","getInitialCall","OS","initCallWithUserPassword","initCallWithApiKey","startCall","startCallWithUuid","joinCall","endCall","toggleMute","toggleSpeaker","toggleHold","onHold","sendDTMF","switchOmiCamera","toggleOmiVideo","logout","registerVideoEvent","removeVideoEvent","getCurrentUser","getGuestUser","systemAlertWindow","openSystemAlertSetting","getAudio","setAudio","getCurrentAudio","transferCall","rejectCall","omiEmitter","NativeEventEmitter","exports","OmiCallEvent","onCallStateChanged","onSpeaker","onMuted","onRemoteVideoReady","onClickMissedCall","onSwitchboardAnswer","onCallQuality","onAudioChange","onRequestPermissionAndroid"],"sourceRoot":"../../src","sources":["omikit.tsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEA,MAAMC,aAAa,GAChB,wEAAuE,GACxEC,qBAAQ,CAACC,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;AAE/B,MAAM;EAAEC;AAAa,CAAC,GAAGC,0BAAa;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACO,SAASC,aAAaA,CAAA,EAAiB;EAC5C,OAAOF,YAAY,CAACE,aAAa,EAAE;AACrC;;AAGA;AACA;AACA;AACA;AACA;AACO,SAASC,sBAAsBA,CAACC,IAAS,EAAgB;EAC9D,OAAOJ,YAAY,CAACG,sBAAsB,CAACC,IAAI,CAAC;AAClD;;AAEA;AACA;AACA;AACA;AACO,SAASC,cAAcA,CAAA,EAAiB;EAC7C,IAAGT,qBAAQ,CAACU,EAAE,IAAI,KAAK,EAAC;IACxB,OAAON,YAAY,CAACK,cAAc,EAAE;EACpC,CAAC,MAAM;IACL,OAAOL,YAAY,CAACK,cAAc,CAAC,CAAC,CAAC;EACvC;AACF;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASE,wBAAwBA,CAACH,IAAS,EAAoB;EACpE,OAAOJ,YAAY,CAACO,wBAAwB,CAACH,IAAI,CAAC;AACpD;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASI,kBAAkBA,CAACJ,IAAS,EAAoB;EAC9D,OAAOJ,YAAY,CAACQ,kBAAkB,CAACJ,IAAI,CAAC;AAC9C;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASK,SAASA,CAACL,IAAS,EAAoB;EACrD,OAAOJ,YAAY,CAACS,SAAS,CAACL,IAAI,CAAC;AACrC;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASM,iBAAiBA,CAACN,IAAS,EAAoB;EAC7D,OAAOJ,YAAY,CAACU,iBAAiB,CAACN,IAAI,CAAC;AAC7C;;AAGA;AACA;AACA;AACA;AACO,SAASO,QAAQA,CAAA,EAAiB;EACvC,OAAOX,YAAY,CAACW,QAAQ,EAAE;AAChC;;AAGA;AACA;AACA;AACA;AACO,SAASC,OAAOA,CAAA,EAAiB;EACtC,OAAOZ,YAAY,CAACY,OAAO,EAAE;AAC/B;;AAGA;AACA;AACA;AACA;AACO,SAASC,UAAUA,CAAA,EAAqB;EAC7C,OAAOb,YAAY,CAACa,UAAU,EAAE;AAClC;;AAEA;AACA;AACA;AACA;AACO,SAASC,aAAaA,CAAA,EAAqB;EAChD,OAAOd,YAAY,CAACc,aAAa,EAAE;AACrC;;AAEA;AACA;AACA;AACA;AACO,SAASC,UAAUA,CAAA,EAAqB;EAC7C,OAAOf,YAAY,CAACe,UAAU,EAAE;AAClC;;AAGA;AACA;AACA;AACA;AACA;AACO,SAASC,MAAMA,CAACZ,IAAS,EAAoB;EAClD,OAAOJ,YAAY,CAACgB,MAAM,CAACZ,IAAI,CAAC;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASa,QAAQA,CAACb,IAAS,EAAoB;EACpD,OAAOJ,YAAY,CAACiB,QAAQ,CAACb,IAAI,CAAC;AACpC;;AAEA;AACA;AACA;AACA;AACO,SAASc,eAAeA,CAAA,EAAqB;EAClD,OAAOlB,YAAY,CAACkB,eAAe,EAAE;AACvC;;AAEA;AACA;AACA;AACA;AACO,SAASC,cAAcA,CAAA,EAAqB;EACjD,OAAOnB,YAAY,CAACmB,cAAc,EAAE;AACtC;;AAGA;AACA;AACA;AACA;AACO,SAASC,MAAMA,CAAA,EAAqB;EACzC,OAAOpB,YAAY,CAACoB,MAAM,EAAE;AAC9B;;AAGA;AACA;AACA;AACA;AACO,SAASC,kBAAkBA,CAAA,EAAqB;EACrD,OAAOrB,YAAY,CAACqB,kBAAkB,EAAE;AAC1C;;AAEA;AACA;AACA;AACA;AACO,SAASC,gBAAgBA,CAAA,EAAqB;EACnD,OAAOtB,YAAY,CAACsB,gBAAgB,EAAE;AACxC;;AAGA;AACA;AACA;AACA;AACO,SAASC,cAAcA,CAAA,EAAiB;EAC7C,OAAOvB,YAAY,CAACuB,cAAc,EAAE;AACtC;;AAEA;AACA;AACA;AACA;AACO,SAASC,YAAYA,CAAA,EAAiB;EAC3C,OAAOxB,YAAY,CAACwB,YAAY,EAAE;AACpC;;AAEA;AACA;AACA;AACA;AACO,SAASC,iBAAiBA,CAAA,EAAqB;EACpD,OAAOzB,YAAY,CAACyB,iBAAiB,EAAE;AACzC;;AAEA;AACA;AACA;AACA;AACO,SAASC,sBAAsBA,CAAA,EAAkB;EACtD,OAAO1B,YAAY,CAAC0B,sBAAsB,EAAE;AAC9C;;AAEA;AACA;AACA;AACA;AACO,SAASC,QAAQA,CAAA,EAAiB;EACvC,OAAO3B,YAAY,CAAC2B,QAAQ,EAAE;AAChC;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASC,QAAQA,CAACxB,IAAS,EAAiB;EACjD,OAAOJ,YAAY,CAAC4B,QAAQ,CAACxB,IAAI,CAAC;AACpC;;AAEA;AACA;AACA;AACA;AACO,SAASyB,eAAeA,CAAA,EAAiB;EAC9C,OAAO7B,YAAY,CAAC6B,eAAe,EAAE;AACvC;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASC,YAAYA,CAAC1B,IAAS,EAAoB;EACxD,OAAOJ,YAAY,CAAC8B,YAAY,CAAC1B,IAAI,CAAC;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS2B,UAAUA,CAAA,EAAqB;EAC7C,OAAO/B,YAAY,CAAC+B,UAAU,EAAE;AAClC;AAGO,MAAMC,UAAU,GAAGpC,qBAAQ,CAACU,EAAE,KAAK,KAAK,GAAG,IAAI2B,+BAAkB,CAACjC,YAAY,CAAC,GAAG,IAAIiC,+BAAkB,EAAE;AAACC,OAAA,CAAAF,UAAA,GAAAA,UAAA;AAE3G,MAAMG,YAAY,GAAG;EAC1BC,kBAAkB,EAAE,oBAAoB;EACxCC,SAAS,EAAE,SAAS;EACpBC,OAAO,EAAE,OAAO;EAChBtB,MAAM,EAAE,MAAM;EACduB,kBAAkB,EAAE,oBAAoB;EACxCC,iBAAiB,EAAE,mBAAmB;EACtCC,mBAAmB,EAAE,oBAAoB;EACzCC,aAAa,EAAE,cAAc;EAC7BC,aAAa,EAAE,cAAc;EAC7BC,0BAA0B,EAAE;AAC9B,CAAC;AAACV,OAAA,CAAAC,YAAA,GAAAA,YAAA"}
|
package/lib/module/omikit.js
CHANGED
|
@@ -3,11 +3,20 @@ const LINKING_ERROR = `The package 'omikit-plugin' doesn't seem to be linked. Ma
|
|
|
3
3
|
ios: "- You have run 'pod install'\n",
|
|
4
4
|
default: ''
|
|
5
5
|
}) + '- You rebuilt the app after installing the package\n' + '- You are not using Expo Go\n';
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
const {
|
|
7
|
+
OmikitPlugin
|
|
8
|
+
} = NativeModules;
|
|
9
|
+
// ✅ Khai báo chính xác Native Module
|
|
10
|
+
// const OmikitPlugin = NativeModules.OmikitPlugin
|
|
11
|
+
// ? NativeModules.OmikitPlugin
|
|
12
|
+
// : new Proxy(
|
|
13
|
+
// {},
|
|
14
|
+
// {
|
|
15
|
+
// get() {
|
|
16
|
+
// throw new Error(LINKING_ERROR);
|
|
17
|
+
// },
|
|
18
|
+
// }
|
|
19
|
+
// );
|
|
11
20
|
|
|
12
21
|
/**
|
|
13
22
|
* Starts the Omikit services.
|
|
@@ -247,7 +256,7 @@ export function transferCall(data) {
|
|
|
247
256
|
export function rejectCall() {
|
|
248
257
|
return OmikitPlugin.rejectCall();
|
|
249
258
|
}
|
|
250
|
-
export const omiEmitter = new NativeEventEmitter(OmikitPlugin);
|
|
259
|
+
export const omiEmitter = Platform.OS === 'ios' ? new NativeEventEmitter(OmikitPlugin) : new NativeEventEmitter();
|
|
251
260
|
export const OmiCallEvent = {
|
|
252
261
|
onCallStateChanged: 'CALL_STATE_CHANGED',
|
|
253
262
|
onSpeaker: 'SPEAKER',
|
package/lib/module/omikit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NativeModules","Platform","NativeEventEmitter","LINKING_ERROR","select","ios","default","OmikitPlugin","
|
|
1
|
+
{"version":3,"names":["NativeModules","Platform","NativeEventEmitter","LINKING_ERROR","select","ios","default","OmikitPlugin","startServices","configPushNotification","data","getInitialCall","OS","initCallWithUserPassword","initCallWithApiKey","startCall","startCallWithUuid","joinCall","endCall","toggleMute","toggleSpeaker","toggleHold","onHold","sendDTMF","switchOmiCamera","toggleOmiVideo","logout","registerVideoEvent","removeVideoEvent","getCurrentUser","getGuestUser","systemAlertWindow","openSystemAlertSetting","getAudio","setAudio","getCurrentAudio","transferCall","rejectCall","omiEmitter","OmiCallEvent","onCallStateChanged","onSpeaker","onMuted","onRemoteVideoReady","onClickMissedCall","onSwitchboardAnswer","onCallQuality","onAudioChange","onRequestPermissionAndroid"],"sourceRoot":"../../src","sources":["omikit.tsx"],"mappings":"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"}
|
package/omikit-plugin.podspec
CHANGED
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "omikit-plugin",
|
|
3
|
-
"version": "3.2.
|
|
3
|
+
"version": "3.2.72",
|
|
4
4
|
"description": "Omikit Plugin by ViHAT",
|
|
5
|
-
"main": "
|
|
5
|
+
"main": "src/commonjs/index",
|
|
6
6
|
"module": "lib/module/index",
|
|
7
7
|
"types": "src/types/index.d.ts",
|
|
8
8
|
"react-native": "src/index",
|
package/src/index.tsx
CHANGED
package/src/omikit.tsx
CHANGED
|
@@ -6,16 +6,19 @@ const LINKING_ERROR =
|
|
|
6
6
|
'- You rebuilt the app after installing the package\n' +
|
|
7
7
|
'- You are not using Expo Go\n';
|
|
8
8
|
|
|
9
|
-
const OmikitPlugin = NativeModules
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
9
|
+
const { OmikitPlugin } = NativeModules;
|
|
10
|
+
// ✅ Khai báo chính xác Native Module
|
|
11
|
+
// const OmikitPlugin = NativeModules.OmikitPlugin
|
|
12
|
+
// ? NativeModules.OmikitPlugin
|
|
13
|
+
// : new Proxy(
|
|
14
|
+
// {},
|
|
15
|
+
// {
|
|
16
|
+
// get() {
|
|
17
|
+
// throw new Error(LINKING_ERROR);
|
|
18
|
+
// },
|
|
19
|
+
// }
|
|
20
|
+
// );
|
|
21
|
+
|
|
19
22
|
|
|
20
23
|
/**
|
|
21
24
|
* Starts the Omikit services.
|
|
@@ -265,7 +268,7 @@ export function rejectCall(): Promise<boolean> {
|
|
|
265
268
|
}
|
|
266
269
|
|
|
267
270
|
|
|
268
|
-
export const omiEmitter = new NativeEventEmitter(OmikitPlugin);
|
|
271
|
+
export const omiEmitter = Platform.OS === 'ios' ? new NativeEventEmitter(OmikitPlugin) : new NativeEventEmitter();
|
|
269
272
|
|
|
270
273
|
export const OmiCallEvent = {
|
|
271
274
|
onCallStateChanged: 'CALL_STATE_CHANGED',
|
package/src/types/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
declare module 'omikit-plugin' {
|
|
2
2
|
import { NativeEventEmitter } from 'react-native';
|
|
3
|
-
|
|
3
|
+
|
|
4
4
|
export function startServices(): Promise<any>;
|
|
5
5
|
export function configPushNotification(data: any): Promise<any>;
|
|
6
6
|
export function getInitialCall(): Promise<any>;
|
|
@@ -30,8 +30,6 @@ declare module 'omikit-plugin' {
|
|
|
30
30
|
export function transferCall(data: any): Promise<boolean>;
|
|
31
31
|
export function rejectCall(): Promise<boolean>;
|
|
32
32
|
|
|
33
|
-
export const omiEmitter: NativeEventEmitter;
|
|
34
|
-
|
|
35
33
|
export enum OmiCallState {
|
|
36
34
|
unknown,
|
|
37
35
|
calling,
|
|
@@ -42,9 +40,6 @@ declare module 'omikit-plugin' {
|
|
|
42
40
|
disconnected,
|
|
43
41
|
hold
|
|
44
42
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
43
|
|
|
49
44
|
export const OmiCallEvent: {
|
|
50
45
|
onCallStateChanged: string;
|
|
@@ -58,4 +53,27 @@ declare module 'omikit-plugin' {
|
|
|
58
53
|
onAudioChange: string;
|
|
59
54
|
onRequestPermissionAndroid: string;
|
|
60
55
|
};
|
|
61
|
-
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
// // ✅ Định nghĩa omiEmitter để luôn listen được event
|
|
60
|
+
// export const omiEmitter: NativeEventEmitter;
|
|
61
|
+
|
|
62
|
+
// ✅ Định nghĩa lại `addListener`, `removeListener`, `removeAllListeners`
|
|
63
|
+
export interface OmiEmitterInterface extends NativeEventEmitter {
|
|
64
|
+
addListener(
|
|
65
|
+
eventType: string,
|
|
66
|
+
listener: (event: any) => void
|
|
67
|
+
): void;
|
|
68
|
+
|
|
69
|
+
removeListener(
|
|
70
|
+
eventType: string,
|
|
71
|
+
listener: (event: any) => void
|
|
72
|
+
): void;
|
|
73
|
+
|
|
74
|
+
removeAllListeners(eventType?: string): void;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export const omiEmitter: OmiEmitterInterface;
|
|
78
|
+
}
|
|
79
|
+
|