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