forked from hoxfon/react-native-twilio-programmable-voice
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
118 lines (111 loc) · 2.98 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
import {
NativeModules,
NativeEventEmitter,
Platform,
} from 'react-native'
const ANDROID = 'android'
const IOS = 'ios'
const TwilioVoice = NativeModules.RNTwilioVoice
const NativeAppEventEmitter = new NativeEventEmitter(TwilioVoice)
const _eventHandlers = {
deviceReady: new Map(),
deviceNotReady: new Map(),
deviceDidReceiveIncoming: new Map(),
connectionDidConnect: new Map(),
connectionDidDisconnect: new Map(),
//iOS specific
callRejected: new Map(),
}
const Twilio = {
// initialize the library with Twilio access token
// return {initialized: true} when the initialization started
// Listen to deviceReady and deviceNotReady events to see whether
// the initialization succeeded
async initWithToken(token) {
if (typeof token !== 'string') {
return {
initialized: false,
err: 'Invalid token, token must be a string'
}
};
const result = await TwilioVoice.initWithAccessToken(token)
// native react promise present only for Android
// iOS initWithAccessToken doesn't return
if (Platform.OS === IOS) {
return {
initialized: true,
}
}
return result
},
initWithTokenUrl(url) {
if (Platform.OS === IOS) {
TwilioVoice.initWithAccessTokenUrl(url)
}
},
connect(params = {}) {
TwilioVoice.connect(params)
},
disconnect() {
TwilioVoice.disconnect()
},
accept() {
if (Platform.OS === IOS) {
return
}
TwilioVoice.accept()
},
reject() {
if (Platform.OS === IOS) {
return
}
TwilioVoice.reject()
},
ignore() {
if (Platform.OS === IOS) {
return
}
TwilioVoice.ignore()
},
setMuted(isMuted) {
TwilioVoice.setMuted(isMuted)
},
setSpeakerPhone(value) {
TwilioVoice.setSpeakerPhone(value)
},
sendDigits(digits) {
TwilioVoice.sendDigits(digits)
},
requestPermissions(senderId) {
if (Platform.OS === ANDROID) {
TwilioVoice.requestPermissions(senderId)
}
},
getActiveCall() {
return TwilioVoice.getActiveCall()
},
configureCallKit(params = {}) {
if (Platform.OS === IOS) {
TwilioVoice.configureCallKit(params)
}
},
unregister() {
if (Platform.OS === IOS) {
TwilioVoice.unregister()
}
},
addEventListener(type, handler) {
if (_eventHandlers[type].has(handler)) {
return
}
_eventHandlers[type].set(handler, NativeAppEventEmitter.addListener(type, rtn => { handler(rtn) }))
},
removeEventListener(type, handler) {
if (!_eventHandlers[type].has(handler)) {
return
}
_eventHandlers[type].get(handler).remove()
_eventHandlers[type].delete(handler)
}
}
export default Twilio