@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
@@ -8326,7 +8326,7 @@ class WebRTCClient extends Emitter {
8326
8326
  }
8327
8327
 
8328
8328
  async _onHeartbeatTimeout() {
8329
- logger$8.info('sdk webrtc heartbeat timed out', { userAgent: !!this.userAgent, cb: !!this.heartbeatTimeoutCb });
8329
+ logger$8.warn('sdk webrtc heartbeat timed out', { userAgent: !!this.userAgent, cb: !!this.heartbeatTimeoutCb });
8330
8330
 
8331
8331
  if (this.heartbeatTimeoutCb) {
8332
8332
  this.heartbeatTimeoutCb();
@@ -12841,40 +12841,159 @@ class Checker {
12841
12841
  //
12842
12842
  /* eslint-disable no-unused-vars */
12843
12843
  /* global window, document */
12844
+ const BRIDGE_CONFIG_RETRIEVED = 'bridge/CONFIG_RETRIEVED';
12845
+ const BRIDGE_CREATE_OR_UPDATE_CARD = 'bridge/BRIDGE_CREATE_OR_UPDATE_CARD';
12846
+ const BRIDGE_OPTIONS_FETCHED = 'bridge/BRIDGE_OPTIONS_FETCHED';
12847
+ const BRIDGE_OPTIONS_FOUND = 'bridge/BRIDGE_OPTIONS_FOUND';
12848
+ const BRIDGE_SEARCH_OPTIONS = 'bridge/BRIDGE_SEARCH_OPTIONS';
12849
+ const BRIDGE_DISPLAY_LINKED_OPTION = 'bridge/DISPLAY_LINKED_OPTION';
12850
+ const BRIDGE_UPDATE_FORM_SCHEMA = 'bridge/BRIDGE_UPDATE_FORM_SCHEMA';
12851
+ const BRIDGE_WAZO_CONTACT_SEARCH = 'bridge/BRIDGE_WAZO_CONTACT_SEARCH';
12852
+ const BRIDGE_ON_AGENT_LOGGED_IN = 'bridge/BRIDGE_ON_AGENT_LOGGED_IN';
12853
+ const BRIDGE_ON_AGENT_LOGGED_OUT = 'bridge/BRIDGE_ON_AGENT_LOGGED_OUT';
12854
+ const BRIDGE_ON_AGENT_PAUSED = 'bridge/BRIDGE_ON_AGENT_PAUSED';
12855
+ const BRIDGE_ON_AGENT_RESUMED = 'bridge/BRIDGE_ON_AGENT_RESUMED';
12856
+ const BRIDGE_ON_LANGUAGE_CHANGED = 'bridge/BRIDGE_ON_LANGUAGE_CHANGED';
12857
+ const BRIDGE_ON_CALL_LOCALLY_ACCEPTED = 'bridge/BRIDGE_ON_CALL_LOCALLY_ACCEPTED';
12858
+ const BRIDGE_ON_CALL_REJECTED = 'bridge/BRIDGE_ON_CALL_REJECTED';
12859
+ const BRIDGE_ON_CALL_REMOTELY_ACCEPTED = 'bridge/BRIDGE_ON_CALL_REMOTELY_ACCEPTED';
12860
+ const BRIDGE_ON_CALL_HELD = 'bridge/BRIDGE_ON_CALL_HELD';
12861
+ const BRIDGE_ON_CALL_RESUMED = 'bridge/BRIDGE_ON_CALL_RESUMED';
12862
+ const BRIDGE_ON_CALL_MUTED = 'bridge/BRIDGE_ON_CALL_MUTED';
12863
+ const BRIDGE_ON_CALL_UN_MUTED = 'bridge/BRIDGE_ON_CALL_UN_MUTED';
12864
+ const BRIDGE_ON_DTMF = 'bridge/BRIDGE_ON_DTMF';
12865
+ const BRIDGE_ON_DIRECT_TRANSFER = 'bridge/BRIDGE_ON_DIRECT_TRANSFER';
12866
+ const BRIDGE_ON_CREATE_INDIRECT_TRANSFER = 'bridge/BRIDGE_ON_CREATE_INDIRECT_TRANSFER';
12867
+ const BRIDGE_ON_CANCEL_INDIRECT_TRANSFER = 'bridge/BRIDGE_ON_CANCEL_INDIRECT_TRANSFER';
12868
+ const BRIDGE_ON_CONFIRM_INDIRECT_TRANSFER = 'bridge/BRIDGE_ON_CONFIRM_INDIRECT_TRANSFER';
12869
+ const BRIDGE_ON_INDIRECT_TRANSFER_CALL_MADE = 'bridge/BRIDGE_ON_INDIRECT_TRANSFER_CALL_MADE';
12870
+ const BRIDGE_ON_INDIRECT_TRANSFER_DONE = 'bridge/BRIDGE_ON_INDIRECT_TRANSFER_DONE';
12871
+ const BRIDGE_ON_START_RECORDING = 'bridge/BRIDGE_ON_START_RECORDING';
12872
+ const BRIDGE_ON_STOP_RECORDING = 'bridge/BRIDGE_ON_STOP_RECORDING';
12873
+ const BRIDGE_ON_CARD_CANCELED = 'bridge/BRIDGE_ON_CARD_CANCELED';
12874
+ const BRIDGE_ENABLE_AGENT = 'bridge/BRIDGE_ENABLE_AGENT';
12875
+ const BRIDGE_SET_CARD_CONTENT = 'bridge/BRIDGE_SET_CARD_CONTENT';
12876
+ const BRIDGE_ENABLE_DEBUG = 'bridge/BRIDGE_ENABLE_DEBUG';
12877
+
12878
+ const BRIDGE_INJECT_CSS = 'bridge/BRIDGE_INJECT_CSS';
12879
+ const BRIDGE_CUSTOMIZE_APPEARANCE = 'bridge/BRIDGE_CUSTOMIZE_APPEARANCE';
12880
+
12844
12881
  const SDK_CLICK_TO_CALL = 'sdk/CLICK_TO_CALL';
12845
- const SDK_ON_CALL_MADE = 'sdk/SDK_ON_CALL_MADE';
12882
+ const SDK_ON_OUTGOING_CALL_MADE = 'sdk/SDK_ON_OUTGOING_CALL_MADE';
12846
12883
  const SDK_CALL_ENDED = 'sdk/ON_CALL_ENDED';
12847
12884
  const SDK_CALL_INCOMING = 'sdk/SDK_CALL_INCOMING';
12848
12885
  const SDK_AUTHENTICATED = 'sdk/SDK_AUTHENTICATED';
12886
+ const SDK_LOGGED_OUT = 'sdk/SDK_LOGGED_OUT';
12849
12887
 
12850
12888
  class Softphone {
12851
- url = 'https://softphone.wazo.io';
12852
- width = 500;
12853
- height = 600;
12854
- displayed = false;
12855
- iframe = null;
12889
+
12890
+
12891
+
12892
+
12893
+
12894
+
12895
+
12896
+ // Message waiting for the iframe to be loaded
12897
+
12856
12898
 
12857
12899
  onLinkEnabled(link ) {}
12900
+ onIFrameLoaded() {}
12858
12901
 
12859
- onCallMade(call ) {}
12902
+ onCallLocallyAnswered(call ) {}
12903
+ onCallRemotelyAnswered(call ) {}
12904
+ onOutgoingCallMade(call ) {}
12860
12905
  onCallIncoming(call ) {}
12906
+ onCallRejected(call ) {}
12861
12907
  onCallEnded(call , card , direction , fromExtension ) {}
12908
+
12909
+ onCardSaved(card ) {}
12910
+ onCardCanceled() {}
12862
12911
  onAuthenticated(session ) {}
12912
+ onLoggedOut() {}
12913
+
12914
+ onSearchOptions(fieldId , query ) {
12915
+ this.onOptionsResults(fieldId, []);
12916
+ }
12917
+
12918
+ onDisplayLinkedOption(optionId ) {}
12919
+ onWazoContactSearch(query ) {}
12920
+ onAgentLoggedIn() {}
12921
+ onAgentLoggedOut() {}
12922
+ onAgentPaused() {}
12923
+ onAgentResumed() {}
12924
+ onLanguageChanged(language ) {}
12925
+ onCallHeld() {}
12926
+ onCallResumed() {}
12927
+ onCallMuted() {}
12928
+ onCallUnMuted() {}
12929
+ onDtmfSent(tone ) {}
12930
+ onDirectTransfer(number ) {}
12931
+ onCreateIndirectTransfer(number ) {}
12932
+ onCancelIndirectTransfer() {}
12933
+ onConfirmIndirectTransfer() {}
12934
+ onIndirectCallMade(call ) {}
12935
+ onIndirectTransferDone(call ) {}
12936
+ onStartRecording() {}
12937
+ onStopRecording() {}
12938
+ onUnHandledEvent(event ) {}
12939
+
12940
+ init({
12941
+ url,
12942
+ width,
12943
+ height,
12944
+ server,
12945
+ port,
12946
+ language,
12947
+ wrapUpDuration,
12948
+ enableAgent = true,
12949
+ tenantId,
12950
+ debug = false,
12951
+ } = {}) {
12952
+ this.url = url || 'https://softphone.wazo.io';
12953
+ this.width = width || 500;
12954
+ this.height = height || 600;
12955
+ this.displayed = false;
12956
+ this.iframeLoaded = false;
12957
+
12958
+ this.iframeLoaded = false;
12959
+ this._pendingMessages = [];
12960
+ window.addEventListener('message', this._onMessage.bind(this), false);
12961
+
12962
+ if (!server) {
12963
+ // eslint-disable-next-line no-param-reassign
12964
+ server = 'stack.dev.wazo.io';
12965
+ }
12863
12966
 
12864
- init(url , width , height ) {
12865
- if (url) {
12866
- this.url = url;
12967
+ const config = { server };
12968
+ if (language) {
12969
+ config.language = language;
12970
+ }
12971
+ if (port) {
12972
+ config.port = port;
12867
12973
  }
12868
- if (width) {
12869
- this.width = width;
12974
+ if (tenantId) {
12975
+ config.tenantId = tenantId;
12870
12976
  }
12871
- if (height) {
12872
- this.height = height;
12977
+ if (wrapUpDuration) {
12978
+ config.wrapUpDuration = wrapUpDuration;
12873
12979
  }
12874
12980
 
12875
- window.addEventListener('message', this._onMessage.bind(this), false);
12981
+ this._sendMessage(BRIDGE_CONFIG_RETRIEVED, { config });
12876
12982
 
12877
- this._createIframe();
12983
+ if (enableAgent) {
12984
+ this._sendMessage(BRIDGE_ENABLE_AGENT);
12985
+ }
12986
+
12987
+ if (debug) {
12988
+ this._sendMessage(BRIDGE_ENABLE_DEBUG);
12989
+ }
12990
+
12991
+ this._createIframe(() => {
12992
+ this.iframeLoaded = true;
12993
+ this._pendingMessages.forEach(([type, payload]) => this._sendMessage(type, payload));
12994
+
12995
+ this.onIFrameLoaded();
12996
+ });
12878
12997
  }
12879
12998
 
12880
12999
  parseLinks() {
@@ -12890,9 +13009,7 @@ class Softphone {
12890
13009
  makeCall(number ) {
12891
13010
  this.displaySoftphone();
12892
13011
 
12893
- if (this.iframe) {
12894
- this.iframe.contentWindow.postMessage({ type: SDK_CLICK_TO_CALL, number }, '*');
12895
- }
13012
+ this._sendMessage(SDK_CLICK_TO_CALL, { number });
12896
13013
  }
12897
13014
 
12898
13015
  toggleSoftphoneDisplay() {
@@ -12901,8 +13018,6 @@ class Softphone {
12901
13018
  } else {
12902
13019
  this.displaySoftphone();
12903
13020
  }
12904
-
12905
- this.displayed = !this.displayed;
12906
13021
  }
12907
13022
 
12908
13023
  displaySoftphone() {
@@ -12913,15 +13028,42 @@ class Softphone {
12913
13028
  if (this.iframe) {
12914
13029
  this.iframe.style.display = 'block';
12915
13030
  }
13031
+
13032
+ this.displayed = true;
12916
13033
  }
12917
13034
 
12918
13035
  hideSoftphone() {
12919
13036
  if (this.iframe) {
12920
13037
  this.iframe.style.display = 'none';
12921
13038
  }
13039
+ this.displayed = false;
13040
+ }
13041
+
13042
+ optionsFetched(fieldId , options ) {
13043
+ this._sendMessage(BRIDGE_OPTIONS_FETCHED, { fieldId, options });
13044
+ }
13045
+
13046
+ onOptionsResults(fieldId , options ) {
13047
+ this._sendMessage(BRIDGE_OPTIONS_FOUND, { fieldId, options });
13048
+ }
13049
+
13050
+ setFormSchema(schema , uiSchema ) {
13051
+ this._sendMessage(BRIDGE_UPDATE_FORM_SCHEMA, { schema, uiSchema });
13052
+ }
13053
+
13054
+ setCardValue(field , value ) {
13055
+ this._sendMessage(BRIDGE_SET_CARD_CONTENT, { field, value });
13056
+ }
13057
+
13058
+ injectCss(css ) {
13059
+ this._sendMessage(BRIDGE_INJECT_CSS, { css });
12922
13060
  }
12923
13061
 
12924
- _createIframe() {
13062
+ customizeAppearance(themes , translations , assets ) {
13063
+ this._sendMessage(BRIDGE_CUSTOMIZE_APPEARANCE, { themes, translations, assets });
13064
+ }
13065
+
13066
+ _createIframe(cb = () => {}) {
12925
13067
  this.iframe = document.createElement('iframe');
12926
13068
  // $FlowFixMe
12927
13069
  this.iframe.width = this.width;
@@ -12933,10 +13075,13 @@ class Softphone {
12933
13075
  this.iframe.style.left = '0';
12934
13076
  this.iframe.style.bottom = '0';
12935
13077
  this.iframe.style.border = '1px solid #aaa';
13078
+ this.iframe.style.backgroundColor = 'white';
12936
13079
  this.iframe.src = this.url;
12937
13080
  this.iframe.style.display = 'none';
12938
13081
  this.iframe.id = 'wazo-softphone';
12939
13082
 
13083
+ this.iframe.onload = cb;
13084
+
12940
13085
  // $FlowFixMe
12941
13086
  document.body.appendChild(this.iframe);
12942
13087
  }
@@ -12963,8 +13108,8 @@ class Softphone {
12963
13108
  }
12964
13109
 
12965
13110
  switch (event.data.type) {
12966
- case SDK_ON_CALL_MADE:
12967
- this.onCallMade(event.data.callSession);
13111
+ case SDK_ON_OUTGOING_CALL_MADE:
13112
+ this.onOutgoingCallMade(event.data.callSession);
12968
13113
  break;
12969
13114
  case SDK_CALL_ENDED: {
12970
13115
  const { callSession, content, direction, userExtension } = event.data;
@@ -12979,8 +13124,105 @@ class Softphone {
12979
13124
  this._onAuthenticated(event.data.session);
12980
13125
  this.onAuthenticated(event.data.session);
12981
13126
  break;
13127
+ case SDK_LOGGED_OUT:
13128
+ this.onLoggedOut();
13129
+ break;
13130
+ case BRIDGE_CREATE_OR_UPDATE_CARD: {
13131
+ const { content } = event.data;
13132
+ this.onCardSaved(content);
13133
+ break;
13134
+ }
13135
+ case BRIDGE_SEARCH_OPTIONS: {
13136
+ const { fieldId, query } = event.data;
13137
+ this.onSearchOptions(fieldId, query);
13138
+ break;
13139
+ }
13140
+ case BRIDGE_DISPLAY_LINKED_OPTION:
13141
+ this.onDisplayLinkedOption(event.data.linkedOptionId);
13142
+ break;
13143
+ case BRIDGE_WAZO_CONTACT_SEARCH:
13144
+ this.onWazoContactSearch(event.data.query);
13145
+ break;
13146
+ case BRIDGE_ON_AGENT_LOGGED_IN:
13147
+ this.onAgentLoggedIn();
13148
+ break;
13149
+ case BRIDGE_ON_AGENT_LOGGED_OUT:
13150
+ this.onAgentLoggedOut();
13151
+ break;
13152
+ case BRIDGE_ON_AGENT_PAUSED:
13153
+ this.onAgentPaused();
13154
+ break;
13155
+ case BRIDGE_ON_AGENT_RESUMED:
13156
+ this.onAgentResumed();
13157
+ break;
13158
+ case BRIDGE_ON_LANGUAGE_CHANGED:
13159
+ this.onLanguageChanged(event.data.language);
13160
+ break;
13161
+ case BRIDGE_ON_CALL_HELD:
13162
+ this.onCallHeld();
13163
+ break;
13164
+ case BRIDGE_ON_CALL_RESUMED:
13165
+ this.onCallResumed();
13166
+ break;
13167
+ case BRIDGE_ON_CALL_MUTED:
13168
+ this.onCallMuted();
13169
+ break;
13170
+ case BRIDGE_ON_CALL_UN_MUTED:
13171
+ this.onCallUnMuted();
13172
+ break;
13173
+ case BRIDGE_ON_DTMF:
13174
+ this.onDtmfSent(event.data.tone);
13175
+ break;
13176
+ case BRIDGE_ON_DIRECT_TRANSFER:
13177
+ this.onDirectTransfer(event.data.number);
13178
+ break;
13179
+ case BRIDGE_ON_CREATE_INDIRECT_TRANSFER:
13180
+ this.onCreateIndirectTransfer(event.data.number);
13181
+ break;
13182
+ case BRIDGE_ON_CANCEL_INDIRECT_TRANSFER:
13183
+ this.onCancelIndirectTransfer();
13184
+ break;
13185
+ case BRIDGE_ON_CONFIRM_INDIRECT_TRANSFER:
13186
+ this.onConfirmIndirectTransfer();
13187
+ break;
13188
+ case BRIDGE_ON_INDIRECT_TRANSFER_CALL_MADE:
13189
+ this.onIndirectCallMade(event.data.call);
13190
+ break;
13191
+ case BRIDGE_ON_INDIRECT_TRANSFER_DONE:
13192
+ this.onIndirectTransferDone(event.data.call);
13193
+ break;
13194
+ case BRIDGE_ON_START_RECORDING:
13195
+ this.onStartRecording();
13196
+ break;
13197
+ case BRIDGE_ON_STOP_RECORDING:
13198
+ this.onStopRecording();
13199
+ break;
13200
+ case BRIDGE_ON_CARD_CANCELED:
13201
+ this.onCardCanceled();
13202
+ break;
13203
+ case BRIDGE_ON_CALL_LOCALLY_ACCEPTED:
13204
+ this.onCallLocallyAnswered(event.data.call);
13205
+ break;
13206
+ case BRIDGE_ON_CALL_REJECTED:
13207
+ this.onCallRejected(event.data.call);
13208
+ break;
13209
+ case BRIDGE_ON_CALL_REMOTELY_ACCEPTED:
13210
+ this.onCallRemotelyAnswered(event.data.call);
13211
+ break;
13212
+ default:
13213
+ this.onUnHandledEvent(event);
13214
+ break;
12982
13215
  }
12983
13216
  }
13217
+
13218
+ _sendMessage(type , payload = {}) {
13219
+ if (!this.iframe || !this.iframeLoaded) {
13220
+ this._pendingMessages.push([type, payload]);
13221
+ return;
13222
+ }
13223
+
13224
+ this.iframe.contentWindow.postMessage({ type, ...payload }, '*');
13225
+ }
12984
13226
  }
12985
13227
 
12986
13228
  var Softphone$1 = new Softphone();