forked from hoxfon/react-native-twilio-programmable-voice
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
112 lines (105 loc) · 3.08 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
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(),
connectionIsReconnecting: new Map(),
connectionDidReconnect: new Map(),
connectionDidDisconnect: new Map(),
callStateRinging: new Map(),
callInviteCancelled: new Map(),
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
},
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: TwilioVoice.setMuted,
setSpeakerPhone: TwilioVoice.setSpeakerPhone,
sendDigits: TwilioVoice.sendDigits,
hold: TwilioVoice.hold,
requestPermissions(senderId) {
if (Platform.OS === ANDROID) {
TwilioVoice.requestPermissions(senderId)
}
},
getActiveCall: TwilioVoice.getActiveCall,
getCallInvite: TwilioVoice.getCallInvite,
configureCallKit(params = {}) {
if (Platform.OS === IOS) {
TwilioVoice.configureCallKit(params)
}
},
unregister() {
if (Platform.OS === IOS) {
TwilioVoice.unregister()
}
},
addEventListener(type, handler) {
if (!_eventHandlers.hasOwnProperty(type)) {
throw new Error('Event handler not found: ' + type)
}
if (_eventHandlers[type])
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