@wazo/sdk 0.38.0 → 0.38.3

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.
Files changed (45) hide show
  1. package/README.md +293 -0
  2. package/dist/wazo-sdk.js +5 -5
  3. package/esm/__tests__/web-rtc-client.test.js +1 -1
  4. package/esm/checker/Checker.js +1 -1
  5. package/esm/checker/checks/index.js +1 -1
  6. package/esm/checker/checks/webrtc-transport.js +1 -1
  7. package/esm/checker/checks/webrtc.js +1 -1
  8. package/esm/index.js +267 -25
  9. package/esm/simple/Auth.js +267 -25
  10. package/esm/simple/Configuration.js +267 -25
  11. package/esm/simple/Phone.js +267 -25
  12. package/esm/simple/Softphone.js +266 -24
  13. package/esm/simple/index.js +267 -25
  14. package/esm/simple/room/LocalParticipant.js +267 -25
  15. package/esm/simple/room/Participant.js +267 -25
  16. package/esm/simple/room/RemoteParticipant.js +267 -25
  17. package/esm/simple/room/Room.js +267 -25
  18. package/esm/simple/room/SipRoom.js +267 -25
  19. package/esm/simple/room/Stream.js +267 -25
  20. package/esm/simple/room/__tests__/RemoteParticipant.test.js +267 -25
  21. package/esm/simple/utils.js +267 -25
  22. package/esm/web-rtc-client.js +1 -1
  23. package/lib/__tests__/web-rtc-client.test.js +1 -1
  24. package/lib/checker/Checker.js +1 -1
  25. package/lib/checker/checks/index.js +1 -1
  26. package/lib/checker/checks/webrtc-transport.js +1 -1
  27. package/lib/checker/checks/webrtc.js +1 -1
  28. package/lib/index.js +267 -25
  29. package/lib/simple/Auth.js +267 -25
  30. package/lib/simple/Configuration.js +267 -25
  31. package/lib/simple/Phone.js +267 -25
  32. package/lib/simple/Softphone.js +266 -24
  33. package/lib/simple/index.js +267 -25
  34. package/lib/simple/room/LocalParticipant.js +267 -25
  35. package/lib/simple/room/Participant.js +267 -25
  36. package/lib/simple/room/RemoteParticipant.js +267 -25
  37. package/lib/simple/room/Room.js +267 -25
  38. package/lib/simple/room/SipRoom.js +267 -25
  39. package/lib/simple/room/Stream.js +267 -25
  40. package/lib/simple/room/__tests__/RemoteParticipant.test.js +267 -25
  41. package/lib/simple/utils.js +267 -25
  42. package/lib/web-rtc-client.js +1 -1
  43. package/package.json +1 -1
  44. package/src/simple/Softphone.js +264 -24
  45. package/src/web-rtc-client.js +1 -1
@@ -3,40 +3,159 @@
3
3
  //
4
4
  /* eslint-disable no-unused-vars */
5
5
  /* global window, document */
