@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();
@@ -13914,40 +13914,159 @@ class Checker {
13914
13914
  //
13915
13915
  /* eslint-disable no-unused-vars */
13916
13916
  /* global window, document */
13917
+ const BRIDGE_CONFIG_RETRIEVED = 'bridge/CONFIG_RETRIEVED';
13918
+ const BRIDGE_CREATE_OR_UPDATE_CARD = 'bridge/BRIDGE_CREATE_OR_UPDATE_CARD';
13919
+ const BRIDGE_OPTIONS_FETCHED = 'bridge/BRIDGE_OPTIONS_FETCHED';
13920
+ const BRIDGE_OPTIONS_FOUND = 'bridge/BRIDGE_OPTIONS_FOUND';
13921
+ const BRIDGE_SEARCH_OPTIONS = 'bridge/BRIDGE_SEARCH_OPTIONS';
13922
+ const BRIDGE_DISPLAY_LINKED_OPTION = 'bridge/DISPLAY_LINKED_OPTION';
13923
+ const BRIDGE_UPDATE_FORM_SCHEMA = 'bridge/BRIDGE_UPDATE_FORM_SCHEMA';
13924
+ const BRIDGE_WAZO_CONTACT_SEARCH = 'bridge/BRIDGE_WAZO_CONTACT_SEARCH';
13925
+ const BRIDGE_ON_AGENT_LOGGED_IN = 'bridge/BRIDGE_ON_AGENT_LOGGED_IN';
13926
+ const BRIDGE_ON_AGENT_LOGGED_OUT = 'bridge/BRIDGE_ON_AGENT_LOGGED_OUT';
13927
+ const BRIDGE_ON_AGENT_PAUSED = 'bridge/BRIDGE_ON_AGENT_PAUSED';
13928
+ const BRIDGE_ON_AGENT_RESUMED = 'bridge/BRIDGE_ON_AGENT_RESUMED';
13929
+ const BRIDGE_ON_LANGUAGE_CHANGED = 'bridge/BRIDGE_ON_LANGUAGE_CHANGED';
13930
+ const BRIDGE_ON_CALL_LOCALLY_ACCEPTED = 'bridge/BRIDGE_ON_CALL_LOCALLY_ACCEPTED';
13931
+ const BRIDGE_ON_CALL_REJECTED = 'bridge/BRIDGE_ON_CALL_REJECTED';
13932
+ const BRIDGE_ON_CALL_REMOTELY_ACCEPTED = 'bridge/BRIDGE_ON_CALL_REMOTELY_ACCEPTED';
13933
+ const BRIDGE_ON_CALL_HELD = 'bridge/BRIDGE_ON_CALL_HELD';
13934
+ const BRIDGE_ON_CALL_RESUMED = 'bridge/BRIDGE_ON_CALL_RESUMED';
13935
+ const BRIDGE_ON_CALL_MUTED = 'bridge/BRIDGE_ON_CALL_MUTED';
13936
+ const BRIDGE_ON_CALL_UN_MUTED = 'bridge/BRIDGE_ON_CALL_UN_MUTED';
13937
+ const BRIDGE_ON_DTMF = 'bridge/BRIDGE_ON_DTMF';
13938
+ const BRIDGE_ON_DIRECT_TRANSFER = 'bridge/BRIDGE_ON_DIRECT_TRANSFER';
13939
+ const BRIDGE_ON_CREATE_INDIRECT_TRANSFER = 'bridge/BRIDGE_ON_CREATE_INDIRECT_TRANSFER';
13940
+ const BRIDGE_ON_CANCEL_INDIRECT_TRANSFER = 'bridge/BRIDGE_ON_CANCEL_INDIRECT_TRANSFER';
13941
+ const BRIDGE_ON_CONFIRM_INDIRECT_TRANSFER = 'bridge/BRIDGE_ON_CONFIRM_INDIRECT_TRANSFER';
13942
+ const BRIDGE_ON_INDIRECT_TRANSFER_CALL_MADE = 'bridge/BRIDGE_ON_INDIRECT_TRANSFER_CALL_MADE';
13943
+ const BRIDGE_ON_INDIRECT_TRANSFER_DONE = 'bridge/BRIDGE_ON_INDIRECT_TRANSFER_DONE';
13944
+ const BRIDGE_ON_START_RECORDING = 'bridge/BRIDGE_ON_START_RECORDING';
13945
+ const BRIDGE_ON_STOP_RECORDING = 'bridge/BRIDGE_ON_STOP_RECORDING';
13946
+ const BRIDGE_ON_CARD_CANCELED = 'bridge/BRIDGE_ON_CARD_CANCELED';
13947
+ const BRIDGE_ENABLE_AGENT = 'bridge/BRIDGE_ENABLE_AGENT';
13948
+ const BRIDGE_SET_CARD_CONTENT = 'bridge/BRIDGE_SET_CARD_CONTENT';
13949
+ const BRIDGE_ENABLE_DEBUG = 'bridge/BRIDGE_ENABLE_DEBUG';
13950
+
13951
+ const BRIDGE_INJECT_CSS = 'bridge/BRIDGE_INJECT_CSS';
13952
+ const BRIDGE_CUSTOMIZE_APPEARANCE = 'bridge/BRIDGE_CUSTOMIZE_APPEARANCE';
13953
+
13917
13954
  const SDK_CLICK_TO_CALL = 'sdk/CLICK_TO_CALL';
13918
- const SDK_ON_CALL_MADE = 'sdk/SDK_ON_CALL_MADE';
13955
+ const SDK_ON_OUTGOING_CALL_MADE = 'sdk/SDK_ON_OUTGOING_CALL_MADE';
13919
13956
  const SDK_CALL_ENDED = 'sdk/ON_CALL_ENDED';
13920
13957
  const SDK_CALL_INCOMING = 'sdk/SDK_CALL_INCOMING';
13921
13958
  const SDK_AUTHENTICATED = 'sdk/SDK_AUTHENTICATED';
13959
+ const SDK_LOGGED_OUT = 'sdk/SDK_LOGGED_OUT';
13922
13960
 
13923
13961
  class Softphone {
13924
- url = 'https://softphone.wazo.io';
13925
- width = 500;
13926
- height = 600;
13927
- displayed = false;
13928
- iframe = null;
13962
+
13963
+
13964
+
13965
+
13966
+
13967
+
13968
+
13969
+ // Message waiting for the iframe to be loaded
13970
+
13929
13971
 
13930
13972
  onLinkEnabled(link ) {}
13973
+ onIFrameLoaded() {}
13931
13974
 
13932
- onCallMade(call ) {}
13975
+ onCallLocallyAnswered(call ) {}
13976
+ onCallRemotelyAnswered(call ) {}
13977
+ onOutgoingCallMade(call ) {}
13933
13978
  onCallIncoming(call ) {}
13979
+ onCallRejected(call ) {}
13934
13980
  onCallEnded(call , card , direction , fromExtension ) {}
13981
+
13982
+ onCardSaved(card ) {}
13983
+ onCardCanceled() {}
13935
13984
  onAuthenticated(session ) {}
13985
+ onLoggedOut() {}
13986
+
13987
+ onSearchOptions(fieldId , query ) {
13988
+ this.onOptionsResults(fieldId, []);
13989
+ }
13990
+
13991
+ onDisplayLinkedOption(optionId ) {}
13992
+ onWazoContactSearch(query ) {}
13993
+ onAgentLoggedIn() {}
13994
+ onAgentLoggedOut() {}
13995
+ onAgentPaused() {}
13996
+ onAgentResumed() {}
13997
+ onLanguageChanged(language ) {}
13998
+ onCallHeld() {}
13999
+ onCallResumed() {}
14000
+ onCallMuted() {}
14001
+ onCallUnMuted() {}
14002
+ onDtmfSent(tone ) {}
14003
+ onDirectTransfer(number ) {}
14004
+ onCreateIndirectTransfer(number ) {}
14005
+ onCancelIndirectTransfer() {}
14006
+ onConfirmIndirectTransfer() {}
14007
+ onIndirectCallMade(call ) {}
14008
+ onIndirectTransferDone(call ) {}
14009
+ onStartRecording() {}
14010
+ onStopRecording() {}
14011
+ onUnHandledEvent(event ) {}
14012
+
14013
+ init({
14014
+ url,
14015
+ width,
14016
+ height,
14017
+ server,
14018
+ port,
14019
+ language,
14020
+ wrapUpDuration,
14021
+ enableAgent = true,
14022
+ tenantId,
14023
+ debug = false,
14024
+ } = {}) {
14025
+ this.url = url || 'https://softphone.wazo.io';
14026
+ this.width = width || 500;
14027
+ this.height = height || 600;
14028
+ this.displayed = false;
14029
+ this.iframeLoaded = false;
14030
+
14031
+ this.iframeLoaded = false;
14032
+ this._pendingMessages = [];
14033
+ window.addEventListener('message', this._onMessage.bind(this), false);
14034
+
14035
+ if (!server) {
14036
+ // eslint-disable-next-line no-param-reassign
14037
+ server = 'stack.dev.wazo.io';
14038
+ }
13936
14039
 
13937
- init(url , width , height ) {
13938
- if (url) {
13939
- this.url = url;
14040
+ const config = { server };
14041
+ if (language) {
14042
+ config.language = language;
14043
+ }
14044
+ if (port) {
14045
+ config.port = port;
13940
14046
  }
13941
- if (width) {
13942
- this.width = width;
14047
+ if (tenantId) {
14048
+ config.tenantId = tenantId;
13943
14049
  }
13944
- if (height) {
13945
- this.height = height;
14050
+ if (wrapUpDuration) {
14051
+ config.wrapUpDuration = wrapUpDuration;
13946
14052
  }
13947
14053
 
13948
- window.addEventListener('message', this._onMessage.bind(this), false);
14054
+ this._sendMessage(BRIDGE_CONFIG_RETRIEVED, { config });
13949
14055
 
13950
- this._createIframe();
14056
+ if (enableAgent) {
14057
+ this._sendMessage(BRIDGE_ENABLE_AGENT);
14058
+ }
14059
+
14060
+ if (debug) {
14061
+ this._sendMessage(BRIDGE_ENABLE_DEBUG);
14062
+ }
14063
+
14064
+ this._createIframe(() => {
14065
+ this.iframeLoaded = true;
14066
+ this._pendingMessages.forEach(([type, payload]) => this._sendMessage(type, payload));
14067
+
14068
+ this.onIFrameLoaded();
14069
+ });
13951
14070
  }
13952
14071
 
13953
14072
  parseLinks() {
@@ -13963,9 +14082,7 @@ class Softphone {
13963
14082
  makeCall(number ) {
13964
14083
  this.displaySoftphone();
13965
14084
 
13966
- if (this.iframe) {
13967
- this.iframe.contentWindow.postMessage({ type: SDK_CLICK_TO_CALL, number }, '*');
13968
- }
14085
+ this._sendMessage(SDK_CLICK_TO_CALL, { number });
13969
14086
  }
13970
14087
 
13971
14088
  toggleSoftphoneDisplay() {
@@ -13974,8 +14091,6 @@ class Softphone {
13974
14091
  } else {
13975
14092
  this.displaySoftphone();
13976
14093
  }
13977
-
13978
- this.displayed = !this.displayed;
13979
14094
  }
13980
14095
 
13981
14096
  displaySoftphone() {
@@ -13986,15 +14101,42 @@ class Softphone {
13986
14101
  if (this.iframe) {
13987
14102
  this.iframe.style.display = 'block';
13988
14103
  }
14104
+
14105
+ this.displayed = true;
13989
14106
  }
13990
14107
 
13991
14108
  hideSoftphone() {
13992
14109
  if (this.iframe) {
13993
14110
  this.iframe.style.display = 'none';
13994
14111
  }
14112
+ this.displayed = false;
14113
+ }
14114
+
14115
+ optionsFetched(fieldId , options ) {
14116
+ this._sendMessage(BRIDGE_OPTIONS_FETCHED, { fieldId, options });
14117
+ }
14118
+
14119
+ onOptionsResults(fieldId , options ) {
14120
+ this._sendMessage(BRIDGE_OPTIONS_FOUND, { fieldId, options });
14121
+ }
14122
+
14123
+ setFormSchema(schema , uiSchema ) {
14124
+ this._sendMessage(BRIDGE_UPDATE_FORM_SCHEMA, { schema, uiSchema });
14125
+ }
14126
+
14127
+ setCardValue(field , value ) {
14128
+ this._sendMessage(BRIDGE_SET_CARD_CONTENT, { field, value });
14129
+ }
14130
+
14131
+ injectCss(css ) {
14132
+ this._sendMessage(BRIDGE_INJECT_CSS, { css });
13995
14133
  }
13996
14134
 
13997
- _createIframe() {
14135
+ customizeAppearance(themes , translations , assets ) {
14136
+ this._sendMessage(BRIDGE_CUSTOMIZE_APPEARANCE, { themes, translations, assets });
14137
+ }
14138
+
14139
+ _createIframe(cb = () => {}) {
13998
14140
  this.iframe = document.createElement('iframe');
13999
14141
  // $FlowFixMe
14000
14142
  this.iframe.width = this.width;
@@ -14006,10 +14148,13 @@ class Softphone {
14006
14148
  this.iframe.style.left = '0';
14007
14149
  this.iframe.style.bottom = '0';
14008
14150
  this.iframe.style.border = '1px solid #aaa';
14151
+ this.iframe.style.backgroundColor = 'white';
14009
14152
  this.iframe.src = this.url;
14010
14153
  this.iframe.style.display = 'none';
14011
14154
  this.iframe.id = 'wazo-softphone';
14012
14155
 
14156
+ this.iframe.onload = cb;
14157
+
14013
14158
  // $FlowFixMe
14014
14159
  document.body.appendChild(this.iframe);
14015
14160
  }
@@ -14036,8 +14181,8 @@ class Softphone {
14036
14181
  }
14037
14182
 
14038
14183
  switch (event.data.type) {
14039
- case SDK_ON_CALL_MADE:
14040
- this.onCallMade(event.data.callSession);
14184
+ case SDK_ON_OUTGOING_CALL_MADE:
14185
+ this.onOutgoingCallMade(event.data.callSession);
14041
14186
  break;
14042
14187
  case SDK_CALL_ENDED: {
14043
14188
  const { callSession, content, direction, userExtension } = event.data;
@@ -14052,8 +14197,105 @@ class Softphone {
14052
14197
  this._onAuthenticated(event.data.session);
14053
14198
  this.onAuthenticated(event.data.session);
14054
14199
  break;
14200
+ case SDK_LOGGED_OUT:
14201
+ this.onLoggedOut();
14202
+ break;
14203
+ case BRIDGE_CREATE_OR_UPDATE_CARD: {
14204
+ const { content } = event.data;
14205
+ this.onCardSaved(content);
14206
+ break;
14207
+ }
14208
+ case BRIDGE_SEARCH_OPTIONS: {
14209
+ const { fieldId, query } = event.data;
14210
+ this.onSearchOptions(fieldId, query);
14211
+ break;
14212
+ }
14213
+ case BRIDGE_DISPLAY_LINKED_OPTION:
14214
+ this.onDisplayLinkedOption(event.data.linkedOptionId);
14215
+ break;
14216
+ case BRIDGE_WAZO_CONTACT_SEARCH:
14217
+ this.onWazoContactSearch(event.data.query);
14218
+ break;
14219
+ case BRIDGE_ON_AGENT_LOGGED_IN:
14220
+ this.onAgentLoggedIn();
14221
+ break;
14222
+ case BRIDGE_ON_AGENT_LOGGED_OUT:
14223
+ this.onAgentLoggedOut();
14224
+ break;
14225
+ case BRIDGE_ON_AGENT_PAUSED:
14226
+ this.onAgentPaused();
14227
+ break;
14228
+ case BRIDGE_ON_AGENT_RESUMED:
14229
+ this.onAgentResumed();
14230
+ break;
14231
+ case BRIDGE_ON_LANGUAGE_CHANGED:
14232
+ this.onLanguageChanged(event.data.language);
14233
+ break;
14234
+ case BRIDGE_ON_CALL_HELD:
14235
+ this.onCallHeld();
14236
+ break;
14237
+ case BRIDGE_ON_CALL_RESUMED:
14238
+ this.onCallResumed();
14239
+ break;
14240
+ case BRIDGE_ON_CALL_MUTED:
14241
+ this.onCallMuted();
14242
+ break;
14243
+ case BRIDGE_ON_CALL_UN_MUTED:
14244
+ this.onCallUnMuted();
14245
+ break;
14246
+ case BRIDGE_ON_DTMF:
14247
+ this.onDtmfSent(event.data.tone);
14248
+ break;
14249
+ case BRIDGE_ON_DIRECT_TRANSFER:
14250
+ this.onDirectTransfer(event.data.number);
14251
+ break;
14252
+ case BRIDGE_ON_CREATE_INDIRECT_TRANSFER:
14253
+ this.onCreateIndirectTransfer(event.data.number);
14254
+ break;
14255
+ case BRIDGE_ON_CANCEL_INDIRECT_TRANSFER:
14256
+ this.onCancelIndirectTransfer();
14257
+ break;
14258
+ case BRIDGE_ON_CONFIRM_INDIRECT_TRANSFER:
14259
+ this.onConfirmIndirectTransfer();
14260
+ break;
14261
+ case BRIDGE_ON_INDIRECT_TRANSFER_CALL_MADE:
14262
+ this.onIndirectCallMade(event.data.call);
14263
+ break;
14264
+ case BRIDGE_ON_INDIRECT_TRANSFER_DONE:
14265
+ this.onIndirectTransferDone(event.data.call);
14266
+ break;
14267
+ case BRIDGE_ON_START_RECORDING:
14268
+ this.onStartRecording();
14269
+ break;
14270
+ case BRIDGE_ON_STOP_RECORDING:
14271
+ this.onStopRecording();
14272
+ break;
14273
+ case BRIDGE_ON_CARD_CANCELED:
14274
+ this.onCardCanceled();
14275
+ break;
14276
+ case BRIDGE_ON_CALL_LOCALLY_ACCEPTED:
14277
+ this.onCallLocallyAnswered(event.data.call);
14278
+ break;
14279
+ case BRIDGE_ON_CALL_REJECTED:
14280
+ this.onCallRejected(event.data.call);
14281
+ break;
14282
+ case BRIDGE_ON_CALL_REMOTELY_ACCEPTED:
14283
+ this.onCallRemotelyAnswered(event.data.call);
14284
+ break;
14285
+ default:
14286
+ this.onUnHandledEvent(event);
14287
+ break;
14055
14288
  }
14056
14289
  }
14290
+
14291
+ _sendMessage(type , payload = {}) {
14292
+ if (!this.iframe || !this.iframeLoaded) {
14293
+ this._pendingMessages.push([type, payload]);
14294
+ return;
14295
+ }
14296
+
14297
+ this.iframe.contentWindow.postMessage({ type, ...payload }, '*');
14298
+ }
14057
14299
  }
14058
14300
 
14059
14301
  var Softphone$1 = new Softphone();