@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();
@@ -13972,40 +13972,159 @@ class Checker {
13972
13972
  //
13973
13973
  /* eslint-disable no-unused-vars */
13974
13974
  /* global window, document */
13975
+ const BRIDGE_CONFIG_RETRIEVED = 'bridge/CONFIG_RETRIEVED';
13976
+ const BRIDGE_CREATE_OR_UPDATE_CARD = 'bridge/BRIDGE_CREATE_OR_UPDATE_CARD';
13977
+ const BRIDGE_OPTIONS_FETCHED = 'bridge/BRIDGE_OPTIONS_FETCHED';
13978
+ const BRIDGE_OPTIONS_FOUND = 'bridge/BRIDGE_OPTIONS_FOUND';
13979
+ const BRIDGE_SEARCH_OPTIONS = 'bridge/BRIDGE_SEARCH_OPTIONS';
13980
+ const BRIDGE_DISPLAY_LINKED_OPTION = 'bridge/DISPLAY_LINKED_OPTION';
13981
+ const BRIDGE_UPDATE_FORM_SCHEMA = 'bridge/BRIDGE_UPDATE_FORM_SCHEMA';
13982
+ const BRIDGE_WAZO_CONTACT_SEARCH = 'bridge/BRIDGE_WAZO_CONTACT_SEARCH';
13983
+ const BRIDGE_ON_AGENT_LOGGED_IN = 'bridge/BRIDGE_ON_AGENT_LOGGED_IN';
13984
+ const BRIDGE_ON_AGENT_LOGGED_OUT = 'bridge/BRIDGE_ON_AGENT_LOGGED_OUT';
13985
+ const BRIDGE_ON_AGENT_PAUSED = 'bridge/BRIDGE_ON_AGENT_PAUSED';
13986
+ const BRIDGE_ON_AGENT_RESUMED = 'bridge/BRIDGE_ON_AGENT_RESUMED';
13987
+ const BRIDGE_ON_LANGUAGE_CHANGED = 'bridge/BRIDGE_ON_LANGUAGE_CHANGED';
13988
+ const BRIDGE_ON_CALL_LOCALLY_ACCEPTED = 'bridge/BRIDGE_ON_CALL_LOCALLY_ACCEPTED';
13989
+ const BRIDGE_ON_CALL_REJECTED = 'bridge/BRIDGE_ON_CALL_REJECTED';
13990
+ const BRIDGE_ON_CALL_REMOTELY_ACCEPTED = 'bridge/BRIDGE_ON_CALL_REMOTELY_ACCEPTED';
13991
+ const BRIDGE_ON_CALL_HELD = 'bridge/BRIDGE_ON_CALL_HELD';
13992
+ const BRIDGE_ON_CALL_RESUMED = 'bridge/BRIDGE_ON_CALL_RESUMED';
13993
+ const BRIDGE_ON_CALL_MUTED = 'bridge/BRIDGE_ON_CALL_MUTED';
13994
+ const BRIDGE_ON_CALL_UN_MUTED = 'bridge/BRIDGE_ON_CALL_UN_MUTED';
13995
+ const BRIDGE_ON_DTMF = 'bridge/BRIDGE_ON_DTMF';
13996
+ const BRIDGE_ON_DIRECT_TRANSFER = 'bridge/BRIDGE_ON_DIRECT_TRANSFER';
13997
+ const BRIDGE_ON_CREATE_INDIRECT_TRANSFER = 'bridge/BRIDGE_ON_CREATE_INDIRECT_TRANSFER';
13998
+ const BRIDGE_ON_CANCEL_INDIRECT_TRANSFER = 'bridge/BRIDGE_ON_CANCEL_INDIRECT_TRANSFER';
13999
+ const BRIDGE_ON_CONFIRM_INDIRECT_TRANSFER = 'bridge/BRIDGE_ON_CONFIRM_INDIRECT_TRANSFER';
14000
+ const BRIDGE_ON_INDIRECT_TRANSFER_CALL_MADE = 'bridge/BRIDGE_ON_INDIRECT_TRANSFER_CALL_MADE';
14001
+ const BRIDGE_ON_INDIRECT_TRANSFER_DONE = 'bridge/BRIDGE_ON_INDIRECT_TRANSFER_DONE';
14002
+ const BRIDGE_ON_START_RECORDING = 'bridge/BRIDGE_ON_START_RECORDING';
14003
+ const BRIDGE_ON_STOP_RECORDING = 'bridge/BRIDGE_ON_STOP_RECORDING';
14004
+ const BRIDGE_ON_CARD_CANCELED = 'bridge/BRIDGE_ON_CARD_CANCELED';
14005
+ const BRIDGE_ENABLE_AGENT = 'bridge/BRIDGE_ENABLE_AGENT';
14006
+ const BRIDGE_SET_CARD_CONTENT = 'bridge/BRIDGE_SET_CARD_CONTENT';
14007
+ const BRIDGE_ENABLE_DEBUG = 'bridge/BRIDGE_ENABLE_DEBUG';
14008
+
14009
+ const BRIDGE_INJECT_CSS = 'bridge/BRIDGE_INJECT_CSS';
14010
+ const BRIDGE_CUSTOMIZE_APPEARANCE = 'bridge/BRIDGE_CUSTOMIZE_APPEARANCE';
14011
+
13975
14012
  const SDK_CLICK_TO_CALL = 'sdk/CLICK_TO_CALL';
13976
- const SDK_ON_CALL_MADE = 'sdk/SDK_ON_CALL_MADE';
14013
+ const SDK_ON_OUTGOING_CALL_MADE = 'sdk/SDK_ON_OUTGOING_CALL_MADE';
13977
14014
  const SDK_CALL_ENDED = 'sdk/ON_CALL_ENDED';
13978
14015
  const SDK_CALL_INCOMING = 'sdk/SDK_CALL_INCOMING';
13979
14016
  const SDK_AUTHENTICATED = 'sdk/SDK_AUTHENTICATED';
14017
+ const SDK_LOGGED_OUT = 'sdk/SDK_LOGGED_OUT';
13980
14018
 
13981
14019
  class Softphone {
13982
- url = 'https://softphone.wazo.io';
13983
- width = 500;
13984
- height = 600;
13985
- displayed = false;
13986
- iframe = null;
14020
+
14021
+
14022
+
14023
+
14024
+
14025
+
14026
+
14027
+ // Message waiting for the iframe to be loaded
14028
+
13987
14029
 
13988
14030
  onLinkEnabled(link ) {}
14031
+ onIFrameLoaded() {}
13989
14032
 
13990
- onCallMade(call ) {}
14033
+ onCallLocallyAnswered(call ) {}
14034
+ onCallRemotelyAnswered(call ) {}
14035
+ onOutgoingCallMade(call ) {}
13991
14036
  onCallIncoming(call ) {}
14037
+ onCallRejected(call ) {}
13992
14038
  onCallEnded(call , card , direction , fromExtension ) {}
14039
+
14040
+ onCardSaved(card ) {}
14041
+ onCardCanceled() {}
13993
14042
  onAuthenticated(session ) {}
14043
+ onLoggedOut() {}
14044
+
14045
+ onSearchOptions(fieldId , query ) {
14046
+ this.onOptionsResults(fieldId, []);
14047
+ }
14048
+
14049
+ onDisplayLinkedOption(optionId ) {}
14050
+ onWazoContactSearch(query ) {}
14051
+ onAgentLoggedIn() {}
14052
+ onAgentLoggedOut() {}
14053
+ onAgentPaused() {}
14054
+ onAgentResumed() {}
14055
+ onLanguageChanged(language ) {}
14056
+ onCallHeld() {}
14057
+ onCallResumed() {}
14058
+ onCallMuted() {}
14059
+ onCallUnMuted() {}
14060
+ onDtmfSent(tone ) {}
14061
+ onDirectTransfer(number ) {}
14062
+ onCreateIndirectTransfer(number ) {}
14063
+ onCancelIndirectTransfer() {}
14064
+ onConfirmIndirectTransfer() {}
14065
+ onIndirectCallMade(call ) {}
14066
+ onIndirectTransferDone(call ) {}
14067
+ onStartRecording() {}
14068
+ onStopRecording() {}
14069
+ onUnHandledEvent(event ) {}
14070
+
14071
+ init({
14072
+ url,
14073
+ width,
14074
+ height,
14075
+ server,
14076
+ port,
14077
+ language,
14078
+ wrapUpDuration,
14079
+ enableAgent = true,
14080
+ tenantId,
14081
+ debug = false,
14082
+ } = {}) {
14083
+ this.url = url || 'https://softphone.wazo.io';
14084
+ this.width = width || 500;
14085
+ this.height = height || 600;
14086
+ this.displayed = false;
14087
+ this.iframeLoaded = false;
14088
+
14089
+ this.iframeLoaded = false;
14090
+ this._pendingMessages = [];
14091
+ window.addEventListener('message', this._onMessage.bind(this), false);
14092
+
14093
+ if (!server) {
14094
+ // eslint-disable-next-line no-param-reassign
14095
+ server = 'stack.dev.wazo.io';
14096
+ }
13994
14097
 
13995
- init(url , width , height ) {
13996
- if (url) {
13997
- this.url = url;
14098
+ const config = { server };
14099
+ if (language) {
14100
+ config.language = language;
14101
+ }
14102
+ if (port) {
14103
+ config.port = port;
13998
14104
  }
13999
- if (width) {
14000
- this.width = width;
14105
+ if (tenantId) {
14106
+ config.tenantId = tenantId;
14001
14107
  }
14002
- if (height) {
14003
- this.height = height;
14108
+ if (wrapUpDuration) {
14109
+ config.wrapUpDuration = wrapUpDuration;
14004
14110
  }
14005
14111
 
14006
- window.addEventListener('message', this._onMessage.bind(this), false);
14112
+ this._sendMessage(BRIDGE_CONFIG_RETRIEVED, { config });
14007
14113
 
14008
- this._createIframe();
14114
+ if (enableAgent) {
14115
+ this._sendMessage(BRIDGE_ENABLE_AGENT);
14116
+ }
14117
+
14118
+ if (debug) {
14119
+ this._sendMessage(BRIDGE_ENABLE_DEBUG);
14120
+ }
14121
+
14122
+ this._createIframe(() => {
14123
+ this.iframeLoaded = true;
14124
+ this._pendingMessages.forEach(([type, payload]) => this._sendMessage(type, payload));
14125
+
14126
+ this.onIFrameLoaded();
14127
+ });
14009
14128
  }
14010
14129
 
14011
14130
  parseLinks() {
@@ -14021,9 +14140,7 @@ class Softphone {
14021
14140
  makeCall(number ) {
14022
14141
  this.displaySoftphone();
14023
14142
 
14024
- if (this.iframe) {
14025
- this.iframe.contentWindow.postMessage({ type: SDK_CLICK_TO_CALL, number }, '*');
14026
- }
14143
+ this._sendMessage(SDK_CLICK_TO_CALL, { number });
14027
14144
  }
14028
14145
 
14029
14146
  toggleSoftphoneDisplay() {
@@ -14032,8 +14149,6 @@ class Softphone {
14032
14149
  } else {
14033
14150
  this.displaySoftphone();
14034
14151
  }
14035
-
14036
- this.displayed = !this.displayed;
14037
14152
  }
14038
14153
 
14039
14154
  displaySoftphone() {
@@ -14044,15 +14159,42 @@ class Softphone {
14044
14159
  if (this.iframe) {
14045
14160
  this.iframe.style.display = 'block';
14046
14161
  }
14162
+
14163
+ this.displayed = true;
14047
14164
  }
14048
14165
 
14049
14166
  hideSoftphone() {
14050
14167
  if (this.iframe) {
14051
14168
  this.iframe.style.display = 'none';
14052
14169
  }
14170
+ this.displayed = false;
14171
+ }
14172
+
14173
+ optionsFetched(fieldId , options ) {
14174
+ this._sendMessage(BRIDGE_OPTIONS_FETCHED, { fieldId, options });
14175
+ }
14176
+
14177
+ onOptionsResults(fieldId , options ) {
14178
+ this._sendMessage(BRIDGE_OPTIONS_FOUND, { fieldId, options });
14179
+ }
14180
+
14181
+ setFormSchema(schema , uiSchema ) {
14182
+ this._sendMessage(BRIDGE_UPDATE_FORM_SCHEMA, { schema, uiSchema });
14183
+ }
14184
+
14185
+ setCardValue(field , value ) {
14186
+ this._sendMessage(BRIDGE_SET_CARD_CONTENT, { field, value });
14187
+ }
14188
+
14189
+ injectCss(css ) {
14190
+ this._sendMessage(BRIDGE_INJECT_CSS, { css });
14053
14191
  }
14054
14192
 
14055
- _createIframe() {
14193
+ customizeAppearance(themes , translations , assets ) {
14194
+ this._sendMessage(BRIDGE_CUSTOMIZE_APPEARANCE, { themes, translations, assets });
14195
+ }
14196
+
14197
+ _createIframe(cb = () => {}) {
14056
14198
  this.iframe = document.createElement('iframe');
14057
14199
  // $FlowFixMe
14058
14200
  this.iframe.width = this.width;
@@ -14064,10 +14206,13 @@ class Softphone {
14064
14206
  this.iframe.style.left = '0';
14065
14207
  this.iframe.style.bottom = '0';
14066
14208
  this.iframe.style.border = '1px solid #aaa';
14209
+ this.iframe.style.backgroundColor = 'white';
14067
14210
  this.iframe.src = this.url;
14068
14211
  this.iframe.style.display = 'none';
14069
14212
  this.iframe.id = 'wazo-softphone';
14070
14213
 
14214
+ this.iframe.onload = cb;
14215
+
14071
14216
  // $FlowFixMe
14072
14217
  document.body.appendChild(this.iframe);
14073
14218
  }
@@ -14094,8 +14239,8 @@ class Softphone {
14094
14239
  }
14095
14240
 
14096
14241
  switch (event.data.type) {
14097
- case SDK_ON_CALL_MADE:
14098
- this.onCallMade(event.data.callSession);
14242
+ case SDK_ON_OUTGOING_CALL_MADE:
14243
+ this.onOutgoingCallMade(event.data.callSession);
14099
14244
  break;
14100
14245
  case SDK_CALL_ENDED: {
14101
14246
  const { callSession, content, direction, userExtension } = event.data;
@@ -14110,8 +14255,105 @@ class Softphone {
14110
14255
  this._onAuthenticated(event.data.session);
14111
14256
  this.onAuthenticated(event.data.session);
14112
14257
  break;
14258
+ case SDK_LOGGED_OUT:
14259
+ this.onLoggedOut();
14260
+ break;
14261
+ case BRIDGE_CREATE_OR_UPDATE_CARD: {
14262
+ const { content } = event.data;
14263
+ this.onCardSaved(content);
14264
+ break;
14265
+ }
14266
+ case BRIDGE_SEARCH_OPTIONS: {
14267
+ const { fieldId, query } = event.data;
14268
+ this.onSearchOptions(fieldId, query);
14269
+ break;
14270
+ }
14271
+ case BRIDGE_DISPLAY_LINKED_OPTION:
14272
+ this.onDisplayLinkedOption(event.data.linkedOptionId);
14273
+ break;
14274
+ case BRIDGE_WAZO_CONTACT_SEARCH:
14275
+ this.onWazoContactSearch(event.data.query);
14276
+ break;
14277
+ case BRIDGE_ON_AGENT_LOGGED_IN:
14278
+ this.onAgentLoggedIn();
14279
+ break;
14280
+ case BRIDGE_ON_AGENT_LOGGED_OUT:
14281
+ this.onAgentLoggedOut();
14282
+ break;
14283
+ case BRIDGE_ON_AGENT_PAUSED:
14284
+ this.onAgentPaused();
14285
+ break;
14286
+ case BRIDGE_ON_AGENT_RESUMED:
14287
+ this.onAgentResumed();
14288
+ break;
14289
+ case BRIDGE_ON_LANGUAGE_CHANGED:
14290
+ this.onLanguageChanged(event.data.language);
14291
+ break;
14292
+ case BRIDGE_ON_CALL_HELD:
14293
+ this.onCallHeld();
14294
+ break;
14295
+ case BRIDGE_ON_CALL_RESUMED:
14296
+ this.onCallResumed();
14297
+ break;
14298
+ case BRIDGE_ON_CALL_MUTED:
14299
+ this.onCallMuted();
14300
+ break;
14301
+ case BRIDGE_ON_CALL_UN_MUTED:
14302
+ this.onCallUnMuted();
14303
+ break;
14304
+ case BRIDGE_ON_DTMF:
14305
+ this.onDtmfSent(event.data.tone);
14306
+ break;
14307
+ case BRIDGE_ON_DIRECT_TRANSFER:
14308
+ this.onDirectTransfer(event.data.number);
14309
+ break;
14310
+ case BRIDGE_ON_CREATE_INDIRECT_TRANSFER:
14311
+ this.onCreateIndirectTransfer(event.data.number);
14312
+ break;
14313
+ case BRIDGE_ON_CANCEL_INDIRECT_TRANSFER:
14314
+ this.onCancelIndirectTransfer();
14315
+ break;
14316
+ case BRIDGE_ON_CONFIRM_INDIRECT_TRANSFER:
14317
+ this.onConfirmIndirectTransfer();
14318
+ break;
14319
+ case BRIDGE_ON_INDIRECT_TRANSFER_CALL_MADE:
14320
+ this.onIndirectCallMade(event.data.call);
14321
+ break;
14322
+ case BRIDGE_ON_INDIRECT_TRANSFER_DONE:
14323
+ this.onIndirectTransferDone(event.data.call);
14324
+ break;
14325
+ case BRIDGE_ON_START_RECORDING:
14326
+ this.onStartRecording();
14327
+ break;
14328
+ case BRIDGE_ON_STOP_RECORDING:
14329
+ this.onStopRecording();
14330
+ break;
14331
+ case BRIDGE_ON_CARD_CANCELED:
14332
+ this.onCardCanceled();
14333
+ break;
14334
+ case BRIDGE_ON_CALL_LOCALLY_ACCEPTED:
14335
+ this.onCallLocallyAnswered(event.data.call);
14336
+ break;
14337
+ case BRIDGE_ON_CALL_REJECTED:
14338
+ this.onCallRejected(event.data.call);
14339
+ break;
14340
+ case BRIDGE_ON_CALL_REMOTELY_ACCEPTED:
14341
+ this.onCallRemotelyAnswered(event.data.call);
14342
+ break;
14343
+ default:
14344
+ this.onUnHandledEvent(event);
14345
+ break;
14113
14346
  }
14114
14347
  }
14348
+
14349
+ _sendMessage(type , payload = {}) {
14350
+ if (!this.iframe || !this.iframeLoaded) {
14351
+ this._pendingMessages.push([type, payload]);
14352
+ return;
14353
+ }
14354
+
14355
+ this.iframe.contentWindow.postMessage({ type, ...payload }, '*');
14356
+ }
14115
14357
  }
14116
14358
 
14117
14359
  var Softphone$1 = new Softphone();