@stream-io/video-client 0.0.1-alpha.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (222) hide show
  1. package/LICENSE +219 -0
  2. package/README.md +14 -0
  3. package/coverage/lcov-report/base.css +224 -0
  4. package/coverage/lcov-report/block-navigation.js +87 -0
  5. package/coverage/lcov-report/favicon.png +0 -0
  6. package/coverage/lcov-report/index.html +296 -0
  7. package/coverage/lcov-report/prettify.css +1 -0
  8. package/coverage/lcov-report/prettify.js +2 -0
  9. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  10. package/coverage/lcov-report/sorter.js +196 -0
  11. package/coverage/lcov-report/src/Batcher.ts.html +214 -0
  12. package/coverage/lcov-report/src/CallDropScheduler.ts.html +661 -0
  13. package/coverage/lcov-report/src/StreamSfuClient.ts.html +640 -0
  14. package/coverage/lcov-report/src/StreamVideoClient.ts.html +1594 -0
  15. package/coverage/lcov-report/src/config/defaultConfigs.ts.html +130 -0
  16. package/coverage/lcov-report/src/config/index.html +116 -0
  17. package/coverage/lcov-report/src/coordinator/StreamCoordinatorClient.ts.html +430 -0
  18. package/coverage/lcov-report/src/coordinator/connection/base64.ts.html +325 -0
  19. package/coverage/lcov-report/src/coordinator/connection/client.ts.html +2527 -0
  20. package/coverage/lcov-report/src/coordinator/connection/connection.ts.html +2335 -0
  21. package/coverage/lcov-report/src/coordinator/connection/connection_fallback.ts.html +802 -0
  22. package/coverage/lcov-report/src/coordinator/connection/errors.ts.html +295 -0
  23. package/coverage/lcov-report/src/coordinator/connection/index.html +251 -0
  24. package/coverage/lcov-report/src/coordinator/connection/insights.ts.html +349 -0
  25. package/coverage/lcov-report/src/coordinator/connection/signing.ts.html +397 -0
  26. package/coverage/lcov-report/src/coordinator/connection/token_manager.ts.html +565 -0
  27. package/coverage/lcov-report/src/coordinator/connection/types.ts.html +418 -0
  28. package/coverage/lcov-report/src/coordinator/connection/utils.ts.html +529 -0
  29. package/coverage/lcov-report/src/coordinator/index.html +116 -0
  30. package/coverage/lcov-report/src/events/call.ts.html +583 -0
  31. package/coverage/lcov-report/src/events/index.html +161 -0
  32. package/coverage/lcov-report/src/events/internal.ts.html +226 -0
  33. package/coverage/lcov-report/src/events/participant.ts.html +376 -0
  34. package/coverage/lcov-report/src/events/speaker.ts.html +271 -0
  35. package/coverage/lcov-report/src/gen/google/protobuf/index.html +131 -0
  36. package/coverage/lcov-report/src/gen/google/protobuf/struct.ts.html +1528 -0
  37. package/coverage/lcov-report/src/gen/google/protobuf/timestamp.ts.html +958 -0
  38. package/coverage/lcov-report/src/gen/video/sfu/event/events.ts.html +5971 -0
  39. package/coverage/lcov-report/src/gen/video/sfu/event/index.html +116 -0
  40. package/coverage/lcov-report/src/gen/video/sfu/models/index.html +116 -0
  41. package/coverage/lcov-report/src/gen/video/sfu/models/models.ts.html +3271 -0
  42. package/coverage/lcov-report/src/index.html +161 -0
  43. package/coverage/lcov-report/src/rpc/index.html +131 -0
  44. package/coverage/lcov-report/src/rpc/index.ts.html +91 -0
  45. package/coverage/lcov-report/src/rpc/latency.ts.html +214 -0
  46. package/coverage/lcov-report/src/rtc/Call.ts.html +1840 -0
  47. package/coverage/lcov-report/src/rtc/CallMetadata.ts.html +157 -0
  48. package/coverage/lcov-report/src/rtc/Dispatcher.ts.html +223 -0
  49. package/coverage/lcov-report/src/rtc/IceTrickleBuffer.ts.html +148 -0
  50. package/coverage/lcov-report/src/rtc/callEventHandlers.ts.html +196 -0
  51. package/coverage/lcov-report/src/rtc/codecs.ts.html +268 -0
  52. package/coverage/lcov-report/src/rtc/helpers/iceCandidate.ts.html +133 -0
  53. package/coverage/lcov-report/src/rtc/helpers/index.html +131 -0
  54. package/coverage/lcov-report/src/rtc/helpers/tracks.ts.html +139 -0
  55. package/coverage/lcov-report/src/rtc/index.html +251 -0
  56. package/coverage/lcov-report/src/rtc/publisher.ts.html +1000 -0
  57. package/coverage/lcov-report/src/rtc/signal.ts.html +187 -0
  58. package/coverage/lcov-report/src/rtc/subscriber.ts.html +340 -0
  59. package/coverage/lcov-report/src/rtc/videoLayers.ts.html +394 -0
  60. package/coverage/lcov-report/src/stats/index.html +116 -0
  61. package/coverage/lcov-report/src/stats/state-store-stats-reporter.ts.html +1177 -0
  62. package/coverage/lcov-report/src/store/index.html +146 -0
  63. package/coverage/lcov-report/src/store/index.ts.html +91 -0
  64. package/coverage/lcov-report/src/store/rxUtils.ts.html +211 -0
  65. package/coverage/lcov-report/src/store/stateStore.ts.html +1108 -0
  66. package/coverage/lcov.info +11463 -0
  67. package/coverage/tmp/coverage-2131-1675959950516-2.json +1 -0
  68. package/dist/index.d.ts +18 -0
  69. package/dist/index.js +8636 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/src/Batcher.d.ts +12 -0
  72. package/dist/src/CallDropScheduler.d.ts +44 -0
  73. package/dist/src/StreamSfuClient.d.ts +25 -0
  74. package/dist/src/StreamVideoClient.d.ts +145 -0
  75. package/dist/src/__tests__/StreamVideoClient.test.d.ts +1 -0
  76. package/dist/src/config/defaultConfigs.d.ts +2 -0
  77. package/dist/src/config/types.d.ts +29 -0
  78. package/dist/src/coordinator/StreamCoordinatorClient.d.ts +19 -0
  79. package/dist/src/coordinator/connection/base64.d.ts +2 -0
  80. package/dist/src/coordinator/connection/client.d.ts +174 -0
  81. package/dist/src/coordinator/connection/connection.d.ts +139 -0
  82. package/dist/src/coordinator/connection/connection_fallback.d.ts +38 -0
  83. package/dist/src/coordinator/connection/errors.d.ts +16 -0
  84. package/dist/src/coordinator/connection/events.d.ts +10 -0
  85. package/dist/src/coordinator/connection/insights.d.ts +58 -0
  86. package/dist/src/coordinator/connection/signing.d.ts +30 -0
  87. package/dist/src/coordinator/connection/token_manager.d.ts +39 -0
  88. package/dist/src/coordinator/connection/types.d.ts +87 -0
  89. package/dist/src/coordinator/connection/utils.d.ts +25 -0
  90. package/dist/src/devices.d.ts +79 -0
  91. package/dist/src/events/call.d.ts +26 -0
  92. package/dist/src/events/internal.d.ts +8 -0
  93. package/dist/src/events/participant.d.ts +21 -0
  94. package/dist/src/events/speaker.d.ts +10 -0
  95. package/dist/src/gen/coordinator/index.d.ts +1973 -0
  96. package/dist/src/gen/google/protobuf/descriptor.d.ts +1650 -0
  97. package/dist/src/gen/google/protobuf/duration.d.ts +113 -0
  98. package/dist/src/gen/google/protobuf/struct.d.ts +184 -0
  99. package/dist/src/gen/google/protobuf/timestamp.d.ts +158 -0
  100. package/dist/src/gen/video/coordinator/broadcast_v1/broadcast.d.ts +66 -0
  101. package/dist/src/gen/video/coordinator/call_v1/call.d.ts +254 -0
  102. package/dist/src/gen/video/coordinator/client_v1_rpc/client_rpc.client.d.ts +351 -0
  103. package/dist/src/gen/video/coordinator/client_v1_rpc/client_rpc.d.ts +1488 -0
  104. package/dist/src/gen/video/coordinator/client_v1_rpc/envelopes.d.ts +143 -0
  105. package/dist/src/gen/video/coordinator/client_v1_rpc/websocket.d.ts +292 -0
  106. package/dist/src/gen/video/coordinator/edge_v1/edge.d.ts +183 -0
  107. package/dist/src/gen/video/coordinator/event_v1/event.d.ts +411 -0
  108. package/dist/src/gen/video/coordinator/geofence_v1/geofence.d.ts +63 -0
  109. package/dist/src/gen/video/coordinator/member_v1/member.d.ts +59 -0
  110. package/dist/src/gen/video/coordinator/participant_v1/participant.d.ts +103 -0
  111. package/dist/src/gen/video/coordinator/push_v1/push.d.ts +240 -0
  112. package/dist/src/gen/video/coordinator/stat_v1/stat.d.ts +308 -0
  113. package/dist/src/gen/video/coordinator/user_v1/user.d.ts +112 -0
  114. package/dist/src/gen/video/coordinator/utils_v1/utils.d.ts +47 -0
  115. package/dist/src/gen/video/sfu/event/events.d.ts +736 -0
  116. package/dist/src/gen/video/sfu/models/models.d.ts +460 -0
  117. package/dist/src/gen/video/sfu/signal_rpc/signal.client.d.ts +89 -0
  118. package/dist/src/gen/video/sfu/signal_rpc/signal.d.ts +320 -0
  119. package/dist/src/helpers/browsers.d.ts +8 -0
  120. package/dist/src/helpers/sound-detector.d.ts +34 -0
  121. package/dist/src/rpc/createClient.d.ts +10 -0
  122. package/dist/src/rpc/index.d.ts +2 -0
  123. package/dist/src/rpc/latency.d.ts +9 -0
  124. package/dist/src/rtc/Call.d.ts +180 -0
  125. package/dist/src/rtc/CallMetadata.d.ts +9 -0
  126. package/dist/src/rtc/Dispatcher.d.ts +9 -0
  127. package/dist/src/rtc/IceTrickleBuffer.d.ts +11 -0
  128. package/dist/src/rtc/callEventHandlers.d.ts +5 -0
  129. package/dist/src/rtc/codecs.d.ts +2 -0
  130. package/dist/src/rtc/helpers/iceCandidate.d.ts +2 -0
  131. package/dist/src/rtc/helpers/tracks.d.ts +3 -0
  132. package/dist/src/rtc/publisher.d.ts +53 -0
  133. package/dist/src/rtc/signal.d.ts +5 -0
  134. package/dist/src/rtc/subscriber.d.ts +7 -0
  135. package/dist/src/rtc/types.d.ts +84 -0
  136. package/dist/src/rtc/videoLayers.d.ts +17 -0
  137. package/dist/src/stats/coordinator-stats-reporter.d.ts +10 -0
  138. package/dist/src/stats/state-store-stats-reporter.d.ts +57 -0
  139. package/dist/src/stats/types.d.ts +42 -0
  140. package/dist/src/store/index.d.ts +2 -0
  141. package/dist/src/store/rxUtils.d.ts +18 -0
  142. package/dist/src/store/stateStore.d.ts +182 -0
  143. package/generate-openapi.sh +32 -0
  144. package/index.ts +31 -0
  145. package/openapitools.json +7 -0
  146. package/package.json +54 -0
  147. package/rollup.config.mjs +48 -0
  148. package/src/Batcher.ts +43 -0
  149. package/src/CallDropScheduler.ts +192 -0
  150. package/src/StreamSfuClient.ts +185 -0
  151. package/src/StreamVideoClient.ts +503 -0
  152. package/src/__tests__/StreamVideoClient.test.ts +83 -0
  153. package/src/config/defaultConfigs.ts +15 -0
  154. package/src/config/types.ts +30 -0
  155. package/src/coordinator/StreamCoordinatorClient.ts +115 -0
  156. package/src/coordinator/connection/base64.ts +80 -0
  157. package/src/coordinator/connection/client.ts +814 -0
  158. package/src/coordinator/connection/connection.ts +750 -0
  159. package/src/coordinator/connection/connection_fallback.ts +239 -0
  160. package/src/coordinator/connection/errors.ts +70 -0
  161. package/src/coordinator/connection/events.ts +13 -0
  162. package/src/coordinator/connection/insights.ts +88 -0
  163. package/src/coordinator/connection/signing.ts +104 -0
  164. package/src/coordinator/connection/token_manager.ts +160 -0
  165. package/src/coordinator/connection/types.ts +111 -0
  166. package/src/coordinator/connection/utils.ts +148 -0
  167. package/src/devices.ts +266 -0
  168. package/src/events/call.ts +166 -0
  169. package/src/events/internal.ts +47 -0
  170. package/src/events/participant.ts +97 -0
  171. package/src/events/speaker.ts +62 -0
  172. package/src/gen/coordinator/index.ts +1956 -0
  173. package/src/gen/google/protobuf/descriptor.ts +3466 -0
  174. package/src/gen/google/protobuf/duration.ts +232 -0
  175. package/src/gen/google/protobuf/struct.ts +481 -0
  176. package/src/gen/google/protobuf/timestamp.ts +291 -0
  177. package/src/gen/video/coordinator/broadcast_v1/broadcast.ts +154 -0
  178. package/src/gen/video/coordinator/call_v1/call.ts +651 -0
  179. package/src/gen/video/coordinator/client_v1_rpc/client_rpc.client.ts +463 -0
  180. package/src/gen/video/coordinator/client_v1_rpc/client_rpc.ts +3819 -0
  181. package/src/gen/video/coordinator/client_v1_rpc/envelopes.ts +424 -0
  182. package/src/gen/video/coordinator/client_v1_rpc/websocket.ts +719 -0
  183. package/src/gen/video/coordinator/edge_v1/edge.ts +532 -0
  184. package/src/gen/video/coordinator/event_v1/event.ts +1171 -0
  185. package/src/gen/video/coordinator/geofence_v1/geofence.ts +128 -0
  186. package/src/gen/video/coordinator/member_v1/member.ts +138 -0
  187. package/src/gen/video/coordinator/participant_v1/participant.ts +261 -0
  188. package/src/gen/video/coordinator/push_v1/push.ts +651 -0
  189. package/src/gen/video/coordinator/stat_v1/stat.ts +656 -0
  190. package/src/gen/video/coordinator/user_v1/user.ts +277 -0
  191. package/src/gen/video/coordinator/utils_v1/utils.ts +98 -0
  192. package/src/gen/video/sfu/event/events.ts +1962 -0
  193. package/src/gen/video/sfu/models/models.ts +1062 -0
  194. package/src/gen/video/sfu/signal_rpc/signal.client.ts +108 -0
  195. package/src/gen/video/sfu/signal_rpc/signal.ts +906 -0
  196. package/src/helpers/browsers.ts +13 -0
  197. package/src/helpers/sound-detector.ts +85 -0
  198. package/src/rpc/createClient.ts +50 -0
  199. package/src/rpc/index.ts +2 -0
  200. package/src/rpc/latency.ts +43 -0
  201. package/src/rtc/Call.ts +585 -0
  202. package/src/rtc/CallMetadata.ts +24 -0
  203. package/src/rtc/Dispatcher.ts +46 -0
  204. package/src/rtc/IceTrickleBuffer.ts +21 -0
  205. package/src/rtc/callEventHandlers.ts +37 -0
  206. package/src/rtc/codecs.ts +61 -0
  207. package/src/rtc/helpers/iceCandidate.ts +16 -0
  208. package/src/rtc/helpers/tracks.ts +18 -0
  209. package/src/rtc/publisher.ts +305 -0
  210. package/src/rtc/signal.ts +34 -0
  211. package/src/rtc/subscriber.ts +85 -0
  212. package/src/rtc/types.ts +105 -0
  213. package/src/rtc/videoLayers.ts +103 -0
  214. package/src/stats/coordinator-stats-reporter.ts +167 -0
  215. package/src/stats/state-store-stats-reporter.ts +364 -0
  216. package/src/stats/types.ts +46 -0
  217. package/src/store/index.ts +2 -0
  218. package/src/store/rxUtils.ts +42 -0
  219. package/src/store/stateStore.ts +341 -0
  220. package/tsconfig.json +25 -0
  221. package/typedoc.json +11 -0
  222. package/vite.config.ts +11 -0
