@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();
@@ -13135,40 +13135,159 @@ class Checker {
13135
13135
  //
13136
13136
  /* eslint-disable no-unused-vars */
13137
13137
  /* global window, document */
13138
+ const BRIDGE_CONFIG_RETRIEVED = 'bridge/CONFIG_RETRIEVED';
13139
+ const BRIDGE_CREATE_OR_UPDATE_CARD = 'bridge/BRIDGE_CREATE_OR_UPDATE_CARD';
13140
+ const BRIDGE_OPTIONS_FETCHED = 'bridge/BRIDGE_OPTIONS_FETCHED';
13141
+ const BRIDGE_OPTIONS_FOUND = 'bridge/BRIDGE_OPTIONS_FOUND';
13142
+ const BRIDGE_SEARCH_OPTIONS = 'bridge/BRIDGE_SEARCH_OPTIONS';
13143
+ const BRIDGE_DISPLAY_LINKED_OPTION = 'bridge/DISPLAY_LINKED_OPTION';
13144
+ const BRIDGE_UPDATE_FORM_SCHEMA = 'bridge/BRIDGE_UPDATE_FORM_SCHEMA';
13145
+ const BRIDGE_WAZO_CONTACT_SEARCH = 'bridge/BRIDGE_WAZO_CONTACT_SEARCH';
13146
+ const BRIDGE_ON_AGENT_LOGGED_IN = 'bridge/BRIDGE_ON_AGENT_LOGGED_IN';
13147
+ const BRIDGE_ON_AGENT_LOGGED_OUT = 'bridge/BRIDGE_ON_AGENT_LOGGED_OUT';
13148
+ const BRIDGE_ON_AGENT_PAUSED = 'bridge/BRIDGE_ON_AGENT_PAUSED';
13149
+ const BRIDGE_ON_AGENT_RESUMED = 'bridge/BRIDGE_ON_AGENT_RESUMED';
13150
+ const BRIDGE_ON_LANGUAGE_CHANGED = 'bridge/BRIDGE_ON_LANGUAGE_CHANGED';
13151
+ const BRIDGE_ON_CALL_LOCALLY_ACCEPTED = 'bridge/BRIDGE_ON_CALL_LOCALLY_ACCEPTED';
13152
+ const BRIDGE_ON_CALL_REJECTED = 'bridge/BRIDGE_ON_CALL_REJECTED';
13153
+ const BRIDGE_ON_CALL_REMOTELY_ACCEPTED = 'bridge/BRIDGE_ON_CALL_REMOTELY_ACCEPTED';
13154
+ const BRIDGE_ON_CALL_HELD = 'bridge/BRIDGE_ON_CALL_HELD';
13155
+ const BRIDGE_ON_CALL_RESUMED = 'bridge/BRIDGE_ON_CALL_RESUMED';
13156
+ const BRIDGE_ON_CALL_MUTED = 'bridge/BRIDGE_ON_CALL_MUTED';
13157
+ const BRIDGE_ON_CALL_UN_MUTED = 'bridge/BRIDGE_ON_CALL_UN_MUTED';
13158
+ const BRIDGE_ON_DTMF = 'bridge/BRIDGE_ON_DTMF';
13159
+ const BRIDGE_ON_DIRECT_TRANSFER = 'bridge/BRIDGE_ON_DIRECT_TRANSFER';
13160
+ const BRIDGE_ON_CREATE_INDIRECT_TRANSFER = 'bridge/BRIDGE_ON_CREATE_INDIRECT_TRANSFER';
13161
+ const BRIDGE_ON_CANCEL_INDIRECT_TRANSFER = 'bridge/BRIDGE_ON_CANCEL_INDIRECT_TRANSFER';
13162
+ const BRIDGE_ON_CONFIRM_INDIRECT_TRANSFER = 'bridge/BRIDGE_ON_CONFIRM_INDIRECT_TRANSFER';
13163
+ const BRIDGE_ON_INDIRECT_TRANSFER_CALL_MADE = 'bridge/BRIDGE_ON_INDIRECT_TRANSFER_CALL_MADE';
13164
+ const BRIDGE_ON_INDIRECT_TRANSFER_DONE = 'bridge/BRIDGE_ON_INDIRECT_TRANSFER_DONE';
13165
+ const BRIDGE_ON_START_RECORDING = 'bridge/BRIDGE_ON_START_RECORDING';
13166
+ const BRIDGE_ON_STOP_RECORDING = 'bridge/BRIDGE_ON_STOP_RECORDING';
13167
+ const BRIDGE_ON_CARD_CANCELED = 'bridge/BRIDGE_ON_CARD_CANCELED';
13168
+ const BRIDGE_ENABLE_AGENT = 'bridge/BRIDGE_ENABLE_AGENT';
13169
+ const BRIDGE_SET_CARD_CONTENT = 'bridge/BRIDGE_SET_CARD_CONTENT';
13170
+ const BRIDGE_ENABLE_DEBUG = 'bridge/BRIDGE_ENABLE_DEBUG';
13171
+
13172
+ const BRIDGE_INJECT_CSS = 'bridge/BRIDGE_INJECT_CSS';
13173
+ const BRIDGE_CUSTOMIZE_APPEARANCE = 'bridge/BRIDGE_CUSTOMIZE_APPEARANCE';
13174
+
13138
13175
  const SDK_CLICK_TO_CALL = 'sdk/CLICK_TO_CALL';
13139
- const SDK_ON_CALL_MADE = 'sdk/SDK_ON_CALL_MADE';
13176
+ const SDK_ON_OUTGOING_CALL_MADE = 'sdk/SDK_ON_OUTGOING_CALL_MADE';
13140
13177
  const SDK_CALL_ENDED = 'sdk/ON_CALL_ENDED';
13141
13178
  const SDK_CALL_INCOMING = 'sdk/SDK_CALL_INCOMING';
13142
13179
  const SDK_AUTHENTICATED = 'sdk/SDK_AUTHENTICATED';
13180
+ const SDK_LOGGED_OUT = 'sdk/SDK_LOGGED_OUT';
13143
13181
 
13144
13182
  class Softphone {
13145
- url = 'https://softphone.wazo.io';
13146
- width = 500;
13147
- height = 600;
13148
- displayed = false;
13149
- iframe = null;
13183
+
13184
+
13185
+
13186
+
13187
+
13188
+
13189
+
13190
+ // Message waiting for the iframe to be loaded
13191
+
13150
13192
 
13151
13193
  onLinkEnabled(link ) {}
13194
+ onIFrameLoaded() {}
13152
13195
 
13153
- onCallMade(call ) {}
13196
+ onCallLocallyAnswered(call ) {}
13197
+ onCallRemotelyAnswered(call ) {}
13198
+ onOutgoingCallMade(call ) {}
13154
13199
  onCallIncoming(call ) {}
13200
+ onCallRejected(call ) {}
13155
13201
  onCallEnded(call , card , direction , fromExtension ) {}
13202
+
13203
+ onCardSaved(card ) {}
13204
+ onCardCanceled() {}
13156
13205
  onAuthenticated(session ) {}
13206
+ onLoggedOut() {}
13207
+
13208
+ onSearchOptions(fieldId , query ) {
13209
+ this.onOptionsResults(fieldId, []);
13210
+ }
13211
+
13212
+ onDisplayLinkedOption(optionId ) {}
13213
+ onWazoContactSearch(query ) {}
13214
+ onAgentLoggedIn() {}
13215
+ onAgentLoggedOut() {}
13216
+ onAgentPaused() {}
13217
+ onAgentResumed() {}
13218
+ onLanguageChanged(language ) {}
13219
+ onCallHeld() {}
13220
+ onCallResumed() {}
13221
+ onCallMuted() {}
13222
+ onCallUnMuted() {}
13223
+ onDtmfSent(tone ) {}
13224
+ onDirectTransfer(number ) {}
13225
+ onCreateIndirectTransfer(number ) {}
13226
+ onCancelIndirectTransfer() {}
13227
+ onConfirmIndirectTransfer() {}
13228
+ onIndirectCallMade(call ) {}
13229
+ onIndirectTransferDone(call ) {}
13230
+ onStartRecording() {}
13231
+ onStopRecording() {}
13232
+ onUnHandledEvent(event ) {}
13233
+
13234
+ init({
13235
+ url,
13236
+ width,
13237
+ height,
13238
+ server,
13239
+ port,
13240
+ language,
13241
+ wrapUpDuration,
13242
+ enableAgent = true,
13243
+ tenantId,
13244
+ debug = false,
13245
+ } = {}) {
13246
+ this.url = url || 'https://softphone.wazo.io';
13247
+ this.width = width || 500;
13248
+ this.height = height || 600;
13249
+ this.displayed = false;
13250
+ this.iframeLoaded = false;
13251
+
13252
+ this.iframeLoaded = false;
13253
+ this._pendingMessages = [];
13254
+ window.addEventListener('message', this._onMessage.bind(this), false);
13255
+
13256
+ if (!server) {
13257
+ // eslint-disable-next-line no-param-reassign
13258
+ server = 'stack.dev.wazo.io';
13259
+ }
13157
13260
 
13158
- init(url , width , height ) {
13159
- if (url) {
13160
- this.url = url;
13261
+ const config = { server };
13262
+ if (language) {
13263
+ config.language = language;
13264
+ }
13265
+ if (port) {
13266
+ config.port = port;
13161
13267
  }
13162
- if (width) {
13163
- this.width = width;
13268
+ if (tenantId) {
13269
+ config.tenantId = tenantId;
13164
13270
  }
13165
- if (height) {
13166
- this.height = height;
13271
+ if (wrapUpDuration) {
13272
+ config.wrapUpDuration = wrapUpDuration;
13167
13273
  }
13168
13274
 
13169
- window.addEventListener('message', this._onMessage.bind(this), false);
13275
+ this._sendMessage(BRIDGE_CONFIG_RETRIEVED, { config });
13170
13276
 
13171
- this._createIframe();
13277
+ if (enableAgent) {
13278
+ this._sendMessage(BRIDGE_ENABLE_AGENT);
13279
+ }
13280
+
13281
+ if (debug) {
13282
+ this._sendMessage(BRIDGE_ENABLE_DEBUG);
13283
+ }
13284
+
13285
+ this._createIframe(() => {
13286
+ this.iframeLoaded = true;
13287
+ this._pendingMessages.forEach(([type, payload]) => this._sendMessage(type, payload));
13288
+
13289
+ this.onIFrameLoaded();
13290
+ });
13172
13291
  }
13173
13292
 
13174
13293
  parseLinks() {
@@ -13184,9 +13303,7 @@ class Softphone {
13184
13303
  makeCall(number ) {
13185
13304
  this.displaySoftphone();
13186
13305
 
13187
- if (this.iframe) {
13188
- this.iframe.contentWindow.postMessage({ type: SDK_CLICK_TO_CALL, number }, '*');
13189
- }
13306
+ this._sendMessage(SDK_CLICK_TO_CALL, { number });
13190
13307
  }
13191
13308
 
13192
13309
  toggleSoftphoneDisplay() {
@@ -13195,8 +13312,6 @@ class Softphone {
13195
13312
  } else {
13196
13313
  this.displaySoftphone();
13197
13314
  }
13198
-
13199
- this.displayed = !this.displayed;
13200
13315
  }
13201
13316
 
13202
13317
  displaySoftphone() {
@@ -13207,15 +13322,42 @@ class Softphone {
13207
13322
  if (this.iframe) {
13208
13323
  this.iframe.style.display = 'block';
13209
13324
  }
13325
+
13326
+ this.displayed = true;
13210
13327
  }
13211
13328
 
13212
13329
  hideSoftphone() {
13213
13330
  if (this.iframe) {
13214
13331
  this.iframe.style.display = 'none';
13215
13332
  }
13333
+ this.displayed = false;
13334
+ }
13335
+
13336
+ optionsFetched(fieldId , options ) {
13337
+ this._sendMessage(BRIDGE_OPTIONS_FETCHED, { fieldId, options });
13338
+ }
13339
+
13340
+ onOptionsResults(fieldId , options ) {
13341
+ this._sendMessage(BRIDGE_OPTIONS_FOUND, { fieldId, options });
13342
+ }
13343
+
13344
+ setFormSchema(schema , uiSchema ) {
13345
+ this._sendMessage(BRIDGE_UPDATE_FORM_SCHEMA, { schema, uiSchema });
13346
+ }
13347
+
13348
+ setCardValue(field , value ) {
13349
+ this._sendMessage(BRIDGE_SET_CARD_CONTENT, { field, value });
13350
+ }
13351
+
13352
+ injectCss(css ) {
13353
+ this._sendMessage(BRIDGE_INJECT_CSS, { css });
13216
13354
  }
13217
13355
 
13218
- _createIframe() {
13356
+ customizeAppearance(themes , translations , assets ) {
13357
+ this._sendMessage(BRIDGE_CUSTOMIZE_APPEARANCE, { themes, translations, assets });
13358
+ }
13359
+
13360
+ _createIframe(cb = () => {}) {
13219
13361
  this.iframe = document.createElement('iframe');
13220
13362
  // $FlowFixMe
13221
13363
  this.iframe.width = this.width;
@@ -13227,10 +13369,13 @@ class Softphone {
13227
13369
  this.iframe.style.left = '0';
13228
13370
  this.iframe.style.bottom = '0';
13229
13371
  this.iframe.style.border = '1px solid #aaa';
13372
+ this.iframe.style.backgroundColor = 'white';
13230
13373
  this.iframe.src = this.url;
13231
13374
  this.iframe.style.display = 'none';
13232
13375
  this.iframe.id = 'wazo-softphone';
13233
13376
 
13377
+ this.iframe.onload = cb;
13378
+
13234
13379
  // $FlowFixMe
13235
13380
  document.body.appendChild(this.iframe);
13236
13381
  }
@@ -13257,8 +13402,8 @@ class Softphone {
13257
13402
  }
13258
13403
 
13259
13404
  switch (event.data.type) {
13260
- case SDK_ON_CALL_MADE:
13261
- this.onCallMade(event.data.callSession);
13405
+ case SDK_ON_OUTGOING_CALL_MADE:
13406
+ this.onOutgoingCallMade(event.data.callSession);
13262
13407
  break;
13263
13408
  case SDK_CALL_ENDED: {
13264
13409
  const { callSession, content, direction, userExtension } = event.data;
@@ -13273,8 +13418,105 @@ class Softphone {
13273
13418
  this._onAuthenticated(event.data.session);
13274
13419
  this.onAuthenticated(event.data.session);
13275
13420
  break;
13421
+ case SDK_LOGGED_OUT:
13422
+ this.onLoggedOut();
13423
+ break;
13424
+ case BRIDGE_CREATE_OR_UPDATE_CARD: {
13425
+ const { content } = event.data;
13426
+ this.onCardSaved(content);
13427
+ break;
13428
+ }
13429
+ case BRIDGE_SEARCH_OPTIONS: {
13430
+ const { fieldId, query } = event.data;
13431
+ this.onSearchOptions(fieldId, query);
13432
+ break;
13433
+ }
13434
+ case BRIDGE_DISPLAY_LINKED_OPTION:
13435
+ this.onDisplayLinkedOption(event.data.linkedOptionId);
13436
+ break;
13437
+ case BRIDGE_WAZO_CONTACT_SEARCH:
13438
+ this.onWazoContactSearch(event.data.query);
13439
+ break;
13440
+ case BRIDGE_ON_AGENT_LOGGED_IN:
13441
+ this.onAgentLoggedIn();
13442
+ break;
13443
+ case BRIDGE_ON_AGENT_LOGGED_OUT:
13444
+ this.onAgentLoggedOut();
13445
+ break;
13446
+ case BRIDGE_ON_AGENT_PAUSED:
13447
+ this.onAgentPaused();
13448
+ break;
13449
+ case BRIDGE_ON_AGENT_RESUMED:
13450
+ this.onAgentResumed();
13451
+ break;
13452
+ case BRIDGE_ON_LANGUAGE_CHANGED:
13453
+ this.onLanguageChanged(event.data.language);
13454
+ break;
13455
+ case BRIDGE_ON_CALL_HELD:
13456
+ this.onCallHeld();
13457
+ break;
13458
+ case BRIDGE_ON_CALL_RESUMED:
13459
+ this.onCallResumed();
13460
+ break;
13461
+ case BRIDGE_ON_CALL_MUTED:
13462
+ this.onCallMuted();
13463
+ break;
13464
+ case BRIDGE_ON_CALL_UN_MUTED:
13465
+ this.onCallUnMuted();
13466
+ break;
13467
+ case BRIDGE_ON_DTMF:
13468
+ this.onDtmfSent(event.data.tone);
13469
+ break;
13470
+ case BRIDGE_ON_DIRECT_TRANSFER:
13471
+ this.onDirectTransfer(event.data.number);
13472
+ break;
13473
+ case BRIDGE_ON_CREATE_INDIRECT_TRANSFER:
13474
+ this.onCreateIndirectTransfer(event.data.number);
13475
+ break;
13476
+ case BRIDGE_ON_CANCEL_INDIRECT_TRANSFER:
13477
+ this.onCancelIndirectTransfer();
13478
+ break;
13479
+ case BRIDGE_ON_CONFIRM_INDIRECT_TRANSFER:
13480
+ this.onConfirmIndirectTransfer();
13481
+ break;
13482
+ case BRIDGE_ON_INDIRECT_TRANSFER_CALL_MADE:
13483
+ this.onIndirectCallMade(event.data.call);
13484
+ break;
13485
+ case BRIDGE_ON_INDIRECT_TRANSFER_DONE:
13486
+ this.onIndirectTransferDone(event.data.call);
13487
+ break;
13488
+ case BRIDGE_ON_START_RECORDING:
13489
+ this.onStartRecording();
13490
+ break;
13491
+ case BRIDGE_ON_STOP_RECORDING:
13492
+ this.onStopRecording();
13493
+ break;
13494
+ case BRIDGE_ON_CARD_CANCELED:
13495
+ this.onCardCanceled();
13496
+ break;
13497
+ case BRIDGE_ON_CALL_LOCALLY_ACCEPTED:
13498
+ this.onCallLocallyAnswered(event.data.call);
13499
+ break;
13500
+ case BRIDGE_ON_CALL_REJECTED:
13501
+ this.onCallRejected(event.data.call);
13502
+ break;
13503
+ case BRIDGE_ON_CALL_REMOTELY_ACCEPTED:
13504
+ this.onCallRemotelyAnswered(event.data.call);
13505
+ break;
13506
+ default:
13507
+ this.onUnHandledEvent(event);
13508
+ break;
13276
13509
  }
13277
13510
  }
13511
+
13512
+ _sendMessage(type , payload = {}) {
13513
+ if (!this.iframe || !this.iframeLoaded) {
13514
+ this._pendingMessages.push([type, payload]);
13515
+ return;
13516
+ }
13517
+
13518
+ this.iframe.contentWindow.postMessage({ type, ...payload }, '*');
13519
+ }
13278
13520
  }
13279
13521
 
13280
13522
  var Softphone$1 = new Softphone();