6
+ const BRIDGE_CONFIG_RETRIEVED = 'bridge/CONFIG_RETRIEVED';
7
+ const BRIDGE_CREATE_OR_UPDATE_CARD = 'bridge/BRIDGE_CREATE_OR_UPDATE_CARD';
8
+ const BRIDGE_OPTIONS_FETCHED = 'bridge/BRIDGE_OPTIONS_FETCHED';
9
+ const BRIDGE_OPTIONS_FOUND = 'bridge/BRIDGE_OPTIONS_FOUND';
10
+ const BRIDGE_SEARCH_OPTIONS = 'bridge/BRIDGE_SEARCH_OPTIONS';
11
+ const BRIDGE_DISPLAY_LINKED_OPTION = 'bridge/DISPLAY_LINKED_OPTION';
12
+ const BRIDGE_UPDATE_FORM_SCHEMA = 'bridge/BRIDGE_UPDATE_FORM_SCHEMA';
13
+ const BRIDGE_WAZO_CONTACT_SEARCH = 'bridge/BRIDGE_WAZO_CONTACT_SEARCH';
14
+ const BRIDGE_ON_AGENT_LOGGED_IN = 'bridge/BRIDGE_ON_AGENT_LOGGED_IN';
15
+ const BRIDGE_ON_AGENT_LOGGED_OUT = 'bridge/BRIDGE_ON_AGENT_LOGGED_OUT';
16
+ const BRIDGE_ON_AGENT_PAUSED = 'bridge/BRIDGE_ON_AGENT_PAUSED';
17
+ const BRIDGE_ON_AGENT_RESUMED = 'bridge/BRIDGE_ON_AGENT_RESUMED';
18
+ const BRIDGE_ON_LANGUAGE_CHANGED = 'bridge/BRIDGE_ON_LANGUAGE_CHANGED';
19
+ const BRIDGE_ON_CALL_LOCALLY_ACCEPTED = 'bridge/BRIDGE_ON_CALL_LOCALLY_ACCEPTED';
20
+ const BRIDGE_ON_CALL_REJECTED = 'bridge/BRIDGE_ON_CALL_REJECTED';
21
+ const BRIDGE_ON_CALL_REMOTELY_ACCEPTED = 'bridge/BRIDGE_ON_CALL_REMOTELY_ACCEPTED';
22
+ const BRIDGE_ON_CALL_HELD = 'bridge/BRIDGE_ON_CALL_HELD';
23
+ const BRIDGE_ON_CALL_RESUMED = 'bridge/BRIDGE_ON_CALL_RESUMED';
24
+ const BRIDGE_ON_CALL_MUTED = 'bridge/BRIDGE_ON_CALL_MUTED';
25
+ const BRIDGE_ON_CALL_UN_MUTED = 'bridge/BRIDGE_ON_CALL_UN_MUTED';
26
+ const BRIDGE_ON_DTMF = 'bridge/BRIDGE_ON_DTMF';
27
+ const BRIDGE_ON_DIRECT_TRANSFER = 'bridge/BRIDGE_ON_DIRECT_TRANSFER';
28
+ const BRIDGE_ON_CREATE_INDIRECT_TRANSFER = 'bridge/BRIDGE_ON_CREATE_INDIRECT_TRANSFER';
29
+ const BRIDGE_ON_CANCEL_INDIRECT_TRANSFER = 'bridge/BRIDGE_ON_CANCEL_INDIRECT_TRANSFER';
30
+ const BRIDGE_ON_CONFIRM_INDIRECT_TRANSFER = 'bridge/BRIDGE_ON_CONFIRM_INDIRECT_TRANSFER';
31
+ const BRIDGE_ON_INDIRECT_TRANSFER_CALL_MADE = 'bridge/BRIDGE_ON_INDIRECT_TRANSFER_CALL_MADE';
32
+ const BRIDGE_ON_INDIRECT_TRANSFER_DONE = 'bridge/BRIDGE_ON_INDIRECT_TRANSFER_DONE';
33
+ const BRIDGE_ON_START_RECORDING = 'bridge/BRIDGE_ON_START_RECORDING';
34
+ const BRIDGE_ON_STOP_RECORDING = 'bridge/BRIDGE_ON_STOP_RECORDING';
35
+ const BRIDGE_ON_CARD_CANCELED = 'bridge/BRIDGE_ON_CARD_CANCELED';
36
+ const BRIDGE_ENABLE_AGENT = 'bridge/BRIDGE_ENABLE_AGENT';
37
+ const BRIDGE_SET_CARD_CONTENT = 'bridge/BRIDGE_SET_CARD_CONTENT';
38
+ const BRIDGE_ENABLE_DEBUG = 'bridge/BRIDGE_ENABLE_DEBUG';
39
+
40
+ const BRIDGE_INJECT_CSS = 'bridge/BRIDGE_INJECT_CSS';
41
+ const BRIDGE_CUSTOMIZE_APPEARANCE = 'bridge/BRIDGE_CUSTOMIZE_APPEARANCE';
42
+
6
43
  const SDK_CLICK_TO_CALL = 'sdk/CLICK_TO_CALL';
7
- const SDK_ON_CALL_MADE = 'sdk/SDK_ON_CALL_MADE';
44
+ const SDK_ON_OUTGOING_CALL_MADE = 'sdk/SDK_ON_OUTGOING_CALL_MADE';
8
45
  const SDK_CALL_ENDED = 'sdk/ON_CALL_ENDED';
9
46
  const SDK_CALL_INCOMING = 'sdk/SDK_CALL_INCOMING';
