@viibe/impulse-integration-js 2.4.2 → 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/coverage/clover.xml +110 -6
- package/coverage/coverage-final.json +1 -1
- package/coverage/lcov-report/index.html +21 -21
- package/coverage/lcov-report/index.js.html +1001 -11
- package/coverage/lcov.info +223 -182
- package/dist/index.js +1 -1
- package/package.json +5 -2
- package/src/index.js +23 -66
- package/test/dist.test.js +39 -4
- package/webpack.config.js +1 -1
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">42.99% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>46/107</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">34.28% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>24/70</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">27.27% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>6/22</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">42.85% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>45/105</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -61,16 +61,1006 @@
|
|
|
61
61
|
</div>
|
|
62
62
|
</template>
|
|
63
63
|
</div>
|
|
64
|
-
<div class='status-line
|
|
64
|
+
<div class='status-line low'></div>
|
|
65
65
|
<pre><table class="coverage">
|
|
66
|
-
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">9x</span></td><td class="text"><pre class="prettyprint lang-js">(()=>{var t={579:t=>{function n(t,n){<span class="missing-if-branch" title="if path not taken" >I</span>if(!(t instanceof n))<span class="cstat-no" title="statement not covered" >throw new TypeError("Cannot call a class as a function")}</span>function e(t,n){for(var e=0;e<n.length;e++){var o=n[e];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}function o(t,n,o){return n&&e(t.prototype,n),o&&<span class="branch-1 cbranch-no" title="branch not covered" >e(t,o),</span>t}function i(t){return <span class="fstat-no" title="function not covered" >fu</span>nction(n){<span class="cstat-no" title="statement not covered" >return Boolean(n.isTrusted&&0===n.origin.indexOf(t))}</span>}function <span class="fstat-no" title="function not covered" >a(</span>t){var n=<span class="cstat-no" title="statement not covered" >new URL(t),</span>e=<span class="cstat-no" title="statement not covered" >"".concat(n.protocol,"//").concat(n.host),</span>o=<span class="cstat-no" title="statement not covered" >window.screen.width/2-240,</span>a=<span class="cstat-no" title="statement not covered" >window.screen.height/2-300,</span>r=<span class="cstat-no" title="statement not covered" >["toolbar=no","location=no","directories=no","status=no","menubar=no","scrollbars=no","resizable=no","copyhistory=no","width=".concat(480),"height=".concat(600),"top=".concat(a),"left=".concat(o)];<span class="cstat-no" title="statement not covered" ></span>return new Promise((<span class="fstat-no" title="function not covered" >fu</span>nction(n,o){var a=<span class="cstat-no" title="statement not covered" >window.open(t,"Authorization",r.join(", "));<span class="cstat-no" title="statement not covered" ></span>a||o("Failed to open window");v</span>ar c=<span class="cstat-no" title="statement not covered" >setInterval((<span class="fstat-no" title="function not covered" >fu</span>nction(){<span class="cstat-no" title="statement not covered" >a.closed&&(s(),o("User closed window"))}</span>),100);</span>function <span class="fstat-no" title="function not covered" >s(</span>){<span class="cstat-no" title="statement not covered" >window.removeEventListener("message",u),clearInterval(c)}</span>function <span class="fstat-no" title="function not covered" >u(</span>t){<span class="cstat-no" title="statement not covered" >if(!i(e)(t))<span class="cstat-no" title="statement not covered" >return null;<span class="cstat-no" title="statement not covered" >i</span></span>f(t.data.token&&(s(),n(t.data.token)),t.data.error&&(s(),o(t.data.error)),t.data&&t.data.event&&t.data.payload)<span class="cstat-no" title="statement not covered" >switch(t.data.event){case"authentication:success":<span class="cstat-no" title="statement not covered" >return s(),n(t.data);c</span>ase"authentication:failure":<span class="cstat-no" title="statement not covered" >return s(),o(t.data)}<span class="cstat-no" title="statement not covered" ></span>r</span></span>eturn null}<span class="cstat-no" title="statement not covered" ></span>window.addEventListener("message",u)}</span>))}</span>var r=function(){function <span class="fstat-no" title="function not covered" >t(</span>){var e=<span class="cstat-no" title="statement not covered" >arguments.length>0&&void 0!==arguments[0]?arguments[0]:"auth.viibe.pro";<span class="cstat-no" title="statement not covered" ></span>n(this,t),this.host=e}</span>return o(t,[{key:"loginZendesk",value:<span class="fstat-no" title="function not covered" >fu</span>nction(t){var n=<span class="cstat-no" title="statement not covered" >document.location.origin;<span class="cstat-no" title="statement not covered" ></span>return a("https://".concat(this.host,"/auth/zendesk/login?subdomain=").concat(t,"&origin=").concat(n))}</span>}]),t}(),c=function(){function t(e){n(this,t),this.handlers=[],this.host=e.host,this.origin=/^localhost/.test(this.host)?"http://".concat(this.host):"https://".concat(this.host),this.apiOrigin=/^localhost/.test(this.host)?"http://".concat(this.host):"https://api-".concat(this.host),this.source=e.source,this.isViibeEvent=i(this.origin),window.addEventListener("message",this.onMessage.bind(this))}return o(t,[{key:"createNotificationIframe",value:function(){if(!this.host)throw new Error("fillHost");if(!this.source)throw new Error("fillSource");var t=document.createElement("iframe");return t.name="viibe-".concat(Math.floor(1e4*Math.random())),t.style="border: 0;width: 0;",t.src="".concat(this.origin,"/integration/features/notifications"),t}},{key:"createCallIframe",value:function(){var t=this,n=arguments.length>0&&<span class="branch-1 cbranch-no" title="branch not covered" >void 0!==arguments[0]?<span class="branch-0 cbranch-no" title="branch not covered" ></span>arguments[0]:</span>{};if(!this.host)throw new Error("fillHost");if(!this.source)throw new Error("fillSource");var e=this.generateIframeSrc(n),o=document.createElement("iframe");return o.name="viibe-".concat(Math.floor(1e4*Math.random())),o.style="border: 0;width: calc(100% - 1rem);margin: 0.5rem;",o.src=e,o.allow="geolocation;autoplay;microphone;camera;midi;encrypted-media;clipboard-write;",this.on(o,"document",(<span class="fstat-no" title="function not covered" >fu</span>nction(n){<span class="cstat-no" title="statement not covered" >return t.onDocument(n)}</span>)),o}},{key:"generateIframeSrc",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:<span class="branch-1 cbranch-no" title="branch not covered" >{},</span>n=t.clipboard,e=void 0!==n&&<span class="branch-1 cbranch-no" title="branch not covered" >n,</span>o=t.components,i=t.links,a=t.o2m,r=void 0!==a&&<span class="branch-1 cbranch-no" title="branch not covered" >a,</span>c=t.ticket,s=t.locale,u=t.standalone,l=t.suggestions,h=t.token,d="".concat(this.origin,"/integration/features/ticket"),f=new URLSearchParams({origin:document.location.origin,resize:"true",source:this.source});<span class="missing-if-branch" title="if path not taken" >I</span>if(c&&<span class="branch-1 cbranch-no" title="branch not covered" >c.title&</span>&<span class="branch-2 cbranch-no" title="branch not covered" >f.set("title",c.title),</span>c&&<span class="branch-1 cbranch-no" title="branch not covered" >c.integration)</span>{<span class="cstat-no" title="statement not covered" >f.set("thirdPartyId",c.integration.id);v</span>ar v=<span class="cstat-no" title="statement not covered" >(c.integration.customData||{}).entUuid;<span class="cstat-no" title="statement not covered" ></span>v&&f.set("entUuid",v)}<span class="missing-if-branch" title="if path not taken" >I</span></span>if(i){var m=<span class="cstat-no" title="statement not covered" >i instanceof Array?i.map((<span class="fstat-no" title="function not covered" >fu</span>nction(t){<span class="cstat-no" title="statement not covered" >return"".concat(t.category,":").concat(t.value)}</span>)).join(","):String(i);<span class="cstat-no" title="statement not covered" ></span>f.set("links",m)}<span class="missing-if-branch" title="if path not taken" >I</span></span>if(l){var w=<span class="cstat-no" title="statement not covered" >l instanceof Array?l.map((<span class="fstat-no" title="function not covered" >fu</span>nction(t){var n=<span class="cstat-no" title="statement not covered" >t.category,</span>e=<span class="cstat-no" title="statement not covered" >t.value,</span>o=<span class="cstat-no" title="statement not covered" >t.description,</span>i=<span class="cstat-no" title="statement not covered" >"".concat(n,":").concat(e);<span class="cstat-no" title="statement not covered" ></span>return o&&(i+=":".concat(o)),i}</span>)).join(","):String(l);<span class="cstat-no" title="statement not covered" ></span>f.set("suggestions",w)}<span class="missing-if-branch" title="if path not taken" >I</span></span>if(h&&<span class="branch-1 cbranch-no" title="branch not covered" >f.set("token",h),</span>s&&<span class="branch-1 cbranch-no" title="branch not covered" >f.set("locale",s),</span>o){var p=<span class="cstat-no" title="statement not covered" >o instanceof Array?o.join(","):String(o);<span class="cstat-no" title="statement not covered" ></span>f.set("components",p)}</span>return u&&<span class="branch-1 cbranch-no" title="branch not covered" >f.set("standalone",Boolean(u)),</span>f.set("clipboard",Boolean(e)),f.set("o2m",Boolean(r)),d+"?".concat(f)}},{key:"dispatch",value:<span class="fstat-no" title="function not covered" >fu</span>nction(t,n,e,o){<span class="cstat-no" title="statement not covered" >return this.handlers.filter((<span class="fstat-no" title="function not covered" >fu</span>nction(n){<span class="cstat-no" title="statement not covered" >return n.eventName===t&&(!n.windowName||n.windowName===o)}</span>)).map((<span class="fstat-no" title="function not covered" >fu</span>nction(t){<span class="cstat-no" title="statement not covered" >return t.func(n,e)}</span>))}</span>},{key:"onMessage",value:<span class="fstat-no" title="function not covered" >fu</span>nction(t){<span class="cstat-no" title="statement not covered" >return this.isViibeEvent(t)?t.data&&t.data.event?this.dispatch(t.data.event,t.data.payload,t,t.data.windowName):t.data&&t.data.token?this.dispatch("authentication:token",t.data.token,t):t.data&&t.data.error?this.dispatch("authentication:error",t.data.error,t):null:null}</span>},{key:"on",value:function(t,n,e){"string"==typeof t&&<span class="branch-1 cbranch-no" title="branch not covered" >"function"==typeof n&</span>&<span class="branch-2 cbranch-no" title="branch not covered" >void 0===e&</span>&(<span class="branch-3 cbranch-no" title="branch not covered" >e=n,n=t,t=null)</span>;var o={eventName:n,func:e,windowName:t?t.name:<span class="branch-1 cbranch-no" title="branch not covered" >null}</span>;this.handlers.push(o)}},{key:"onDocument",value:<span class="fstat-no" title="function not covered" >fu</span>nction(t){<span class="cstat-no" title="statement not covered" >window.open(t.signed_url,"_blank")}</span>},{key:"authenticate",value:<span class="fstat-no" title="function not covered" >fu</span>nction(t){var n=<span class="cstat-no" title="statement not covered" >document.location,</span>e=<span class="cstat-no" title="statement not covered" >n.protocol,</span>o=<span class="cstat-no" title="statement not covered" >n.host;<span class="cstat-no" title="statement not covered" ></span>return a("".concat(e,"//api-").concat(o,"/auth/login/").concat(t,"?origin=").concat(origin))}</span>}]),t}();c.Auth=r,"undefined"!=typeof window&&(window.Viibe=c),t.exports=c}},n={},e=function e(o){var i=n[o];<span class="missing-if-branch" title="if path not taken" >I</span>if(void 0!==i)<span class="cstat-no" title="statement not covered" >return i.exports;v</span>ar a=n[o]={exports:{}};return t[o](a,a.exports,e),a.exports}(579);module.exports=e})();</pre></td></tr></table></pre>
|
|
66
|
+
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
|
+
<a name='L2'></a><a href='#L2'>2</a>
|
|
68
|
+
<a name='L3'></a><a href='#L3'>3</a>
|
|
69
|
+
<a name='L4'></a><a href='#L4'>4</a>
|
|
70
|
+
<a name='L5'></a><a href='#L5'>5</a>
|
|
71
|
+
<a name='L6'></a><a href='#L6'>6</a>
|
|
72
|
+
<a name='L7'></a><a href='#L7'>7</a>
|
|
73
|
+
<a name='L8'></a><a href='#L8'>8</a>
|
|
74
|
+
<a name='L9'></a><a href='#L9'>9</a>
|
|
75
|
+
<a name='L10'></a><a href='#L10'>10</a>
|
|
76
|
+
<a name='L11'></a><a href='#L11'>11</a>
|
|
77
|
+
<a name='L12'></a><a href='#L12'>12</a>
|
|
78
|
+
<a name='L13'></a><a href='#L13'>13</a>
|
|
79
|
+
<a name='L14'></a><a href='#L14'>14</a>
|
|
80
|
+
<a name='L15'></a><a href='#L15'>15</a>
|
|
81
|
+
<a name='L16'></a><a href='#L16'>16</a>
|
|
82
|
+
<a name='L17'></a><a href='#L17'>17</a>
|
|
83
|
+
<a name='L18'></a><a href='#L18'>18</a>
|
|
84
|
+
<a name='L19'></a><a href='#L19'>19</a>
|
|
85
|
+
<a name='L20'></a><a href='#L20'>20</a>
|
|
86
|
+
<a name='L21'></a><a href='#L21'>21</a>
|
|
87
|
+
<a name='L22'></a><a href='#L22'>22</a>
|
|
88
|
+
<a name='L23'></a><a href='#L23'>23</a>
|
|
89
|
+
<a name='L24'></a><a href='#L24'>24</a>
|
|
90
|
+
<a name='L25'></a><a href='#L25'>25</a>
|
|
91
|
+
<a name='L26'></a><a href='#L26'>26</a>
|
|
92
|
+
<a name='L27'></a><a href='#L27'>27</a>
|
|
93
|
+
<a name='L28'></a><a href='#L28'>28</a>
|
|
94
|
+
<a name='L29'></a><a href='#L29'>29</a>
|
|
95
|
+
<a name='L30'></a><a href='#L30'>30</a>
|
|
96
|
+
<a name='L31'></a><a href='#L31'>31</a>
|
|
97
|
+
<a name='L32'></a><a href='#L32'>32</a>
|
|
98
|
+
<a name='L33'></a><a href='#L33'>33</a>
|
|
99
|
+
<a name='L34'></a><a href='#L34'>34</a>
|
|
100
|
+
<a name='L35'></a><a href='#L35'>35</a>
|
|
101
|
+
<a name='L36'></a><a href='#L36'>36</a>
|
|
102
|
+
<a name='L37'></a><a href='#L37'>37</a>
|
|
103
|
+
<a name='L38'></a><a href='#L38'>38</a>
|
|
104
|
+
<a name='L39'></a><a href='#L39'>39</a>
|
|
105
|
+
<a name='L40'></a><a href='#L40'>40</a>
|
|
106
|
+
<a name='L41'></a><a href='#L41'>41</a>
|
|
107
|
+
<a name='L42'></a><a href='#L42'>42</a>
|
|
108
|
+
<a name='L43'></a><a href='#L43'>43</a>
|
|
109
|
+
<a name='L44'></a><a href='#L44'>44</a>
|
|
110
|
+
<a name='L45'></a><a href='#L45'>45</a>
|
|
111
|
+
<a name='L46'></a><a href='#L46'>46</a>
|
|
112
|
+
<a name='L47'></a><a href='#L47'>47</a>
|
|
113
|
+
<a name='L48'></a><a href='#L48'>48</a>
|
|
114
|
+
<a name='L49'></a><a href='#L49'>49</a>
|
|
115
|
+
<a name='L50'></a><a href='#L50'>50</a>
|
|
116
|
+
<a name='L51'></a><a href='#L51'>51</a>
|
|
117
|
+
<a name='L52'></a><a href='#L52'>52</a>
|
|
118
|
+
<a name='L53'></a><a href='#L53'>53</a>
|
|
119
|
+
<a name='L54'></a><a href='#L54'>54</a>
|
|
120
|
+
<a name='L55'></a><a href='#L55'>55</a>
|
|
121
|
+
<a name='L56'></a><a href='#L56'>56</a>
|
|
122
|
+
<a name='L57'></a><a href='#L57'>57</a>
|
|
123
|
+
<a name='L58'></a><a href='#L58'>58</a>
|
|
124
|
+
<a name='L59'></a><a href='#L59'>59</a>
|
|
125
|
+
<a name='L60'></a><a href='#L60'>60</a>
|
|
126
|
+
<a name='L61'></a><a href='#L61'>61</a>
|
|
127
|
+
<a name='L62'></a><a href='#L62'>62</a>
|
|
128
|
+
<a name='L63'></a><a href='#L63'>63</a>
|
|
129
|
+
<a name='L64'></a><a href='#L64'>64</a>
|
|
130
|
+
<a name='L65'></a><a href='#L65'>65</a>
|
|
131
|
+
<a name='L66'></a><a href='#L66'>66</a>
|
|
132
|
+
<a name='L67'></a><a href='#L67'>67</a>
|
|
133
|
+
<a name='L68'></a><a href='#L68'>68</a>
|
|
134
|
+
<a name='L69'></a><a href='#L69'>69</a>
|
|
135
|
+
<a name='L70'></a><a href='#L70'>70</a>
|
|
136
|
+
<a name='L71'></a><a href='#L71'>71</a>
|
|
137
|
+
<a name='L72'></a><a href='#L72'>72</a>
|
|
138
|
+
<a name='L73'></a><a href='#L73'>73</a>
|
|
139
|
+
<a name='L74'></a><a href='#L74'>74</a>
|
|
140
|
+
<a name='L75'></a><a href='#L75'>75</a>
|
|
141
|
+
<a name='L76'></a><a href='#L76'>76</a>
|
|
142
|
+
<a name='L77'></a><a href='#L77'>77</a>
|
|
143
|
+
<a name='L78'></a><a href='#L78'>78</a>
|
|
144
|
+
<a name='L79'></a><a href='#L79'>79</a>
|
|
145
|
+
<a name='L80'></a><a href='#L80'>80</a>
|
|
146
|
+
<a name='L81'></a><a href='#L81'>81</a>
|
|
147
|
+
<a name='L82'></a><a href='#L82'>82</a>
|
|
148
|
+
<a name='L83'></a><a href='#L83'>83</a>
|
|
149
|
+
<a name='L84'></a><a href='#L84'>84</a>
|
|
150
|
+
<a name='L85'></a><a href='#L85'>85</a>
|
|
151
|
+
<a name='L86'></a><a href='#L86'>86</a>
|
|
152
|
+
<a name='L87'></a><a href='#L87'>87</a>
|
|
153
|
+
<a name='L88'></a><a href='#L88'>88</a>
|
|
154
|
+
<a name='L89'></a><a href='#L89'>89</a>
|
|
155
|
+
<a name='L90'></a><a href='#L90'>90</a>
|
|
156
|
+
<a name='L91'></a><a href='#L91'>91</a>
|
|
157
|
+
<a name='L92'></a><a href='#L92'>92</a>
|
|
158
|
+
<a name='L93'></a><a href='#L93'>93</a>
|
|
159
|
+
<a name='L94'></a><a href='#L94'>94</a>
|
|
160
|
+
<a name='L95'></a><a href='#L95'>95</a>
|
|
161
|
+
<a name='L96'></a><a href='#L96'>96</a>
|
|
162
|
+
<a name='L97'></a><a href='#L97'>97</a>
|
|
163
|
+
<a name='L98'></a><a href='#L98'>98</a>
|
|
164
|
+
<a name='L99'></a><a href='#L99'>99</a>
|
|
165
|
+
<a name='L100'></a><a href='#L100'>100</a>
|
|
166
|
+
<a name='L101'></a><a href='#L101'>101</a>
|
|
167
|
+
<a name='L102'></a><a href='#L102'>102</a>
|
|
168
|
+
<a name='L103'></a><a href='#L103'>103</a>
|
|
169
|
+
<a name='L104'></a><a href='#L104'>104</a>
|
|
170
|
+
<a name='L105'></a><a href='#L105'>105</a>
|
|
171
|
+
<a name='L106'></a><a href='#L106'>106</a>
|
|
172
|
+
<a name='L107'></a><a href='#L107'>107</a>
|
|
173
|
+
<a name='L108'></a><a href='#L108'>108</a>
|
|
174
|
+
<a name='L109'></a><a href='#L109'>109</a>
|
|
175
|
+
<a name='L110'></a><a href='#L110'>110</a>
|
|
176
|
+
<a name='L111'></a><a href='#L111'>111</a>
|
|
177
|
+
<a name='L112'></a><a href='#L112'>112</a>
|
|
178
|
+
<a name='L113'></a><a href='#L113'>113</a>
|
|
179
|
+
<a name='L114'></a><a href='#L114'>114</a>
|
|
180
|
+
<a name='L115'></a><a href='#L115'>115</a>
|
|
181
|
+
<a name='L116'></a><a href='#L116'>116</a>
|
|
182
|
+
<a name='L117'></a><a href='#L117'>117</a>
|
|
183
|
+
<a name='L118'></a><a href='#L118'>118</a>
|
|
184
|
+
<a name='L119'></a><a href='#L119'>119</a>
|
|
185
|
+
<a name='L120'></a><a href='#L120'>120</a>
|
|
186
|
+
<a name='L121'></a><a href='#L121'>121</a>
|
|
187
|
+
<a name='L122'></a><a href='#L122'>122</a>
|
|
188
|
+
<a name='L123'></a><a href='#L123'>123</a>
|
|
189
|
+
<a name='L124'></a><a href='#L124'>124</a>
|
|
190
|
+
<a name='L125'></a><a href='#L125'>125</a>
|
|
191
|
+
<a name='L126'></a><a href='#L126'>126</a>
|
|
192
|
+
<a name='L127'></a><a href='#L127'>127</a>
|
|
193
|
+
<a name='L128'></a><a href='#L128'>128</a>
|
|
194
|
+
<a name='L129'></a><a href='#L129'>129</a>
|
|
195
|
+
<a name='L130'></a><a href='#L130'>130</a>
|
|
196
|
+
<a name='L131'></a><a href='#L131'>131</a>
|
|
197
|
+
<a name='L132'></a><a href='#L132'>132</a>
|
|
198
|
+
<a name='L133'></a><a href='#L133'>133</a>
|
|
199
|
+
<a name='L134'></a><a href='#L134'>134</a>
|
|
200
|
+
<a name='L135'></a><a href='#L135'>135</a>
|
|
201
|
+
<a name='L136'></a><a href='#L136'>136</a>
|
|
202
|
+
<a name='L137'></a><a href='#L137'>137</a>
|
|
203
|
+
<a name='L138'></a><a href='#L138'>138</a>
|
|
204
|
+
<a name='L139'></a><a href='#L139'>139</a>
|
|
205
|
+
<a name='L140'></a><a href='#L140'>140</a>
|
|
206
|
+
<a name='L141'></a><a href='#L141'>141</a>
|
|
207
|
+
<a name='L142'></a><a href='#L142'>142</a>
|
|
208
|
+
<a name='L143'></a><a href='#L143'>143</a>
|
|
209
|
+
<a name='L144'></a><a href='#L144'>144</a>
|
|
210
|
+
<a name='L145'></a><a href='#L145'>145</a>
|
|
211
|
+
<a name='L146'></a><a href='#L146'>146</a>
|
|
212
|
+
<a name='L147'></a><a href='#L147'>147</a>
|
|
213
|
+
<a name='L148'></a><a href='#L148'>148</a>
|
|
214
|
+
<a name='L149'></a><a href='#L149'>149</a>
|
|
215
|
+
<a name='L150'></a><a href='#L150'>150</a>
|
|
216
|
+
<a name='L151'></a><a href='#L151'>151</a>
|
|
217
|
+
<a name='L152'></a><a href='#L152'>152</a>
|
|
218
|
+
<a name='L153'></a><a href='#L153'>153</a>
|
|
219
|
+
<a name='L154'></a><a href='#L154'>154</a>
|
|
220
|
+
<a name='L155'></a><a href='#L155'>155</a>
|
|
221
|
+
<a name='L156'></a><a href='#L156'>156</a>
|
|
222
|
+
<a name='L157'></a><a href='#L157'>157</a>
|
|
223
|
+
<a name='L158'></a><a href='#L158'>158</a>
|
|
224
|
+
<a name='L159'></a><a href='#L159'>159</a>
|
|
225
|
+
<a name='L160'></a><a href='#L160'>160</a>
|
|
226
|
+
<a name='L161'></a><a href='#L161'>161</a>
|
|
227
|
+
<a name='L162'></a><a href='#L162'>162</a>
|
|
228
|
+
<a name='L163'></a><a href='#L163'>163</a>
|
|
229
|
+
<a name='L164'></a><a href='#L164'>164</a>
|
|
230
|
+
<a name='L165'></a><a href='#L165'>165</a>
|
|
231
|
+
<a name='L166'></a><a href='#L166'>166</a>
|
|
232
|
+
<a name='L167'></a><a href='#L167'>167</a>
|
|
233
|
+
<a name='L168'></a><a href='#L168'>168</a>
|
|
234
|
+
<a name='L169'></a><a href='#L169'>169</a>
|
|
235
|
+
<a name='L170'></a><a href='#L170'>170</a>
|
|
236
|
+
<a name='L171'></a><a href='#L171'>171</a>
|
|
237
|
+
<a name='L172'></a><a href='#L172'>172</a>
|
|
238
|
+
<a name='L173'></a><a href='#L173'>173</a>
|
|
239
|
+
<a name='L174'></a><a href='#L174'>174</a>
|
|
240
|
+
<a name='L175'></a><a href='#L175'>175</a>
|
|
241
|
+
<a name='L176'></a><a href='#L176'>176</a>
|
|
242
|
+
<a name='L177'></a><a href='#L177'>177</a>
|
|
243
|
+
<a name='L178'></a><a href='#L178'>178</a>
|
|
244
|
+
<a name='L179'></a><a href='#L179'>179</a>
|
|
245
|
+
<a name='L180'></a><a href='#L180'>180</a>
|
|
246
|
+
<a name='L181'></a><a href='#L181'>181</a>
|
|
247
|
+
<a name='L182'></a><a href='#L182'>182</a>
|
|
248
|
+
<a name='L183'></a><a href='#L183'>183</a>
|
|
249
|
+
<a name='L184'></a><a href='#L184'>184</a>
|
|
250
|
+
<a name='L185'></a><a href='#L185'>185</a>
|
|
251
|
+
<a name='L186'></a><a href='#L186'>186</a>
|
|
252
|
+
<a name='L187'></a><a href='#L187'>187</a>
|
|
253
|
+
<a name='L188'></a><a href='#L188'>188</a>
|
|
254
|
+
<a name='L189'></a><a href='#L189'>189</a>
|
|
255
|
+
<a name='L190'></a><a href='#L190'>190</a>
|
|
256
|
+
<a name='L191'></a><a href='#L191'>191</a>
|
|
257
|
+
<a name='L192'></a><a href='#L192'>192</a>
|
|
258
|
+
<a name='L193'></a><a href='#L193'>193</a>
|
|
259
|
+
<a name='L194'></a><a href='#L194'>194</a>
|
|
260
|
+
<a name='L195'></a><a href='#L195'>195</a>
|
|
261
|
+
<a name='L196'></a><a href='#L196'>196</a>
|
|
262
|
+
<a name='L197'></a><a href='#L197'>197</a>
|
|
263
|
+
<a name='L198'></a><a href='#L198'>198</a>
|
|
264
|
+
<a name='L199'></a><a href='#L199'>199</a>
|
|
265
|
+
<a name='L200'></a><a href='#L200'>200</a>
|
|
266
|
+
<a name='L201'></a><a href='#L201'>201</a>
|
|
267
|
+
<a name='L202'></a><a href='#L202'>202</a>
|
|
268
|
+
<a name='L203'></a><a href='#L203'>203</a>
|
|
269
|
+
<a name='L204'></a><a href='#L204'>204</a>
|
|
270
|
+
<a name='L205'></a><a href='#L205'>205</a>
|
|
271
|
+
<a name='L206'></a><a href='#L206'>206</a>
|
|
272
|
+
<a name='L207'></a><a href='#L207'>207</a>
|
|
273
|
+
<a name='L208'></a><a href='#L208'>208</a>
|
|
274
|
+
<a name='L209'></a><a href='#L209'>209</a>
|
|
275
|
+
<a name='L210'></a><a href='#L210'>210</a>
|
|
276
|
+
<a name='L211'></a><a href='#L211'>211</a>
|
|
277
|
+
<a name='L212'></a><a href='#L212'>212</a>
|
|
278
|
+
<a name='L213'></a><a href='#L213'>213</a>
|
|
279
|
+
<a name='L214'></a><a href='#L214'>214</a>
|
|
280
|
+
<a name='L215'></a><a href='#L215'>215</a>
|
|
281
|
+
<a name='L216'></a><a href='#L216'>216</a>
|
|
282
|
+
<a name='L217'></a><a href='#L217'>217</a>
|
|
283
|
+
<a name='L218'></a><a href='#L218'>218</a>
|
|
284
|
+
<a name='L219'></a><a href='#L219'>219</a>
|
|
285
|
+
<a name='L220'></a><a href='#L220'>220</a>
|
|
286
|
+
<a name='L221'></a><a href='#L221'>221</a>
|
|
287
|
+
<a name='L222'></a><a href='#L222'>222</a>
|
|
288
|
+
<a name='L223'></a><a href='#L223'>223</a>
|
|
289
|
+
<a name='L224'></a><a href='#L224'>224</a>
|
|
290
|
+
<a name='L225'></a><a href='#L225'>225</a>
|
|
291
|
+
<a name='L226'></a><a href='#L226'>226</a>
|
|
292
|
+
<a name='L227'></a><a href='#L227'>227</a>
|
|
293
|
+
<a name='L228'></a><a href='#L228'>228</a>
|
|
294
|
+
<a name='L229'></a><a href='#L229'>229</a>
|
|
295
|
+
<a name='L230'></a><a href='#L230'>230</a>
|
|
296
|
+
<a name='L231'></a><a href='#L231'>231</a>
|
|
297
|
+
<a name='L232'></a><a href='#L232'>232</a>
|
|
298
|
+
<a name='L233'></a><a href='#L233'>233</a>
|
|
299
|
+
<a name='L234'></a><a href='#L234'>234</a>
|
|
300
|
+
<a name='L235'></a><a href='#L235'>235</a>
|
|
301
|
+
<a name='L236'></a><a href='#L236'>236</a>
|
|
302
|
+
<a name='L237'></a><a href='#L237'>237</a>
|
|
303
|
+
<a name='L238'></a><a href='#L238'>238</a>
|
|
304
|
+
<a name='L239'></a><a href='#L239'>239</a>
|
|
305
|
+
<a name='L240'></a><a href='#L240'>240</a>
|
|
306
|
+
<a name='L241'></a><a href='#L241'>241</a>
|
|
307
|
+
<a name='L242'></a><a href='#L242'>242</a>
|
|
308
|
+
<a name='L243'></a><a href='#L243'>243</a>
|
|
309
|
+
<a name='L244'></a><a href='#L244'>244</a>
|
|
310
|
+
<a name='L245'></a><a href='#L245'>245</a>
|
|
311
|
+
<a name='L246'></a><a href='#L246'>246</a>
|
|
312
|
+
<a name='L247'></a><a href='#L247'>247</a>
|
|
313
|
+
<a name='L248'></a><a href='#L248'>248</a>
|
|
314
|
+
<a name='L249'></a><a href='#L249'>249</a>
|
|
315
|
+
<a name='L250'></a><a href='#L250'>250</a>
|
|
316
|
+
<a name='L251'></a><a href='#L251'>251</a>
|
|
317
|
+
<a name='L252'></a><a href='#L252'>252</a>
|
|
318
|
+
<a name='L253'></a><a href='#L253'>253</a>
|
|
319
|
+
<a name='L254'></a><a href='#L254'>254</a>
|
|
320
|
+
<a name='L255'></a><a href='#L255'>255</a>
|
|
321
|
+
<a name='L256'></a><a href='#L256'>256</a>
|
|
322
|
+
<a name='L257'></a><a href='#L257'>257</a>
|
|
323
|
+
<a name='L258'></a><a href='#L258'>258</a>
|
|
324
|
+
<a name='L259'></a><a href='#L259'>259</a>
|
|
325
|
+
<a name='L260'></a><a href='#L260'>260</a>
|
|
326
|
+
<a name='L261'></a><a href='#L261'>261</a>
|
|
327
|
+
<a name='L262'></a><a href='#L262'>262</a>
|
|
328
|
+
<a name='L263'></a><a href='#L263'>263</a>
|
|
329
|
+
<a name='L264'></a><a href='#L264'>264</a>
|
|
330
|
+
<a name='L265'></a><a href='#L265'>265</a>
|
|
331
|
+
<a name='L266'></a><a href='#L266'>266</a>
|
|
332
|
+
<a name='L267'></a><a href='#L267'>267</a>
|
|
333
|
+
<a name='L268'></a><a href='#L268'>268</a>
|
|
334
|
+
<a name='L269'></a><a href='#L269'>269</a>
|
|
335
|
+
<a name='L270'></a><a href='#L270'>270</a>
|
|
336
|
+
<a name='L271'></a><a href='#L271'>271</a>
|
|
337
|
+
<a name='L272'></a><a href='#L272'>272</a>
|
|
338
|
+
<a name='L273'></a><a href='#L273'>273</a>
|
|
339
|
+
<a name='L274'></a><a href='#L274'>274</a>
|
|
340
|
+
<a name='L275'></a><a href='#L275'>275</a>
|
|
341
|
+
<a name='L276'></a><a href='#L276'>276</a>
|
|
342
|
+
<a name='L277'></a><a href='#L277'>277</a>
|
|
343
|
+
<a name='L278'></a><a href='#L278'>278</a>
|
|
344
|
+
<a name='L279'></a><a href='#L279'>279</a>
|
|
345
|
+
<a name='L280'></a><a href='#L280'>280</a>
|
|
346
|
+
<a name='L281'></a><a href='#L281'>281</a>
|
|
347
|
+
<a name='L282'></a><a href='#L282'>282</a>
|
|
348
|
+
<a name='L283'></a><a href='#L283'>283</a>
|
|
349
|
+
<a name='L284'></a><a href='#L284'>284</a>
|
|
350
|
+
<a name='L285'></a><a href='#L285'>285</a>
|
|
351
|
+
<a name='L286'></a><a href='#L286'>286</a>
|
|
352
|
+
<a name='L287'></a><a href='#L287'>287</a>
|
|
353
|
+
<a name='L288'></a><a href='#L288'>288</a>
|
|
354
|
+
<a name='L289'></a><a href='#L289'>289</a>
|
|
355
|
+
<a name='L290'></a><a href='#L290'>290</a>
|
|
356
|
+
<a name='L291'></a><a href='#L291'>291</a>
|
|
357
|
+
<a name='L292'></a><a href='#L292'>292</a>
|
|
358
|
+
<a name='L293'></a><a href='#L293'>293</a>
|
|
359
|
+
<a name='L294'></a><a href='#L294'>294</a>
|
|
360
|
+
<a name='L295'></a><a href='#L295'>295</a>
|
|
361
|
+
<a name='L296'></a><a href='#L296'>296</a>
|
|
362
|
+
<a name='L297'></a><a href='#L297'>297</a>
|
|
363
|
+
<a name='L298'></a><a href='#L298'>298</a>
|
|
364
|
+
<a name='L299'></a><a href='#L299'>299</a>
|
|
365
|
+
<a name='L300'></a><a href='#L300'>300</a>
|
|
366
|
+
<a name='L301'></a><a href='#L301'>301</a>
|
|
367
|
+
<a name='L302'></a><a href='#L302'>302</a>
|
|
368
|
+
<a name='L303'></a><a href='#L303'>303</a>
|
|
369
|
+
<a name='L304'></a><a href='#L304'>304</a>
|
|
370
|
+
<a name='L305'></a><a href='#L305'>305</a>
|
|
371
|
+
<a name='L306'></a><a href='#L306'>306</a>
|
|
372
|
+
<a name='L307'></a><a href='#L307'>307</a>
|
|
373
|
+
<a name='L308'></a><a href='#L308'>308</a>
|
|
374
|
+
<a name='L309'></a><a href='#L309'>309</a>
|
|
375
|
+
<a name='L310'></a><a href='#L310'>310</a>
|
|
376
|
+
<a name='L311'></a><a href='#L311'>311</a>
|
|
377
|
+
<a name='L312'></a><a href='#L312'>312</a>
|
|
378
|
+
<a name='L313'></a><a href='#L313'>313</a>
|
|
379
|
+
<a name='L314'></a><a href='#L314'>314</a>
|
|
380
|
+
<a name='L315'></a><a href='#L315'>315</a>
|
|
381
|
+
<a name='L316'></a><a href='#L316'>316</a>
|
|
382
|
+
<a name='L317'></a><a href='#L317'>317</a>
|
|
383
|
+
<a name='L318'></a><a href='#L318'>318</a>
|
|
384
|
+
<a name='L319'></a><a href='#L319'>319</a>
|
|
385
|
+
<a name='L320'></a><a href='#L320'>320</a>
|
|
386
|
+
<a name='L321'></a><a href='#L321'>321</a>
|
|
387
|
+
<a name='L322'></a><a href='#L322'>322</a>
|
|
388
|
+
<a name='L323'></a><a href='#L323'>323</a>
|
|
389
|
+
<a name='L324'></a><a href='#L324'>324</a>
|
|
390
|
+
<a name='L325'></a><a href='#L325'>325</a>
|
|
391
|
+
<a name='L326'></a><a href='#L326'>326</a>
|
|
392
|
+
<a name='L327'></a><a href='#L327'>327</a>
|
|
393
|
+
<a name='L328'></a><a href='#L328'>328</a>
|
|
394
|
+
<a name='L329'></a><a href='#L329'>329</a>
|
|
395
|
+
<a name='L330'></a><a href='#L330'>330</a>
|
|
396
|
+
<a name='L331'></a><a href='#L331'>331</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
397
|
+
<span class="cline-any cline-neutral"> </span>
|
|
398
|
+
<span class="cline-any cline-neutral"> </span>
|
|
399
|
+
<span class="cline-any cline-yes">8x</span>
|
|
400
|
+
<span class="cline-any cline-no"> </span>
|
|
401
|
+
<span class="cline-any cline-neutral"> </span>
|
|
402
|
+
<span class="cline-any cline-neutral"> </span>
|
|
403
|
+
<span class="cline-any cline-neutral"> </span>
|
|
404
|
+
<span class="cline-any cline-neutral"> </span>
|
|
405
|
+
<span class="cline-any cline-no"> </span>
|
|
406
|
+
<span class="cline-any cline-no"> </span>
|
|
407
|
+
<span class="cline-any cline-neutral"> </span>
|
|
408
|
+
<span class="cline-any cline-no"> </span>
|
|
409
|
+
<span class="cline-any cline-no"> </span>
|
|
410
|
+
<span class="cline-any cline-no"> </span>
|
|
411
|
+
<span class="cline-any cline-no"> </span>
|
|
412
|
+
<span class="cline-any cline-neutral"> </span>
|
|
413
|
+
<span class="cline-any cline-no"> </span>
|
|
414
|
+
<span class="cline-any cline-no"> </span>
|
|
415
|
+
<span class="cline-any cline-no"> </span>
|
|
416
|
+
<span class="cline-any cline-neutral"> </span>
|
|
417
|
+
<span class="cline-any cline-neutral"> </span>
|
|
418
|
+
<span class="cline-any cline-neutral"> </span>
|
|
419
|
+
<span class="cline-any cline-neutral"> </span>
|
|
420
|
+
<span class="cline-any cline-neutral"> </span>
|
|
421
|
+
<span class="cline-any cline-neutral"> </span>
|
|
422
|
+
<span class="cline-any cline-neutral"> </span>
|
|
423
|
+
<span class="cline-any cline-neutral"> </span>
|
|
424
|
+
<span class="cline-any cline-neutral"> </span>
|
|
425
|
+
<span class="cline-any cline-neutral"> </span>
|
|
426
|
+
<span class="cline-any cline-neutral"> </span>
|
|
427
|
+
<span class="cline-any cline-neutral"> </span>
|
|
428
|
+
<span class="cline-any cline-neutral"> </span>
|
|
429
|
+
<span class="cline-any cline-neutral"> </span>
|
|
430
|
+
<span class="cline-any cline-neutral"> </span>
|
|
431
|
+
<span class="cline-any cline-no"> </span>
|
|
432
|
+
<span class="cline-any cline-no"> </span>
|
|
433
|
+
<span class="cline-any cline-neutral"> </span>
|
|
434
|
+
<span class="cline-any cline-no"> </span>
|
|
435
|
+
<span class="cline-any cline-neutral"> </span>
|
|
436
|
+
<span class="cline-any cline-no"> </span>
|
|
437
|
+
<span class="cline-any cline-neutral"> </span>
|
|
438
|
+
<span class="cline-any cline-neutral"> </span>
|
|
439
|
+
<span class="cline-any cline-neutral"> </span>
|
|
440
|
+
<span class="cline-any cline-no"> </span>
|
|
441
|
+
<span class="cline-any cline-no"> </span>
|
|
442
|
+
<span class="cline-any cline-no"> </span>
|
|
443
|
+
<span class="cline-any cline-no"> </span>
|
|
444
|
+
<span class="cline-any cline-neutral"> </span>
|
|
445
|
+
<span class="cline-any cline-neutral"> </span>
|
|
446
|
+
<span class="cline-any cline-neutral"> </span>
|
|
447
|
+
<span class="cline-any cline-neutral"> </span>
|
|
448
|
+
<span class="cline-any cline-neutral"> </span>
|
|
449
|
+
<span class="cline-any cline-neutral"> </span>
|
|
450
|
+
<span class="cline-any cline-neutral"> </span>
|
|
451
|
+
<span class="cline-any cline-no"> </span>
|
|
452
|
+
<span class="cline-any cline-neutral"> </span>
|
|
453
|
+
<span class="cline-any cline-neutral"> </span>
|
|
454
|
+
<span class="cline-any cline-neutral"> </span>
|
|
455
|
+
<span class="cline-any cline-neutral"> </span>
|
|
456
|
+
<span class="cline-any cline-neutral"> </span>
|
|
457
|
+
<span class="cline-any cline-no"> </span>
|
|
458
|
+
<span class="cline-any cline-no"> </span>
|
|
459
|
+
<span class="cline-any cline-neutral"> </span>
|
|
460
|
+
<span class="cline-any cline-neutral"> </span>
|
|
461
|
+
<span class="cline-any cline-neutral"> </span>
|
|
462
|
+
<span class="cline-any cline-neutral"> </span>
|
|
463
|
+
<span class="cline-any cline-no"> </span>
|
|
464
|
+
<span class="cline-any cline-no"> </span>
|
|
465
|
+
<span class="cline-any cline-neutral"> </span>
|
|
466
|
+
<span class="cline-any cline-neutral"> </span>
|
|
467
|
+
<span class="cline-any cline-neutral"> </span>
|
|
468
|
+
<span class="cline-any cline-no"> </span>
|
|
469
|
+
<span class="cline-any cline-no"> </span>
|
|
470
|
+
<span class="cline-any cline-no"> </span>
|
|
471
|
+
<span class="cline-any cline-neutral"> </span>
|
|
472
|
+
<span class="cline-any cline-neutral"> </span>
|
|
473
|
+
<span class="cline-any cline-no"> </span>
|
|
474
|
+
<span class="cline-any cline-no"> </span>
|
|
475
|
+
<span class="cline-any cline-no"> </span>
|
|
476
|
+
<span class="cline-any cline-neutral"> </span>
|
|
477
|
+
<span class="cline-any cline-neutral"> </span>
|
|
478
|
+
<span class="cline-any cline-neutral"> </span>
|
|
479
|
+
<span class="cline-any cline-no"> </span>
|
|
480
|
+
<span class="cline-any cline-no"> </span>
|
|
481
|
+
<span class="cline-any cline-neutral"> </span>
|
|
482
|
+
<span class="cline-any cline-no"> </span>
|
|
483
|
+
<span class="cline-any cline-neutral"> </span>
|
|
484
|
+
<span class="cline-any cline-no"> </span>
|
|
485
|
+
<span class="cline-any cline-neutral"> </span>
|
|
486
|
+
<span class="cline-any cline-no"> </span>
|
|
487
|
+
<span class="cline-any cline-neutral"> </span>
|
|
488
|
+
<span class="cline-any cline-no"> </span>
|
|
489
|
+
<span class="cline-any cline-neutral"> </span>
|
|
490
|
+
<span class="cline-any cline-neutral"> </span>
|
|
491
|
+
<span class="cline-any cline-neutral"> </span>
|
|
492
|
+
<span class="cline-any cline-neutral"> </span>
|
|
493
|
+
<span class="cline-any cline-neutral"> </span>
|
|
494
|
+
<span class="cline-any cline-neutral"> </span>
|
|
495
|
+
<span class="cline-any cline-no"> </span>
|
|
496
|
+
<span class="cline-any cline-neutral"> </span>
|
|
497
|
+
<span class="cline-any cline-neutral"> </span>
|
|
498
|
+
<span class="cline-any cline-no"> </span>
|
|
499
|
+
<span class="cline-any cline-neutral"> </span>
|
|
500
|
+
<span class="cline-any cline-neutral"> </span>
|
|
501
|
+
<span class="cline-any cline-neutral"> </span>
|
|
502
|
+
<span class="cline-any cline-yes">1x</span>
|
|
503
|
+
<span class="cline-any cline-yes">1x</span>
|
|
504
|
+
<span class="cline-any cline-neutral"> </span>
|
|
505
|
+
<span class="cline-any cline-neutral"> </span>
|
|
506
|
+
<span class="cline-any cline-neutral"> </span>
|
|
507
|
+
<span class="cline-any cline-neutral"> </span>
|
|
508
|
+
<span class="cline-any cline-no"> </span>
|
|
509
|
+
<span class="cline-any cline-neutral"> </span>
|
|
510
|
+
<span class="cline-any cline-neutral"> </span>
|
|
511
|
+
<span class="cline-any cline-neutral"> </span>
|
|
512
|
+
<span class="cline-any cline-no"> </span>
|
|
513
|
+
<span class="cline-any cline-no"> </span>
|
|
514
|
+
<span class="cline-any cline-neutral"> </span>
|
|
515
|
+
<span class="cline-any cline-no"> </span>
|
|
516
|
+
<span class="cline-any cline-neutral"> </span>
|
|
517
|
+
<span class="cline-any cline-neutral"> </span>
|
|
518
|
+
<span class="cline-any cline-neutral"> </span>
|
|
519
|
+
<span class="cline-any cline-neutral"> </span>
|
|
520
|
+
<span class="cline-any cline-neutral"> </span>
|
|
521
|
+
<span class="cline-any cline-neutral"> </span>
|
|
522
|
+
<span class="cline-any cline-neutral"> </span>
|
|
523
|
+
<span class="cline-any cline-neutral"> </span>
|
|
524
|
+
<span class="cline-any cline-neutral"> </span>
|
|
525
|
+
<span class="cline-any cline-neutral"> </span>
|
|
526
|
+
<span class="cline-any cline-neutral"> </span>
|
|
527
|
+
<span class="cline-any cline-neutral"> </span>
|
|
528
|
+
<span class="cline-any cline-neutral"> </span>
|
|
529
|
+
<span class="cline-any cline-neutral"> </span>
|
|
530
|
+
<span class="cline-any cline-neutral"> </span>
|
|
531
|
+
<span class="cline-any cline-neutral"> </span>
|
|
532
|
+
<span class="cline-any cline-neutral"> </span>
|
|
533
|
+
<span class="cline-any cline-neutral"> </span>
|
|
534
|
+
<span class="cline-any cline-neutral"> </span>
|
|
535
|
+
<span class="cline-any cline-neutral"> </span>
|
|
536
|
+
<span class="cline-any cline-neutral"> </span>
|
|
537
|
+
<span class="cline-any cline-neutral"> </span>
|
|
538
|
+
<span class="cline-any cline-neutral"> </span>
|
|
539
|
+
<span class="cline-any cline-yes">9x</span>
|
|
540
|
+
<span class="cline-any cline-yes">9x</span>
|
|
541
|
+
<span class="cline-any cline-yes">8x</span>
|
|
542
|
+
<span class="cline-any cline-yes">8x</span>
|
|
543
|
+
<span class="cline-any cline-yes">8x</span>
|
|
544
|
+
<span class="cline-any cline-neutral"> </span>
|
|
545
|
+
<span class="cline-any cline-yes">8x</span>
|
|
546
|
+
<span class="cline-any cline-neutral"> </span>
|
|
547
|
+
<span class="cline-any cline-yes">8x</span>
|
|
548
|
+
<span class="cline-any cline-neutral"> </span>
|
|
549
|
+
<span class="cline-any cline-neutral"> </span>
|
|
550
|
+
<span class="cline-any cline-neutral"> </span>
|
|
551
|
+
<span class="cline-any cline-yes">3x</span>
|
|
552
|
+
<span class="cline-any cline-yes">1x</span>
|
|
553
|
+
<span class="cline-any cline-neutral"> </span>
|
|
554
|
+
<span class="cline-any cline-neutral"> </span>
|
|
555
|
+
<span class="cline-any cline-yes">2x</span>
|
|
556
|
+
<span class="cline-any cline-yes">1x</span>
|
|
557
|
+
<span class="cline-any cline-neutral"> </span>
|
|
558
|
+
<span class="cline-any cline-neutral"> </span>
|
|
559
|
+
<span class="cline-any cline-yes">1x</span>
|
|
560
|
+
<span class="cline-any cline-neutral"> </span>
|
|
561
|
+
<span class="cline-any cline-yes">1x</span>
|
|
562
|
+
<span class="cline-any cline-yes">1x</span>
|
|
563
|
+
<span class="cline-any cline-yes">1x</span>
|
|
564
|
+
<span class="cline-any cline-neutral"> </span>
|
|
565
|
+
<span class="cline-any cline-yes">1x</span>
|
|
566
|
+
<span class="cline-any cline-neutral"> </span>
|
|
567
|
+
<span class="cline-any cline-neutral"> </span>
|
|
568
|
+
<span class="cline-any cline-neutral"> </span>
|
|
569
|
+
<span class="cline-any cline-yes">3x</span>
|
|
570
|
+
<span class="cline-any cline-yes">1x</span>
|
|
571
|
+
<span class="cline-any cline-neutral"> </span>
|
|
572
|
+
<span class="cline-any cline-neutral"> </span>
|
|
573
|
+
<span class="cline-any cline-yes">2x</span>
|
|
574
|
+
<span class="cline-any cline-yes">1x</span>
|
|
575
|
+
<span class="cline-any cline-neutral"> </span>
|
|
576
|
+
<span class="cline-any cline-neutral"> </span>
|
|
577
|
+
<span class="cline-any cline-yes">1x</span>
|
|
578
|
+
<span class="cline-any cline-neutral"> </span>
|
|
579
|
+
<span class="cline-any cline-yes">1x</span>
|
|
580
|
+
<span class="cline-any cline-neutral"> </span>
|
|
581
|
+
<span class="cline-any cline-yes">1x</span>
|
|
582
|
+
<span class="cline-any cline-yes">1x</span>
|
|
583
|
+
<span class="cline-any cline-yes">1x</span>
|
|
584
|
+
<span class="cline-any cline-yes">1x</span>
|
|
585
|
+
<span class="cline-any cline-neutral"> </span>
|
|
586
|
+
<span class="cline-any cline-yes">1x</span>
|
|
587
|
+
<span class="cline-any cline-neutral"> </span>
|
|
588
|
+
<span class="cline-any cline-yes">1x</span>
|
|
589
|
+
<span class="cline-any cline-neutral"> </span>
|
|
590
|
+
<span class="cline-any cline-neutral"> </span>
|
|
591
|
+
<span class="cline-any cline-neutral"> </span>
|
|
592
|
+
<span class="cline-any cline-neutral"> </span>
|
|
593
|
+
<span class="cline-any cline-neutral"> </span>
|
|
594
|
+
<span class="cline-any cline-neutral"> </span>
|
|
595
|
+
<span class="cline-any cline-neutral"> </span>
|
|
596
|
+
<span class="cline-any cline-neutral"> </span>
|
|
597
|
+
<span class="cline-any cline-neutral"> </span>
|
|
598
|
+
<span class="cline-any cline-neutral"> </span>
|
|
599
|
+
<span class="cline-any cline-neutral"> </span>
|
|
600
|
+
<span class="cline-any cline-neutral"> </span>
|
|
601
|
+
<span class="cline-any cline-yes">2x</span>
|
|
602
|
+
<span class="cline-any cline-neutral"> </span>
|
|
603
|
+
<span class="cline-any cline-yes">2x</span>
|
|
604
|
+
<span class="cline-any cline-neutral"> </span>
|
|
605
|
+
<span class="cline-any cline-yes">2x</span>
|
|
606
|
+
<span class="cline-any cline-neutral"> </span>
|
|
607
|
+
<span class="cline-any cline-neutral"> </span>
|
|
608
|
+
<span class="cline-any cline-neutral"> </span>
|
|
609
|
+
<span class="cline-any cline-neutral"> </span>
|
|
610
|
+
<span class="cline-any cline-neutral"> </span>
|
|
611
|
+
<span class="cline-any cline-neutral"> </span>
|
|
612
|
+
<span class="cline-any cline-neutral"> </span>
|
|
613
|
+
<span class="cline-any cline-neutral"> </span>
|
|
614
|
+
<span class="cline-any cline-neutral"> </span>
|
|
615
|
+
<span class="cline-any cline-neutral"> </span>
|
|
616
|
+
<span class="cline-any cline-neutral"> </span>
|
|
617
|
+
<span class="cline-any cline-neutral"> </span>
|
|
618
|
+
<span class="cline-any cline-neutral"> </span>
|
|
619
|
+
<span class="cline-any cline-neutral"> </span>
|
|
620
|
+
<span class="cline-any cline-neutral"> </span>
|
|
621
|
+
<span class="cline-any cline-neutral"> </span>
|
|
622
|
+
<span class="cline-any cline-neutral"> </span>
|
|
623
|
+
<span class="cline-any cline-yes">2x</span>
|
|
624
|
+
<span class="cline-any cline-yes">28x</span>
|
|
625
|
+
<span class="cline-any cline-neutral"> </span>
|
|
626
|
+
<span class="cline-any cline-neutral"> </span>
|
|
627
|
+
<span class="cline-any cline-yes">2x</span>
|
|
628
|
+
<span class="cline-any cline-neutral"> </span>
|
|
629
|
+
<span class="cline-any cline-neutral"> </span>
|
|
630
|
+
<span class="cline-any cline-neutral"> </span>
|
|
631
|
+
<span class="cline-any cline-neutral"> </span>
|
|
632
|
+
<span class="cline-any cline-neutral"> </span>
|
|
633
|
+
<span class="cline-any cline-neutral"> </span>
|
|
634
|
+
<span class="cline-any cline-neutral"> </span>
|
|
635
|
+
<span class="cline-any cline-neutral"> </span>
|
|
636
|
+
<span class="cline-any cline-neutral"> </span>
|
|
637
|
+
<span class="cline-any cline-neutral"> </span>
|
|
638
|
+
<span class="cline-any cline-neutral"> </span>
|
|
639
|
+
<span class="cline-any cline-neutral"> </span>
|
|
640
|
+
<span class="cline-any cline-neutral"> </span>
|
|
641
|
+
<span class="cline-any cline-neutral"> </span>
|
|
642
|
+
<span class="cline-any cline-no"> </span>
|
|
643
|
+
<span class="cline-any cline-no"> </span>
|
|
644
|
+
<span class="cline-any cline-no"> </span>
|
|
645
|
+
<span class="cline-any cline-neutral"> </span>
|
|
646
|
+
<span class="cline-any cline-neutral"> </span>
|
|
647
|
+
<span class="cline-any cline-neutral"> </span>
|
|
648
|
+
<span class="cline-any cline-neutral"> </span>
|
|
649
|
+
<span class="cline-any cline-neutral"> </span>
|
|
650
|
+
<span class="cline-any cline-neutral"> </span>
|
|
651
|
+
<span class="cline-any cline-neutral"> </span>
|
|
652
|
+
<span class="cline-any cline-neutral"> </span>
|
|
653
|
+
<span class="cline-any cline-no"> </span>
|
|
654
|
+
<span class="cline-any cline-no"> </span>
|
|
655
|
+
<span class="cline-any cline-neutral"> </span>
|
|
656
|
+
<span class="cline-any cline-neutral"> </span>
|
|
657
|
+
<span class="cline-any cline-no"> </span>
|
|
658
|
+
<span class="cline-any cline-no"> </span>
|
|
659
|
+
<span class="cline-any cline-neutral"> </span>
|
|
660
|
+
<span class="cline-any cline-neutral"> </span>
|
|
661
|
+
<span class="cline-any cline-neutral"> </span>
|
|
662
|
+
<span class="cline-any cline-no"> </span>
|
|
663
|
+
<span class="cline-any cline-no"> </span>
|
|
664
|
+
<span class="cline-any cline-neutral"> </span>
|
|
665
|
+
<span class="cline-any cline-neutral"> </span>
|
|
666
|
+
<span class="cline-any cline-no"> </span>
|
|
667
|
+
<span class="cline-any cline-no"> </span>
|
|
668
|
+
<span class="cline-any cline-neutral"> </span>
|
|
669
|
+
<span class="cline-any cline-neutral"> </span>
|
|
670
|
+
<span class="cline-any cline-no"> </span>
|
|
671
|
+
<span class="cline-any cline-neutral"> </span>
|
|
672
|
+
<span class="cline-any cline-neutral"> </span>
|
|
673
|
+
<span class="cline-any cline-neutral"> </span>
|
|
674
|
+
<span class="cline-any cline-neutral"> </span>
|
|
675
|
+
<span class="cline-any cline-neutral"> </span>
|
|
676
|
+
<span class="cline-any cline-neutral"> </span>
|
|
677
|
+
<span class="cline-any cline-neutral"> </span>
|
|
678
|
+
<span class="cline-any cline-neutral"> </span>
|
|
679
|
+
<span class="cline-any cline-neutral"> </span>
|
|
680
|
+
<span class="cline-any cline-neutral"> </span>
|
|
681
|
+
<span class="cline-any cline-neutral"> </span>
|
|
682
|
+
<span class="cline-any cline-yes">1x</span>
|
|
683
|
+
<span class="cline-any cline-neutral"> </span>
|
|
684
|
+
<span class="cline-any cline-neutral"> </span>
|
|
685
|
+
<span class="cline-any cline-no"> </span>
|
|
686
|
+
<span class="cline-any cline-no"> </span>
|
|
687
|
+
<span class="cline-any cline-no"> </span>
|
|
688
|
+
<span class="cline-any cline-neutral"> </span>
|
|
689
|
+
<span class="cline-any cline-neutral"> </span>
|
|
690
|
+
<span class="cline-any cline-yes">1x</span>
|
|
691
|
+
<span class="cline-any cline-neutral"> </span>
|
|
692
|
+
<span class="cline-any cline-neutral"> </span>
|
|
693
|
+
<span class="cline-any cline-neutral"> </span>
|
|
694
|
+
<span class="cline-any cline-neutral"> </span>
|
|
695
|
+
<span class="cline-any cline-neutral"> </span>
|
|
696
|
+
<span class="cline-any cline-yes">1x</span>
|
|
697
|
+
<span class="cline-any cline-neutral"> </span>
|
|
698
|
+
<span class="cline-any cline-neutral"> </span>
|
|
699
|
+
<span class="cline-any cline-neutral"> </span>
|
|
700
|
+
<span class="cline-any cline-no"> </span>
|
|
701
|
+
<span class="cline-any cline-neutral"> </span>
|
|
702
|
+
<span class="cline-any cline-neutral"> </span>
|
|
703
|
+
<span class="cline-any cline-neutral"> </span>
|
|
704
|
+
<span class="cline-any cline-neutral"> </span>
|
|
705
|
+
<span class="cline-any cline-neutral"> </span>
|
|
706
|
+
<span class="cline-any cline-neutral"> </span>
|
|
707
|
+
<span class="cline-any cline-neutral"> </span>
|
|
708
|
+
<span class="cline-any cline-neutral"> </span>
|
|
709
|
+
<span class="cline-any cline-no"> </span>
|
|
710
|
+
<span class="cline-any cline-no"> </span>
|
|
711
|
+
<span class="cline-any cline-neutral"> </span>
|
|
712
|
+
<span class="cline-any cline-no"> </span>
|
|
713
|
+
<span class="cline-any cline-neutral"> </span>
|
|
714
|
+
<span class="cline-any cline-neutral"> </span>
|
|
715
|
+
<span class="cline-any cline-neutral"> </span>
|
|
716
|
+
<span class="cline-any cline-neutral"> </span>
|
|
717
|
+
<span class="cline-any cline-yes">1x</span>
|
|
718
|
+
<span class="cline-any cline-neutral"> </span>
|
|
719
|
+
<span class="cline-any cline-yes">1x</span>
|
|
720
|
+
<span class="cline-any cline-yes">1x</span>
|
|
721
|
+
<span class="cline-any cline-neutral"> </span>
|
|
722
|
+
<span class="cline-any cline-neutral"> </span>
|
|
723
|
+
<span class="cline-any cline-yes">1x</span>
|
|
724
|
+
<span class="cline-any cline-yes">1x</span>
|
|
725
|
+
<span class="cline-any cline-neutral"> </span>
|
|
726
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import qs from 'qs';
|
|
727
|
+
|
|
728
|
+
function isFromOrigin(origin) {
|
|
729
|
+
return function <span class="fstat-no" title="function not covered" >isEventFromOrigin(</span>event) {
|
|
730
|
+
<span class="cstat-no" title="statement not covered" > return Boolean(event.isTrusted && event.origin.indexOf(origin) === 0);</span>
|
|
731
|
+
};
|
|
732
|
+
}
|
|
733
|
+
|
|
734
|
+
function <span class="fstat-no" title="function not covered" >openAuthPopup(</span>src) {
|
|
735
|
+
const url = <span class="cstat-no" title="statement not covered" >new URL(src);</span>
|
|
736
|
+
const origin = <span class="cstat-no" title="statement not covered" >`${url.protocol}//${url.host}`;</span>
|
|
737
|
+
|
|
738
|
+
const width = <span class="cstat-no" title="statement not covered" >480;</span>
|
|
739
|
+
const height = <span class="cstat-no" title="statement not covered" >600;</span>
|
|
740
|
+
const TWO = <span class="cstat-no" title="statement not covered" >2;</span>
|
|
741
|
+
const WINDOW_CLOSE_INTERVAL = <span class="cstat-no" title="statement not covered" >100;</span>
|
|
742
|
+
|
|
743
|
+
const left = <span class="cstat-no" title="statement not covered" >(window.screen.width / TWO) - (width / TWO);</span>
|
|
744
|
+
const top = <span class="cstat-no" title="statement not covered" >(window.screen.height / TWO) - (height / TWO);</span>
|
|
745
|
+
const windowParams = <span class="cstat-no" title="statement not covered" >[</span>
|
|
746
|
+
'toolbar=no',
|
|
747
|
+
'location=no',
|
|
748
|
+
'directories=no',
|
|
749
|
+
'status=no',
|
|
750
|
+
'menubar=no',
|
|
751
|
+
'scrollbars=no',
|
|
752
|
+
'resizable=no',
|
|
753
|
+
'copyhistory=no',
|
|
754
|
+
`width=${width}`,
|
|
755
|
+
`height=${height}`,
|
|
756
|
+
`top=${top}`,
|
|
757
|
+
`left=${left}`,
|
|
758
|
+
];
|
|
759
|
+
|
|
760
|
+
// eslint-disable-next-line promise/avoid-new
|
|
761
|
+
<span class="cstat-no" title="statement not covered" > return new Promise(<span class="fstat-no" title="function not covered" >(r</span>esolve, reject) => {</span>
|
|
762
|
+
const win = <span class="cstat-no" title="statement not covered" >window.open(src, 'Authorization', windowParams.join(', '));</span>
|
|
763
|
+
|
|
764
|
+
<span class="cstat-no" title="statement not covered" > if (!win) {</span>
|
|
765
|
+
// eslint-disable-next-line prefer-promise-reject-errors
|
|
766
|
+
<span class="cstat-no" title="statement not covered" > reject('Failed to open window');</span>
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
// pings the login window to check if it was closed
|
|
770
|
+
const closeCheck = <span class="cstat-no" title="statement not covered" >setInterval(<span class="fstat-no" title="function not covered" >()</span> => {</span>
|
|
771
|
+
<span class="cstat-no" title="statement not covered" > if (win.closed) {</span>
|
|
772
|
+
<span class="cstat-no" title="statement not covered" > destroy();</span>
|
|
773
|
+
<span class="cstat-no" title="statement not covered" > onClose();</span>
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
}, WINDOW_CLOSE_INTERVAL);
|
|
777
|
+
|
|
778
|
+
// triggered if the window was closed
|
|
779
|
+
function <span class="fstat-no" title="function not covered" >onClose(</span>) {
|
|
780
|
+
// eslint-disable-next-line prefer-promise-reject-errors
|
|
781
|
+
<span class="cstat-no" title="statement not covered" > reject('User closed window');</span>
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
// completes the process, either because the user closes or because the authentication completed
|
|
785
|
+
// cleans intervals and event listeners
|
|
786
|
+
function <span class="fstat-no" title="function not covered" >destroy(</span>) {
|
|
787
|
+
<span class="cstat-no" title="statement not covered" > window.removeEventListener('message', onMessage);</span>
|
|
788
|
+
<span class="cstat-no" title="statement not covered" > clearInterval(closeCheck);</span>
|
|
789
|
+
}
|
|
790
|
+
|
|
791
|
+
// triggered when a message is received on the current window
|
|
792
|
+
function <span class="fstat-no" title="function not covered" >onMessage(</span>event) {
|
|
793
|
+
<span class="cstat-no" title="statement not covered" > if (!isFromOrigin(origin)(event)) {</span>
|
|
794
|
+
<span class="cstat-no" title="statement not covered" > return null;</span>
|
|
795
|
+
}
|
|
796
|
+
|
|
797
|
+
// legacy ViiBE iframe messages (oauth.html)
|
|
798
|
+
<span class="cstat-no" title="statement not covered" > if (event.data.token) {</span>
|
|
799
|
+
<span class="cstat-no" title="statement not covered" > destroy();</span>
|
|
800
|
+
<span class="cstat-no" title="statement not covered" > resolve(event.data.token);</span>
|
|
801
|
+
}
|
|
802
|
+
|
|
803
|
+
<span class="cstat-no" title="statement not covered" > if (event.data.error) {</span>
|
|
804
|
+
<span class="cstat-no" title="statement not covered" > destroy();</span>
|
|
805
|
+
<span class="cstat-no" title="statement not covered" > reject(event.data.error);</span>
|
|
806
|
+
}
|
|
807
|
+
|
|
808
|
+
// events from auth.viibe.tech
|
|
809
|
+
<span class="cstat-no" title="statement not covered" > if (event.data && event.data.event && event.data.payload) {</span>
|
|
810
|
+
<span class="cstat-no" title="statement not covered" > switch (event.data.event) {</span>
|
|
811
|
+
case 'authentication:success':
|
|
812
|
+
<span class="cstat-no" title="statement not covered" > destroy();</span>
|
|
813
|
+
|
|
814
|
+
<span class="cstat-no" title="statement not covered" > return resolve(event.data);</span>
|
|
815
|
+
case 'authentication:failure':
|
|
816
|
+
<span class="cstat-no" title="statement not covered" > destroy();</span>
|
|
817
|
+
|
|
818
|
+
<span class="cstat-no" title="statement not covered" > return reject(event.data);</span>
|
|
819
|
+
default:
|
|
820
|
+
|
|
821
|
+
}
|
|
822
|
+
|
|
823
|
+
}
|
|
824
|
+
|
|
825
|
+
<span class="cstat-no" title="statement not covered" > return null;</span>
|
|
826
|
+
}
|
|
827
|
+
|
|
828
|
+
<span class="cstat-no" title="statement not covered" > window.addEventListener('message', onMessage);</span>
|
|
829
|
+
});
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
const DEFAULT_AUTH_HOST = 'auth.viibe.pro';
|
|
833
|
+
const IFRAME_NAME_RANGE = 10000;
|
|
834
|
+
|
|
835
|
+
class ViibeAuth {
|
|
836
|
+
|
|
837
|
+
<span class="fstat-no" title="function not covered" > co</span>nstructor(host = <span class="branch-0 cbranch-no" title="branch not covered" >DEFAULT_AUTH_HOST)</span> {
|
|
838
|
+
<span class="cstat-no" title="statement not covered" > this.host = host;</span>
|
|
839
|
+
}
|
|
840
|
+
|
|
841
|
+
<span class="fstat-no" title="function not covered" > lo</span>ginZendesk(subdomain) {
|
|
842
|
+
const { origin } = <span class="cstat-no" title="statement not covered" >document.location;</span>
|
|
843
|
+
const url = <span class="cstat-no" title="statement not covered" >`https://${this.host}/auth/zendesk/login?subdomain=${subdomain}&origin=${origin}`;</span>
|
|
844
|
+
|
|
845
|
+
<span class="cstat-no" title="statement not covered" > return openAuthPopup(url);</span>
|
|
846
|
+
}
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
class Viibe {
|
|
850
|
+
|
|
851
|
+
/**
|
|
852
|
+
* @typedef Handler
|
|
853
|
+
* @type {object}
|
|
854
|
+
* @property {string} eventName The name of the event to handle
|
|
855
|
+
* @property {string} windowName The name of the window / iframe to listen to
|
|
856
|
+
* @property {Function} func The function to trigger when an event is received
|
|
857
|
+
*/
|
|
858
|
+
|
|
859
|
+
/**
|
|
860
|
+
*
|
|
861
|
+
* @param {object} options
|
|
862
|
+
* @param {string} options.host Target ViiBE subdomain (e.g. test.viibe.tech)
|
|
863
|
+
* @param {string} options.source Integration source (e.g. zendesk)
|
|
864
|
+
*/
|
|
865
|
+
constructor(options) {
|
|
866
|
+
/**
|
|
867
|
+
* @type {Handler[]}
|
|
868
|
+
*/
|
|
869
|
+
this.handlers = [];
|
|
870
|
+
this.host = options.host;
|
|
871
|
+
this.viibeDomain = /^localhost/.test(this.host) ? `http://${this.host}` : `https://${this.host}`;
|
|
872
|
+
this.apiOrigin = /^localhost/.test(this.host) ? `http://${this.host}` : `https://api-${this.host}`;
|
|
873
|
+
this.source = options.source;
|
|
874
|
+
|
|
875
|
+
this.isViibeEvent = isFromOrigin(this.viibeDomain);
|
|
876
|
+
|
|
877
|
+
window.addEventListener('message', this.onMessage.bind(this));
|
|
878
|
+
}
|
|
879
|
+
|
|
880
|
+
createNotificationIframe() {
|
|
881
|
+
if (!this.host) {
|
|
882
|
+
throw new Error('fillHost');
|
|
883
|
+
}
|
|
884
|
+
|
|
885
|
+
if (!this.source) {
|
|
886
|
+
throw new Error('fillSource');
|
|
887
|
+
}
|
|
888
|
+
|
|
889
|
+
const iframe = document.createElement('iframe');
|
|
890
|
+
|
|
891
|
+
iframe.name = `viibe-${Math.floor(Math.random() * IFRAME_NAME_RANGE)}`;
|
|
892
|
+
iframe.style = 'border: 0;width: 0;';
|
|
893
|
+
iframe.src = `${this.viibeDomain}/integration/features/notifications`;
|
|
894
|
+
|
|
895
|
+
return iframe;
|
|
896
|
+
}
|
|
897
|
+
|
|
898
|
+
createCallIframe(options = {}) {
|
|
899
|
+
if (!this.host) {
|
|
900
|
+
throw new Error('fillHost');
|
|
901
|
+
}
|
|
902
|
+
|
|
903
|
+
if (!this.source) {
|
|
904
|
+
throw new Error('fillSource');
|
|
905
|
+
}
|
|
906
|
+
|
|
907
|
+
const src = this.generateIframeSrc(options);
|
|
908
|
+
|
|
909
|
+
const iframe = document.createElement('iframe');
|
|
910
|
+
|
|
911
|
+
iframe.name = `viibe-${Math.floor(Math.random() * IFRAME_NAME_RANGE)}`;
|
|
912
|
+
iframe.style = 'border: 0;width: calc(100% - 1rem);margin: 0.5rem;';
|
|
913
|
+
iframe.src = src;
|
|
914
|
+
iframe.allow = 'geolocation;autoplay;microphone;camera;midi;encrypted-media;clipboard-write;';
|
|
915
|
+
|
|
916
|
+
this.on(iframe, 'document', <span class="fstat-no" title="function not covered" >ev</span>ent => <span class="cstat-no" title="statement not covered" >this.onDocument(event))</span>;
|
|
917
|
+
|
|
918
|
+
return iframe;
|
|
919
|
+
}
|
|
920
|
+
|
|
921
|
+
generateIframeSrc(params = <span class="branch-0 cbranch-no" title="branch not covered" >{})</span> {
|
|
922
|
+
const {
|
|
923
|
+
components,
|
|
924
|
+
links,
|
|
925
|
+
o2m = false,
|
|
926
|
+
ticket,
|
|
927
|
+
locale,
|
|
928
|
+
standalone,
|
|
929
|
+
suggestions,
|
|
930
|
+
token,
|
|
931
|
+
} = params;
|
|
932
|
+
|
|
933
|
+
const src = `${this.viibeDomain}/integration/features/ticket`;
|
|
934
|
+
|
|
935
|
+
const urlParams = {
|
|
936
|
+
version: '2.0.0',
|
|
937
|
+
origin: document.location.origin,
|
|
938
|
+
resize: 'true',
|
|
939
|
+
source: this.source,
|
|
940
|
+
title: ticket?.title,
|
|
941
|
+
thirdPartyId: ticket?.integration?.id,
|
|
942
|
+
custom: ticket?.integration?.customData,
|
|
943
|
+
links: links,
|
|
944
|
+
suggestions: suggestions,
|
|
945
|
+
token: token,
|
|
946
|
+
locale: locale,
|
|
947
|
+
components: components,
|
|
948
|
+
standalone: [true, false].includes(standalone) ? standalone : null,
|
|
949
|
+
o2m: [true, false].includes(o2m) ? o2m : <span class="branch-1 cbranch-no" title="branch not covered" >null,</span>
|
|
950
|
+
};
|
|
951
|
+
|
|
952
|
+
// Clean empty values
|
|
953
|
+
for (let key in urlParams) {
|
|
954
|
+
if ([null, undefined, ''].includes(urlParams[key])) delete urlParams[key]
|
|
955
|
+
}
|
|
956
|
+
|
|
957
|
+
return `${src}?${qs.stringify(urlParams)}`;
|
|
958
|
+
}
|
|
959
|
+
|
|
960
|
+
/**
|
|
961
|
+
* Dispatches an event ie calls handlers corresponding to that event.
|
|
962
|
+
* Handlers with not windowName will be triggered regardless of the origin windowName
|
|
963
|
+
* Otherwise, the event will be triggered only if the handler windowName and the event windowName correspond
|
|
964
|
+
*
|
|
965
|
+
* @param {string} eventName
|
|
966
|
+
* @param {any} payload
|
|
967
|
+
* @param {any} event
|
|
968
|
+
* @param {string} windowName
|
|
969
|
+
* @returns
|
|
970
|
+
*/
|
|
971
|
+
<span class="fstat-no" title="function not covered" > di</span>spatch(eventName, payload, event, windowName) {
|
|
972
|
+
<span class="cstat-no" title="statement not covered" > return this.handlers</span>
|
|
973
|
+
.filter(<span class="fstat-no" title="function not covered" >ha</span>ndler => <span class="cstat-no" title="statement not covered" >handler.eventName === eventName && (!handler.windowName || (handler.windowName === windowName)))</span>
|
|
974
|
+
.map(<span class="fstat-no" title="function not covered" >ha</span>ndler => <span class="cstat-no" title="statement not covered" >handler.func(payload, event))</span>;
|
|
975
|
+
}
|
|
976
|
+
|
|
977
|
+
/**
|
|
978
|
+
* Handles postMessages / events received on the current window
|
|
979
|
+
* @param {any} event
|
|
980
|
+
* @returns
|
|
981
|
+
*/
|
|
982
|
+
<span class="fstat-no" title="function not covered" > on</span>Message(event) {
|
|
983
|
+
<span class="cstat-no" title="statement not covered" > if (!this.isViibeEvent(event)) {</span>
|
|
984
|
+
<span class="cstat-no" title="statement not covered" > return null;</span>
|
|
985
|
+
}
|
|
986
|
+
|
|
987
|
+
<span class="cstat-no" title="statement not covered" > if (event.data && event.data.event) {</span>
|
|
988
|
+
<span class="cstat-no" title="statement not covered" > return this.dispatch(event.data.event, event.data.payload, event, event.data.windowName);</span>
|
|
989
|
+
}
|
|
990
|
+
|
|
991
|
+
// FIXME: legacy authentication messages
|
|
992
|
+
<span class="cstat-no" title="statement not covered" > if (event.data && event.data.token) {</span>
|
|
993
|
+
<span class="cstat-no" title="statement not covered" > return this.dispatch('authentication:token', event.data.token, event);</span>
|
|
994
|
+
}
|
|
995
|
+
|
|
996
|
+
<span class="cstat-no" title="statement not covered" > if (event.data && event.data.error) {</span>
|
|
997
|
+
<span class="cstat-no" title="statement not covered" > return this.dispatch('authentication:error', event.data.error, event);</span>
|
|
998
|
+
}
|
|
999
|
+
|
|
1000
|
+
<span class="cstat-no" title="statement not covered" > return null;</span>
|
|
1001
|
+
}
|
|
1002
|
+
|
|
1003
|
+
/**
|
|
1004
|
+
* Registers an event handler.
|
|
1005
|
+
* Can be either called with 2 arguments (eventName and handler) to catch events from all iframes
|
|
1006
|
+
* or with 3 arguments (iframe, eventName, handler) to catch events from only that iframe
|
|
1007
|
+
* @param {HTMLIFrameElement} [iframe]
|
|
1008
|
+
* @param {string} eventName
|
|
1009
|
+
* @param {Function} handler
|
|
1010
|
+
*/
|
|
1011
|
+
on(iframe, eventName, func) {
|
|
1012
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (typeof iframe === 'string' &&
|
|
1013
|
+
<span class="branch-1 cbranch-no" title="branch not covered" > typeof eventName === 'function' </span>&&
|
|
1014
|
+
<span class="branch-2 cbranch-no" title="branch not covered" > typeof func === 'undefined')</span> {
|
|
1015
|
+
<span class="cstat-no" title="statement not covered" > func = eventName;</span>
|
|
1016
|
+
<span class="cstat-no" title="statement not covered" > eventName = iframe;</span>
|
|
1017
|
+
<span class="cstat-no" title="statement not covered" > iframe = null;</span>
|
|
1018
|
+
}
|
|
1019
|
+
|
|
1020
|
+
const handler = {
|
|
1021
|
+
eventName,
|
|
1022
|
+
func,
|
|
1023
|
+
windowName: iframe ? iframe.name : <span class="branch-1 cbranch-no" title="branch not covered" >null,</span>
|
|
1024
|
+
};
|
|
1025
|
+
|
|
1026
|
+
this.handlers.push(handler);
|
|
1027
|
+
}
|
|
1028
|
+
|
|
1029
|
+
<span class="fstat-no" title="function not covered" > on</span>Document(document) {
|
|
1030
|
+
<span class="cstat-no" title="statement not covered" > window.open(document.signed_url, '_blank');</span>
|
|
1031
|
+
}
|
|
1032
|
+
|
|
1033
|
+
/**
|
|
1034
|
+
* Initiates an oauth login in a popup using the passed provider
|
|
1035
|
+
* @param {string} provider A strategy name from the Viibe API (see /strategies API)
|
|
1036
|
+
* @returns
|
|
1037
|
+
*/
|
|
1038
|
+
<span class="fstat-no" title="function not covered" > au</span>thenticate(provider) {
|
|
1039
|
+
const { protocol, host } = <span class="cstat-no" title="statement not covered" >document.location;</span>
|
|
1040
|
+
const src = <span class="cstat-no" title="statement not covered" >`${protocol}//api-${host}/auth/login/${provider}?origin=${origin}`;</span>
|
|
1041
|
+
|
|
1042
|
+
<span class="cstat-no" title="statement not covered" > return openAuthPopup(src);</span>
|
|
1043
|
+
}
|
|
1044
|
+
|
|
1045
|
+
}
|
|
1046
|
+
|
|
1047
|
+
Viibe.Auth = ViibeAuth;
|
|
1048
|
+
|
|
1049
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (typeof window !== 'undefined') {
|
|
1050
|
+
window.Viibe = Viibe;
|
|
1051
|
+
}
|
|
1052
|
+
|
|
1053
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (typeof module !== 'undefined') {
|
|
1054
|
+
module.exports = Viibe;
|
|
1055
|
+
}
|
|
1056
|
+
</pre></td></tr></table></pre>
|
|
67
1057
|
|
|
68
1058
|
<div class='push'></div><!-- for sticky footer -->
|
|
69
1059
|
</div><!-- /wrapper -->
|
|
70
1060
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
71
1061
|
Code coverage generated by
|
|
72
1062
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
73
|
-
at Thu
|
|
1063
|
+
at Thu Jul 03 2025 16:25:01 GMT+0200 (Central European Summer Time)
|
|
74
1064
|
</div>
|
|
75
1065
|
<script src="prettify.js"></script>
|
|
76
1066
|
<script>
|