@exotel-npm-dev/webrtc-client-sdk 2.0.1 → 3.0.0

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/index.js CHANGED
@@ -1 +1,2 @@
1
- export * from './src/listeners/ExWebClient';
1
+ import { ExotelWebClient } from './src/listeners/ExWebClient';
2
+ export { ExotelWebClient };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@exotel-npm-dev/webrtc-client-sdk",
3
- "version": "2.0.1",
3
+ "version": "3.0.0",
4
4
  "description": "client sdk for webrtc based on webrtc core sdk",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -29,6 +29,6 @@
29
29
  "webpack-cli": "^4.10.0"
30
30
  },
31
31
  "dependencies": {
32
- "@exotel-npm-dev/webrtc-core-sdk": "^1.0.20"
32
+ "@exotel-npm-dev/webrtc-core-sdk": "^3.0.0"
33
33
  }
34
34
  }
@@ -1,9 +1,13 @@
1
1
  import { CallDetails } from "./CallDetails";
2
+ import { getLogger } from '@exotel-npm-dev/webrtc-core-sdk';
2
3
 
3
- import { webrtcSIPPhone } from '@exotel-npm-dev/webrtc-core-sdk';
4
- var logger = webrtcSIPPhone.getLogger();
4
+ const logger = getLogger();
5
+
6
+ export function Call(webrtcSIPPhone) {
7
+ if (!webrtcSIPPhone) {
8
+ throw new Error("webrtcSIPPhone is required for Call");
9
+ }
5
10
 
6
- export function Call() {
7
11
  this.Answer = function () {
8
12
  /**
9
13
  * When agent accepts phone, add appropriate msg to be sent to webclient
@@ -32,25 +36,25 @@ export function Call() {
32
36
  /**
33
37
  * When agent clicks on mute
34
38
  */
35
- var isMicEnabled = webrtcSIPPhone.getMuteStatus();
36
- logger.log('Call: Mute: isMicEnabled: ', isMicEnabled);
37
- if (isMicEnabled) {
39
+ var isMuted = webrtcSIPPhone.getMuteStatus();
40
+ logger.log('Call: Mute: isMuted: ', isMuted);
41
+ if (!isMuted) {
38
42
  webrtcSIPPhone.muteAction(true);
39
43
  } else {
40
- logger.log('Call: Mute: Already muted');
44
+ logger.log('Call: Mute: Already muted');
41
45
  }
42
46
  }
43
47
 
44
48
  this.UnMute = function () {
45
49
  /**
46
- * When agent clicks on mute
50
+ * When agent clicks on unmute
47
51
  */
48
- var isMicEnabled = webrtcSIPPhone.getMuteStatus();
49
- logger.log('Call: UnMute: isMicEnabled: ', isMicEnabled);
50
- if (isMicEnabled) {
51
- logger.log('Call: Unmute: Already unmuted');
52
- } else {
52
+ var isMuted = webrtcSIPPhone.getMuteStatus();
53
+ logger.log('Call: UnMute: isMuted: ', isMuted);
54
+ if (isMuted) {
53
55
  webrtcSIPPhone.muteAction(false);
56
+ } else {
57
+ logger.log('Call: UnMute: Already unmuted');
54
58
  }
55
59
  }
56
60
 
@@ -1,7 +1,8 @@
1
+ import { getLogger } from "@exotel-npm-dev/webrtc-core-sdk";
1
2
  import { diagnosticsCallback } from "../../listeners/Callback";
2
3
 
3
- import { webrtcSIPPhone } from '@exotel-npm-dev/webrtc-core-sdk';
4
- var logger = webrtcSIPPhone.getLogger();
4
+ const logger = getLogger();
5
+
5
6
  var speakerNode;
6
7
  var micNode;
7
8
  var audioTrack;
@@ -24,6 +25,21 @@ eventMapper.sipml5.terminated_REGISTER = "USER_REG_TEST_FAIL";
24
25
 
25
26
  var candidateProcessData = {};
26
27
 
28
+ export class Diagnostics {
29
+ constructor() {
30
+ this.report = {};
31
+ }
32
+
33
+ setReport(key, value) {
34
+ this.report[key] = value;
35
+ logger.log("Diagnostics: setReport", key, value);
36
+ }
37
+
38
+ getReport() {
39
+ return this.report;
40
+ }
41
+ }
42
+
27
43
  export var ameyoWebRTCTroubleshooter = {
28
44
  js_yyyy_mm_dd_hh_mm_ss: function () {
29
45
  var now = new Date();
@@ -139,35 +155,45 @@ export var ameyoWebRTCTroubleshooter = {
139
155
  return browserName + "/" + version;
140
156
  },
141
157
 
142
- stopSpeakerTesttone: function () {
158
+ stopSpeakerTesttone: function (webrtcSIPPhone) {
159
+ if (!webrtcSIPPhone) {
160
+ logger.log("stopSpeakerTesttone: webrtcSIPPhone not provided");
161
+ return;
162
+ }
143
163
  speakerTestTone = webrtcSIPPhone.getSpeakerTestTone();
144
164
  speakerTestTone.pause();
145
165
  },
146
166
 
147
- stopSpeakerTesttoneWithSuccess: function () {
148
- this.stopSpeakerTest();
167
+ stopSpeakerTesttoneWithSuccess: function (webrtcSIPPhone) {
168
+ this.stopSpeakerTest(webrtcSIPPhone);
149
169
  this.sendDeviceTestingEvent("SPEAKER_TEST_PASS");
150
170
  this.addToTrobuleshootReport("INFO", "Speaker device testing is successfull");
151
171
  this.addToTrobuleshootReport("INFO", "Speaker device testing is completed");
152
172
  },
153
173
 
154
- stopSpeakerTesttoneWithFailure: function () {
155
- this.stopSpeakerTest();
174
+ stopSpeakerTesttoneWithFailure: function (webrtcSIPPhone) {
175
+ this.stopSpeakerTest(webrtcSIPPhone);
156
176
  this.sendDeviceTestingEvent("SPEAKER_TEST_FAIL");
157
177
  this.addToTrobuleshootReport("INFO", "Speaker device testing is failed");
158
178
  this.addToTrobuleshootReport("INFO", "Speaker device testing is completed");
159
179
  },
160
180
 
161
- startSpeakerTest: function () {
181
+ startSpeakerTest: function (webrtcSIPPhone) {
162
182
  var parent = this;
163
-
183
+ if (!webrtcSIPPhone) {
184
+ logger.log("startSpeakerTest: webrtcSIPPhone not provided");
185
+ return;
186
+ }
187
+ if (intervalID) {
188
+ logger.log("startSpeakerTest: already running");
189
+ return;
190
+ }
164
191
  try {
165
192
  intervalID = setInterval(function () {
166
193
 
167
194
  try {
168
195
  speakerTestTone = webrtcSIPPhone.getSpeakerTestTone();
169
- /* Close last pending tracks.. */
170
- logger.log("close last track")
196
+ logger.log("close last track");
171
197
  speakerTestTone.pause();
172
198
  parent.closeAudioTrack();
173
199
 
@@ -223,14 +249,18 @@ export var ameyoWebRTCTroubleshooter = {
223
249
 
224
250
  },
225
251
 
226
- stopSpeakerTest: function () {
252
+ stopSpeakerTest: function (webrtcSIPPhone) {
227
253
  var parent = this;
254
+ if (!webrtcSIPPhone) {
255
+ logger.log("stopSpeakerTest: webrtcSIPPhone not provided");
256
+ return;
257
+ }
228
258
  speakerTestTone = webrtcSIPPhone.getSpeakerTestTone();
229
- //Enable this for tone loop - Start
230
259
  try {
231
- clearInterval(intervalID)
232
- intervalID = 0
233
- //Enable this for tone loop - End
260
+ if (intervalID) {
261
+ clearInterval(intervalID);
262
+ intervalID = 0;
263
+ }
234
264
  speakerTestTone.pause();
235
265
  parent.closeAudioTrack();
236
266
  parent.addToTrobuleshootReport("INFO", "Speaker device testing is stopped");
@@ -437,9 +467,8 @@ export var ameyoWebRTCTroubleshooter = {
437
467
  logger.log("No explicit registration sent during testing...")
438
468
  },
439
469
 
440
- setWSTroubleshootData: function (txtWsStatus) {
441
- //Already done during init, no need to do again.
442
- let txtWSSUrl = webrtcSIPPhone.getWSSUrl();
470
+ setWSTroubleshootData: function (txtWsStatus, webrtcSIPPhone) {
471
+ let txtWSSUrl = webrtcSIPPhone && webrtcSIPPhone.getWSSUrl ? webrtcSIPPhone.getWSSUrl() : '';
443
472
  diagnosticsCallback.triggerKeyValueSetCallback("wss", txtWsStatus, txtWSSUrl)
444
473
  },
445
474
 
@@ -1,9 +1,9 @@
1
+ import { getLogger } from "@exotel-npm-dev/webrtc-core-sdk";
1
2
  import { diagnosticsCallback } from '../../listeners/Callback';
2
3
  import { ameyoWebRTCTroubleshooter } from './Diagnostics';
3
- import { webrtcSIPPhone } from '@exotel-npm-dev/webrtc-core-sdk';
4
4
 
5
+ const logger = getLogger();
5
6
 
6
- var logger = webrtcSIPPhone.getLogger();
7
7
 
8
8
  export function initDiagnostics(setDiagnosticsReportCallback, keyValueSetCallback) {
9
9
  if (!keyValueSetCallback || !setDiagnosticsReportCallback) {
@@ -23,27 +23,27 @@ export function closeDiagnostics() {
23
23
  return;
24
24
  }
25
25
 
26
- export function startSpeakerDiagnosticsTest() {
26
+ export function startSpeakerDiagnosticsTest(webrtcSIPPhone) {
27
27
  /**
28
28
  * When user registers the agent phone for the first time, register your callback onto webrtc client
29
29
  */
30
30
  logger.log("Request to startSpeakerTest:\n");
31
- ameyoWebRTCTroubleshooter.startSpeakerTest()
31
+ ameyoWebRTCTroubleshooter.startSpeakerTest(webrtcSIPPhone)
32
32
  return;
33
33
  }
34
34
 
35
- export function stopSpeakerDiagnosticsTest(speakerTestResponse) {
35
+ export function stopSpeakerDiagnosticsTest(speakerTestResponse, webrtcSIPPhone) {
36
36
  /**
37
37
  * When user registers the agent phone for the first time, register your callback onto webrtc client
38
38
  */
39
39
 
40
40
  logger.log("Request to stopSpeakerTest - Suuccessful Test:\n");
41
41
  if (speakerTestResponse == 'yes') {
42
- ameyoWebRTCTroubleshooter.stopSpeakerTesttoneWithSuccess()
42
+ ameyoWebRTCTroubleshooter.stopSpeakerTesttoneWithSuccess(webrtcSIPPhone)
43
43
  } else if (speakerTestResponse == 'no') {
44
- ameyoWebRTCTroubleshooter.stopSpeakerTesttoneWithFailure()
44
+ ameyoWebRTCTroubleshooter.stopSpeakerTesttoneWithFailure(webrtcSIPPhone)
45
45
  } else {
46
- ameyoWebRTCTroubleshooter.stopSpeakerTest()
46
+ ameyoWebRTCTroubleshooter.stopSpeakerTest(webrtcSIPPhone)
47
47
  }
48
48
  return;
49
49
  }
@@ -93,4 +93,15 @@ export function stopNetworkDiagnostics() {
93
93
  */
94
94
  logger.log("Request to stop network diagnostics:\n");
95
95
  return;
96
+ }
97
+
98
+ export class DiagnosticsListener {
99
+ constructor(diagnosticsCallback) {
100
+ this.diagnosticsCallback = diagnosticsCallback;
101
+ }
102
+
103
+ onDiagnosticsEvent(event) {
104
+ logger.log("DiagnosticsListener: onDiagnosticsEvent", event);
105
+ this.diagnosticsCallback.triggerCallback(event);
106
+ }
96
107
  }
@@ -1,6 +1,6 @@
1
- import { webrtcSIPPhone } from "@exotel-npm-dev/webrtc-core-sdk";
1
+ import { getLogger } from "@exotel-npm-dev/webrtc-core-sdk";
2
2
 
3
- var logger = webrtcSIPPhone.getLogger();
3
+ const logger = getLogger();
4
4
 
5
5
  /**
6
6
  * Function to register the phone onto a webRTC client
@@ -1,38 +1,35 @@
1
- import { callbacks } from "./Callback";
2
- import { webrtcSIPPhone } from "@exotel-npm-dev/webrtc-core-sdk";
1
+ import { getLogger } from "@exotel-npm-dev/webrtc-core-sdk";
3
2
 
4
- var logger = webrtcSIPPhone.getLogger();
3
+ const logger = getLogger();
5
4
 
6
- export function CallListener() {
7
- this.onIncomingCall = function (call, phone) {
8
- /**
9
- * When there is an incoming call, [INVITE is received on SIP] send a call back to the
10
- */
11
- logger.log("CallListener:Initialise call")
12
- callbacks.initializeCall(call, phone)
5
+ export class CallListener {
6
+ constructor(callCallback) {
7
+ this.callCallback = callCallback;
8
+ }
9
+
10
+ onIncomingCall(call, phone) {
11
+ logger.log("CallListener: onIncomingCall", call, phone);
12
+ this.callCallback.initializeCall(call, phone);
13
+ this.callCallback.triggerCallback("call", call, "incoming", phone);
14
+ }
13
15
 
14
- /** Triggers the callback on the UI end with message indicating it to be an incoming call */
15
- logger.log("CallListener:Trigger Incoming")
16
- callbacks.triggerCallback("incoming");
16
+ onCallEstablished(call, phone) {
17
+ logger.log("CallListener: onCallEstablished", call, phone);
18
+ this.callCallback.triggerCallback("call", call, "connected", phone);
17
19
  }
18
- this.onCallEstablished = function (call, phone) {
19
- /**
20
- * When connection is established [ACK is sent by other party on SIP]
21
- */
22
- logger.log("CallListener:Initialise call")
23
- callbacks.initializeCall(call, phone)
24
- /** Triggers the callback on the UI end with message indicating call has been established*/
25
- logger.log("CallListener:Trigger Connected")
26
- callbacks.triggerCallback("connected")
20
+
21
+ onCallEnded(call, phone) {
22
+ logger.log("CallListener: onCallEnded", call, phone);
23
+ this.callCallback.triggerCallback("call", call, "callEnded", phone);
27
24
  }
28
- this.onCallEnded = function (call, phone) {
29
- /**
30
- * When other party ends the call [BYE is received and sent by SIP]
31
- */
32
- logger.log("CallListener:Initialise call")
33
- callbacks.initializeCall(call, phone)
34
- /** Triggers the callback on the UI end with message indicating call has ended */
35
- logger.log("CallListener:Trigger Call Ended")
36
- callbacks.triggerCallback("callEnded")
25
+
26
+ onCallEvent(event) {
27
+ logger.log("CallListener: onCallEvent", event);
28
+ this.callCallback.triggerCallback(event);
29
+ }
30
+
31
+ onRinging(call, phone) {
32
+ logger.log("CallListener: onRinging", call, phone);
33
+ this.callCallback.triggerCallback("call", call, "ringing", phone);
37
34
  }
38
35
  }
@@ -1,6 +1,6 @@
1
- import { webrtcSIPPhone } from "@exotel-npm-dev/webrtc-core-sdk";
1
+ import { getLogger } from "@exotel-npm-dev/webrtc-core-sdk";
2
2
 
3
- var logger = webrtcSIPPhone.getLogger();
3
+ const logger = getLogger();
4
4
 
5
5
  /**
6
6
  * The call backs are called through this function. First initiates the call object and then
@@ -10,43 +10,52 @@ var logger = webrtcSIPPhone.getLogger();
10
10
  /**
11
11
  * Initializes call event callbacks and also sends to which phone callback was received
12
12
  */
13
- export var callbacks = {
14
- callback: null,
15
- call: null,
16
- phone: '',
17
- initializeCallback: function (CallListenerCallback) {
18
- this.callback = CallListenerCallback;
19
- },
20
- initializeCall: function (call, phone) {
13
+ export class Callback {
14
+ constructor() {
15
+ this.callbacks = {};
16
+ this.call = null;
17
+ this.phone = '';
18
+ }
19
+
20
+ registerCallback(event, callback) {
21
+ this.callbacks[event] = callback;
22
+ }
23
+
24
+ initializeCall(call, phone) {
21
25
  this.call = call;
22
26
  this.phone = phone;
23
- },
24
- triggerCallback: function (eventType) {
25
- const callbackFunc = this.callback;
26
- const call = this.call;
27
- return callbackFunc(call, eventType, this.phone);
28
27
  }
29
- };
28
+
29
+ triggerCallback(event, ...args) {
30
+ if (this.callbacks[event]) {
31
+ this.callbacks[event](...args);
32
+ } else {
33
+ logger.log("No callback registered for event:", event);
34
+ }
35
+ }
36
+ }
37
+
30
38
  /**
31
39
  * Initializes register callback and also sets to which phone registration was renewed
32
40
  */
33
- export var registerCallback = {
34
- registerCallbackHandler: null,
35
- registerState: null,
36
- phone: '',
37
- initializeRegisterCallback: function (RegisterEventCallBack) {
38
- registerCallback.registerCallbackHandler = RegisterEventCallBack;
39
- },
40
- initializeRegister: function (state, phone) {
41
- registerCallback.registerState = state;
42
- registerCallback.phone = phone;
43
- },
44
- triggerRegisterCallback: function () {
45
- const callbackFunc = registerCallback.registerCallbackHandler;
46
- const state = registerCallback.registerState
47
- return callbackFunc(state, registerCallback.phone);
48
- }
49
- };
41
+
42
+ export class RegisterCallback {
43
+ registerCallbackHandler = null;
44
+ registerState= null;
45
+ phone= '';
46
+ initializeRegisterCallback= function (RegisterEventCallBack) {
47
+ this.registerCallbackHandler = RegisterEventCallBack;
48
+ };
49
+ initializeRegister= function (state, phone) {
50
+ this.registerState = state;
51
+ this.phone = phone;
52
+ };
53
+ triggerRegisterCallback= function () {
54
+ const callbackFunc = this.registerCallbackHandler;
55
+ const state = this.registerState
56
+ return callbackFunc(state, this.phone);
57
+ };
58
+ }
50
59
  /**
51
60
  * Sets all the phone instances
52
61
  */
@@ -79,30 +88,30 @@ export var phoneInstance = {
79
88
  }
80
89
  };
81
90
 
82
- export var sessionCallback = {
83
- sessioncallback: null,
84
- callState: null,
85
- document: null,
86
- documentCallback: null,
87
- phone: '',
88
- initializeSessionCallback: function (SessionCallback) {
91
+ export class SessionCallback {
92
+ sessioncallback = null;
93
+ callState= null;
94
+ document= null;
95
+ documentCallback= null;
96
+ phone= '';
97
+ initializeSessionCallback= function (SessionCallback) {
89
98
  this.sessioncallback = SessionCallback;
90
- },
91
- intializeDocumentCallback: function (DocumentCallback) {
99
+ };
100
+ intializeDocumentCallback= function (DocumentCallback) {
92
101
  this.documentCallback = DocumentCallback;
93
- },
94
- initializeSession: function (state, phone) {
102
+ };
103
+ initializeSession= function (state, phone) {
95
104
  this.callState = state;
96
105
  this.phone = phone;
97
- },
98
- initializeDocument: function (calldocument) {
106
+ };
107
+ initializeDocument= function (calldocument) {
99
108
  this.document = calldocument;
100
- },
101
- triggerDocumentCallback: function () {
109
+ };
110
+ triggerDocumentCallback= function () {
102
111
  const documentCallbackFunc = this.documentCallback;
103
112
  return documentCallbackFunc(this.document);
104
- },
105
- triggerSessionCallback: function () {
113
+ };
114
+ triggerSessionCallback= function () {
106
115
  const sessionCallBackFunc = this.sessioncallback;
107
116
  if (sessionCallBackFunc) {
108
117
  return sessionCallBackFunc(this.callState, this.phone);