@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();
@@ -13833,40 +13833,159 @@ class Checker {
13833
13833
  //
13834
13834
  /* eslint-disable no-unused-vars */
13835
13835
  /* global window, document */
13836
+ const BRIDGE_CONFIG_RETRIEVED = 'bridge/CONFIG_RETRIEVED';
13837
+ const BRIDGE_CREATE_OR_UPDATE_CARD = 'bridge/BRIDGE_CREATE_OR_UPDATE_CARD';
13838
+ const BRIDGE_OPTIONS_FETCHED = 'bridge/BRIDGE_OPTIONS_FETCHED';
13839
+ const BRIDGE_OPTIONS_FOUND = 'bridge/BRIDGE_OPTIONS_FOUND';
13840
+ const BRIDGE_SEARCH_OPTIONS = 'bridge/BRIDGE_SEARCH_OPTIONS';
13841
+ const BRIDGE_DISPLAY_LINKED_OPTION = 'bridge/DISPLAY_LINKED_OPTION';
13842
+ const BRIDGE_UPDATE_FORM_SCHEMA = 'bridge/BRIDGE_UPDATE_FORM_SCHEMA';
13843
+ const BRIDGE_WAZO_CONTACT_SEARCH = 'bridge/BRIDGE_WAZO_CONTACT_SEARCH';
13844
+ const BRIDGE_ON_AGENT_LOGGED_IN = 'bridge/BRIDGE_ON_AGENT_LOGGED_IN';
13845
+ const BRIDGE_ON_AGENT_LOGGED_OUT = 'bridge/BRIDGE_ON_AGENT_LOGGED_OUT';
13846
+ const BRIDGE_ON_AGENT_PAUSED = 'bridge/BRIDGE_ON_AGENT_PAUSED';
13847
+ const BRIDGE_ON_AGENT_RESUMED = 'bridge/BRIDGE_ON_AGENT_RESUMED';
13848
+ const BRIDGE_ON_LANGUAGE_CHANGED = 'bridge/BRIDGE_ON_LANGUAGE_CHANGED';
13849
+ const BRIDGE_ON_CALL_LOCALLY_ACCEPTED = 'bridge/BRIDGE_ON_CALL_LOCALLY_ACCEPTED';
13850
+ const BRIDGE_ON_CALL_REJECTED = 'bridge/BRIDGE_ON_CALL_REJECTED';
13851
+ const BRIDGE_ON_CALL_REMOTELY_ACCEPTED = 'bridge/BRIDGE_ON_CALL_REMOTELY_ACCEPTED';
13852
+ const BRIDGE_ON_CALL_HELD = 'bridge/BRIDGE_ON_CALL_HELD';
13853
+ const BRIDGE_ON_CALL_RESUMED = 'bridge/BRIDGE_ON_CALL_RESUMED';
13854
+ const BRIDGE_ON_CALL_MUTED = 'bridge/BRIDGE_ON_CALL_MUTED';
13855
+ const BRIDGE_ON_CALL_UN_MUTED = 'bridge/BRIDGE_ON_CALL_UN_MUTED';
13856
+ const BRIDGE_ON_DTMF = 'bridge/BRIDGE_ON_DTMF';
13857
+ const BRIDGE_ON_DIRECT_TRANSFER = 'bridge/BRIDGE_ON_DIRECT_TRANSFER';
13858
+ const BRIDGE_ON_CREATE_INDIRECT_TRANSFER = 'bridge/BRIDGE_ON_CREATE_INDIRECT_TRANSFER';
13859
+ const BRIDGE_ON_CANCEL_INDIRECT_TRANSFER = 'bridge/BRIDGE_ON_CANCEL_INDIRECT_TRANSFER';
13860
+ const BRIDGE_ON_CONFIRM_INDIRECT_TRANSFER = 'bridge/BRIDGE_ON_CONFIRM_INDIRECT_TRANSFER';
13861
+ const BRIDGE_ON_INDIRECT_TRANSFER_CALL_MADE = 'bridge/BRIDGE_ON_INDIRECT_TRANSFER_CALL_MADE';
13862
+ const BRIDGE_ON_INDIRECT_TRANSFER_DONE = 'bridge/BRIDGE_ON_INDIRECT_TRANSFER_DONE';
13863
+ const BRIDGE_ON_START_RECORDING = 'bridge/BRIDGE_ON_START_RECORDING';
13864
+ const BRIDGE_ON_STOP_RECORDING = 'bridge/BRIDGE_ON_STOP_RECORDING';
13865
+ const BRIDGE_ON_CARD_CANCELED = 'bridge/BRIDGE_ON_CARD_CANCELED';
13866
+ const BRIDGE_ENABLE_AGENT = 'bridge/BRIDGE_ENABLE_AGENT';
13867
+ const BRIDGE_SET_CARD_CONTENT = 'bridge/BRIDGE_SET_CARD_CONTENT';
13868
+ const BRIDGE_ENABLE_DEBUG = 'bridge/BRIDGE_ENABLE_DEBUG';
13869
+
13870
+ const BRIDGE_INJECT_CSS = 'bridge/BRIDGE_INJECT_CSS';
13871
+ const BRIDGE_CUSTOMIZE_APPEARANCE = 'bridge/BRIDGE_CUSTOMIZE_APPEARANCE';
13872
+
13836
13873
  const SDK_CLICK_TO_CALL = 'sdk/CLICK_TO_CALL';
13837
- const SDK_ON_CALL_MADE = 'sdk/SDK_ON_CALL_MADE';
13874
+ const SDK_ON_OUTGOING_CALL_MADE = 'sdk/SDK_ON_OUTGOING_CALL_MADE';
13838
13875
  const SDK_CALL_ENDED = 'sdk/ON_CALL_ENDED';
13839
13876
  const SDK_CALL_INCOMING = 'sdk/SDK_CALL_INCOMING';
13840
13877
  const SDK_AUTHENTICATED = 'sdk/SDK_AUTHENTICATED';
13878
+ const SDK_LOGGED_OUT = 'sdk/SDK_LOGGED_OUT';
13841
13879
 
13842
13880
  class Softphone {
13843
- url = 'https://softphone.wazo.io';
13844
- width = 500;
13845
- height = 600;
13846
- displayed = false;
13847
- iframe = null;
13881
+
13882
+
13883
+
13884
+
13885
+
13886
+
13887
+
13888
+ // Message waiting for the iframe to be loaded
13889
+
13848
13890
 
13849
13891
  onLinkEnabled(link ) {}
13892
+ onIFrameLoaded() {}
13850
13893
 
13851
- onCallMade(call ) {}
13894
+ onCallLocallyAnswered(call ) {}
13895
+ onCallRemotelyAnswered(call ) {}
13896
+ onOutgoingCallMade(call ) {}
13852
13897
  onCallIncoming(call ) {}
13898
+ onCallRejected(call ) {}
13853
13899
  onCallEnded(call , card , direction , fromExtension ) {}
13900
+
13901
+ onCardSaved(card ) {}
13902
+ onCardCanceled() {}
13854
13903
  onAuthenticated(session ) {}
13904
+ onLoggedOut() {}
13905
+
13906
+ onSearchOptions(fieldId , query ) {
13907
+ this.onOptionsResults(fieldId, []);
13908
+ }
13909
+
13910
+ onDisplayLinkedOption(optionId ) {}
13911
+ onWazoContactSearch(query ) {}
13912
+ onAgentLoggedIn() {}
13913
+ onAgentLoggedOut() {}
13914
+ onAgentPaused() {}
13915
+ onAgentResumed() {}
13916
+ onLanguageChanged(language ) {}
13917
+ onCallHeld() {}
13918
+ onCallResumed() {}
13919
+ onCallMuted() {}
13920
+ onCallUnMuted() {}
13921
+ onDtmfSent(tone ) {}
13922
+ onDirectTransfer(number ) {}
13923
+ onCreateIndirectTransfer(number ) {}
13924
+ onCancelIndirectTransfer() {}
13925
+ onConfirmIndirectTransfer() {}
13926
+ onIndirectCallMade(call ) {}
13927
+ onIndirectTransferDone(call ) {}
13928
+ onStartRecording() {}
13929
+ onStopRecording() {}
13930
+ onUnHandledEvent(event ) {}
13931
+
13932
+ init({
13933
+ url,
13934
+ width,
13935
+ height,
13936
+ server,
13937
+ port,
13938
+ language,
13939
+ wrapUpDuration,
13940
+ enableAgent = true,
13941
+ tenantId,
13942
+ debug = false,
13943
+ } = {}) {
13944
+ this.url = url || 'https://softphone.wazo.io';
13945
+ this.width = width || 500;
13946
+ this.height = height || 600;
13947
+ this.displayed = false;
13948
+ this.iframeLoaded = false;
13949
+
13950
+ this.iframeLoaded = false;
13951
+ this._pendingMessages = [];
13952
+ window.addEventListener('message', this._onMessage.bind(this), false);
13953
+
13954
+ if (!server) {
13955
+ // eslint-disable-next-line no-param-reassign
13956
+ server = 'stack.dev.wazo.io';
13957
+ }
13855
13958
 
13856
- init(url , width , height ) {
13857
- if (url) {
13858
- this.url = url;
13959
+ const config = { server };
13960
+ if (language) {
13961
+ config.language = language;
13962
+ }
13963
+ if (port) {
13964
+ config.port = port;
13859
13965
  }
13860
- if (width) {
13861
- this.width = width;
13966
+ if (tenantId) {
13967
+ config.tenantId = tenantId;
13862
13968
  }
13863
- if (height) {
13864
- this.height = height;
13969
+ if (wrapUpDuration) {
13970
+ config.wrapUpDuration = wrapUpDuration;
13865
13971
  }
13866
13972
 
13867
- window.addEventListener('message', this._onMessage.bind(this), false);
13973
+ this._sendMessage(BRIDGE_CONFIG_RETRIEVED, { config });
13868
13974
 
13869
- this._createIframe();
13975
+ if (enableAgent) {
13976
+ this._sendMessage(BRIDGE_ENABLE_AGENT);
13977
+ }
13978
+
13979
+ if (debug) {
13980
+ this._sendMessage(BRIDGE_ENABLE_DEBUG);
13981
+ }
13982
+
13983
+ this._createIframe(() => {
13984
+ this.iframeLoaded = true;
13985
+ this._pendingMessages.forEach(([type, payload]) => this._sendMessage(type, payload));
13986
+
13987
+ this.onIFrameLoaded();
13988
+ });
13870
13989
  }
13871
13990
 
13872
13991
  parseLinks() {
@@ -13882,9 +14001,7 @@ class Softphone {
13882
14001
  makeCall(number ) {
13883
14002
  this.displaySoftphone();
13884
14003
 
13885
- if (this.iframe) {
13886
- this.iframe.contentWindow.postMessage({ type: SDK_CLICK_TO_CALL, number }, '*');
13887
- }
14004
+ this._sendMessage(SDK_CLICK_TO_CALL, { number });
13888
14005
  }
13889
14006
 
13890
14007
  toggleSoftphoneDisplay() {
@@ -13893,8 +14010,6 @@ class Softphone {
13893
14010
  } else {
13894
14011
  this.displaySoftphone();
13895
14012
  }
13896
-
13897
- this.displayed = !this.displayed;
13898
14013
  }
13899
14014
 
13900
14015
  displaySoftphone() {
@@ -13905,15 +14020,42 @@ class Softphone {
13905
14020
  if (this.iframe) {
13906
14021
  this.iframe.style.display = 'block';
13907
14022
  }
14023
+
14024
+ this.displayed = true;
13908
14025
  }
13909
14026
 
13910
14027
  hideSoftphone() {
13911
14028
  if (this.iframe) {
13912
14029
  this.iframe.style.display = 'none';
13913
14030
  }
14031
+ this.displayed = false;
14032
+ }
14033
+
14034
+ optionsFetched(fieldId , options ) {
14035
+ this._sendMessage(BRIDGE_OPTIONS_FETCHED, { fieldId, options });
14036
+ }
14037
+
14038
+ onOptionsResults(fieldId , options ) {
14039
+ this._sendMessage(BRIDGE_OPTIONS_FOUND, { fieldId, options });
14040
+ }
14041
+
14042
+ setFormSchema(schema , uiSchema ) {
14043
+ this._sendMessage(BRIDGE_UPDATE_FORM_SCHEMA, { schema, uiSchema });
14044
+ }
14045
+
14046
+ setCardValue(field , value ) {
14047
+ this._sendMessage(BRIDGE_SET_CARD_CONTENT, { field, value });
14048
+ }
14049
+
14050
+ injectCss(css ) {
14051
+ this._sendMessage(BRIDGE_INJECT_CSS, { css });
13914
14052
  }
13915
14053
 
13916
- _createIframe() {
14054
+ customizeAppearance(themes , translations , assets ) {
14055
+ this._sendMessage(BRIDGE_CUSTOMIZE_APPEARANCE, { themes, translations, assets });
14056
+ }
14057
+
14058
+ _createIframe(cb = () => {}) {
13917
14059
  this.iframe = document.createElement('iframe');
13918
14060
  // $FlowFixMe
13919
14061
  this.iframe.width = this.width;
@@ -13925,10 +14067,13 @@ class Softphone {
13925
14067
  this.iframe.style.left = '0';
13926
14068
  this.iframe.style.bottom = '0';
13927
14069
  this.iframe.style.border = '1px solid #aaa';
14070
+ this.iframe.style.backgroundColor = 'white';
13928
14071
  this.iframe.src = this.url;
13929
14072
  this.iframe.style.display = 'none';
13930
14073
  this.iframe.id = 'wazo-softphone';
13931
14074
 
14075
+ this.iframe.onload = cb;
14076
+
13932
14077
  // $FlowFixMe
13933
14078
  document.body.appendChild(this.iframe);
13934
14079
  }
@@ -13955,8 +14100,8 @@ class Softphone {
13955
14100
  }
13956
14101
 
13957
14102
  switch (event.data.type) {
13958
- case SDK_ON_CALL_MADE:
13959
- this.onCallMade(event.data.callSession);
14103
+ case SDK_ON_OUTGOING_CALL_MADE:
14104
+ this.onOutgoingCallMade(event.data.callSession);
13960
14105
  break;
13961
14106
  case SDK_CALL_ENDED: {
13962
14107
  const { callSession, content, direction, userExtension } = event.data;
@@ -13971,8 +14116,105 @@ class Softphone {
13971
14116
  this._onAuthenticated(event.data.session);
13972
14117
  this.onAuthenticated(event.data.session);
13973
14118
  break;
14119
+ case SDK_LOGGED_OUT:
14120
+ this.onLoggedOut();
14121
+ break;
14122
+ case BRIDGE_CREATE_OR_UPDATE_CARD: {
14123
+ const { content } = event.data;
14124
+ this.onCardSaved(content);
14125
+ break;
14126
+ }
14127
+ case BRIDGE_SEARCH_OPTIONS: {
14128
+ const { fieldId, query } = event.data;
14129
+ this.onSearchOptions(fieldId, query);
14130
+ break;
14131
+ }
14132
+ case BRIDGE_DISPLAY_LINKED_OPTION:
14133
+ this.onDisplayLinkedOption(event.data.linkedOptionId);
14134
+ break;
14135
+ case BRIDGE_WAZO_CONTACT_SEARCH:
14136
+ this.onWazoContactSearch(event.data.query);
14137
+ break;
14138
+ case BRIDGE_ON_AGENT_LOGGED_IN:
14139
+ this.onAgentLoggedIn();
14140
+ break;
14141
+ case BRIDGE_ON_AGENT_LOGGED_OUT:
14142
+ this.onAgentLoggedOut();
14143
+ break;
14144
+ case BRIDGE_ON_AGENT_PAUSED:
14145
+ this.onAgentPaused();
14146
+ break;
14147
+ case BRIDGE_ON_AGENT_RESUMED:
14148
+ this.onAgentResumed();
14149
+ break;
14150
+ case BRIDGE_ON_LANGUAGE_CHANGED:
14151
+ this.onLanguageChanged(event.data.language);
14152
+ break;
14153
+ case BRIDGE_ON_CALL_HELD:
14154
+ this.onCallHeld();
14155
+ break;
14156
+ case BRIDGE_ON_CALL_RESUMED:
14157
+ this.onCallResumed();
14158
+ break;
14159
+ case BRIDGE_ON_CALL_MUTED:
14160
+ this.onCallMuted();
14161
+ break;
14162
+ case BRIDGE_ON_CALL_UN_MUTED:
14163
+ this.onCallUnMuted();
14164
+ break;
14165
+ case BRIDGE_ON_DTMF:
14166
+ this.onDtmfSent(event.data.tone);
14167
+ break;
14168
+ case BRIDGE_ON_DIRECT_TRANSFER:
14169
+ this.onDirectTransfer(event.data.number);
14170
+ break;
14171
+ case BRIDGE_ON_CREATE_INDIRECT_TRANSFER:
14172
+ this.onCreateIndirectTransfer(event.data.number);
14173
+ break;
14174
+ case BRIDGE_ON_CANCEL_INDIRECT_TRANSFER:
14175
+ this.onCancelIndirectTransfer();
14176
+ break;
14177
+ case BRIDGE_ON_CONFIRM_INDIRECT_TRANSFER:
14178
+ this.onConfirmIndirectTransfer();
14179
+ break;
14180
+ case BRIDGE_ON_INDIRECT_TRANSFER_CALL_MADE:
14181
+ this.onIndirectCallMade(event.data.call);
14182
+ break;
14183
+ case BRIDGE_ON_INDIRECT_TRANSFER_DONE:
14184
+ this.onIndirectTransferDone(event.data.call);
14185
+ break;
14186
+ case BRIDGE_ON_START_RECORDING:
14187
+ this.onStartRecording();
14188
+ break;
14189
+ case BRIDGE_ON_STOP_RECORDING:
14190
+ this.onStopRecording();
14191
+ break;
14192
+ case BRIDGE_ON_CARD_CANCELED:
14193
+ this.onCardCanceled();
14194
+ break;
14195
+ case BRIDGE_ON_CALL_LOCALLY_ACCEPTED:
14196
+ this.onCallLocallyAnswered(event.data.call);
14197
+ break;
14198
+ case BRIDGE_ON_CALL_REJECTED:
14199
+ this.onCallRejected(event.data.call);
14200
+ break;
14201
+ case BRIDGE_ON_CALL_REMOTELY_ACCEPTED:
14202
+ this.onCallRemotelyAnswered(event.data.call);
14203
+ break;
14204
+ default:
14205
+ this.onUnHandledEvent(event);
14206
+ break;
13974
14207
  }
13975
14208
  }
14209
+
14210
+ _sendMessage(type , payload = {}) {
14211
+ if (!this.iframe || !this.iframeLoaded) {
14212
+ this._pendingMessages.push([type, payload]);
14213
+ return;
14214
+ }
14215
+
14216
+ this.iframe.contentWindow.postMessage({ type, ...payload }, '*');
14217
+ }
13976
14218
  }
13977
14219
 
13978
14220
  var Softphone$1 = new Softphone();