@@ -0,0 +1,661 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for src/CallDropScheduler.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../prettify.css" />
9
+ <link rel="stylesheet" href="../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../index.html">All files</a> / <a href="index.html">src</a> CallDropScheduler.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">5.2% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>10/192</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">50% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>1/2</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">25% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>1/4</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">5.2% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>10/192</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input oninput="onInput()" type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line low'></div>
65
+ <pre><table class="coverage">
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></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
259
+ <span class="cline-any cline-yes">1x</span>
260
+ <span class="cline-any cline-yes">1x</span>
261
+ <span class="cline-any cline-yes">1x</span>
262
+ <span class="cline-any cline-yes">1x</span>
263
+ <span class="cline-any cline-yes">1x</span>
264
+ <span class="cline-any cline-yes">1x</span>
265
+ <span class="cline-any cline-yes">1x</span>
266
+ <span class="cline-any cline-yes">1x</span>
267
+ <span class="cline-any cline-no">&nbsp;</span>
268
+ <span class="cline-any cline-no">&nbsp;</span>
269
+ <span class="cline-any cline-no">&nbsp;</span>
270
+ <span class="cline-any cline-no">&nbsp;</span>
271
+ <span class="cline-any cline-no">&nbsp;</span>
272
+ <span class="cline-any cline-no">&nbsp;</span>
273
+ <span class="cline-any cline-no">&nbsp;</span>
274
+ <span class="cline-any cline-no">&nbsp;</span>
275
+ <span class="cline-any cline-no">&nbsp;</span>
276
+ <span class="cline-any cline-no">&nbsp;</span>
277
+ <span class="cline-any cline-no">&nbsp;</span>
278
+ <span class="cline-any cline-no">&nbsp;</span>
279
+ <span class="cline-any cline-no">&nbsp;</span>
280
+ <span class="cline-any cline-no">&nbsp;</span>
281
+ <span class="cline-any cline-no">&nbsp;</span>
282
+ <span class="cline-any cline-no">&nbsp;</span>
283
+ <span class="cline-any cline-no">&nbsp;</span>
284
+ <span class="cline-any cline-no">&nbsp;</span>
285
+ <span class="cline-any cline-no">&nbsp;</span>
286
+ <span class="cline-any cline-no">&nbsp;</span>
287
+ <span class="cline-any cline-no">&nbsp;</span>
288
+ <span class="cline-any cline-no">&nbsp;</span>
289
+ <span class="cline-any cline-no">&nbsp;</span>
290
+ <span class="cline-any cline-no">&nbsp;</span>
291
+ <span class="cline-any cline-no">&nbsp;</span>
292
+ <span class="cline-any cline-no">&nbsp;</span>
293
+ <span class="cline-any cline-no">&nbsp;</span>
294
+ <span class="cline-any cline-no">&nbsp;</span>
295
+ <span class="cline-any cline-no">&nbsp;</span>
296
+ <span class="cline-any cline-no">&nbsp;</span>
297
+ <span class="cline-any cline-no">&nbsp;</span>
298
+ <span class="cline-any cline-no">&nbsp;</span>
299
+ <span class="cline-any cline-no">&nbsp;</span>
300
+ <span class="cline-any cline-no">&nbsp;</span>
301
+ <span class="cline-any cline-no">&nbsp;</span>
302
+ <span class="cline-any cline-no">&nbsp;</span>
303
+ <span class="cline-any cline-no">&nbsp;</span>
304
+ <span class="cline-any cline-yes">1x</span>
305
+ <span class="cline-any cline-no">&nbsp;</span>
306
+ <span class="cline-any cline-no">&nbsp;</span>
307
+ <span class="cline-any cline-no">&nbsp;</span>
308
+ <span class="cline-any cline-no">&nbsp;</span>
309
+ <span class="cline-any cline-no">&nbsp;</span>
310
+ <span class="cline-any cline-no">&nbsp;</span>
311
+ <span class="cline-any cline-no">&nbsp;</span>
312
+ <span class="cline-any cline-no">&nbsp;</span>
313
+ <span class="cline-any cline-no">&nbsp;</span>
314
+ <span class="cline-any cline-no">&nbsp;</span>
315
+ <span class="cline-any cline-no">&nbsp;</span>
316
+ <span class="cline-any cline-no">&nbsp;</span>
317
+ <span class="cline-any cline-no">&nbsp;</span>
318
+ <span class="cline-any cline-no">&nbsp;</span>
319
+ <span class="cline-any cline-no">&nbsp;</span>
320
+ <span class="cline-any cline-no">&nbsp;</span>
321
+ <span class="cline-any cline-no">&nbsp;</span>
322
+ <span class="cline-any cline-no">&nbsp;</span>
323
+ <span class="cline-any cline-no">&nbsp;</span>
324
+ <span class="cline-any cline-no">&nbsp;</span>
325
+ <span class="cline-any cline-no">&nbsp;</span>
326
+ <span class="cline-any cline-no">&nbsp;</span>
327
+ <span class="cline-any cline-no">&nbsp;</span>
328
+ <span class="cline-any cline-no">&nbsp;</span>
329
+ <span class="cline-any cline-no">&nbsp;</span>
330
+ <span class="cline-any cline-no">&nbsp;</span>
331
+ <span class="cline-any cline-no">&nbsp;</span>
332
+ <span class="cline-any cline-no">&nbsp;</span>
333
+ <span class="cline-any cline-no">&nbsp;</span>
334
+ <span class="cline-any cline-no">&nbsp;</span>
335
+ <span class="cline-any cline-no">&nbsp;</span>
336
+ <span class="cline-any cline-no">&nbsp;</span>
337
+ <span class="cline-any cline-no">&nbsp;</span>
338
+ <span class="cline-any cline-no">&nbsp;</span>
339
+ <span class="cline-any cline-no">&nbsp;</span>
340
+ <span class="cline-any cline-no">&nbsp;</span>
341
+ <span class="cline-any cline-no">&nbsp;</span>
342
+ <span class="cline-any cline-no">&nbsp;</span>
343
+ <span class="cline-any cline-no">&nbsp;</span>
344
+ <span class="cline-any cline-no">&nbsp;</span>
345
+ <span class="cline-any cline-no">&nbsp;</span>
346
+ <span class="cline-any cline-no">&nbsp;</span>
347
+ <span class="cline-any cline-no">&nbsp;</span>
348
+ <span class="cline-any cline-no">&nbsp;</span>
349
+ <span class="cline-any cline-no">&nbsp;</span>
350
+ <span class="cline-any cline-no">&nbsp;</span>
351
+ <span class="cline-any cline-no">&nbsp;</span>
352
+ <span class="cline-any cline-no">&nbsp;</span>
353
+ <span class="cline-any cline-no">&nbsp;</span>
354
+ <span class="cline-any cline-no">&nbsp;</span>
355
+ <span class="cline-any cline-no">&nbsp;</span>
356
+ <span class="cline-any cline-no">&nbsp;</span>
357
+ <span class="cline-any cline-no">&nbsp;</span>
358
+ <span class="cline-any cline-no">&nbsp;</span>
359
+ <span class="cline-any cline-no">&nbsp;</span>
360
+ <span class="cline-any cline-no">&nbsp;</span>
361
+ <span class="cline-any cline-no">&nbsp;</span>
362
+ <span class="cline-any cline-no">&nbsp;</span>
363
+ <span class="cline-any cline-no">&nbsp;</span>
364
+ <span class="cline-any cline-no">&nbsp;</span>
365
+ <span class="cline-any cline-no">&nbsp;</span>
366
+ <span class="cline-any cline-no">&nbsp;</span>
367
+ <span class="cline-any cline-no">&nbsp;</span>
368
+ <span class="cline-any cline-no">&nbsp;</span>
369
+ <span class="cline-any cline-no">&nbsp;</span>
370
+ <span class="cline-any cline-no">&nbsp;</span>
371
+ <span class="cline-any cline-no">&nbsp;</span>
372
+ <span class="cline-any cline-no">&nbsp;</span>
373
+ <span class="cline-any cline-no">&nbsp;</span>
374
+ <span class="cline-any cline-no">&nbsp;</span>
375
+ <span class="cline-any cline-no">&nbsp;</span>
376
+ <span class="cline-any cline-no">&nbsp;</span>
377
+ <span class="cline-any cline-no">&nbsp;</span>
378
+ <span class="cline-any cline-no">&nbsp;</span>
379
+ <span class="cline-any cline-no">&nbsp;</span>
380
+ <span class="cline-any cline-no">&nbsp;</span>
381
+ <span class="cline-any cline-no">&nbsp;</span>
382
+ <span class="cline-any cline-no">&nbsp;</span>
383
+ <span class="cline-any cline-no">&nbsp;</span>
384
+ <span class="cline-any cline-no">&nbsp;</span>
385
+ <span class="cline-any cline-no">&nbsp;</span>
386
+ <span class="cline-any cline-no">&nbsp;</span>
387
+ <span class="cline-any cline-no">&nbsp;</span>
388
+ <span class="cline-any cline-no">&nbsp;</span>
389
+ <span class="cline-any cline-no">&nbsp;</span>
390
+ <span class="cline-any cline-no">&nbsp;</span>
391
+ <span class="cline-any cline-no">&nbsp;</span>
392
+ <span class="cline-any cline-no">&nbsp;</span>
393
+ <span class="cline-any cline-no">&nbsp;</span>
394
+ <span class="cline-any cline-no">&nbsp;</span>
395
+ <span class="cline-any cline-no">&nbsp;</span>
396
+ <span class="cline-any cline-no">&nbsp;</span>
397
+ <span class="cline-any cline-no">&nbsp;</span>
398
+ <span class="cline-any cline-no">&nbsp;</span>
399
+ <span class="cline-any cline-no">&nbsp;</span>
400
+ <span class="cline-any cline-no">&nbsp;</span>
401
+ <span class="cline-any cline-no">&nbsp;</span>
402
+ <span class="cline-any cline-no">&nbsp;</span>
403
+ <span class="cline-any cline-no">&nbsp;</span>
404
+ <span class="cline-any cline-no">&nbsp;</span>
405
+ <span class="cline-any cline-no">&nbsp;</span>
406
+ <span class="cline-any cline-no">&nbsp;</span>
407
+ <span class="cline-any cline-no">&nbsp;</span>
408
+ <span class="cline-any cline-no">&nbsp;</span>
409
+ <span class="cline-any cline-no">&nbsp;</span>
410
+ <span class="cline-any cline-no">&nbsp;</span>
411
+ <span class="cline-any cline-no">&nbsp;</span>
412
+ <span class="cline-any cline-no">&nbsp;</span>
413
+ <span class="cline-any cline-no">&nbsp;</span>
414
+ <span class="cline-any cline-no">&nbsp;</span>
415
+ <span class="cline-any cline-no">&nbsp;</span>
416
+ <span class="cline-any cline-no">&nbsp;</span>
417
+ <span class="cline-any cline-no">&nbsp;</span>
418
+ <span class="cline-any cline-no">&nbsp;</span>
419
+ <span class="cline-any cline-no">&nbsp;</span>
420
+ <span class="cline-any cline-no">&nbsp;</span>
421
+ <span class="cline-any cline-no">&nbsp;</span>
422
+ <span class="cline-any cline-no">&nbsp;</span>
423
+ <span class="cline-any cline-no">&nbsp;</span>
424
+ <span class="cline-any cline-no">&nbsp;</span>
425
+ <span class="cline-any cline-no">&nbsp;</span>
426
+ <span class="cline-any cline-no">&nbsp;</span>
427
+ <span class="cline-any cline-no">&nbsp;</span>
428
+ <span class="cline-any cline-no">&nbsp;</span>
429
+ <span class="cline-any cline-no">&nbsp;</span>
430
+ <span class="cline-any cline-no">&nbsp;</span>
431
+ <span class="cline-any cline-no">&nbsp;</span>
432
+ <span class="cline-any cline-no">&nbsp;</span>
433
+ <span class="cline-any cline-no">&nbsp;</span>
434
+ <span class="cline-any cline-no">&nbsp;</span>
435
+ <span class="cline-any cline-no">&nbsp;</span>
436
+ <span class="cline-any cline-no">&nbsp;</span>
437
+ <span class="cline-any cline-no">&nbsp;</span>
438
+ <span class="cline-any cline-no">&nbsp;</span>
439
+ <span class="cline-any cline-no">&nbsp;</span>
440
+ <span class="cline-any cline-no">&nbsp;</span>
441
+ <span class="cline-any cline-no">&nbsp;</span>
442
+ <span class="cline-any cline-no">&nbsp;</span>
443
+ <span class="cline-any cline-no">&nbsp;</span>
444
+ <span class="cline-any cline-no">&nbsp;</span>
445
+ <span class="cline-any cline-no">&nbsp;</span>
446
+ <span class="cline-any cline-no">&nbsp;</span>
447
+ <span class="cline-any cline-no">&nbsp;</span>
448
+ <span class="cline-any cline-no">&nbsp;</span>
449
+ <span class="cline-any cline-no">&nbsp;</span>
450
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { StreamVideoWriteableStateStore } from './store';
451
+ import { CallConfig } from './config/types';
452
+ import { Observable, pairwise, startWith, Subscription } from 'rxjs';
453
+ import { CallMetadata } from './rtc/CallMetadata';
454
+ &nbsp;
455
+ type CallCID = string;
456
+ type DropFunction = (callCid: CallCID) =&gt; Promise&lt;void&gt;;
457
+ &nbsp;
458
+ export <span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" >class CallDropScheduler {</span></span>
459
+ <span class="cstat-no" title="statement not covered" > private autoCallDropSchedule: Record&lt;CallCID, ReturnType&lt;typeof setTimeout&gt;&gt;;</span>
460
+ <span class="cstat-no" title="statement not covered" > private storeSubscriptions: { [key in keyof CallConfig]?: Subscription } &amp; {</span>
461
+ <span class="cstat-no" title="statement not covered" > cancelDropOnPendingCallRemoval?: Subscription;</span>
462
+ <span class="cstat-no" title="statement not covered" > cancelDropOnCallAccepted?: Subscription;</span>
463
+ <span class="cstat-no" title="statement not covered" > };</span>
464
+ <span class="cstat-no" title="statement not covered" > private pairwisePendingCalls$: Observable&lt;CallMetadata[][]&gt;;</span>
465
+ <span class="cstat-no" title="statement not covered" > private pairwiseIncomingCalls$: Observable&lt;CallMetadata[][]&gt;;</span>
466
+ <span class="cstat-no" title="statement not covered" > private pairwiseOutgoingCalls$: Observable&lt;CallMetadata[][]&gt;;</span>
467
+ <span class="cstat-no" title="statement not covered" > constructor(</span>
468
+ <span class="cstat-no" title="statement not covered" > private store: StreamVideoWriteableStateStore,</span>
469
+ <span class="cstat-no" title="statement not covered" > private callConfig: CallConfig,</span>
470
+ <span class="cstat-no" title="statement not covered" > private reject: DropFunction,</span>
471
+ <span class="cstat-no" title="statement not covered" > private cancel: DropFunction,</span>
472
+ <span class="cstat-no" title="statement not covered" > ) {</span>
473
+ <span class="cstat-no" title="statement not covered" > this.pairwisePendingCalls$ = store.pendingCallsSubject.pipe(</span>
474
+ <span class="cstat-no" title="statement not covered" > startWith([]),</span>
475
+ <span class="cstat-no" title="statement not covered" > pairwise(),</span>
476
+ <span class="cstat-no" title="statement not covered" > );</span>
477
+ <span class="cstat-no" title="statement not covered" > this.pairwiseIncomingCalls$ = store.incomingCalls$.pipe(</span>
478
+ <span class="cstat-no" title="statement not covered" > startWith([]),</span>
479
+ <span class="cstat-no" title="statement not covered" > pairwise(),</span>
480
+ <span class="cstat-no" title="statement not covered" > );</span>
481
+ <span class="cstat-no" title="statement not covered" > this.pairwiseOutgoingCalls$ = store.outgoingCalls$.pipe(</span>
482
+ <span class="cstat-no" title="statement not covered" > startWith([]),</span>
483
+ <span class="cstat-no" title="statement not covered" > pairwise(),</span>
484
+ <span class="cstat-no" title="statement not covered" > );</span>
485
+ <span class="cstat-no" title="statement not covered" ></span>
486
+ <span class="cstat-no" title="statement not covered" > this.autoCallDropSchedule = {};</span>
487
+ <span class="cstat-no" title="statement not covered" > this.storeSubscriptions = {};</span>
488
+ <span class="cstat-no" title="statement not covered" ></span>
489
+ <span class="cstat-no" title="statement not covered" > this.startAutoRejectWhenInCall();</span>
490
+ <span class="cstat-no" title="statement not covered" > this.scheduleRejectAfterTimeout();</span>
491
+ <span class="cstat-no" title="statement not covered" > this.scheduleCancelAfterTimeout();</span>
492
+ <span class="cstat-no" title="statement not covered" > this.startCancellingDrops();</span>
493
+ <span class="cstat-no" title="statement not covered" > }</span>
494
+ <span class="cstat-no" title="statement not covered" ></span>
495
+ <span class="cstat-no" title="statement not covered" > private static getLatestCall = (</span>
496
+ <span class="fstat-no" title="function not covered" > from: CallMetadata[],</span>
497
+ <span class="cstat-no" title="statement not covered" > compareTo: CallMetadata[],</span>
498
+ <span class="cstat-no" title="statement not covered" > ) =&gt; {</span>
499
+ <span class="cstat-no" title="statement not covered" > return from &gt; compareTo ? from.slice(-1)[0] : undefined;</span>
500
+ <span class="cstat-no" title="statement not covered" > };</span>
501
+ <span class="cstat-no" title="statement not covered" > private startAutoRejectWhenInCall = () =&gt; {</span>
502
+ <span class="cstat-no" title="statement not covered" > if (!this.callConfig.autoRejectWhenInCall) return;</span>
503
+ <span class="cstat-no" title="statement not covered" ></span>
504
+ <span class="cstat-no" title="statement not covered" > this.storeSubscriptions.autoRejectWhenInCall =</span>
505
+ <span class="cstat-no" title="statement not covered" > this.pairwiseIncomingCalls$.subscribe(</span>
506
+ <span class="cstat-no" title="statement not covered" > async ([prevCalls, currentCalls]) =&gt; {</span>
507
+ <span class="cstat-no" title="statement not covered" > const newIncomingCall = CallDropScheduler.getLatestCall(</span>
508
+ <span class="cstat-no" title="statement not covered" > currentCalls,</span>
509
+ <span class="cstat-no" title="statement not covered" > prevCalls,</span>
510
+ <span class="cstat-no" title="statement not covered" > );</span>
511
+ <span class="cstat-no" title="statement not covered" ></span>
512
+ <span class="cstat-no" title="statement not covered" > if (!newIncomingCall) return;</span>
513
+ <span class="cstat-no" title="statement not covered" ></span>
514
+ <span class="cstat-no" title="statement not covered" > const activeCall = this.store.getCurrentValue(</span>
515
+ <span class="cstat-no" title="statement not covered" > this.store.activeCallSubject,</span>
516
+ <span class="cstat-no" title="statement not covered" > );</span>
517
+ <span class="cstat-no" title="statement not covered" ></span>
518
+ <span class="cstat-no" title="statement not covered" > if (activeCall &amp;&amp; newIncomingCall?.call.cid) {</span>
519
+ <span class="cstat-no" title="statement not covered" > await this.reject(newIncomingCall.call.cid);</span>
520
+ <span class="cstat-no" title="statement not covered" > }</span>
521
+ <span class="cstat-no" title="statement not covered" > },</span>
522
+ <span class="cstat-no" title="statement not covered" > );</span>
523
+ <span class="cstat-no" title="statement not covered" > };</span>
524
+ <span class="cstat-no" title="statement not covered" ></span>
525
+ <span class="cstat-no" title="statement not covered" > private scheduleRejectAfterTimeout = () =&gt; {</span>
526
+ <span class="cstat-no" title="statement not covered" > const { autoRejectTimeoutInMs } = this.callConfig;</span>
527
+ <span class="cstat-no" title="statement not covered" > if (typeof autoRejectTimeoutInMs !== 'number' || autoRejectTimeoutInMs &lt; 0)</span>
528
+ <span class="cstat-no" title="statement not covered" > return;</span>
529
+ <span class="cstat-no" title="statement not covered" ></span>
530
+ <span class="cstat-no" title="statement not covered" > this.storeSubscriptions.autoRejectTimeoutInMs =</span>
531
+ <span class="cstat-no" title="statement not covered" > this.pairwiseIncomingCalls$.subscribe(([prevCalls, currentCalls]) =&gt; {</span>
532
+ <span class="cstat-no" title="statement not covered" > const newIncomingCall = CallDropScheduler.getLatestCall(</span>
533
+ <span class="cstat-no" title="statement not covered" > currentCalls,</span>
534
+ <span class="cstat-no" title="statement not covered" > prevCalls,</span>
535
+ <span class="cstat-no" title="statement not covered" > );</span>
536
+ <span class="cstat-no" title="statement not covered" > if (!newIncomingCall?.call.cid) return;</span>
537
+ <span class="cstat-no" title="statement not covered" ></span>
538
+ <span class="cstat-no" title="statement not covered" > const activeCall = this.store.getCurrentValue(</span>
539
+ <span class="cstat-no" title="statement not covered" > this.store.activeCallSubject,</span>
540
+ <span class="cstat-no" title="statement not covered" > );</span>
541
+ <span class="cstat-no" title="statement not covered" > const incomingCallRejectedImmediately =</span>
542
+ <span class="cstat-no" title="statement not covered" > activeCall &amp;&amp; this.callConfig.autoRejectWhenInCall;</span>
543
+ <span class="cstat-no" title="statement not covered" > if (incomingCallRejectedImmediately) return;</span>
544
+ <span class="cstat-no" title="statement not covered" ></span>
545
+ <span class="cstat-no" title="statement not covered" > this.scheduleReject(newIncomingCall.call.cid);</span>
546
+ <span class="cstat-no" title="statement not covered" > });</span>
547
+ <span class="cstat-no" title="statement not covered" > };</span>
548
+ <span class="cstat-no" title="statement not covered" ></span>
549
+ <span class="cstat-no" title="statement not covered" > private scheduleCancelAfterTimeout = () =&gt; {</span>
550
+ <span class="cstat-no" title="statement not covered" > const { autoCancelTimeoutInMs } = this.callConfig;</span>
551
+ <span class="cstat-no" title="statement not covered" > if (typeof autoCancelTimeoutInMs !== 'number' || autoCancelTimeoutInMs &lt; 0)</span>
552
+ <span class="cstat-no" title="statement not covered" > return;</span>
553
+ <span class="cstat-no" title="statement not covered" ></span>
554
+ <span class="cstat-no" title="statement not covered" > this.storeSubscriptions.autoCancelTimeoutInMs =</span>
555
+ <span class="cstat-no" title="statement not covered" > this.pairwiseOutgoingCalls$.subscribe(([prevCalls, currentCalls]) =&gt; {</span>
556
+ <span class="cstat-no" title="statement not covered" > const newOutgoingCall = CallDropScheduler.getLatestCall(</span>
557
+ <span class="cstat-no" title="statement not covered" > currentCalls,</span>
558
+ <span class="cstat-no" title="statement not covered" > prevCalls,</span>
559
+ <span class="cstat-no" title="statement not covered" > );</span>
560
+ <span class="cstat-no" title="statement not covered" ></span>
561
+ <span class="cstat-no" title="statement not covered" > if (!newOutgoingCall?.call.cid) return;</span>
562
+ <span class="cstat-no" title="statement not covered" > this.scheduleCancel(newOutgoingCall.call.cid);</span>
563
+ <span class="cstat-no" title="statement not covered" > });</span>
564
+ <span class="cstat-no" title="statement not covered" > };</span>
565
+ <span class="cstat-no" title="statement not covered" ></span>
566
+ <span class="cstat-no" title="statement not covered" > private startCancellingDrops = () =&gt; {</span>
567
+ <span class="cstat-no" title="statement not covered" > this.storeSubscriptions.cancelDropOnPendingCallRemoval =</span>
568
+ <span class="cstat-no" title="statement not covered" > this.pairwisePendingCalls$.subscribe(([prevCalls, currentCalls]) =&gt; {</span>
569
+ <span class="cstat-no" title="statement not covered" > const removedCall = CallDropScheduler.getLatestCall(</span>
570
+ <span class="cstat-no" title="statement not covered" > prevCalls,</span>
571
+ <span class="cstat-no" title="statement not covered" > currentCalls,</span>
572
+ <span class="cstat-no" title="statement not covered" > );</span>
573
+ <span class="cstat-no" title="statement not covered" ></span>
574
+ <span class="cstat-no" title="statement not covered" > if (removedCall?.call.cid) {</span>
575
+ <span class="cstat-no" title="statement not covered" > this.cancelDrop(removedCall?.call.cid);</span>
576
+ <span class="cstat-no" title="statement not covered" > }</span>
577
+ <span class="cstat-no" title="statement not covered" > });</span>
578
+ <span class="cstat-no" title="statement not covered" ></span>
579
+ <span class="cstat-no" title="statement not covered" > this.storeSubscriptions.cancelDropOnCallAccepted =</span>
580
+ <span class="cstat-no" title="statement not covered" > this.store.acceptedCallSubject.subscribe((acceptedCall) =&gt; {</span>
581
+ <span class="cstat-no" title="statement not covered" > if (acceptedCall?.call_cid) {</span>
582
+ <span class="cstat-no" title="statement not covered" > this.cancelDrop(acceptedCall.call_cid);</span>
583
+ <span class="cstat-no" title="statement not covered" > }</span>
584
+ <span class="cstat-no" title="statement not covered" > });</span>
585
+ <span class="cstat-no" title="statement not covered" > };</span>
586
+ <span class="cstat-no" title="statement not covered" ></span>
587
+ <span class="cstat-no" title="statement not covered" > /**</span>
588
+ <span class="cstat-no" title="statement not covered" > * Schedules automatic call cancellation.</span>
589
+ <span class="cstat-no" title="statement not covered" > * The cancellation is intended for the scenarios, when the call has been rejected</span>
590
+ <span class="cstat-no" title="statement not covered" > * or not accepted by all the call members.</span>
591
+ <span class="cstat-no" title="statement not covered" > * @param {string} callCid</span>
592
+ <span class="cstat-no" title="statement not covered" > */</span>
593
+ <span class="cstat-no" title="statement not covered" > private scheduleCancel = (callCid: string) =&gt; {</span>
594
+ <span class="cstat-no" title="statement not covered" > const timeout = this.callConfig.autoCancelTimeoutInMs;</span>
595
+ <span class="cstat-no" title="statement not covered" > if (!timeout) return;</span>
596
+ <span class="cstat-no" title="statement not covered" > this.autoCallDropSchedule[callCid] = setTimeout(() =&gt; {</span>
597
+ <span class="cstat-no" title="statement not covered" > console.log('Automatic call cancellation after timeout', timeout);</span>
598
+ <span class="cstat-no" title="statement not covered" > this.cancel(callCid);</span>
599
+ <span class="cstat-no" title="statement not covered" > }, timeout);</span>
600
+ <span class="cstat-no" title="statement not covered" > };</span>
601
+ <span class="cstat-no" title="statement not covered" ></span>
602
+ <span class="cstat-no" title="statement not covered" > /**</span>
603
+ <span class="cstat-no" title="statement not covered" > * Schedules automatic call rejection.</span>
604
+ <span class="cstat-no" title="statement not covered" > * @param {string} callCid</span>
605
+ <span class="cstat-no" title="statement not covered" > */</span>
606
+ <span class="cstat-no" title="statement not covered" > private scheduleReject = (callCid: string) =&gt; {</span>
607
+ <span class="cstat-no" title="statement not covered" > const timeout = this.callConfig.autoRejectTimeoutInMs;</span>
608
+ <span class="cstat-no" title="statement not covered" > if (!timeout) return;</span>
609
+ <span class="cstat-no" title="statement not covered" > this.autoCallDropSchedule[callCid] = setTimeout(() =&gt; {</span>
610
+ <span class="cstat-no" title="statement not covered" > console.log('Automatic call rejection after timeout', timeout);</span>
611
+ <span class="cstat-no" title="statement not covered" > this.reject(callCid);</span>
612
+ <span class="cstat-no" title="statement not covered" > }, timeout);</span>
613
+ <span class="cstat-no" title="statement not covered" > };</span>
614
+ <span class="cstat-no" title="statement not covered" ></span>
615
+ <span class="cstat-no" title="statement not covered" > /**</span>
616
+ <span class="cstat-no" title="statement not covered" > * Cancels the automatic call drop (rejection of an incoming call / cancellation of an outgoing call).</span>
617
+ <span class="cstat-no" title="statement not covered" > * Indented for the scenario, when:</span>
618
+ <span class="cstat-no" title="statement not covered" > * - an incoming call has been cancelled</span>
619
+ <span class="cstat-no" title="statement not covered" > * - an outgoing call has been accepted by at least one member</span>
620
+ <span class="cstat-no" title="statement not covered" > * - an outgoing call has been rejected / left by all the members resp. participants</span>
621
+ <span class="cstat-no" title="statement not covered" > * - a call has been cancelled / rejected / accepted manually before the cancellation timeout expires.</span>
622
+ <span class="cstat-no" title="statement not covered" > */</span>
623
+ <span class="cstat-no" title="statement not covered" > private cancelDrop = (callCid: string) =&gt; {</span>
624
+ <span class="cstat-no" title="statement not covered" > const { [callCid]: timeoutRef, ...rest } = this.autoCallDropSchedule;</span>
625
+ <span class="cstat-no" title="statement not covered" > if (timeoutRef !== undefined) {</span>
626
+ <span class="cstat-no" title="statement not covered" > console.log(`Cancelling automatic call drop, [callCID: ${callCid}]`);</span>
627
+ <span class="cstat-no" title="statement not covered" > clearTimeout(timeoutRef);</span>
628
+ <span class="cstat-no" title="statement not covered" > this.autoCallDropSchedule = rest;</span>
629
+ <span class="cstat-no" title="statement not covered" > }</span>
630
+ <span class="cstat-no" title="statement not covered" > };</span>
631
+ <span class="cstat-no" title="statement not covered" ></span>
632
+ <span class="cstat-no" title="statement not covered" > cleanUp = () =&gt; {</span>
633
+ <span class="cstat-no" title="statement not covered" > Object.values(this.autoCallDropSchedule).forEach((timeoutRef) =&gt;</span>
634
+ <span class="cstat-no" title="statement not covered" > clearTimeout(timeoutRef),</span>
635
+ <span class="cstat-no" title="statement not covered" > );</span>
636
+ <span class="cstat-no" title="statement not covered" > this.autoCallDropSchedule = {};</span>
637
+ <span class="cstat-no" title="statement not covered" > Object.values(this.storeSubscriptions).forEach((subscription) =&gt;</span>
638
+ <span class="cstat-no" title="statement not covered" > subscription.unsubscribe(),</span>
639
+ <span class="cstat-no" title="statement not covered" > );</span>
640
+ <span class="cstat-no" title="statement not covered" > };</span>
641
+ <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >}</span></span>
642
+ &nbsp;</pre></td></tr></table></pre>
643
+
644
+ <div class='push'></div><!-- for sticky footer -->
645
+ </div><!-- /wrapper -->
646
+ <div class='footer quiet pad2 space-top1 center small'>
647
+ Code coverage generated by
648
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
649
+ at 2023-02-09T16:25:50.250Z
650
+ </div>
651
+ <script src="../prettify.js"></script>
652
+ <script>
653
+ window.onload = function () {
654
+ prettyPrint();
655
+ };
656
+ </script>
657
+ <script src="../sorter.js"></script>
658
+ <script src="../block-navigation.js"></script>
659
+ </body>
660
+ </html>
661
+