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