@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
@@ -8037,7 +8037,7 @@ class WebRTCClient extends Emitter {
8037
8037
  }
8038
8038
 
8039
8039
  async _onHeartbeatTimeout() {
8040
- logger$9.info('sdk webrtc heartbeat timed out', { userAgent: !!this.userAgent, cb: !!this.heartbeatTimeoutCb });
8040
+ logger$9.warn('sdk webrtc heartbeat timed out', { userAgent: !!this.userAgent, cb: !!this.heartbeatTimeoutCb });
8041
8041
 
8042
8042
  if (this.heartbeatTimeoutCb) {
8043
8043
  this.heartbeatTimeoutCb();
@@ -13683,40 +13683,159 @@ class Checker {
13683
13683
  //
13684
13684
  /* eslint-disable no-unused-vars */
13685
13685
  /* global window, document */
13686
+ const BRIDGE_CONFIG_RETRIEVED = 'bridge/CONFIG_RETRIEVED';
13687
+ const BRIDGE_CREATE_OR_UPDATE_CARD = 'bridge/BRIDGE_CREATE_OR_UPDATE_CARD';
13688
+ const BRIDGE_OPTIONS_FETCHED = 'bridge/BRIDGE_OPTIONS_FETCHED';
13689
+ const BRIDGE_OPTIONS_FOUND = 'bridge/BRIDGE_OPTIONS_FOUND';
13690
+ const BRIDGE_SEARCH_OPTIONS = 'bridge/BRIDGE_SEARCH_OPTIONS';
13691
+ const BRIDGE_DISPLAY_LINKED_OPTION = 'bridge/DISPLAY_LINKED_OPTION';
13692
+ const BRIDGE_UPDATE_FORM_SCHEMA = 'bridge/BRIDGE_UPDATE_FORM_SCHEMA';
13693
+ const BRIDGE_WAZO_CONTACT_SEARCH = 'bridge/BRIDGE_WAZO_CONTACT_SEARCH';
13694
+ const BRIDGE_ON_AGENT_LOGGED_IN = 'bridge/BRIDGE_ON_AGENT_LOGGED_IN';
13695
+ const BRIDGE_ON_AGENT_LOGGED_OUT = 'bridge/BRIDGE_ON_AGENT_LOGGED_OUT';
13696
+ const BRIDGE_ON_AGENT_PAUSED = 'bridge/BRIDGE_ON_AGENT_PAUSED';
13697
+ const BRIDGE_ON_AGENT_RESUMED = 'bridge/BRIDGE_ON_AGENT_RESUMED';
13698
+ const BRIDGE_ON_LANGUAGE_CHANGED = 'bridge/BRIDGE_ON_LANGUAGE_CHANGED';
13699
+ const BRIDGE_ON_CALL_LOCALLY_ACCEPTED = 'bridge/BRIDGE_ON_CALL_LOCALLY_ACCEPTED';
13700
+ const BRIDGE_ON_CALL_REJECTED = 'bridge/BRIDGE_ON_CALL_REJECTED';
13701
+ const BRIDGE_ON_CALL_REMOTELY_ACCEPTED = 'bridge/BRIDGE_ON_CALL_REMOTELY_ACCEPTED';
13702
+ const BRIDGE_ON_CALL_HELD = 'bridge/BRIDGE_ON_CALL_HELD';
13703
+ const BRIDGE_ON_CALL_RESUMED = 'bridge/BRIDGE_ON_CALL_RESUMED';
13704
+ const BRIDGE_ON_CALL_MUTED = 'bridge/BRIDGE_ON_CALL_MUTED';
13705
+ const BRIDGE_ON_CALL_UN_MUTED = 'bridge/BRIDGE_ON_CALL_UN_MUTED';
13706
+ const BRIDGE_ON_DTMF = 'bridge/BRIDGE_ON_DTMF';
13707
+ const BRIDGE_ON_DIRECT_TRANSFER = 'bridge/BRIDGE_ON_DIRECT_TRANSFER';
13708
+ const BRIDGE_ON_CREATE_INDIRECT_TRANSFER = 'bridge/BRIDGE_ON_CREATE_INDIRECT_TRANSFER';
13709
+ const BRIDGE_ON_CANCEL_INDIRECT_TRANSFER = 'bridge/BRIDGE_ON_CANCEL_INDIRECT_TRANSFER';
13710
+ const BRIDGE_ON_CONFIRM_INDIRECT_TRANSFER = 'bridge/BRIDGE_ON_CONFIRM_INDIRECT_TRANSFER';
13711
+ const BRIDGE_ON_INDIRECT_TRANSFER_CALL_MADE = 'bridge/BRIDGE_ON_INDIRECT_TRANSFER_CALL_MADE';
13712
+ const BRIDGE_ON_INDIRECT_TRANSFER_DONE = 'bridge/BRIDGE_ON_INDIRECT_TRANSFER_DONE';
13713
+ const BRIDGE_ON_START_RECORDING = 'bridge/BRIDGE_ON_START_RECORDING';
13714
+ const BRIDGE_ON_STOP_RECORDING = 'bridge/BRIDGE_ON_STOP_RECORDING';
13715
+ const BRIDGE_ON_CARD_CANCELED = 'bridge/BRIDGE_ON_CARD_CANCELED';
13716
+ const BRIDGE_ENABLE_AGENT = 'bridge/BRIDGE_ENABLE_AGENT';
13717
+ const BRIDGE_SET_CARD_CONTENT = 'bridge/BRIDGE_SET_CARD_CONTENT';
13718
+ const BRIDGE_ENABLE_DEBUG = 'bridge/BRIDGE_ENABLE_DEBUG';
13719
+
13720
+ const BRIDGE_INJECT_CSS = 'bridge/BRIDGE_INJECT_CSS';
13721
+ const BRIDGE_CUSTOMIZE_APPEARANCE = 'bridge/BRIDGE_CUSTOMIZE_APPEARANCE';
13722
+
13686
13723
  const SDK_CLICK_TO_CALL = 'sdk/CLICK_TO_CALL';
13687
- const SDK_ON_CALL_MADE = 'sdk/SDK_ON_CALL_MADE';
13724
+ const SDK_ON_OUTGOING_CALL_MADE = 'sdk/SDK_ON_OUTGOING_CALL_MADE';
13688
13725
  const SDK_CALL_ENDED = 'sdk/ON_CALL_ENDED';
13689
13726
  const SDK_CALL_INCOMING = 'sdk/SDK_CALL_INCOMING';
13690
13727
  const SDK_AUTHENTICATED = 'sdk/SDK_AUTHENTICATED';
13728
+ const SDK_LOGGED_OUT = 'sdk/SDK_LOGGED_OUT';
13691
13729
 
13692
13730
  class Softphone {
13693
- url = 'https://softphone.wazo.io';
13694
- width = 500;
13695
- height = 600;
13696
- displayed = false;
13697
- iframe = null;
13731
+
13732
+
13733
+
13734
+
13735
+
13736
+
13737
+
13738
+ // Message waiting for the iframe to be loaded
13739
+
13698
13740
 
13699
13741
  onLinkEnabled(link ) {}
13742
+ onIFrameLoaded() {}
13700
13743
 
13701
- onCallMade(call ) {}
13744
+ onCallLocallyAnswered(call ) {}
13745
+ onCallRemotelyAnswered(call ) {}
13746
+ onOutgoingCallMade(call ) {}
13702
13747
  onCallIncoming(call ) {}
13748
+ onCallRejected(call ) {}
13703
13749
  onCallEnded(call , card , direction , fromExtension ) {}
13750
+
13751
+ onCardSaved(card ) {}
13752
+ onCardCanceled() {}
13704
13753
  onAuthenticated(session ) {}
13754
+ onLoggedOut() {}
13755
+
13756
+ onSearchOptions(fieldId , query ) {
13757
+ this.onOptionsResults(fieldId, []);
13758
+ }
13759
+
13760
+ onDisplayLinkedOption(optionId ) {}
13761
+ onWazoContactSearch(query ) {}
13762
+ onAgentLoggedIn() {}
13763
+ onAgentLoggedOut() {}
13764
+ onAgentPaused() {}
13765
+ onAgentResumed() {}
13766
+ onLanguageChanged(language ) {}
13767
+ onCallHeld() {}
13768
+ onCallResumed() {}
13769
+ onCallMuted() {}
13770
+ onCallUnMuted() {}
13771
+ onDtmfSent(tone ) {}
13772
+ onDirectTransfer(number ) {}
13773
+ onCreateIndirectTransfer(number ) {}
13774
+ onCancelIndirectTransfer() {}
13775
+ onConfirmIndirectTransfer() {}
13776
+ onIndirectCallMade(call ) {}
13777
+ onIndirectTransferDone(call ) {}
13778
+ onStartRecording() {}
13779
+ onStopRecording() {}
13780
+ onUnHandledEvent(event ) {}
13781
+
13782
+ init({
13783
+ url,
13784
+ width,
13785
+ height,
13786
+ server,
13787
+ port,
13788
+ language,
13789
+ wrapUpDuration,
13790
+ enableAgent = true,
13791
+ tenantId,
13792
+ debug = false,
13793
+ } = {}) {
13794
+ this.url = url || 'https://softphone.wazo.io';
13795
+ this.width = width || 500;
13796
+ this.height = height || 600;
13797
+ this.displayed = false;
13798
+ this.iframeLoaded = false;
13799
+
13800
+ this.iframeLoaded = false;
13801
+ this._pendingMessages = [];
13802
+ window.addEventListener('message', this._onMessage.bind(this), false);
13803
+
13804
+ if (!server) {
13805
+ // eslint-disable-next-line no-param-reassign
13806
+ server = 'stack.dev.wazo.io';
13807
+ }
13705
13808
 
13706
- init(url , width , height ) {
13707
- if (url) {
13708
- this.url = url;
13809
+ const config = { server };
13810
+ if (language) {
13811
+ config.language = language;
13812
+ }
13813
+ if (port) {
13814
+ config.port = port;
13709
13815
  }
13710
- if (width) {
13711
- this.width = width;
13816
+ if (tenantId) {
13817
+ config.tenantId = tenantId;
13712
13818
  }
13713
- if (height) {
13714
- this.height = height;
13819
+ if (wrapUpDuration) {
13820
+ config.wrapUpDuration = wrapUpDuration;
13715
13821
  }
13716
13822
 
13717
- window.addEventListener('message', this._onMessage.bind(this), false);
13823
+ this._sendMessage(BRIDGE_CONFIG_RETRIEVED, { config });
13718
13824
 
13719
- this._createIframe();
13825
+ if (enableAgent) {
13826
+ this._sendMessage(BRIDGE_ENABLE_AGENT);
13827
+ }
13828
+
13829
+ if (debug) {
13830
+ this._sendMessage(BRIDGE_ENABLE_DEBUG);
13831
+ }
13832
+
13833
+ this._createIframe(() => {
13834
+ this.iframeLoaded = true;
13835
+ this._pendingMessages.forEach(([type, payload]) => this._sendMessage(type, payload));
13836
+
13837
+ this.onIFrameLoaded();
13838
+ });
13720
13839
  }
13721
13840
 
13722
13841
  parseLinks() {
@@ -13732,9 +13851,7 @@ class Softphone {
13732
13851
  makeCall(number ) {
13733
13852
  this.displaySoftphone();
13734
13853
 
13735
- if (this.iframe) {
13736
- this.iframe.contentWindow.postMessage({ type: SDK_CLICK_TO_CALL, number }, '*');
13737
- }
13854
+ this._sendMessage(SDK_CLICK_TO_CALL, { number });
13738
13855
  }
13739
13856
 
13740
13857
  toggleSoftphoneDisplay() {
@@ -13743,8 +13860,6 @@ class Softphone {
13743
13860
  } else {
13744
13861
  this.displaySoftphone();
13745
13862
  }
13746
-
13747
- this.displayed = !this.displayed;
13748
13863
  }
13749
13864
 
13750
13865
  displaySoftphone() {
@@ -13755,15 +13870,42 @@ class Softphone {
13755
13870
  if (this.iframe) {
13756
13871
  this.iframe.style.display = 'block';
13757
13872
  }
13873
+
13874
+ this.displayed = true;
13758
13875
  }
13759
13876
 
13760
13877
  hideSoftphone() {
13761
13878
  if (this.iframe) {
13762
13879
  this.iframe.style.display = 'none';
13763
13880
  }
13881
+ this.displayed = false;
13882
+ }
13883
+
13884
+ optionsFetched(fieldId , options ) {
13885
+ this._sendMessage(BRIDGE_OPTIONS_FETCHED, { fieldId, options });
13886
+ }
13887
+
13888
+ onOptionsResults(fieldId , options ) {
13889
+ this._sendMessage(BRIDGE_OPTIONS_FOUND, { fieldId, options });
13890
+ }
13891
+
13892
+ setFormSchema(schema , uiSchema ) {
13893
+ this._sendMessage(BRIDGE_UPDATE_FORM_SCHEMA, { schema, uiSchema });
13894
+ }
13895
+
13896
+ setCardValue(field , value ) {
13897
+ this._sendMessage(BRIDGE_SET_CARD_CONTENT, { field, value });
13898
+ }
13899
+
13900
+ injectCss(css ) {
13901
+ this._sendMessage(BRIDGE_INJECT_CSS, { css });
13764
13902
  }
13765
13903
 
13766
- _createIframe() {
13904
+ customizeAppearance(themes , translations , assets ) {
13905
+ this._sendMessage(BRIDGE_CUSTOMIZE_APPEARANCE, { themes, translations, assets });
13906
+ }
13907
+
13908
+ _createIframe(cb = () => {}) {
13767
13909
  this.iframe = document.createElement('iframe');
13768
13910
  // $FlowFixMe
13769
13911
  this.iframe.width = this.width;
@@ -13775,10 +13917,13 @@ class Softphone {
13775
13917
  this.iframe.style.left = '0';
13776
13918
  this.iframe.style.bottom = '0';
13777
13919
  this.iframe.style.border = '1px solid #aaa';
13920
+ this.iframe.style.backgroundColor = 'white';
13778
13921
  this.iframe.src = this.url;
13779
13922
  this.iframe.style.display = 'none';
13780
13923
  this.iframe.id = 'wazo-softphone';
13781
13924
 
13925
+ this.iframe.onload = cb;
13926
+
13782
13927
  // $FlowFixMe
13783
13928
  document.body.appendChild(this.iframe);
13784
13929
  }
@@ -13805,8 +13950,8 @@ class Softphone {
13805
13950
  }
13806
13951
 
13807
13952
  switch (event.data.type) {
13808
- case SDK_ON_CALL_MADE:
13809
- this.onCallMade(event.data.callSession);
13953
+ case SDK_ON_OUTGOING_CALL_MADE:
13954
+ this.onOutgoingCallMade(event.data.callSession);
13810
13955
  break;
13811
13956
  case SDK_CALL_ENDED: {
13812
13957
  const { callSession, content, direction, userExtension } = event.data;
@@ -13821,8 +13966,105 @@ class Softphone {
13821
13966
  this._onAuthenticated(event.data.session);
13822
13967
  this.onAuthenticated(event.data.session);
13823
13968
  break;
13969
+ case SDK_LOGGED_OUT:
13970
+ this.onLoggedOut();
13971
+ break;
13972
+ case BRIDGE_CREATE_OR_UPDATE_CARD: {
13973
+ const { content } = event.data;
13974
+ this.onCardSaved(content);
13975
+ break;
13976
+ }
13977
+ case BRIDGE_SEARCH_OPTIONS: {
13978
+ const { fieldId, query } = event.data;
13979
+ this.onSearchOptions(fieldId, query);
13980
+ break;
13981
+ }
13982
+ case BRIDGE_DISPLAY_LINKED_OPTION:
13983
+ this.onDisplayLinkedOption(event.data.linkedOptionId);
13984
+ break;
13985
+ case BRIDGE_WAZO_CONTACT_SEARCH:
13986
+ this.onWazoContactSearch(event.data.query);
13987
+ break;
13988
+ case BRIDGE_ON_AGENT_LOGGED_IN:
13989
+ this.onAgentLoggedIn();
13990
+ break;
13991
+ case BRIDGE_ON_AGENT_LOGGED_OUT:
13992
+ this.onAgentLoggedOut();
13993
+ break;
13994
+ case BRIDGE_ON_AGENT_PAUSED:
13995
+ this.onAgentPaused();
13996
+ break;
13997
+ case BRIDGE_ON_AGENT_RESUMED:
13998
+ this.onAgentResumed();
13999
+ break;
14000
+ case BRIDGE_ON_LANGUAGE_CHANGED:
14001
+ this.onLanguageChanged(event.data.language);
14002
+ break;
14003
+ case BRIDGE_ON_CALL_HELD:
14004
+ this.onCallHeld();
14005
+ break;
14006
+ case BRIDGE_ON_CALL_RESUMED:
14007
+ this.onCallResumed();
14008
+ break;
14009
+ case BRIDGE_ON_CALL_MUTED:
14010
+ this.onCallMuted();
14011
+ break;
14012
+ case BRIDGE_ON_CALL_UN_MUTED:
14013
+ this.onCallUnMuted();
14014
+ break;
14015
+ case BRIDGE_ON_DTMF:
14016
+ this.onDtmfSent(event.data.tone);
14017
+ break;
14018
+ case BRIDGE_ON_DIRECT_TRANSFER:
14019
+ this.onDirectTransfer(event.data.number);
14020
+ break;
14021
+ case BRIDGE_ON_CREATE_INDIRECT_TRANSFER:
14022
+ this.onCreateIndirectTransfer(event.data.number);
14023
+ break;
14024
+ case BRIDGE_ON_CANCEL_INDIRECT_TRANSFER:
14025
+ this.onCancelIndirectTransfer();
14026
+ break;
14027
+ case BRIDGE_ON_CONFIRM_INDIRECT_TRANSFER:
14028
+ this.onConfirmIndirectTransfer();
14029
+ break;
14030
+ case BRIDGE_ON_INDIRECT_TRANSFER_CALL_MADE:
14031
+ this.onIndirectCallMade(event.data.call);
14032
+ break;
14033
+ case BRIDGE_ON_INDIRECT_TRANSFER_DONE:
14034
+ this.onIndirectTransferDone(event.data.call);
14035
+ break;
14036
+ case BRIDGE_ON_START_RECORDING:
14037
+ this.onStartRecording();
14038
+ break;
14039
+ case BRIDGE_ON_STOP_RECORDING:
14040
+ this.onStopRecording();
14041
+ break;
14042
+ case BRIDGE_ON_CARD_CANCELED:
14043
+ this.onCardCanceled();
14044
+ break;
14045
+ case BRIDGE_ON_CALL_LOCALLY_ACCEPTED:
14046
+ this.onCallLocallyAnswered(event.data.call);
14047
+ break;
14048
+ case BRIDGE_ON_CALL_REJECTED:
14049
+ this.onCallRejected(event.data.call);
14050
+ break;
14051
+ case BRIDGE_ON_CALL_REMOTELY_ACCEPTED:
14052
+ this.onCallRemotelyAnswered(event.data.call);
14053
+ break;
14054
+ default:
14055
+ this.onUnHandledEvent(event);
14056
+ break;
13824
14057
  }
13825
14058
  }
14059
+
14060
+ _sendMessage(type , payload = {}) {
14061
+ if (!this.iframe || !this.iframeLoaded) {
14062
+ this._pendingMessages.push([type, payload]);
14063
+ return;
14064
+ }
14065
+
14066
+ this.iframe.contentWindow.postMessage({ type, ...payload }, '*');
14067
+ }
13826
14068
  }
13827
14069
 
13828
14070
  var Softphone$1 = new Softphone();