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