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