@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.
- package/README.md +102 -81
- package/demos/add_phone_number.html +8 -7
- package/demos/calldata_available.html +5 -5
- package/demos/embedded_config.html +3 -3
- package/demos/event_client.html +226 -211
- package/demos/phone_client.html +540 -514
- package/demos/styles.css +0 -0
- package/dist/telegenta.js +3663 -0
- package/dist/telegenta.min.js +1 -0
- package/docs/EventClient.html +3 -1093
- package/docs/EventServiceNotConnected.html +3 -0
- package/docs/InvalidMediaDevice.html +3 -0
- package/docs/InvalidOptions.html +3 -0
- package/docs/InvalidParameter.html +3 -0
- package/docs/LogHandler.html +7 -0
- package/docs/MediaNotPrepared.html +3 -0
- package/docs/NoActiveSession.html +3 -0
- package/docs/NotAllowed.html +3 -0
- package/docs/NotReady.html +3 -0
- package/docs/Phone.html +4 -2837
- package/docs/Request.html +3 -0
- package/docs/Requestor.html +3 -0
- package/docs/Session.html +3 -2599
- package/docs/UnableToConnect.html +3 -0
- package/docs/data/search.json +1 -0
- package/docs/event-client.js.html +352 -0
- package/docs/exceptions.js.html +104 -0
- package/docs/fonts/Inconsolata-Regular.ttf +0 -0
- package/docs/fonts/OpenSans-Regular.ttf +0 -0
- package/docs/fonts/WorkSans-Bold.ttf +0 -0
- package/docs/global.html +5 -4950
- package/docs/index.html +3 -66
- package/docs/logger.js.html +106 -0
- package/docs/phone-client.js.html +2175 -0
- package/docs/requestor.js.html +223 -0
- package/docs/scripts/core.js +726 -0
- package/docs/scripts/core.min.js +23 -0
- package/docs/scripts/resize.js +90 -0
- package/docs/scripts/search.js +265 -0
- package/docs/scripts/search.min.js +6 -0
- package/docs/scripts/{prettify → third-party}/Apache-License-2.0.txt +202 -202
- package/docs/scripts/third-party/fuse.js +9 -0
- package/docs/scripts/third-party/hljs-line-num-original.js +369 -0
- package/docs/scripts/third-party/hljs-line-num.js +1 -0
- package/docs/scripts/third-party/hljs-original.js +5171 -0
- package/docs/scripts/third-party/hljs.js +1 -0
- package/docs/scripts/third-party/popper.js +5 -0
- package/docs/scripts/third-party/tippy.js +1 -0
- package/docs/scripts/third-party/tocbot.js +672 -0
- package/docs/scripts/third-party/tocbot.min.js +1 -0
- package/docs/styles/clean-jsdoc-theme-base.css +1159 -0
- package/docs/styles/clean-jsdoc-theme-dark.css +412 -0
- package/docs/styles/clean-jsdoc-theme-light.css +482 -0
- package/docs/styles/clean-jsdoc-theme-scrollbar.css +30 -0
- package/docs/styles/clean-jsdoc-theme-without-scrollbar.min.css +1 -0
- package/docs/styles/clean-jsdoc-theme.min.css +1 -0
- package/package.json +38 -26
- package/babel.config.js +0 -16
- package/browser/telegenta.min.js +0 -1
- package/demos/telegenta.min.js +0 -1
- package/docs/fonts/OpenSans-Bold-webfont.eot +0 -0
- package/docs/fonts/OpenSans-Bold-webfont.svg +0 -1830
- package/docs/fonts/OpenSans-Bold-webfont.woff +0 -0
- package/docs/fonts/OpenSans-BoldItalic-webfont.eot +0 -0
- package/docs/fonts/OpenSans-BoldItalic-webfont.svg +0 -1830
- package/docs/fonts/OpenSans-BoldItalic-webfont.woff +0 -0
- package/docs/fonts/OpenSans-Italic-webfont.eot +0 -0
- package/docs/fonts/OpenSans-Italic-webfont.svg +0 -1830
- package/docs/fonts/OpenSans-Italic-webfont.woff +0 -0
- package/docs/fonts/OpenSans-Light-webfont.eot +0 -0
- package/docs/fonts/OpenSans-Light-webfont.svg +0 -1831
- package/docs/fonts/OpenSans-Light-webfont.woff +0 -0
- package/docs/fonts/OpenSans-LightItalic-webfont.eot +0 -0
- package/docs/fonts/OpenSans-LightItalic-webfont.svg +0 -1835
- package/docs/fonts/OpenSans-LightItalic-webfont.woff +0 -0
- package/docs/fonts/OpenSans-Regular-webfont.eot +0 -0
- package/docs/fonts/OpenSans-Regular-webfont.svg +0 -1831
- package/docs/fonts/OpenSans-Regular-webfont.woff +0 -0
- package/docs/fonts/OpenSans-Semibold-webfont.eot +0 -0
- package/docs/fonts/OpenSans-Semibold-webfont.svg +0 -1830
- package/docs/fonts/OpenSans-Semibold-webfont.ttf +0 -0
- package/docs/fonts/OpenSans-Semibold-webfont.woff +0 -0
- package/docs/fonts/OpenSans-SemiboldItalic-webfont.eot +0 -0
- package/docs/fonts/OpenSans-SemiboldItalic-webfont.svg +0 -1830
- package/docs/fonts/OpenSans-SemiboldItalic-webfont.ttf +0 -0
- package/docs/fonts/OpenSans-SemiboldItalic-webfont.woff +0 -0
- package/docs/scripts/linenumber.js +0 -25
- package/docs/scripts/prettify/lang-css.js +0 -2
- package/docs/scripts/prettify/prettify.js +0 -28
- package/docs/styles/jsdoc-default.css +0 -692
- package/docs/styles/prettify-jsdoc.css +0 -111
- package/docs/styles/prettify-tomorrow.css +0 -132
- package/embedded_client/embedded_phone.js +0 -325
- package/embedded_client/index.html +0 -201
- package/embedded_client/server.php +0 -28
- package/embedded_client/styles.css +0 -310
- package/embedded_client/tiny_rest_client.php +0 -73
- package/embedded_client/webphone_sprites.png +0 -0
- package/es5/event-client.js +0 -277
- package/es5/index.js +0 -44
- package/es5/phone-client.js +0 -1336
- package/src/event-client.js +0 -1
- package/src/index.js +0 -10
- package/src/phone-client.js +0 -1
- 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 <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 <= 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>
|