10
47
  const SDK_AUTHENTICATED = 'sdk/SDK_AUTHENTICATED';
48
+ const SDK_LOGGED_OUT = 'sdk/SDK_LOGGED_OUT';
11
49
 
12
50
  class Softphone {
13
- url = 'https://softphone.wazo.io';
14
- width = 500;
15
- height = 600;
16
- displayed = false;
17
- iframe = null;
51
+
52
+
53
+
54
+
55
+
56
+
57
+
58
+ // Message waiting for the iframe to be loaded
59
+
18
60
 
19
61
  onLinkEnabled(link ) {}
62
+ onIFrameLoaded() {}
20
63
 
21
- onCallMade(call ) {}
64
+ onCallLocallyAnswered(call ) {}
65
+ onCallRemotelyAnswered(call ) {}
66
+ onOutgoingCallMade(call ) {}
22
67
  onCallIncoming(call ) {}
68
+ onCallRejected(call ) {}
23
69
  onCallEnded(call , card , direction , fromExtension ) {}
70
+
71
+ onCardSaved(card ) {}
72
+ onCardCanceled() {}
24
73
  onAuthenticated(session ) {}
74
+ onLoggedOut() {}
75
+
76
+ onSearchOptions(fieldId , query ) {
77
+ this.onOptionsResults(fieldId, []);
78
+ }
79
+
80
+ onDisplayLinkedOption(optionId ) {}
81
+ onWazoContactSearch(query ) {}
82
+ onAgentLoggedIn() {}
83
+ onAgentLoggedOut() {}
84
+ onAgentPaused() {}
85
+ onAgentResumed() {}
86
+ onLanguageChanged(language ) {}
87
+ onCallHeld() {}
88
+ onCallResumed() {}
89
+ onCallMuted() {}
90
+ onCallUnMuted() {}
91
+ onDtmfSent(tone ) {}
92
+ onDirectTransfer(number ) {}
93
+ onCreateIndirectTransfer(number ) {}
94
+ onCancelIndirectTransfer() {}
95
+ onConfirmIndirectTransfer() {}
96
+ onIndirectCallMade(call ) {}
97
+ onIndirectTransferDone(call ) {}
98
+ onStartRecording() {}
99
+ onStopRecording() {}
100
+ onUnHandledEvent(event ) {}
101
+
102
+ init({
103
+ url,
104
+ width,
105
+ height,
106
+ server,
107
+ port,
108
+ language,
109
+ wrapUpDuration,
110
+ enableAgent = true,
111
+ tenantId,
112
+ debug = false,
113
+ } = {}) {
114
+ this.url = url || 'https://softphone.wazo.io';
115
+ this.width = width || 500;
116
+ this.height = height || 600;
117
+ this.displayed = false;
118
+ this.iframeLoaded = false;
119
+
120
+ this.iframeLoaded = false;
121
+ this._pendingMessages = [];
122
+ window.addEventListener('message', this._onMessage.bind(this), false);
123
+
124
+ if (!server) {
125
+ // eslint-disable-next-line no-param-reassign
126
+ server = 'stack.dev.wazo.io';
127
+ }
25
128
 
26
- init(url , width , height ) {
27
- if (url) {
28
- this.url = url;
129
+ const config = { server };
130
+ if (language) {
131
+ config.language = language;
29
132
  }
30
- if (width) {
31
- this.width = width;
133
+ if (port) {
134
+ config.port = port;
32
135
  }
33
- if (height) {
34
- this.height = height;
136
+ if (tenantId) {
137
+ config.tenantId = tenantId;
138
+ }
139
+ if (wrapUpDuration) {
140
+ config.wrapUpDuration = wrapUpDuration;
35
141
  }
36
142
 
37
- window.addEventListener('message', this._onMessage.bind(this), false);
143
+ this._sendMessage(BRIDGE_CONFIG_RETRIEVED, { config });
144
+
145
+ if (enableAgent) {
146
+ this._sendMessage(BRIDGE_ENABLE_AGENT);
147
+ }
148
+
149
+ if (debug) {
150
+ this._sendMessage(BRIDGE_ENABLE_DEBUG);
151
+ }
38
152
 
39
- this._createIframe();
153
+ this._createIframe(() => {
154
+ this.iframeLoaded = true;
155
+ this._pendingMessages.forEach(([type, payload]) => this._sendMessage(type, payload));
156
+
157
+ this.onIFrameLoaded();
158
+ });
40
159
  }
41
160
 
42
161
  parseLinks() {
@@ -52,9 +171,7 @@ class Softphone {
52
171
  makeCall(number ) {
53
172
  this.displaySoftphone();
54
173
 
55
- if (this.iframe) {
56
- this.iframe.contentWindow.postMessage({ type: SDK_CLICK_TO_CALL, number }, '*');
57
- }
174
+ this._sendMessage(SDK_CLICK_TO_CALL, { number });
58
175
  }
59
176
 
60
177
  toggleSoftphoneDisplay() {
@@ -63,8 +180,6 @@ class Softphone {
63
180
  } else {
64
181
  this.displaySoftphone();
65
182
  }
66
-
67
- this.displayed = !this.displayed;
68
183
  }
69
184
 
70
185
  displaySoftphone() {
@@ -75,15 +190,42 @@ class Softphone {
75
190
  if (this.iframe) {
76
191
  this.iframe.style.display = 'block';
77
192
  }
193
+
194
+ this.displayed = true;
78
195
  }
79
196
 
80
197
  hideSoftphone() {
81
198
  if (this.iframe) {
82
199
  this.iframe.style.display = 'none';
83
200
  }
201
+ this.displayed = false;
202
+ }
203
+
204
+ optionsFetched(fieldId , options ) {
205
+ this._sendMessage(BRIDGE_OPTIONS_FETCHED, { fieldId, options });
206
+ }
207
+
208
+ onOptionsResults(fieldId , options ) {
209
+ this._sendMessage(BRIDGE_OPTIONS_FOUND, { fieldId, options });
210
+ }
211
+
212
+ setFormSchema(schema , uiSchema ) {
213
+ this._sendMessage(BRIDGE_UPDATE_FORM_SCHEMA, { schema, uiSchema });
214
+ }
215
+
216
+ setCardValue(field , value ) {
217
+ this._sendMessage(BRIDGE_SET_CARD_CONTENT, { field, value });
218
+ }
219
+
220
+ injectCss(css ) {
221
+ this._sendMessage(BRIDGE_INJECT_CSS, { css });
222
+ }
223
+
224
+ customizeAppearance(themes , translations , assets ) {
225
+ this._sendMessage(BRIDGE_CUSTOMIZE_APPEARANCE, { themes, translations, assets });
84
226
  }
85
227
 
86
- _createIframe() {
228
+ _createIframe(cb = () => {}) {
87
229
  this.iframe = document.createElement('iframe');
88
230
  // $FlowFixMe
89
231
  this.iframe.width = this.width;
@@ -95,10 +237,13 @@ class Softphone {
95
237
  this.iframe.style.left = '0';
96
238
  this.iframe.style.bottom = '0';
97
239
  this.iframe.style.border = '1px solid #aaa';
240
+ this.iframe.style.backgroundColor = 'white';
98
241
  this.iframe.src = this.url;
99
242
  this.iframe.style.display = 'none';
100
243
  this.iframe.id = 'wazo-softphone';
101
244
 
245
+ this.iframe.onload = cb;
246
+
102
247
  // $FlowFixMe
103
248
  document.body.appendChild(this.iframe);
104
249
  }
@@ -125,8 +270,8 @@ class Softphone {
125
270
  }
126
271
 
127
272
  switch (event.data.type) {
128
- case SDK_ON_CALL_MADE:
129
- this.onCallMade(event.data.callSession);
273
+ case SDK_ON_OUTGOING_CALL_MADE:
274
+ this.onOutgoingCallMade(event.data.callSession);
130
275
  break;
131
276
  case SDK_CALL_ENDED: {
132
277
  const { callSession, content, direction, userExtension } = event.data;
@@ -141,8 +286,105 @@ class Softphone {
141
286
  this._onAuthenticated(event.data.session);
142
287
  this.onAuthenticated(event.data.session);
143
288
  break;
289
+ case SDK_LOGGED_OUT:
290
+ this.onLoggedOut();
291
+ break;
292
+ case BRIDGE_CREATE_OR_UPDATE_CARD: {
293
+ const { content } = event.data;
294
+ this.onCardSaved(content);
295
+ break;
296
+ }
297
+ case BRIDGE_SEARCH_OPTIONS: {
298
+ const { fieldId, query } = event.data;
299
+ this.onSearchOptions(fieldId, query);
300
+ break;
301
+ }
302
+ case BRIDGE_DISPLAY_LINKED_OPTION:
303
+ this.onDisplayLinkedOption(event.data.linkedOptionId);
304
+ break;
305
+ case BRIDGE_WAZO_CONTACT_SEARCH:
306
+ this.onWazoContactSearch(event.data.query);
307
+ break;
308
+ case BRIDGE_ON_AGENT_LOGGED_IN:
309
+ this.onAgentLoggedIn();
310
+ break;
311
+ case BRIDGE_ON_AGENT_LOGGED_OUT:
312
+ this.onAgentLoggedOut();
313
+ break;
314
+ case BRIDGE_ON_AGENT_PAUSED:
315
+ this.onAgentPaused();
316
+ break;
317
+ case BRIDGE_ON_AGENT_RESUMED:
318
+ this.onAgentResumed();
319
+ break;
320
+ case BRIDGE_ON_LANGUAGE_CHANGED:
321
+ this.onLanguageChanged(event.data.language);
322
+ break;
323
+ case BRIDGE_ON_CALL_HELD:
324
+ this.onCallHeld();
325
+ break;
326
+ case BRIDGE_ON_CALL_RESUMED:
327
+ this.onCallResumed();
328
+ break;
329
+ case BRIDGE_ON_CALL_MUTED:
330
+ this.onCallMuted();
331
+ break;
332
+ case BRIDGE_ON_CALL_UN_MUTED:
333
+ this.onCallUnMuted();
334
+ break;
335
+ case BRIDGE_ON_DTMF:
336
+ this.onDtmfSent(event.data.tone);
337
+ break;
338
+ case BRIDGE_ON_DIRECT_TRANSFER:
339
+ this.onDirectTransfer(event.data.number);
340
+ break;
341
+ case BRIDGE_ON_CREATE_INDIRECT_TRANSFER:
342
+ this.onCreateIndirectTransfer(event.data.number);
343
+ break;
344
+ case BRIDGE_ON_CANCEL_INDIRECT_TRANSFER:
345
+ this.onCancelIndirectTransfer();
346
+ break;
347
+ case BRIDGE_ON_CONFIRM_INDIRECT_TRANSFER:
348
+ this.onConfirmIndirectTransfer();
349
+ break;
350
+ case BRIDGE_ON_INDIRECT_TRANSFER_CALL_MADE:
351
+ this.onIndirectCallMade(event.data.call);
352
+ break;
353
+ case BRIDGE_ON_INDIRECT_TRANSFER_DONE:
354
+ this.onIndirectTransferDone(event.data.call);
355
+ break;
356
+ case BRIDGE_ON_START_RECORDING:
357
+ this.onStartRecording();
358
+ break;
359
+ case BRIDGE_ON_STOP_RECORDING:
360
+ this.onStopRecording();
361
+ break;
362
+ case BRIDGE_ON_CARD_CANCELED:
363
+ this.onCardCanceled();
364
+ break;
365
+ case BRIDGE_ON_CALL_LOCALLY_ACCEPTED:
366
+ this.onCallLocallyAnswered(event.data.call);
367
+ break;
368
+ case BRIDGE_ON_CALL_REJECTED:
369
+ this.onCallRejected(event.data.call);
370
+ break;
371
+ case BRIDGE_ON_CALL_REMOTELY_ACCEPTED:
372
+ this.onCallRemotelyAnswered(event.data.call);
373
+ break;
374
+ default:
375
+ this.onUnHandledEvent(event);
376
+ break;
144
377
  }
145
378
  }
379
+
380
+ _sendMessage(type , payload = {}) {
381
+ if (!this.iframe || !this.iframeLoaded) {
382
+ this._pendingMessages.push([type, payload]);
383
+ return;
384
+ }
385
+
386
+ this.iframe.contentWindow.postMessage({ type, ...payload }, '*');
387
+ }
146
388
  }
147
389
 
148
390
  var Softphone$1 = new Softphone();