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