@telegenta/webclient 2.0.12 → 3.0.1

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 (105) hide show
  1. package/README.md +102 -81
  2. package/demos/add_phone_number.html +8 -7
  3. package/demos/calldata_available.html +5 -5
  4. package/demos/embedded_config.html +3 -3
  5. package/demos/event_client.html +226 -211
  6. package/demos/phone_client.html +540 -514
  7. package/demos/styles.css +0 -0
  8. package/dist/telegenta.js +3663 -0
  9. package/dist/telegenta.min.js +1 -0
  10. package/docs/EventClient.html +3 -1093
  11. package/docs/EventServiceNotConnected.html +3 -0
  12. package/docs/InvalidMediaDevice.html +3 -0
  13. package/docs/InvalidOptions.html +3 -0
  14. package/docs/InvalidParameter.html +3 -0
  15. package/docs/LogHandler.html +7 -0
  16. package/docs/MediaNotPrepared.html +3 -0
  17. package/docs/NoActiveSession.html +3 -0
  18. package/docs/NotAllowed.html +3 -0
  19. package/docs/NotReady.html +3 -0
  20. package/docs/Phone.html +4 -2837
  21. package/docs/Request.html +3 -0
  22. package/docs/Requestor.html +3 -0
  23. package/docs/Session.html +3 -2599
  24. package/docs/UnableToConnect.html +3 -0
  25. package/docs/data/search.json +1 -0
  26. package/docs/event-client.js.html +352 -0
  27. package/docs/exceptions.js.html +104 -0
  28. package/docs/fonts/Inconsolata-Regular.ttf +0 -0
  29. package/docs/fonts/OpenSans-Regular.ttf +0 -0
  30. package/docs/fonts/WorkSans-Bold.ttf +0 -0
  31. package/docs/global.html +5 -4950
  32. package/docs/index.html +3 -66
  33. package/docs/logger.js.html +106 -0
  34. package/docs/phone-client.js.html +2175 -0
  35. package/docs/requestor.js.html +223 -0
  36. package/docs/scripts/core.js +726 -0
  37. package/docs/scripts/core.min.js +23 -0
  38. package/docs/scripts/resize.js +90 -0
  39. package/docs/scripts/search.js +265 -0
  40. package/docs/scripts/search.min.js +6 -0
  41. package/docs/scripts/{prettify → third-party}/Apache-License-2.0.txt +202 -202
  42. package/docs/scripts/third-party/fuse.js +9 -0
  43. package/docs/scripts/third-party/hljs-line-num-original.js +369 -0
  44. package/docs/scripts/third-party/hljs-line-num.js +1 -0
  45. package/docs/scripts/third-party/hljs-original.js +5171 -0
  46. package/docs/scripts/third-party/hljs.js +1 -0
  47. package/docs/scripts/third-party/popper.js +5 -0
  48. package/docs/scripts/third-party/tippy.js +1 -0
  49. package/docs/scripts/third-party/tocbot.js +672 -0
  50. package/docs/scripts/third-party/tocbot.min.js +1 -0
  51. package/docs/styles/clean-jsdoc-theme-base.css +1159 -0
  52. package/docs/styles/clean-jsdoc-theme-dark.css +412 -0
  53. package/docs/styles/clean-jsdoc-theme-light.css +482 -0
  54. package/docs/styles/clean-jsdoc-theme-scrollbar.css +30 -0
  55. package/docs/styles/clean-jsdoc-theme-without-scrollbar.min.css +1 -0
  56. package/docs/styles/clean-jsdoc-theme.min.css +1 -0
  57. package/package.json +38 -26
  58. package/babel.config.js +0 -16
  59. package/browser/telegenta.min.js +0 -1
  60. package/demos/telegenta.min.js +0 -1
  61. package/docs/fonts/OpenSans-Bold-webfont.eot +0 -0
  62. package/docs/fonts/OpenSans-Bold-webfont.svg +0 -1830
  63. package/docs/fonts/OpenSans-Bold-webfont.woff +0 -0
  64. package/docs/fonts/OpenSans-BoldItalic-webfont.eot +0 -0
  65. package/docs/fonts/OpenSans-BoldItalic-webfont.svg +0 -1830
  66. package/docs/fonts/OpenSans-BoldItalic-webfont.woff +0 -0
  67. package/docs/fonts/OpenSans-Italic-webfont.eot +0 -0
  68. package/docs/fonts/OpenSans-Italic-webfont.svg +0 -1830
  69. package/docs/fonts/OpenSans-Italic-webfont.woff +0 -0
  70. package/docs/fonts/OpenSans-Light-webfont.eot +0 -0
  71. package/docs/fonts/OpenSans-Light-webfont.svg +0 -1831
  72. package/docs/fonts/OpenSans-Light-webfont.woff +0 -0
  73. package/docs/fonts/OpenSans-LightItalic-webfont.eot +0 -0
  74. package/docs/fonts/OpenSans-LightItalic-webfont.svg +0 -1835
  75. package/docs/fonts/OpenSans-LightItalic-webfont.woff +0 -0
  76. package/docs/fonts/OpenSans-Regular-webfont.eot +0 -0
  77. package/docs/fonts/OpenSans-Regular-webfont.svg +0 -1831
  78. package/docs/fonts/OpenSans-Regular-webfont.woff +0 -0
  79. package/docs/fonts/OpenSans-Semibold-webfont.eot +0 -0
  80. package/docs/fonts/OpenSans-Semibold-webfont.svg +0 -1830
  81. package/docs/fonts/OpenSans-Semibold-webfont.ttf +0 -0
  82. package/docs/fonts/OpenSans-Semibold-webfont.woff +0 -0
  83. package/docs/fonts/OpenSans-SemiboldItalic-webfont.eot +0 -0
  84. package/docs/fonts/OpenSans-SemiboldItalic-webfont.svg +0 -1830
  85. package/docs/fonts/OpenSans-SemiboldItalic-webfont.ttf +0 -0
  86. package/docs/fonts/OpenSans-SemiboldItalic-webfont.woff +0 -0
  87. package/docs/scripts/linenumber.js +0 -25
  88. package/docs/scripts/prettify/lang-css.js +0 -2
  89. package/docs/scripts/prettify/prettify.js +0 -28
  90. package/docs/styles/jsdoc-default.css +0 -692
  91. package/docs/styles/prettify-jsdoc.css +0 -111
  92. package/docs/styles/prettify-tomorrow.css +0 -132
  93. package/embedded_client/embedded_phone.js +0 -325
  94. package/embedded_client/index.html +0 -201
  95. package/embedded_client/server.php +0 -28
  96. package/embedded_client/styles.css +0 -310
  97. package/embedded_client/tiny_rest_client.php +0 -73
  98. package/embedded_client/webphone_sprites.png +0 -0
  99. package/es5/event-client.js +0 -277
  100. package/es5/index.js +0 -44
  101. package/es5/phone-client.js +0 -1336
  102. package/src/event-client.js +0 -1
  103. package/src/index.js +0 -10
  104. package/src/phone-client.js +0 -1
  105. package/webpack.config.js +0 -39
