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