@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
package/lib/index.js CHANGED
@@ -7858,7 +7858,7 @@ class WebRTCClient extends Emitter {
7858
7858
  }
7859
7859
 
7860
7860
  async _onHeartbeatTimeout() {
7861
- logger$9.info('sdk webrtc heartbeat timed out', { userAgent: !!this.userAgent, cb: !!this.heartbeatTimeoutCb });
7861
+ logger$9.warn('sdk webrtc heartbeat timed out', { userAgent: !!this.userAgent, cb: !!this.heartbeatTimeoutCb });
7862
7862
 
7863
7863
  if (this.heartbeatTimeoutCb) {
7864
7864
  this.heartbeatTimeoutCb();
@@ -14121,40 +14121,159 @@ const createLocalAudioStream = async (options ) => createLocalStream('aud
14121
14121
  //
14122
14122
  /* eslint-disable no-unused-vars */
14123
14123
  /* global window, document */
14124
+ const BRIDGE_CONFIG_RETRIEVED = 'bridge/CONFIG_RETRIEVED';
14125
+ const BRIDGE_CREATE_OR_UPDATE_CARD = 'bridge/BRIDGE_CREATE_OR_UPDATE_CARD';
14126
+ const BRIDGE_OPTIONS_FETCHED = 'bridge/BRIDGE_OPTIONS_FETCHED';
14127
+ const BRIDGE_OPTIONS_FOUND = 'bridge/BRIDGE_OPTIONS_FOUND';
14128
+ const BRIDGE_SEARCH_OPTIONS = 'bridge/BRIDGE_SEARCH_OPTIONS';
14129
+ const BRIDGE_DISPLAY_LINKED_OPTION = 'bridge/DISPLAY_LINKED_OPTION';
14130
+ const BRIDGE_UPDATE_FORM_SCHEMA = 'bridge/BRIDGE_UPDATE_FORM_SCHEMA';
14131
+ const BRIDGE_WAZO_CONTACT_SEARCH = 'bridge/BRIDGE_WAZO_CONTACT_SEARCH';
14132
+ const BRIDGE_ON_AGENT_LOGGED_IN = 'bridge/BRIDGE_ON_AGENT_LOGGED_IN';
14133
+ const BRIDGE_ON_AGENT_LOGGED_OUT = 'bridge/BRIDGE_ON_AGENT_LOGGED_OUT';
14134
+ const BRIDGE_ON_AGENT_PAUSED = 'bridge/BRIDGE_ON_AGENT_PAUSED';
14135
+ const BRIDGE_ON_AGENT_RESUMED = 'bridge/BRIDGE_ON_AGENT_RESUMED';
14136
+ const BRIDGE_ON_LANGUAGE_CHANGED = 'bridge/BRIDGE_ON_LANGUAGE_CHANGED';
14137
+ const BRIDGE_ON_CALL_LOCALLY_ACCEPTED = 'bridge/BRIDGE_ON_CALL_LOCALLY_ACCEPTED';
14138
+ const BRIDGE_ON_CALL_REJECTED = 'bridge/BRIDGE_ON_CALL_REJECTED';
14139
+ const BRIDGE_ON_CALL_REMOTELY_ACCEPTED = 'bridge/BRIDGE_ON_CALL_REMOTELY_ACCEPTED';
14140
+ const BRIDGE_ON_CALL_HELD = 'bridge/BRIDGE_ON_CALL_HELD';
14141
+ const BRIDGE_ON_CALL_RESUMED = 'bridge/BRIDGE_ON_CALL_RESUMED';
14142
+ const BRIDGE_ON_CALL_MUTED = 'bridge/BRIDGE_ON_CALL_MUTED';
14143
+ const BRIDGE_ON_CALL_UN_MUTED = 'bridge/BRIDGE_ON_CALL_UN_MUTED';
14144
+ const BRIDGE_ON_DTMF = 'bridge/BRIDGE_ON_DTMF';
14145
+ const BRIDGE_ON_DIRECT_TRANSFER = 'bridge/BRIDGE_ON_DIRECT_TRANSFER';
14146
+ const BRIDGE_ON_CREATE_INDIRECT_TRANSFER = 'bridge/BRIDGE_ON_CREATE_INDIRECT_TRANSFER';
14147
+ const BRIDGE_ON_CANCEL_INDIRECT_TRANSFER = 'bridge/BRIDGE_ON_CANCEL_INDIRECT_TRANSFER';
14148
+ const BRIDGE_ON_CONFIRM_INDIRECT_TRANSFER = 'bridge/BRIDGE_ON_CONFIRM_INDIRECT_TRANSFER';
14149
+ const BRIDGE_ON_INDIRECT_TRANSFER_CALL_MADE = 'bridge/BRIDGE_ON_INDIRECT_TRANSFER_CALL_MADE';
14150
+ const BRIDGE_ON_INDIRECT_TRANSFER_DONE = 'bridge/BRIDGE_ON_INDIRECT_TRANSFER_DONE';
14151
+ const BRIDGE_ON_START_RECORDING = 'bridge/BRIDGE_ON_START_RECORDING';
14152
+ const BRIDGE_ON_STOP_RECORDING = 'bridge/BRIDGE_ON_STOP_RECORDING';
14153
+ const BRIDGE_ON_CARD_CANCELED = 'bridge/BRIDGE_ON_CARD_CANCELED';
14154
+ const BRIDGE_ENABLE_AGENT = 'bridge/BRIDGE_ENABLE_AGENT';
14155
+ const BRIDGE_SET_CARD_CONTENT = 'bridge/BRIDGE_SET_CARD_CONTENT';
14156
+ const BRIDGE_ENABLE_DEBUG = 'bridge/BRIDGE_ENABLE_DEBUG';
14157
+
14158
+ const BRIDGE_INJECT_CSS = 'bridge/BRIDGE_INJECT_CSS';
14159
+ const BRIDGE_CUSTOMIZE_APPEARANCE = 'bridge/BRIDGE_CUSTOMIZE_APPEARANCE';
14160
+
14124
14161
  const SDK_CLICK_TO_CALL = 'sdk/CLICK_TO_CALL';
14125
- const SDK_ON_CALL_MADE = 'sdk/SDK_ON_CALL_MADE';
14162
+ const SDK_ON_OUTGOING_CALL_MADE = 'sdk/SDK_ON_OUTGOING_CALL_MADE';
14126
14163
  const SDK_CALL_ENDED = 'sdk/ON_CALL_ENDED';
14127
14164
  const SDK_CALL_INCOMING = 'sdk/SDK_CALL_INCOMING';
14128
14165
  const SDK_AUTHENTICATED = 'sdk/SDK_AUTHENTICATED';
14166
+ const SDK_LOGGED_OUT = 'sdk/SDK_LOGGED_OUT';
14129
14167
 
14130
14168
  class Softphone {
14131
- url = 'https://softphone.wazo.io';
14132
- width = 500;
14133
- height = 600;
14134
- displayed = false;
14135
- iframe = null;
14169
+
14170
+
14171
+
14172
+
14173
+
14174
+
14175
+
14176
+ // Message waiting for the iframe to be loaded
14177
+
14136
14178
 
14137
14179
  onLinkEnabled(link ) {}
14180
+ onIFrameLoaded() {}
14138
14181
 
14139
- onCallMade(call ) {}
14182
+ onCallLocallyAnswered(call ) {}
14183
+ onCallRemotelyAnswered(call ) {}
14184
+ onOutgoingCallMade(call ) {}
14140
14185
  onCallIncoming(call ) {}
14186
+ onCallRejected(call ) {}
14141
14187
  onCallEnded(call , card , direction , fromExtension ) {}
14188
+
14189
+ onCardSaved(card ) {}
14190
+ onCardCanceled() {}
14142
14191
  onAuthenticated(session ) {}
14192
+ onLoggedOut() {}
14193
+
14194
+ onSearchOptions(fieldId , query ) {
14195
+ this.onOptionsResults(fieldId, []);
14196
+ }
14197
+
14198
+ onDisplayLinkedOption(optionId ) {}
14199
+ onWazoContactSearch(query ) {}
14200
+ onAgentLoggedIn() {}
14201
+ onAgentLoggedOut() {}
14202
+ onAgentPaused() {}
14203
+ onAgentResumed() {}
14204
+ onLanguageChanged(language ) {}
14205
+ onCallHeld() {}
14206
+ onCallResumed() {}
14207
+ onCallMuted() {}
14208
+ onCallUnMuted() {}
14209
+ onDtmfSent(tone ) {}
14210
+ onDirectTransfer(number ) {}
14211
+ onCreateIndirectTransfer(number ) {}
14212
+ onCancelIndirectTransfer() {}
14213
+ onConfirmIndirectTransfer() {}
14214
+ onIndirectCallMade(call ) {}
14215
+ onIndirectTransferDone(call ) {}
14216
+ onStartRecording() {}
14217
+ onStopRecording() {}
14218
+ onUnHandledEvent(event ) {}
14219
+
14220
+ init({
14221
+ url,
14222
+ width,
14223
+ height,
14224
+ server,
14225
+ port,
14226
+ language,
14227
+ wrapUpDuration,
14228
+ enableAgent = true,
14229
+ tenantId,
14230
+ debug = false,
14231
+ } = {}) {
14232
+ this.url = url || 'https://softphone.wazo.io';
14233
+ this.width = width || 500;
14234
+ this.height = height || 600;
14235
+ this.displayed = false;
14236
+ this.iframeLoaded = false;
14237
+
14238
+ this.iframeLoaded = false;
14239
+ this._pendingMessages = [];
14240
+ window.addEventListener('message', this._onMessage.bind(this), false);
14241
+
14242
+ if (!server) {
14243
+ // eslint-disable-next-line no-param-reassign
14244
+ server = 'stack.dev.wazo.io';
14245
+ }
14143
14246
 
14144
- init(url , width , height ) {
14145
- if (url) {
14146
- this.url = url;
14247
+ const config = { server };
14248
+ if (language) {
14249
+ config.language = language;
14250
+ }
14251
+ if (port) {
14252
+ config.port = port;
14147
14253
  }
14148
- if (width) {
14149
- this.width = width;
14254
+ if (tenantId) {
14255
+ config.tenantId = tenantId;
14150
14256
  }
14151
- if (height) {
14152
- this.height = height;
14257
+ if (wrapUpDuration) {
14258
+ config.wrapUpDuration = wrapUpDuration;
14153
14259
  }
14154
14260
 
14155
- window.addEventListener('message', this._onMessage.bind(this), false);
14261
+ this._sendMessage(BRIDGE_CONFIG_RETRIEVED, { config });
14156
14262
 
14157
- this._createIframe();
14263
+ if (enableAgent) {
14264
+ this._sendMessage(BRIDGE_ENABLE_AGENT);
14265
+ }
14266
+
14267
+ if (debug) {
14268
+ this._sendMessage(BRIDGE_ENABLE_DEBUG);
14269
+ }
14270
+
14271
+ this._createIframe(() => {
14272
+ this.iframeLoaded = true;
14273
+ this._pendingMessages.forEach(([type, payload]) => this._sendMessage(type, payload));
14274
+
14275
+ this.onIFrameLoaded();
14276
+ });
14158
14277
  }
14159
14278
 
14160
14279
  parseLinks() {
@@ -14170,9 +14289,7 @@ class Softphone {
14170
14289
  makeCall(number ) {
14171
14290
  this.displaySoftphone();
14172
14291
 
14173
- if (this.iframe) {
14174
- this.iframe.contentWindow.postMessage({ type: SDK_CLICK_TO_CALL, number }, '*');
14175
- }
14292
+ this._sendMessage(SDK_CLICK_TO_CALL, { number });
14176
14293
  }
14177
14294
 
14178
14295
  toggleSoftphoneDisplay() {
@@ -14181,8 +14298,6 @@ class Softphone {
14181
14298
  } else {
14182
14299
  this.displaySoftphone();
14183
14300
  }
14184
-
14185
- this.displayed = !this.displayed;
14186
14301
  }
14187
14302
 
14188
14303
  displaySoftphone() {
@@ -14193,15 +14308,42 @@ class Softphone {
14193
14308
  if (this.iframe) {
14194
14309
  this.iframe.style.display = 'block';
14195
14310
  }
14311
+
14312
+ this.displayed = true;
14196
14313
  }
14197
14314
 
14198
14315
  hideSoftphone() {
14199
14316
  if (this.iframe) {
14200
14317
  this.iframe.style.display = 'none';
14201
14318
  }
14319
+ this.displayed = false;
14320
+ }
14321
+
14322
+ optionsFetched(fieldId , options ) {
14323
+ this._sendMessage(BRIDGE_OPTIONS_FETCHED, { fieldId, options });
14324
+ }
14325
+
14326
+ onOptionsResults(fieldId , options ) {
14327
+ this._sendMessage(BRIDGE_OPTIONS_FOUND, { fieldId, options });
14328
+ }
14329
+
14330
+ setFormSchema(schema , uiSchema ) {
14331
+ this._sendMessage(BRIDGE_UPDATE_FORM_SCHEMA, { schema, uiSchema });
14332
+ }
14333
+
14334
+ setCardValue(field , value ) {
14335
+ this._sendMessage(BRIDGE_SET_CARD_CONTENT, { field, value });
14336
+ }
14337
+
14338
+ injectCss(css ) {
14339
+ this._sendMessage(BRIDGE_INJECT_CSS, { css });
14202
14340
  }
14203
14341
 
14204
- _createIframe() {
14342
+ customizeAppearance(themes , translations , assets ) {
14343
+ this._sendMessage(BRIDGE_CUSTOMIZE_APPEARANCE, { themes, translations, assets });
14344
+ }
14345
+
14346
+ _createIframe(cb = () => {}) {
14205
14347
  this.iframe = document.createElement('iframe');
14206
14348
  // $FlowFixMe
14207
14349
  this.iframe.width = this.width;
@@ -14213,10 +14355,13 @@ class Softphone {
14213
14355
  this.iframe.style.left = '0';
14214
14356
  this.iframe.style.bottom = '0';
14215
14357
  this.iframe.style.border = '1px solid #aaa';
14358
+ this.iframe.style.backgroundColor = 'white';
14216
14359
  this.iframe.src = this.url;
14217
14360
  this.iframe.style.display = 'none';
14218
14361
  this.iframe.id = 'wazo-softphone';
14219
14362
 
14363
+ this.iframe.onload = cb;
14364
+
14220
14365
  // $FlowFixMe
14221
14366
  document.body.appendChild(this.iframe);
14222
14367
  }
@@ -14243,8 +14388,8 @@ class Softphone {
14243
14388
  }
14244
14389
 
14245
14390
  switch (event.data.type) {
14246
- case SDK_ON_CALL_MADE:
14247
- this.onCallMade(event.data.callSession);
14391
+ case SDK_ON_OUTGOING_CALL_MADE:
14392
+ this.onOutgoingCallMade(event.data.callSession);
14248
14393
  break;
14249
14394
  case SDK_CALL_ENDED: {
14250
14395
  const { callSession, content, direction, userExtension } = event.data;
@@ -14259,8 +14404,105 @@ class Softphone {
14259
14404
  this._onAuthenticated(event.data.session);
14260
14405
  this.onAuthenticated(event.data.session);
14261
14406
  break;
14407
+ case SDK_LOGGED_OUT:
14408
+ this.onLoggedOut();
14409
+ break;
14410
+ case BRIDGE_CREATE_OR_UPDATE_CARD: {
14411
+ const { content } = event.data;
14412
+ this.onCardSaved(content);
14413
+ break;
14414
+ }
14415
+ case BRIDGE_SEARCH_OPTIONS: {
14416
+ const { fieldId, query } = event.data;
14417
+ this.onSearchOptions(fieldId, query);
14418
+ break;
14419
+ }
14420
+ case BRIDGE_DISPLAY_LINKED_OPTION:
14421
+ this.onDisplayLinkedOption(event.data.linkedOptionId);
14422
+ break;
14423
+ case BRIDGE_WAZO_CONTACT_SEARCH:
14424
+ this.onWazoContactSearch(event.data.query);
14425
+ break;
14426
+ case BRIDGE_ON_AGENT_LOGGED_IN:
14427
+ this.onAgentLoggedIn();
14428
+ break;
14429
+ case BRIDGE_ON_AGENT_LOGGED_OUT:
14430
+ this.onAgentLoggedOut();
14431
+ break;
14432
+ case BRIDGE_ON_AGENT_PAUSED:
14433
+ this.onAgentPaused();
14434
+ break;
14435
+ case BRIDGE_ON_AGENT_RESUMED:
14436
+ this.onAgentResumed();
14437
+ break;
14438
+ case BRIDGE_ON_LANGUAGE_CHANGED:
14439
+ this.onLanguageChanged(event.data.language);
14440
+ break;
14441
+ case BRIDGE_ON_CALL_HELD:
14442
+ this.onCallHeld();
14443
+ break;
14444
+ case BRIDGE_ON_CALL_RESUMED:
14445
+ this.onCallResumed();
14446
+ break;
14447
+ case BRIDGE_ON_CALL_MUTED:
14448
+ this.onCallMuted();
14449
+ break;
14450
+ case BRIDGE_ON_CALL_UN_MUTED:
14451
+ this.onCallUnMuted();
14452
+ break;
14453
+ case BRIDGE_ON_DTMF:
14454
+ this.onDtmfSent(event.data.tone);
14455
+ break;
14456
+ case BRIDGE_ON_DIRECT_TRANSFER:
14457
+ this.onDirectTransfer(event.data.number);
14458
+ break;
14459
+ case BRIDGE_ON_CREATE_INDIRECT_TRANSFER:
14460
+ this.onCreateIndirectTransfer(event.data.number);
14461
+ break;
14462
+ case BRIDGE_ON_CANCEL_INDIRECT_TRANSFER:
14463
+ this.onCancelIndirectTransfer();
14464
+ break;
14465
+ case BRIDGE_ON_CONFIRM_INDIRECT_TRANSFER:
14466
+ this.onConfirmIndirectTransfer();
14467
+ break;
14468
+ case BRIDGE_ON_INDIRECT_TRANSFER_CALL_MADE:
14469
+ this.onIndirectCallMade(event.data.call);
14470
+ break;
14471
+ case BRIDGE_ON_INDIRECT_TRANSFER_DONE:
14472
+ this.onIndirectTransferDone(event.data.call);
14473
+ break;
14474
+ case BRIDGE_ON_START_RECORDING:
14475
+ this.onStartRecording();
14476
+ break;
14477
+ case BRIDGE_ON_STOP_RECORDING:
14478
+ this.onStopRecording();
14479
+ break;
14480
+ case BRIDGE_ON_CARD_CANCELED:
14481
+ this.onCardCanceled();
14482
+ break;
14483
+ case BRIDGE_ON_CALL_LOCALLY_ACCEPTED:
14484
+ this.onCallLocallyAnswered(event.data.call);
14485
+ break;
14486
+ case BRIDGE_ON_CALL_REJECTED:
14487
+ this.onCallRejected(event.data.call);
14488
+ break;
14489
+ case BRIDGE_ON_CALL_REMOTELY_ACCEPTED:
14490
+ this.onCallRemotelyAnswered(event.data.call);
14491
+ break;
14492
+ default:
14493
+ this.onUnHandledEvent(event);
14494
+ break;
14262
14495
  }
14263
14496
  }
14497
+
14498
+ _sendMessage(type , payload = {}) {
14499
+ if (!this.iframe || !this.iframeLoaded) {
14500
+ this._pendingMessages.push([type, payload]);
14501
+ return;
14502
+ }
14503
+
14504
+ this.iframe.contentWindow.postMessage({ type, ...payload }, '*');
14505
+ }
14264
14506
  }
14265
14507
 
14266
14508
  var Softphone$1 = new Softphone();