@@ -0,0 +1,3 @@
1
+ <!DOCTYPE html><html lang="en" style="font-size:16px"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Class: UnableToConnect</title><!--[if lt IE 9]>
2
+ <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
3
+ <![endif]--><script src="scripts/third-party/hljs.js" defer="defer"></script><script src="scripts/third-party/hljs-line-num.js" defer="defer"></script><script src="scripts/third-party/popper.js" defer="defer"></script><script src="scripts/third-party/tippy.js" defer="defer"></script><script src="scripts/third-party/tocbot.min.js"></script><script>var baseURL="/",locationPathname="";baseURL=(locationPathname=document.location.pathname).substr(0,locationPathname.lastIndexOf("/")+1)</script><link rel="stylesheet" href="styles/clean-jsdoc-theme.min.css"><svg aria-hidden="true" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="display:none"><defs><symbol id="copy-icon" viewbox="0 0 488.3 488.3"><g><path d="M314.25,85.4h-227c-21.3,0-38.6,17.3-38.6,38.6v325.7c0,21.3,17.3,38.6,38.6,38.6h227c21.3,0,38.6-17.3,38.6-38.6V124 C352.75,102.7,335.45,85.4,314.25,85.4z M325.75,449.6c0,6.4-5.2,11.6-11.6,11.6h-227c-6.4,0-11.6-5.2-11.6-11.6V124 c0-6.4,5.2-11.6,11.6-11.6h227c6.4,0,11.6,5.2,11.6,11.6V449.6z"/><path d="M401.05,0h-227c-21.3,0-38.6,17.3-38.6,38.6c0,7.5,6,13.5,13.5,13.5s13.5-6,13.5-13.5c0-6.4,5.2-11.6,11.6-11.6h227 c6.4,0,11.6,5.2,11.6,11.6v325.7c0,6.4-5.2,11.6-11.6,11.6c-7.5,0-13.5,6-13.5,13.5s6,13.5,13.5,13.5c21.3,0,38.6-17.3,38.6-38.6 V38.6C439.65,17.3,422.35,0,401.05,0z"/></g></symbol><symbol id="search-icon" viewBox="0 0 512 512"><g><g><path d="M225.474,0C101.151,0,0,101.151,0,225.474c0,124.33,101.151,225.474,225.474,225.474 c124.33,0,225.474-101.144,225.474-225.474C450.948,101.151,349.804,0,225.474,0z M225.474,409.323 c-101.373,0-183.848-82.475-183.848-183.848S124.101,41.626,225.474,41.626s183.848,82.475,183.848,183.848 S326.847,409.323,225.474,409.323z"/></g></g><g><g><path d="M505.902,476.472L386.574,357.144c-8.131-8.131-21.299-8.131-29.43,0c-8.131,8.124-8.131,21.306,0,29.43l119.328,119.328 c4.065,4.065,9.387,6.098,14.715,6.098c5.321,0,10.649-2.033,14.715-6.098C514.033,497.778,514.033,484.596,505.902,476.472z"/></g></g></symbol><symbol id="font-size-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11.246 15H4.754l-2 5H.6L7 4h2l6.4 16h-2.154l-2-5zm-.8-2L8 6.885 5.554 13h4.892zM21 12.535V12h2v8h-2v-.535a4 4 0 1 1 0-6.93zM19 18a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"/></symbol><symbol id="add-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11 11V5h2v6h6v2h-6v6h-2v-6H5v-2z"/></symbol><symbol id="minus-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M5 11h14v2H5z"/></symbol><symbol id="dark-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M10 7a7 7 0 0 0 12 4.9v.1c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2h.1A6.979 6.979 0 0 0 10 7zm-6 5a8 8 0 0 0 15.062 3.762A9 9 0 0 1 8.238 4.938 7.999 7.999 0 0 0 4 12z"/></symbol><symbol id="light-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-2a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM11 1h2v3h-2V1zm0 19h2v3h-2v-3zM3.515 4.929l1.414-1.414L7.05 5.636 5.636 7.05 3.515 4.93zM16.95 18.364l1.414-1.414 2.121 2.121-1.414 1.414-2.121-2.121zm2.121-14.85l1.414 1.415-2.121 2.121-1.414-1.414 2.121-2.121zM5.636 16.95l1.414 1.414-2.121 2.121-1.414-1.414 2.121-2.121zM23 11v2h-3v-2h3zM4 11v2H1v-2h3z"/></symbol><symbol id="reset-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M18.537 19.567A9.961 9.961 0 0 1 12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10c0 2.136-.67 4.116-1.81 5.74L17 12h3a8 8 0 1 0-2.46 5.772l.997 1.795z"/></symbol><symbol id="down-icon" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M12.7803 6.21967C13.0732 6.51256 13.0732 6.98744 12.7803 7.28033L8.53033 11.5303C8.23744 11.8232 7.76256 11.8232 7.46967 11.5303L3.21967 7.28033C2.92678 6.98744 2.92678 6.51256 3.21967 6.21967C3.51256 5.92678 3.98744 5.92678 4.28033 6.21967L8 9.93934L11.7197 6.21967C12.0126 5.92678 12.4874 5.92678 12.7803 6.21967Z"></path></symbol><symbol id="codepen-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M16.5 13.202L13 15.535v3.596L19.197 15 16.5 13.202zM14.697 12L12 10.202 9.303 12 12 13.798 14.697 12zM20 10.869L18.303 12 20 13.131V10.87zM19.197 9L13 4.869v3.596l3.5 2.333L19.197 9zM7.5 10.798L11 8.465V4.869L4.803 9 7.5 10.798zM4.803 15L11 19.131v-3.596l-3.5-2.333L4.803 15zM4 13.131L5.697 12 4 10.869v2.262zM2 9a1 1 0 0 1 .445-.832l9-6a1 1 0 0 1 1.11 0l9 6A1 1 0 0 1 22 9v6a1 1 0 0 1-.445.832l-9 6a1 1 0 0 1-1.11 0l-9-6A1 1 0 0 1 2 15V9z"/></symbol><symbol id="close-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 10.586l4.95-4.95 1.414 1.414-4.95 4.95 4.95 4.95-1.414 1.414-4.95-4.95-4.95 4.95-1.414-1.414 4.95-4.95-4.95-4.95L7.05 5.636z"/></symbol><symbol id="menu-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M3 4h18v2H3V4zm0 7h18v2H3v-2zm0 7h18v2H3v-2z"/></symbol></defs></svg></head><body data-theme="dark"><div class="sidebar-container"><div class="sidebar" id="sidebar"><div class="sidebar-items-container"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="EventClient.html">EventClient</a></div><div class="sidebar-section-children"><a href="EventServiceNotConnected.html">EventServiceNotConnected</a></div><div class="sidebar-section-children"><a href="InvalidMediaDevice.html">InvalidMediaDevice</a></div><div class="sidebar-section-children"><a href="InvalidOptions.html">InvalidOptions</a></div><div class="sidebar-section-children"><a href="InvalidParameter.html">InvalidParameter</a></div><div class="sidebar-section-children"><a href="LogHandler.html">LogHandler</a></div><div class="sidebar-section-children"><a href="MediaNotPrepared.html">MediaNotPrepared</a></div><div class="sidebar-section-children"><a href="NoActiveSession.html">NoActiveSession</a></div><div class="sidebar-section-children"><a href="NotAllowed.html">NotAllowed</a></div><div class="sidebar-section-children"><a href="NotReady.html">NotReady</a></div><div class="sidebar-section-children"><a href="Phone.html">Phone</a></div><div class="sidebar-section-children"><a href="Request.html">Request</a></div><div class="sidebar-section-children"><a href="Requestor.html">Requestor</a></div><div class="sidebar-section-children"><a href="Session.html">Session</a></div><div class="sidebar-section-children"><a href="UnableToConnect.html">UnableToConnect</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-events"><div>Events</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#event:callDataInfo">callDataInfo</a></div><div class="sidebar-section-children"><a href="global.html#event:callDurationUpdate">callDurationUpdate</a></div><div class="sidebar-section-children"><a href="global.html#event:callEnded">callEnded</a></div><div class="sidebar-section-children"><a href="global.html#event:callQualityReportUpdate">callQualityReportUpdate</a></div><div class="sidebar-section-children"><a href="global.html#event:connectionStateChange">connectionStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:holdStateChange">holdStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:incomingCall">incomingCall</a></div><div class="sidebar-section-children"><a href="global.html#event:muteStateChange">muteStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:recordingStateChange">recordingStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:sessionCreated">sessionCreated</a></div><div class="sidebar-section-children"><a href="global.html#event:sessionRemoved">sessionRemoved</a></div><div class="sidebar-section-children"><a href="global.html#event:sessionStateChange">sessionStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:whisperModeChange">whisperModeChange</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-global"><div>Global</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#CALL_DIRECTION">CALL_DIRECTION</a></div><div class="sidebar-section-children"><a href="global.html#CALL_DISPOSITION">CALL_DISPOSITION</a></div><div class="sidebar-section-children"><a href="global.html#CONNECTION_STATE">CONNECTION_STATE</a></div><div class="sidebar-section-children"><a href="global.html#LOGLVL">LOGLVL</a></div><div class="sidebar-section-children"><a href="global.html#SESSION_STATE">SESSION_STATE</a></div></div></div></div></div><div class="navbar-container" id="VuAckcnZhf"><nav class="navbar"><div class="navbar-left-items"></div><div class="navbar-right-items"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#light-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div><nav></nav></nav></div><div class="toc-container"><div class="toc-content"><span class="bold">On this page</span><div id="eed4d2a0bfd64539bb9df78095dec881"></div></div></div><div class="body-wrapper"><div class="main-content"><div class="main-wrapper"><section><header><h1 id="UnableToConnect-title" class="has-anchor">UnableToConnect</h1><div class="class-description">Exception raised if unable to connect to service</div></header><article><div class="container-overview"><h2 id="constructor" class="has-anchor">Constructor</h2><h3 class="name has-anchor" id="UnableToConnect"><span class="type-signature"></span>new UnableToConnect<span class="signature">()</span></h3><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="exceptions.js.html">exceptions.js</a>, <a href="exceptions.js.html#line75">line 75</a></li></ul></dd></div></dl></div><h2 id="classes" class="subsection-title has-anchor">Classes</h2><dl><dt><a href="UnableToConnect.html">UnableToConnect</a></dt><dd></dd></dl></article></section></div></div></div><div class="search-container" id="PkfLWpAbet" style="display:none"><div class="wrapper" id="iCxFxjkHbP"><button class="icon-button search-close-button" id="VjLlGakifb" aria-label="close search"><svg><use xlink:href="#close-icon"></use></svg></button><div class="search-box-c"><svg><use xlink:href="#search-icon"></use></svg> <input type="text" id="vpcKVYIppa" class="search-input" placeholder="Search..." autofocus></div><div class="search-result-c" id="fWwVHRuDuN"><span class="search-result-c-text">Type anything to view search result</span></div></div></div><div class="mobile-menu-icon-container"><button class="icon-button" id="mobile-menu" data-isopen="false" aria-label="menu"><svg><use xlink:href="#menu-icon"></use></svg></button></div><div id="mobile-sidebar" class="mobile-sidebar-container"><div class="mobile-sidebar-wrapper"><div class="mobile-nav-links"></div><div class="mobile-sidebar-items-c"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="EventClient.html">EventClient</a></div><div class="sidebar-section-children"><a href="EventServiceNotConnected.html">EventServiceNotConnected</a></div><div class="sidebar-section-children"><a href="InvalidMediaDevice.html">InvalidMediaDevice</a></div><div class="sidebar-section-children"><a href="InvalidOptions.html">InvalidOptions</a></div><div class="sidebar-section-children"><a href="InvalidParameter.html">InvalidParameter</a></div><div class="sidebar-section-children"><a href="LogHandler.html">LogHandler</a></div><div class="sidebar-section-children"><a href="MediaNotPrepared.html">MediaNotPrepared</a></div><div class="sidebar-section-children"><a href="NoActiveSession.html">NoActiveSession</a></div><div class="sidebar-section-children"><a href="NotAllowed.html">NotAllowed</a></div><div class="sidebar-section-children"><a href="NotReady.html">NotReady</a></div><div class="sidebar-section-children"><a href="Phone.html">Phone</a></div><div class="sidebar-section-children"><a href="Request.html">Request</a></div><div class="sidebar-section-children"><a href="Requestor.html">Requestor</a></div><div class="sidebar-section-children"><a href="Session.html">Session</a></div><div class="sidebar-section-children"><a href="UnableToConnect.html">UnableToConnect</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-events"><div>Events</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#event:callDataInfo">callDataInfo</a></div><div class="sidebar-section-children"><a href="global.html#event:callDurationUpdate">callDurationUpdate</a></div><div class="sidebar-section-children"><a href="global.html#event:callEnded">callEnded</a></div><div class="sidebar-section-children"><a href="global.html#event:callQualityReportUpdate">callQualityReportUpdate</a></div><div class="sidebar-section-children"><a href="global.html#event:connectionStateChange">connectionStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:holdStateChange">holdStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:incomingCall">incomingCall</a></div><div class="sidebar-section-children"><a href="global.html#event:muteStateChange">muteStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:recordingStateChange">recordingStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:sessionCreated">sessionCreated</a></div><div class="sidebar-section-children"><a href="global.html#event:sessionRemoved">sessionRemoved</a></div><div class="sidebar-section-children"><a href="global.html#event:sessionStateChange">sessionStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:whisperModeChange">whisperModeChange</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-global"><div>Global</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#CALL_DIRECTION">CALL_DIRECTION</a></div><div class="sidebar-section-children"><a href="global.html#CALL_DISPOSITION">CALL_DISPOSITION</a></div><div class="sidebar-section-children"><a href="global.html#CONNECTION_STATE">CONNECTION_STATE</a></div><div class="sidebar-section-children"><a href="global.html#LOGLVL">LOGLVL</a></div><div class="sidebar-section-children"><a href="global.html#SESSION_STATE">SESSION_STATE</a></div></div></div><div class="mobile-navbar-actions"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#light-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div></div></div><script type="text/javascript" src="scripts/core.min.js"></script><script src="scripts/search.min.js" defer="defer"></script><script src="scripts/third-party/fuse.js" defer="defer"></script><script type="text/javascript">var tocbotInstance=tocbot.init({tocSelector:"#eed4d2a0bfd64539bb9df78095dec881",contentSelector:".main-content",headingSelector:"h1, h2, h3",hasInnerContainers:!0,scrollContainer:".main-content",headingsOffset:130,onClick:bringLinkToView})</script></body></html>
@@ -0,0 +1 @@
1
+ {"list":[{"title":"CALL_DIRECTION","link":"<a href=\"global.html#CALL_DIRECTION\">CALL_DIRECTION</a>"},{"title":"CALL_DISPOSITION","link":"<a href=\"global.html#CALL_DISPOSITION\">CALL_DISPOSITION</a>"},{"title":"CONNECTION_STATE","link":"<a href=\"global.html#CONNECTION_STATE\">CONNECTION_STATE</a>"},{"title":"EventClient","link":"<a href=\"EventClient.html\">EventClient</a>"},{"title":"EventClient#connect","link":"<a href=\"EventClient.html#connect\">connect</a>","description":"Establish a connecting to the event service"},{"title":"EventClient#disconnect","link":"<a href=\"EventClient.html#disconnect\">disconnect</a>","description":"Disconnect from event service and clear all active subscriptions"},{"title":"EventClient#fireEvent","link":"<a href=\"EventClient.html#fireEvent\">fireEvent</a>","description":"Fire event message"},{"title":"EventClient#isConnected","link":"<a href=\"EventClient.html#isConnected\">isConnected</a>","description":"Return service connection state"},{"title":"EventClient#subscribe","link":"<a href=\"EventClient.html#subscribe\">subscribe</a>","description":"Subscribe to event"},{"title":"EventClient#unsubscribe","link":"<a href=\"EventClient.html#unsubscribe\">unsubscribe</a>","description":"Unsubscribe event messages"},{"title":"EventServiceNotConnected","link":"<a href=\"EventServiceNotConnected.html\">EventServiceNotConnected</a>"},{"title":"InvalidMediaDevice","link":"<a href=\"InvalidMediaDevice.html\">InvalidMediaDevice</a>"},{"title":"InvalidOptions","link":"<a href=\"InvalidOptions.html\">InvalidOptions</a>"},{"title":"InvalidParameter","link":"<a href=\"InvalidParameter.html\">InvalidParameter</a>"},{"title":"LOGLVL","link":"<a href=\"global.html#LOGLVL\">LOGLVL</a>","description":"Log levels"},{"title":"LogHandler","link":"<a href=\"LogHandler.html\">LogHandler</a>","description":"Create new log handler"},{"title":"MediaNotPrepared","link":"<a href=\"MediaNotPrepared.html\">MediaNotPrepared</a>"},{"title":"NoActiveSession","link":"<a href=\"NoActiveSession.html\">NoActiveSession</a>"},{"title":"NotAllowed","link":"<a href=\"NotAllowed.html\">NotAllowed</a>"},{"title":"NotReady","link":"<a href=\"NotReady.html\">NotReady</a>"},{"title":"Phone","link":"<a href=\"Phone.html\">Phone</a>"},{"title":"Phone#browserSupported","link":"<a href=\"Phone.html#browserSupported\">browserSupported</a>","description":"Verify browser is supported"},{"title":"Phone#call","link":"<a href=\"Phone.html#call\">call</a>","description":"Start a new call\nIf you have other active calls they will be set on hold"},{"title":"Phone#getSessionByUUID","link":"<a href=\"Phone.html#getSessionByUUID\">getSessionByUUID</a>","description":"Get session by UUID, if none are found null is returned"},{"title":"Phone#hasMediaPermission","link":"<a href=\"Phone.html#hasMediaPermission\">hasMediaPermission</a>","description":"Return media permission state"},{"title":"Phone#hasMediaPermissionError","link":"<a href=\"Phone.html#hasMediaPermissionError\">hasMediaPermissionError</a>","description":"Media permission denied"},{"title":"Phone#holdAllCalls","link":"<a href=\"Phone.html#holdAllCalls\">holdAllCalls</a>","description":"Hold all active calls"},{"title":"Phone#isStarted","link":"<a href=\"Phone.html#isStarted\">isStarted</a>","description":"Phone client started"},{"title":"Phone#listen","link":"<a href=\"Phone.html#listen\">listen</a>","description":"Start a new session and listen to another call"},{"title":"Phone#options","link":"<a href=\"Phone.html#options\">options</a>","description":"Return phone options"},{"title":"Phone#playTone","link":"<a href=\"Phone.html#playTone\">playTone</a>","description":"Play tone locally (on incoming remote audio)"},{"title":"Phone#prepareMedia","link":"<a href=\"Phone.html#prepareMedia\">prepareMedia</a>","description":"Prepare media and get media permission from browser\nThis must be done prior to using the phone or getting device lists."},{"title":"Phone#remoteAudioElement","link":"<a href=\"Phone.html#remoteAudioElement\">remoteAudioElement</a>","description":"Remote audio HTML element"},{"title":"Phone#sessions","link":"<a href=\"Phone.html#sessions\">sessions</a>","description":"Return list of current sessions"},{"title":"Phone#start","link":"<a href=\"Phone.html#start\">start</a>","description":"Start phone and connect to server if needed"},{"title":"Phone#stop","link":"<a href=\"Phone.html#stop\">stop</a>","description":"Stops the phone client, gracefully disconnects from the server and terminates any active calls"},{"title":"Phone#stopTone","link":"<a href=\"Phone.html#stopTone\">stopTone</a>","description":"Immediately stop playing tones\n(Tone callbacks will be cancelled)"},{"title":"Request","link":"<a href=\"Request.html\">Request</a>"},{"title":"Request#reject","link":"<a href=\"Request.html#reject\">reject</a>","description":"Reject request (promise will be rejected on remote)"},{"title":"Request#resolve","link":"<a href=\"Request.html#resolve\">resolve</a>","description":"Resolve request (promise will be resolved successfully on remote)"},{"title":"Requestor","link":"<a href=\"Requestor.html\">Requestor</a>"},{"title":"Requestor#findPendingRequest","link":"<a href=\"Requestor.html#findPendingRequest\">findPendingRequest</a>","description":"Get index og pending request"},{"title":"Requestor#ping","link":"<a href=\"Requestor.html#ping\">ping</a>","description":"Send a ping request (for keep alives)"},{"title":"Requestor#receiveMessage","link":"<a href=\"Requestor.html#receiveMessage\">receiveMessage</a>","description":"Receive message from websocket"},{"title":"Requestor#removePendingRequest","link":"<a href=\"Requestor.html#removePendingRequest\">removePendingRequest</a>","description":"Remove a request from pending queue"},{"title":"Requestor#sendRequest","link":"<a href=\"Requestor.html#sendRequest\">sendRequest</a>","description":"Send a request"},{"title":"SESSION_STATE","link":"<a href=\"global.html#SESSION_STATE\">SESSION_STATE</a>"},{"title":"Session","link":"<a href=\"Session.html\">Session</a>"},{"title":"Session#answer","link":"<a href=\"Session.html#answer\">answer</a>","description":"Answer incoming call"},{"title":"Session#destinationNumber","link":"<a href=\"Session.html#destinationNumber\">destinationNumber</a>","description":"Destination number called"},{"title":"Session#direction","link":"<a href=\"Session.html#direction\">direction</a>","description":"Session call direction"},{"title":"Session#getOtherSessions","link":"<a href=\"Session.html#getOtherSessions\">getOtherSessions</a>","description":"Return a list of all sessions except this session\nMostly used when transferring call"},{"title":"Session#hangup","link":"<a href=\"Session.html#hangup\">hangup</a>","description":"Hangup call"},{"title":"Session#hold","link":"<a href=\"Session.html#hold\">hold</a>","description":"Hold call"},{"title":"Session#isMuted","link":"<a href=\"Session.html#isMuted\">isMuted</a>","description":"Return mute state"},{"title":"Session#isOnHold","link":"<a href=\"Session.html#isOnHold\">isOnHold</a>","description":"Return call hold status"},{"title":"Session#isRecording","link":"<a href=\"Session.html#isRecording\">isRecording</a>","description":"Return recording state"},{"title":"Session#localNumberName","link":"<a href=\"Session.html#localNumberName\">localNumberName</a>","description":"Name of local number (for inbound)"},{"title":"Session#muteMic","link":"<a href=\"Session.html#muteMic\">muteMic</a>","description":"Mute microphone"},{"title":"Session#originatingNumber","link":"<a href=\"Session.html#originatingNumber\">originatingNumber</a>","description":"Originating number"},{"title":"Session#playback","link":"<a href=\"Session.html#playback\">playback</a>","description":"Playback media file into call. You must be connected the event service to use this feature (set connectEventService=true)"},{"title":"Session#reject","link":"<a href=\"Session.html#reject\">reject</a>","description":"Reject incoming call"},{"title":"Session#sendDTMF","link":"<a href=\"Session.html#sendDTMF\">sendDTMF</a>","description":"Send DTMF tone on call"},{"title":"Session#setWhisperMode","link":"<a href=\"Session.html#setWhisperMode\">setWhisperMode</a>","description":"Set whisper mode on \"listen\" calls"},{"title":"Session#startRecording","link":"<a href=\"Session.html#startRecording\">startRecording</a>","description":"Start recording"},{"title":"Session#state","link":"<a href=\"Session.html#state\">state</a>","description":"Session state"},{"title":"Session#stopRecording","link":"<a href=\"Session.html#stopRecording\">stopRecording</a>","description":"Stop recording"},{"title":"Session#toggleHold","link":"<a href=\"Session.html#toggleHold\">toggleHold</a>","description":"Toggle call hold"},{"title":"Session#toggleMute","link":"<a href=\"Session.html#toggleMute\">toggleMute</a>","description":"Toggle microphone mute state"},{"title":"Session#toggleRecording","link":"<a href=\"Session.html#toggleRecording\">toggleRecording</a>","description":"Toogle recording ON/OFF"},{"title":"Session#transfer","link":"<a href=\"Session.html#transfer\">transfer</a>","description":"Transfer call to another session (attended transfer)"},{"title":"Session#unhold","link":"<a href=\"Session.html#unhold\">unhold</a>","description":"Unhold call"},{"title":"Session#unmuteMic","link":"<a href=\"Session.html#unmuteMic\">unmuteMic</a>","description":"Unmute microphone"},{"title":"Session#uuid","link":"<a href=\"Session.html#uuid\">uuid</a>","description":"Return UUID of call"},{"title":"UnableToConnect","link":"<a href=\"UnableToConnect.html\">UnableToConnect</a>"},{"title":"event:callDataInfo","link":"<a href=\"global.html#event:callDataInfo\">callDataInfo</a>"},{"title":"event:callDurationUpdate","link":"<a href=\"global.html#event:callDurationUpdate\">callDurationUpdate</a>"},{"title":"event:callEnded","link":"<a href=\"global.html#event:callEnded\">callEnded</a>"},{"title":"event:callQualityReportUpdate","link":"<a href=\"global.html#event:callQualityReportUpdate\">callQualityReportUpdate</a>","description":"Contains information about call quality (fires in interval of 5 sec).\nPayload contains \"total\" (metrics for whole session) and \"delta\" (metrics last 5 secs)."},{"title":"event:connectionStateChange","link":"<a href=\"global.html#event:connectionStateChange\">connectionStateChange</a>"},{"title":"event:holdStateChange","link":"<a href=\"global.html#event:holdStateChange\">holdStateChange</a>"},{"title":"event:incomingCall","link":"<a href=\"global.html#event:incomingCall\">incomingCall</a>"},{"title":"event:muteStateChange","link":"<a href=\"global.html#event:muteStateChange\">muteStateChange</a>"},{"title":"event:recordingStateChange","link":"<a href=\"global.html#event:recordingStateChange\">recordingStateChange</a>"},{"title":"event:sessionCreated","link":"<a href=\"global.html#event:sessionCreated\">sessionCreated</a>"},{"title":"event:sessionRemoved","link":"<a href=\"global.html#event:sessionRemoved\">sessionRemoved</a>"},{"title":"event:sessionStateChange","link":"<a href=\"global.html#event:sessionStateChange\">sessionStateChange</a>"},{"title":"event:whisperModeChange","link":"<a href=\"global.html#event:whisperModeChange\">whisperModeChange</a>"}]}
@@ -0,0 +1,352 @@
1
+ <!DOCTYPE html><html lang="en" style="font-size:16px"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Source: event-client.js</title><!--[if lt IE 9]>
2
+ <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
3
+ <![endif]--><script src="scripts/third-party/hljs.js" defer="defer"></script><script src="scripts/third-party/hljs-line-num.js" defer="defer"></script><script src="scripts/third-party/popper.js" defer="defer"></script><script src="scripts/third-party/tippy.js" defer="defer"></script><script src="scripts/third-party/tocbot.min.js"></script><script>var baseURL="/",locationPathname="";baseURL=(locationPathname=document.location.pathname).substr(0,locationPathname.lastIndexOf("/")+1)</script><link rel="stylesheet" href="styles/clean-jsdoc-theme.min.css"><svg aria-hidden="true" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="display:none"><defs><symbol id="copy-icon" viewbox="0 0 488.3 488.3"><g><path d="M314.25,85.4h-227c-21.3,0-38.6,17.3-38.6,38.6v325.7c0,21.3,17.3,38.6,38.6,38.6h227c21.3,0,38.6-17.3,38.6-38.6V124 C352.75,102.7,335.45,85.4,314.25,85.4z M325.75,449.6c0,6.4-5.2,11.6-11.6,11.6h-227c-6.4,0-11.6-5.2-11.6-11.6V124 c0-6.4,5.2-11.6,11.6-11.6h227c6.4,0,11.6,5.2,11.6,11.6V449.6z"/><path d="M401.05,0h-227c-21.3,0-38.6,17.3-38.6,38.6c0,7.5,6,13.5,13.5,13.5s13.5-6,13.5-13.5c0-6.4,5.2-11.6,11.6-11.6h227 c6.4,0,11.6,5.2,11.6,11.6v325.7c0,6.4-5.2,11.6-11.6,11.6c-7.5,0-13.5,6-13.5,13.5s6,13.5,13.5,13.5c21.3,0,38.6-17.3,38.6-38.6 V38.6C439.65,17.3,422.35,0,401.05,0z"/></g></symbol><symbol id="search-icon" viewBox="0 0 512 512"><g><g><path d="M225.474,0C101.151,0,0,101.151,0,225.474c0,124.33,101.151,225.474,225.474,225.474 c124.33,0,225.474-101.144,225.474-225.474C450.948,101.151,349.804,0,225.474,0z M225.474,409.323 c-101.373,0-183.848-82.475-183.848-183.848S124.101,41.626,225.474,41.626s183.848,82.475,183.848,183.848 S326.847,409.323,225.474,409.323z"/></g></g><g><g><path d="M505.902,476.472L386.574,357.144c-8.131-8.131-21.299-8.131-29.43,0c-8.131,8.124-8.131,21.306,0,29.43l119.328,119.328 c4.065,4.065,9.387,6.098,14.715,6.098c5.321,0,10.649-2.033,14.715-6.098C514.033,497.778,514.033,484.596,505.902,476.472z"/></g></g></symbol><symbol id="font-size-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11.246 15H4.754l-2 5H.6L7 4h2l6.4 16h-2.154l-2-5zm-.8-2L8 6.885 5.554 13h4.892zM21 12.535V12h2v8h-2v-.535a4 4 0 1 1 0-6.93zM19 18a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"/></symbol><symbol id="add-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11 11V5h2v6h6v2h-6v6h-2v-6H5v-2z"/></symbol><symbol id="minus-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M5 11h14v2H5z"/></symbol><symbol id="dark-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M10 7a7 7 0 0 0 12 4.9v.1c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2h.1A6.979 6.979 0 0 0 10 7zm-6 5a8 8 0 0 0 15.062 3.762A9 9 0 0 1 8.238 4.938 7.999 7.999 0 0 0 4 12z"/></symbol><symbol id="light-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-2a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM11 1h2v3h-2V1zm0 19h2v3h-2v-3zM3.515 4.929l1.414-1.414L7.05 5.636 5.636 7.05 3.515 4.93zM16.95 18.364l1.414-1.414 2.121 2.121-1.414 1.414-2.121-2.121zm2.121-14.85l1.414 1.415-2.121 2.121-1.414-1.414 2.121-2.121zM5.636 16.95l1.414 1.414-2.121 2.121-1.414-1.414 2.121-2.121zM23 11v2h-3v-2h3zM4 11v2H1v-2h3z"/></symbol><symbol id="reset-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M18.537 19.567A9.961 9.961 0 0 1 12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10c0 2.136-.67 4.116-1.81 5.74L17 12h3a8 8 0 1 0-2.46 5.772l.997 1.795z"/></symbol><symbol id="down-icon" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M12.7803 6.21967C13.0732 6.51256 13.0732 6.98744 12.7803 7.28033L8.53033 11.5303C8.23744 11.8232 7.76256 11.8232 7.46967 11.5303L3.21967 7.28033C2.92678 6.98744 2.92678 6.51256 3.21967 6.21967C3.51256 5.92678 3.98744 5.92678 4.28033 6.21967L8 9.93934L11.7197 6.21967C12.0126 5.92678 12.4874 5.92678 12.7803 6.21967Z"></path></symbol><symbol id="codepen-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M16.5 13.202L13 15.535v3.596L19.197 15 16.5 13.202zM14.697 12L12 10.202 9.303 12 12 13.798 14.697 12zM20 10.869L18.303 12 20 13.131V10.87zM19.197 9L13 4.869v3.596l3.5 2.333L19.197 9zM7.5 10.798L11 8.465V4.869L4.803 9 7.5 10.798zM4.803 15L11 19.131v-3.596l-3.5-2.333L4.803 15zM4 13.131L5.697 12 4 10.869v2.262zM2 9a1 1 0 0 1 .445-.832l9-6a1 1 0 0 1 1.11 0l9 6A1 1 0 0 1 22 9v6a1 1 0 0 1-.445.832l-9 6a1 1 0 0 1-1.11 0l-9-6A1 1 0 0 1 2 15V9z"/></symbol><symbol id="close-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 10.586l4.95-4.95 1.414 1.414-4.95 4.95 4.95 4.95-1.414 1.414-4.95-4.95-4.95 4.95-1.414-1.414 4.95-4.95-4.95-4.95L7.05 5.636z"/></symbol><symbol id="menu-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M3 4h18v2H3V4zm0 7h18v2H3v-2zm0 7h18v2H3v-2z"/></symbol></defs></svg></head><body data-theme="dark"><div class="sidebar-container"><div class="sidebar" id="sidebar"><div class="sidebar-items-container"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="EventClient.html">EventClient</a></div><div class="sidebar-section-children"><a href="EventServiceNotConnected.html">EventServiceNotConnected</a></div><div class="sidebar-section-children"><a href="InvalidMediaDevice.html">InvalidMediaDevice</a></div><div class="sidebar-section-children"><a href="InvalidOptions.html">InvalidOptions</a></div><div class="sidebar-section-children"><a href="InvalidParameter.html">InvalidParameter</a></div><div class="sidebar-section-children"><a href="LogHandler.html">LogHandler</a></div><div class="sidebar-section-children"><a href="MediaNotPrepared.html">MediaNotPrepared</a></div><div class="sidebar-section-children"><a href="NoActiveSession.html">NoActiveSession</a></div><div class="sidebar-section-children"><a href="NotAllowed.html">NotAllowed</a></div><div class="sidebar-section-children"><a href="NotReady.html">NotReady</a></div><div class="sidebar-section-children"><a href="Phone.html">Phone</a></div><div class="sidebar-section-children"><a href="Request.html">Request</a></div><div class="sidebar-section-children"><a href="Requestor.html">Requestor</a></div><div class="sidebar-section-children"><a href="Session.html">Session</a></div><div class="sidebar-section-children"><a href="UnableToConnect.html">UnableToConnect</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-events"><div>Events</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#event:callDataInfo">callDataInfo</a></div><div class="sidebar-section-children"><a href="global.html#event:callDurationUpdate">callDurationUpdate</a></div><div class="sidebar-section-children"><a href="global.html#event:callEnded">callEnded</a></div><div class="sidebar-section-children"><a href="global.html#event:callQualityReportUpdate">callQualityReportUpdate</a></div><div class="sidebar-section-children"><a href="global.html#event:connectionStateChange">connectionStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:holdStateChange">holdStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:incomingCall">incomingCall</a></div><div class="sidebar-section-children"><a href="global.html#event:muteStateChange">muteStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:recordingStateChange">recordingStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:sessionCreated">sessionCreated</a></div><div class="sidebar-section-children"><a href="global.html#event:sessionRemoved">sessionRemoved</a></div><div class="sidebar-section-children"><a href="global.html#event:sessionStateChange">sessionStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:whisperModeChange">whisperModeChange</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-global"><div>Global</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#CALL_DIRECTION">CALL_DIRECTION</a></div><div class="sidebar-section-children"><a href="global.html#CALL_DISPOSITION">CALL_DISPOSITION</a></div><div class="sidebar-section-children"><a href="global.html#CONNECTION_STATE">CONNECTION_STATE</a></div><div class="sidebar-section-children"><a href="global.html#LOGLVL">LOGLVL</a></div><div class="sidebar-section-children"><a href="global.html#SESSION_STATE">SESSION_STATE</a></div></div></div></div></div><div class="navbar-container" id="VuAckcnZhf"><nav class="navbar"><div class="navbar-left-items"></div><div class="navbar-right-items"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#light-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div><nav></nav></nav></div><div class="toc-container"><div class="toc-content"><span class="bold">On this page</span><div id="eed4d2a0bfd64539bb9df78095dec881"></div></div></div><div class="body-wrapper"><div class="main-content"><div class="main-wrapper"><section id="source-page" class="source-page"><header><h1 id="title" class="has-anchor">event-client.js</h1></header><article><pre class="prettyprint source lang-js"><code>'use strict';
4
+ import { LogHandler } from './logger';
5
+ import * as Exceptions from './exceptions';
6
+ import { Requestor } from './requestor';
7
+
8
+ /*
9
+ * EVENT CLASS
10
+ *
11
+ * AMQP Message structure
12
+ * ----------------------
13
+ * event_name
14
+ * customer_id
15
+ * partner_id
16
+ * payload
17
+ * resource_name (only resource_changed)
18
+ * call_token (only calldata_available)
19
+ *
20
+ */
21
+ // Keep alive in seconds
22
+ const PING_INTERVAL = 50;
23
+
24
+ const ES_DEFAULT_SERVER_URL = 'wss://api.telegenta.com/es/';
25
+
26
+ // Starting retry interval
27
+ const RETRY_INTERVAL_START = 1 + Math.random();
28
+
29
+ // Maximum reconnect time
30
+ const RETRY_MAX_BACKOFF = 300;
31
+
32
+ class EventSubscription {
33
+ constructor(id, specification, callback) {
34
+ this.id = id;
35
+ this.specification = specification;
36
+ this.callback = callback;
37
+ }
38
+
39
+ doCallback(context, payload) {
40
+ return this.callback.apply(context, [payload]);
41
+ }
42
+ }
43
+
44
+ /**
45
+ * Class is responsible for handling real time server events over websockets &lt;br>
46
+ * Using this class you can subscribe to a list of useful remote events
47
+ *
48
+ * @param {LogHandler} [logger] - Custom log instance
49
+ *
50
+ */
51
+ export class EventClient {
52
+ constructor(logger = null) {
53
+ this._socket = null;
54
+ this._previousSubscriptions = [];
55
+ this._activeSubscriptions = [];
56
+ this._pingTimerObj = null;
57
+ this._autoReconnect = false;
58
+ this._reconnectRetrySeconds = RETRY_INTERVAL_START;
59
+ this.log = logger ? logger : new LogHandler(LOGLVL.ERROR);
60
+ this._requestor = new Requestor(this.log);
61
+
62
+ this._requestor.on('event', (request) => {
63
+ this._handleIncomingEvent(request);
64
+ });
65
+ }
66
+
67
+ /**
68
+ * Establish a connecting to the event service
69
+ * @param {string=} Event service address URL
70
+ * @returns object Connection promise
71
+ */
72
+ connect(server_address = null) {
73
+ if (!server_address) {
74
+ server_address = ES_DEFAULT_SERVER_URL;
75
+ }
76
+
77
+ this._serverAddress = server_address;
78
+ this._previousSubscriptions = [];
79
+ this._activeSubscriptions = [];
80
+ return this._connectServer();
81
+ }
82
+
83
+ /**
84
+ * Disconnect from event service and clear all active subscriptions
85
+ * @throws EventServiceNotConnected if not connected
86
+ */
87
+ disconnect() {
88
+ if (this._socket.readyState !== 1) {
89
+ throw new Exceptions.EventServiceNotConnected();
90
+ }
91
+
92
+ this._activeSubscriptions = [];
93
+ this._autoReconnect = false;
94
+ this._socket.close();
95
+ }
96
+
97
+ /**
98
+ * Return service connection state
99
+ * @returns {boolean}
100
+ */
101
+ isConnected() {
102
+ if (this._socket) {
103
+ return this._socket.readyState === 1;
104
+ } else {
105
+ return false;
106
+ }
107
+ }
108
+
109
+ /**
110
+ * Subscribe to event
111
+ * @param eventSpecification object Event parameters (please check docs for further description)
112
+ * @param callback object Callback function (will be called when event is received)
113
+ * @throws InvalidParameter
114
+ * @throws EventServiceNotConnected
115
+ * @returns object Promise on subscription
116
+ */
117
+ subscribe(eventSpecification, callback) {
118
+ if (!eventSpecification || !callback) {
119
+ throw new Exceptions.InvalidParameter('You must specify both event spec and callback function');
120
+ }
121
+
122
+ if (!eventSpecification.hasOwnProperty('event_name')) {
123
+ throw new Exceptions.InvalidParameter('Your event specification must contain event name');
124
+ }
125
+
126
+ if (!this.isConnected()) {
127
+ throw new Exceptions.EventServiceNotConnected();
128
+ }
129
+
130
+ const self = this;
131
+ return new Promise(function (resolve, reject) {
132
+ self._requestor.sendRequest(self._socket, 'subscribe', eventSpecification).then(
133
+ function (subscriptionId) {
134
+ self.log.debug(
135
+ `Subscription to '${eventSpecification.event_name}' was successful, ID = ${subscriptionId}`,
136
+ );
137
+ self._activeSubscriptions.push(new EventSubscription(subscriptionId, eventSpecification, callback));
138
+ resolve(subscriptionId);
139
+ },
140
+ function (reason) {
141
+ self.log.warning(`Subscription to '${eventSpecification.event_name}' failed: ${reason}`);
142
+ reject(reason);
143
+ },
144
+ );
145
+ });
146
+ }
147
+
148
+ /**
149
+ * Unsubscribe event messages
150
+ * @param subscriptionId Object Event specification to unsubscribe (must match specification used on subscribe)
151
+ * @throws InvalidParameter
152
+ * @throws EventServiceNotConnected
153
+ * @returns object Promise on unsubscribe
154
+ */
155
+ unsubscribe(subscriptionId) {
156
+ if (!subscriptionId) {
157
+ throw new Exceptions.InvalidParameter('You must specify subscription id');
158
+ }
159
+
160
+ if (!this.isConnected()) {
161
+ throw new Exceptions.EventServiceNotConnected();
162
+ }
163
+
164
+ this.log.info('Unsubscribe id: ' + subscriptionId);
165
+
166
+ const self = this;
167
+ return new Promise(function (resolve, reject) {
168
+ self._requestor.sendRequest(self._socket, 'unsubscribe', { id: subscriptionId }).then(
169
+ (data) => {
170
+ self.log.info(`Unsubscribe to '${subscriptionId}' was successful`);
171
+ self._removeSubscription(subscriptionId);
172
+ resolve(data);
173
+ },
174
+ (reason) => {
175
+ self.log.warning(`Remote unsubscribe to '${subscriptionId}' failed: ${reason}`);
176
+ reject(reason);
177
+ },
178
+ );
179
+ });
180
+ }
181
+
182
+ /**
183
+ * Fire event message
184
+ * @param type Event type to fire
185
+ * @param payload Event payload
186
+ * @throws EventServiceNotConnected
187
+ * @returns object Promise on event
188
+ */
189
+ fireEvent(type, payload) {
190
+ if (!this.isConnected()) {
191
+ throw new Exceptions.EventServiceNotConnected();
192
+ }
193
+
194
+ return new Promise((resolve, reject) => {
195
+ this._requestor.sendRequest(this._socket, type, payload).then(
196
+ (data) => {
197
+ this.log.info(`Event ${type} was successful`);
198
+ resolve(data);
199
+ },
200
+ (reason) => {
201
+ this.log.warning(`Event ${type} failed: ${reason}`);
202
+ reject(reason);
203
+ },
204
+ );
205
+ });
206
+ }
207
+
208
+ // Remove subscription from active subscriptions
209
+ _removeSubscription(subscriptionId) {
210
+ for (let idx in this._activeSubscriptions) {
211
+ if (this._activeSubscriptions[idx].id === subscriptionId) {
212
+ this.log.debug(`Removed local subscription: ${subscriptionId}`);
213
+ this._activeSubscriptions.splice(idx, 1);
214
+ return true;
215
+ }
216
+ }
217
+
218
+ this.log.warning(`Unable to remove subscription ${subscriptionId} locally, not found?`);
219
+ return false;
220
+ }
221
+
222
+ // Connect to event service
223
+ _connectServer() {
224
+ this.log.info('Connecting to event server: ' + this._serverAddress);
225
+
226
+ const self = this;
227
+ return new Promise(function (resolve, reject) {
228
+ if (self._socket) {
229
+ switch (self._socket.readyState) {
230
+ case 0:
231
+ reject('Unable to connect, already connecting');
232
+ return;
233
+ case 1:
234
+ reject('Unable to connect, already connected');
235
+ return;
236
+ case 2:
237
+ reject('Unable to connect, socket is still closing');
238
+ return;
239
+ }
240
+ }
241
+
242
+ self._socket = new WebSocket(self._serverAddress);
243
+ let was_connected = false;
244
+
245
+ // CONNECTION OPEN
246
+ self._socket.addEventListener('open', function (/*event*/) {
247
+ self.log.info('Successfully connected to event service');
248
+
249
+ was_connected = true;
250
+ // After successful connect we enable auto connect and reset reconnect timer
251
+ self._autoReconnect = true;
252
+ self._reconnectRetrySeconds = RETRY_INTERVAL_START;
253
+
254
+ // Hook up event for incoming messages to requestor
255
+ self._socket.addEventListener('message', function (event) {
256
+ self._requestor.receiveMessage(self._socket, event.data);
257
+ });
258
+
259
+ // Start keep alive timer
260
+ clearTimeout(self._pingTimerObj);
261
+ self._pingTimerObj = setInterval(function () {
262
+ self._requestor.ping(self._socket).then(
263
+ function () {
264
+ // self.log.debug('Pong');
265
+ },
266
+ function (reason) {
267
+ self.log.warning('Ping failed: ' + reason);
268
+ self._reconnectServer();
269
+ },
270
+ );
271
+ }, PING_INTERVAL * 1000);
272
+
273
+ // Reset active subscriptions first
274
+ self._previousSubscriptions = self._activeSubscriptions;
275
+ self._activeSubscriptions = [];
276
+
277
+ // Resubscribe all events
278
+ for (let sub of self._previousSubscriptions) {
279
+ self.subscribe(sub.specification, sub.callback).catch(function (reason) {
280
+ self.log.error(`Resubscribing to ${sub.specification.event_name} failed: ${reason}`);
281
+ });
282
+ }
283
+
284
+ resolve();
285
+ });
286
+
287
+ // CONNECTION CLOSE
288
+ self._socket.addEventListener('close', function (/*event*/) {
289
+ self.log.info('Disconnected from event service');
290
+ clearTimeout(self._pingTimerObj);
291
+ // We try to reconnect if possible
292
+ self._reconnectServer();
293
+ });
294
+
295
+ // CONNECTION ERROR
296
+ self._socket.addEventListener('error', function (error) {
297
+ self.log.error('Websocket connection error');
298
+ // Only reject promise if no connection was made (in that case promise is already resolved)
299
+ if (!was_connected) {
300
+ reject('Unable to connect: ' + error);
301
+ }
302
+ });
303
+ });
304
+ }
305
+
306
+ _reconnectServer() {
307
+ if (this._autoReconnect) {
308
+ const retryInterval = Math.floor(this._reconnectRetrySeconds);
309
+ this.log.info(`Reconnecting in ${retryInterval} secs`);
310
+ const self = this;
311
+ setTimeout(function () {
312
+ self._connectServer().then(
313
+ function () {
314
+ self.log.info('Reconnect attempt successful');
315
+ },
316
+ function () {
317
+ self.log.warning('Reconnect attempt failed');
318
+ },
319
+ );
320
+ if (self._reconnectRetrySeconds &lt;= RETRY_MAX_BACKOFF) {
321
+ self._reconnectRetrySeconds = self._reconnectRetrySeconds * 2;
322
+ }
323
+ }, self._reconnectRetrySeconds * 1000);
324
+ } else {
325
+ this.log.info('Auto reconnect disabled (disconnecting?)');
326
+ }
327
+ }
328
+
329
+ _handleIncomingEvent(request) {
330
+ // Find subscription by id
331
+ const subId = request.data.subscription_id;
332
+ for (let sub of this._activeSubscriptions) {
333
+ if (sub.id === subId) {
334
+ this.log.debug(
335
+ `Received event for subcription id ${sub.id} payload: ` + JSON.stringify(request.data.payload),
336
+ );
337
+ try {
338
+ sub.callback(request.data.payload);
339
+ } catch (e) {
340
+ this.log.warning(`Callback had unhandled exception ${e}`);
341
+ request.resolve();
342
+ }
343
+
344
+ request.resolve();
345
+ return;
346
+ }
347
+ }
348
+
349
+ request.reject(`Invalid subscription id for event: ${subId}`);
350
+ }
351
+ }
352
+ </code></pre></article></section></div></div></div><div class="search-container" id="PkfLWpAbet" style="display:none"><div class="wrapper" id="iCxFxjkHbP"><button class="icon-button search-close-button" id="VjLlGakifb" aria-label="close search"><svg><use xlink:href="#close-icon"></use></svg></button><div class="search-box-c"><svg><use xlink:href="#search-icon"></use></svg> <input type="text" id="vpcKVYIppa" class="search-input" placeholder="Search..." autofocus></div><div class="search-result-c" id="fWwVHRuDuN"><span class="search-result-c-text">Type anything to view search result</span></div></div></div><div class="mobile-menu-icon-container"><button class="icon-button" id="mobile-menu" data-isopen="false" aria-label="menu"><svg><use xlink:href="#menu-icon"></use></svg></button></div><div id="mobile-sidebar" class="mobile-sidebar-container"><div class="mobile-sidebar-wrapper"><div class="mobile-nav-links"></div><div class="mobile-sidebar-items-c"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="EventClient.html">EventClient</a></div><div class="sidebar-section-children"><a href="EventServiceNotConnected.html">EventServiceNotConnected</a></div><div class="sidebar-section-children"><a href="InvalidMediaDevice.html">InvalidMediaDevice</a></div><div class="sidebar-section-children"><a href="InvalidOptions.html">InvalidOptions</a></div><div class="sidebar-section-children"><a href="InvalidParameter.html">InvalidParameter</a></div><div class="sidebar-section-children"><a href="LogHandler.html">LogHandler</a></div><div class="sidebar-section-children"><a href="MediaNotPrepared.html">MediaNotPrepared</a></div><div class="sidebar-section-children"><a href="NoActiveSession.html">NoActiveSession</a></div><div class="sidebar-section-children"><a href="NotAllowed.html">NotAllowed</a></div><div class="sidebar-section-children"><a href="NotReady.html">NotReady</a></div><div class="sidebar-section-children"><a href="Phone.html">Phone</a></div><div class="sidebar-section-children"><a href="Request.html">Request</a></div><div class="sidebar-section-children"><a href="Requestor.html">Requestor</a></div><div class="sidebar-section-children"><a href="Session.html">Session</a></div><div class="sidebar-section-children"><a href="UnableToConnect.html">UnableToConnect</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-events"><div>Events</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#event:callDataInfo">callDataInfo</a></div><div class="sidebar-section-children"><a href="global.html#event:callDurationUpdate">callDurationUpdate</a></div><div class="sidebar-section-children"><a href="global.html#event:callEnded">callEnded</a></div><div class="sidebar-section-children"><a href="global.html#event:callQualityReportUpdate">callQualityReportUpdate</a></div><div class="sidebar-section-children"><a href="global.html#event:connectionStateChange">connectionStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:holdStateChange">holdStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:incomingCall">incomingCall</a></div><div class="sidebar-section-children"><a href="global.html#event:muteStateChange">muteStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:recordingStateChange">recordingStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:sessionCreated">sessionCreated</a></div><div class="sidebar-section-children"><a href="global.html#event:sessionRemoved">sessionRemoved</a></div><div class="sidebar-section-children"><a href="global.html#event:sessionStateChange">sessionStateChange</a></div><div class="sidebar-section-children"><a href="global.html#event:whisperModeChange">whisperModeChange</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-global"><div>Global</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#CALL_DIRECTION">CALL_DIRECTION</a></div><div class="sidebar-section-children"><a href="global.html#CALL_DISPOSITION">CALL_DISPOSITION</a></div><div class="sidebar-section-children"><a href="global.html#CONNECTION_STATE">CONNECTION_STATE</a></div><div class="sidebar-section-children"><a href="global.html#LOGLVL">LOGLVL</a></div><div class="sidebar-section-children"><a href="global.html#SESSION_STATE">SESSION_STATE</a></div></div></div><div class="mobile-navbar-actions"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#light-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div></div></div><script type="text/javascript" src="scripts/core.min.js"></script><script src="scripts/search.min.js" defer="defer"></script><script src="scripts/third-party/fuse.js" defer="defer"></script><script type="text/javascript">var tocbotInstance=tocbot.init({tocSelector:"#eed4d2a0bfd64539bb9df78095dec881",contentSelector:".main-content",headingSelector:"h1, h2, h3",hasInnerContainers:!0,scrollContainer:".main-content",headingsOffset:130,onClick:bringLinkToView})</script></body></html>