@stream-io/video-client 0.0.1-alpha.29 → 0.0.1-alpha.31
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/lcov-report/index.html +47 -47
- package/coverage/lcov-report/src/CallDropScheduler.ts.html +1 -1
- package/coverage/lcov-report/src/StreamSfuClient.ts.html +1 -1
- package/coverage/lcov-report/src/StreamVideoClient.ts.html +104 -44
- package/coverage/lcov-report/src/config/defaultConfigs.ts.html +1 -1
- package/coverage/lcov-report/src/config/index.html +33 -3
- package/coverage/lcov-report/src/config/index.ts.html +91 -0
- package/coverage/lcov-report/src/config/types.ts.html +175 -0
- package/coverage/lcov-report/src/coordinator/StreamCoordinatorClient.ts.html +387 -51
- package/coverage/lcov-report/src/coordinator/connection/base64.ts.html +1 -1
- package/coverage/lcov-report/src/coordinator/connection/client.ts.html +9 -6
- package/coverage/lcov-report/src/coordinator/connection/connection.ts.html +6 -15
- package/coverage/lcov-report/src/coordinator/connection/connection_fallback.ts.html +1 -1
- package/coverage/lcov-report/src/coordinator/connection/errors.ts.html +1 -1
- package/coverage/lcov-report/src/coordinator/connection/index.html +26 -26
- package/coverage/lcov-report/src/coordinator/connection/insights.ts.html +1 -1
- package/coverage/lcov-report/src/coordinator/connection/signing.ts.html +1 -1
- package/coverage/lcov-report/src/coordinator/connection/token_manager.ts.html +58 -10
- package/coverage/lcov-report/src/coordinator/connection/types.ts.html +8 -23
- package/coverage/lcov-report/src/coordinator/connection/utils.ts.html +1 -1
- package/coverage/lcov-report/src/coordinator/index.html +21 -21
- package/coverage/lcov-report/src/events/call-permissions.ts.html +1 -1
- package/coverage/lcov-report/src/events/call.ts.html +1 -1
- package/coverage/lcov-report/src/events/index.html +36 -6
- package/coverage/lcov-report/src/events/index.ts.html +103 -0
- package/coverage/lcov-report/src/events/internal.ts.html +1 -1
- package/coverage/lcov-report/src/events/participant.ts.html +1 -1
- package/coverage/lcov-report/src/events/recording.ts.html +193 -0
- package/coverage/lcov-report/src/events/speaker.ts.html +1 -1
- package/coverage/lcov-report/src/gen/google/protobuf/index.html +1 -1
- package/coverage/lcov-report/src/gen/google/protobuf/struct.ts.html +1 -1
- package/coverage/lcov-report/src/gen/google/protobuf/timestamp.ts.html +1 -1
- package/coverage/lcov-report/src/gen/video/sfu/event/events.ts.html +1 -1
- package/coverage/lcov-report/src/gen/video/sfu/event/index.html +1 -1
- package/coverage/lcov-report/src/gen/video/sfu/models/index.html +1 -1
- package/coverage/lcov-report/src/gen/video/sfu/models/models.ts.html +1 -1
- package/coverage/lcov-report/src/index.html +15 -15
- package/coverage/lcov-report/src/rpc/index.html +1 -1
- package/coverage/lcov-report/src/rpc/index.ts.html +1 -1
- package/coverage/lcov-report/src/rpc/latency.ts.html +1 -1
- package/coverage/lcov-report/src/rtc/Call.ts.html +1 -1
- package/coverage/lcov-report/src/rtc/CallMetadata.ts.html +1 -1
- package/coverage/lcov-report/src/rtc/Dispatcher.ts.html +1 -1
- package/coverage/lcov-report/src/rtc/IceTrickleBuffer.ts.html +1 -1
- package/coverage/lcov-report/src/rtc/callEventHandlers.ts.html +1 -1
- package/coverage/lcov-report/src/rtc/codecs.ts.html +1 -1
- package/coverage/lcov-report/src/rtc/helpers/iceCandidate.ts.html +1 -1
- package/coverage/lcov-report/src/rtc/helpers/index.html +1 -1
- package/coverage/lcov-report/src/rtc/helpers/tracks.ts.html +1 -1
- package/coverage/lcov-report/src/rtc/index.html +10 -10
- package/coverage/lcov-report/src/rtc/publisher.ts.html +1 -1
- package/coverage/lcov-report/src/rtc/signal.ts.html +1 -1
- package/coverage/lcov-report/src/rtc/subscriber.ts.html +1 -1
- package/coverage/lcov-report/src/rtc/types.ts.html +7 -10
- package/coverage/lcov-report/src/rtc/videoLayers.ts.html +1 -1
- package/coverage/lcov-report/src/stats/index.html +1 -1
- package/coverage/lcov-report/src/stats/state-store-stats-reporter.ts.html +1 -1
- package/coverage/lcov-report/src/store/index.html +1 -1
- package/coverage/lcov-report/src/store/index.ts.html +1 -1
- package/coverage/lcov-report/src/store/rxUtils.ts.html +1 -1
- package/coverage/lcov-report/src/store/stateStore.ts.html +1 -1
- package/coverage/lcov.info +664 -399
- package/coverage/tmp/{coverage-2282-1677159994593-2.json → coverage-2264-1677496595975-2.json} +1 -1
- package/dist/index.browser.es.js +202 -80
- package/dist/index.browser.es.js.map +1 -1
- package/dist/index.cjs.js +202 -80
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.es.js +202 -80
- package/dist/index.es.js.map +1 -1
- package/dist/src/StreamVideoClient.d.ts +7 -3
- package/dist/src/config/index.d.ts +2 -0
- package/dist/src/coordinator/StreamCoordinatorClient.d.ts +43 -4
- package/dist/src/coordinator/connection/token_manager.d.ts +1 -1
- package/dist/src/coordinator/connection/types.d.ts +2 -7
- package/dist/src/events/index.d.ts +6 -0
- package/dist/src/events/recording.d.ts +10 -0
- package/dist/src/gen/coordinator/index.d.ts +397 -27
- package/package.json +1 -1
- package/src/StreamVideoClient.ts +52 -32
- package/src/config/index.ts +2 -0
- package/src/coordinator/StreamCoordinatorClient.ts +142 -30
- package/src/coordinator/connection/client.ts +1 -0
- package/src/coordinator/connection/connection.ts +0 -3
- package/src/coordinator/connection/token_manager.ts +20 -4
- package/src/coordinator/connection/types.ts +2 -7
- package/src/events/index.ts +6 -0
- package/src/events/recording.ts +36 -0
- package/src/gen/coordinator/index.ts +395 -27
- package/src/rtc/types.ts +0 -1
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">37.
|
|
26
|
+
<span class="strong">37.94% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>3934/10369</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">78.
|
|
33
|
+
<span class="strong">78.35% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>105/
|
|
35
|
+
<span class='fraction'>105/134</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">14.96% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>79/
|
|
42
|
+
<span class='fraction'>79/528</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">37.
|
|
47
|
+
<span class="strong">37.94% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>3934/10369</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -80,17 +80,17 @@
|
|
|
80
80
|
</thead>
|
|
81
81
|
<tbody><tr>
|
|
82
82
|
<td class="file low" data-value="src"><a href="src/index.html">src</a></td>
|
|
83
|
-
<td data-value="
|
|
84
|
-
<div class="chart"><div class="cover-fill" style="width:
|
|
83
|
+
<td data-value="30.81" class="pic low">
|
|
84
|
+
<div class="chart"><div class="cover-fill" style="width: 30%"></div><div class="cover-empty" style="width: 70%"></div></div>
|
|
85
85
|
</td>
|
|
86
|
-
<td data-value="
|
|
87
|
-
<td data-value="
|
|
86
|
+
<td data-value="30.81" class="pct low">30.81%</td>
|
|
87
|
+
<td data-value="928" class="abs low">286/928</td>
|
|
88
88
|
<td data-value="71.42" class="pct medium">71.42%</td>
|
|
89
89
|
<td data-value="7" class="abs medium">5/7</td>
|
|
90
|
-
<td data-value="
|
|
91
|
-
<td data-value="
|
|
92
|
-
<td data-value="
|
|
93
|
-
<td data-value="
|
|
90
|
+
<td data-value="16.66" class="pct low">16.66%</td>
|
|
91
|
+
<td data-value="30" class="abs low">5/30</td>
|
|
92
|
+
<td data-value="30.81" class="pct low">30.81%</td>
|
|
93
|
+
<td data-value="928" class="abs low">286/928</td>
|
|
94
94
|
</tr>
|
|
95
95
|
|
|
96
96
|
<tr>
|
|
@@ -99,58 +99,58 @@
|
|
|
99
99
|
<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
|
|
100
100
|
</td>
|
|
101
101
|
<td data-value="100" class="pct high">100%</td>
|
|
102
|
-
<td data-value="
|
|
102
|
+
<td data-value="47" class="abs high">47/47</td>
|
|
103
103
|
<td data-value="100" class="pct high">100%</td>
|
|
104
104
|
<td data-value="1" class="abs high">1/1</td>
|
|
105
105
|
<td data-value="100" class="pct high">100%</td>
|
|
106
106
|
<td data-value="1" class="abs high">1/1</td>
|
|
107
107
|
<td data-value="100" class="pct high">100%</td>
|
|
108
|
-
<td data-value="
|
|
108
|
+
<td data-value="47" class="abs high">47/47</td>
|
|
109
109
|
</tr>
|
|
110
110
|
|
|
111
111
|
<tr>
|
|
112
|
-
<td class="file
|
|
113
|
-
<td data-value="
|
|
114
|
-
<div class="chart"><div class="cover-fill" style="width:
|
|
112
|
+
<td class="file low" data-value="src/coordinator"><a href="src/coordinator/index.html">src/coordinator</a></td>
|
|
113
|
+
<td data-value="38.7" class="pic low">
|
|
114
|
+
<div class="chart"><div class="cover-fill" style="width: 38%"></div><div class="cover-empty" style="width: 62%"></div></div>
|
|
115
115
|
</td>
|
|
116
|
-
<td data-value="
|
|
117
|
-
<td data-value="
|
|
118
|
-
<td data-value="
|
|
119
|
-
<td data-value="
|
|
120
|
-
<td data-value="
|
|
121
|
-
<td data-value="
|
|
122
|
-
<td data-value="
|
|
123
|
-
<td data-value="
|
|
116
|
+
<td data-value="38.7" class="pct low">38.7%</td>
|
|
117
|
+
<td data-value="248" class="abs low">96/248</td>
|
|
118
|
+
<td data-value="75" class="pct medium">75%</td>
|
|
119
|
+
<td data-value="4" class="abs medium">3/4</td>
|
|
120
|
+
<td data-value="15" class="pct low">15%</td>
|
|
121
|
+
<td data-value="20" class="abs low">3/20</td>
|
|
122
|
+
<td data-value="38.7" class="pct low">38.7%</td>
|
|
123
|
+
<td data-value="248" class="abs low">96/248</td>
|
|
124
124
|
</tr>
|
|
125
125
|
|
|
126
126
|
<tr>
|
|
127
127
|
<td class="file low" data-value="src/coordinator/connection"><a href="src/coordinator/connection/index.html">src/coordinator/connection</a></td>
|
|
128
|
-
<td data-value="28.
|
|
128
|
+
<td data-value="28.69" class="pic low">
|
|
129
129
|
<div class="chart"><div class="cover-fill" style="width: 28%"></div><div class="cover-empty" style="width: 72%"></div></div>
|
|
130
130
|
</td>
|
|
131
|
-
<td data-value="28.
|
|
132
|
-
<td data-value="
|
|
131
|
+
<td data-value="28.69" class="pct low">28.69%</td>
|
|
132
|
+
<td data-value="2586" class="abs low">742/2586</td>
|
|
133
133
|
<td data-value="55.81" class="pct medium">55.81%</td>
|
|
134
134
|
<td data-value="43" class="abs medium">24/43</td>
|
|
135
135
|
<td data-value="15.57" class="pct low">15.57%</td>
|
|
136
136
|
<td data-value="122" class="abs low">19/122</td>
|
|
137
|
-
<td data-value="28.
|
|
138
|
-
<td data-value="
|
|
137
|
+
<td data-value="28.69" class="pct low">28.69%</td>
|
|
138
|
+
<td data-value="2586" class="abs low">742/2586</td>
|
|
139
139
|
</tr>
|
|
140
140
|
|
|
141
141
|
<tr>
|
|
142
142
|
<td class="file low" data-value="src/events"><a href="src/events/index.html">src/events</a></td>
|
|
143
|
-
<td data-value="
|
|
144
|
-
<div class="chart"><div class="cover-fill" style="width:
|
|
143
|
+
<td data-value="28.89" class="pic low">
|
|
144
|
+
<div class="chart"><div class="cover-fill" style="width: 28%"></div><div class="cover-empty" style="width: 72%"></div></div>
|
|
145
145
|
</td>
|
|
146
|
-
<td data-value="
|
|
147
|
-
<td data-value="
|
|
146
|
+
<td data-value="28.89" class="pct low">28.89%</td>
|
|
147
|
+
<td data-value="488" class="abs low">141/488</td>
|
|
148
148
|
<td data-value="100" class="pct high">100%</td>
|
|
149
149
|
<td data-value="0" class="abs high">0/0</td>
|
|
150
150
|
<td data-value="0" class="pct low">0%</td>
|
|
151
|
-
<td data-value="
|
|
152
|
-
<td data-value="
|
|
153
|
-
<td data-value="
|
|
151
|
+
<td data-value="33" class="abs low">0/33</td>
|
|
152
|
+
<td data-value="28.89" class="pct low">28.89%</td>
|
|
153
|
+
<td data-value="488" class="abs low">141/488</td>
|
|
154
154
|
</tr>
|
|
155
155
|
|
|
156
156
|
<tr>
|
|
@@ -215,17 +215,17 @@
|
|
|
215
215
|
|
|
216
216
|
<tr>
|
|
217
217
|
<td class="file low" data-value="src/rtc"><a href="src/rtc/index.html">src/rtc</a></td>
|
|
218
|
-
<td data-value="18.
|
|
218
|
+
<td data-value="18.24" class="pic low">
|
|
219
219
|
<div class="chart"><div class="cover-fill" style="width: 18%"></div><div class="cover-empty" style="width: 82%"></div></div>
|
|
220
220
|
</td>
|
|
221
|
-
<td data-value="18.
|
|
222
|
-
<td data-value="
|
|
221
|
+
<td data-value="18.24" class="pct low">18.24%</td>
|
|
222
|
+
<td data-value="1403" class="abs low">256/1403</td>
|
|
223
223
|
<td data-value="0" class="pct low">0%</td>
|
|
224
224
|
<td data-value="5" class="abs low">0/5</td>
|
|
225
225
|
<td data-value="0" class="pct low">0%</td>
|
|
226
226
|
<td data-value="27" class="abs low">0/27</td>
|
|
227
|
-
<td data-value="18.
|
|
228
|
-
<td data-value="
|
|
227
|
+
<td data-value="18.24" class="pct low">18.24%</td>
|
|
228
|
+
<td data-value="1403" class="abs low">256/1403</td>
|
|
229
229
|
</tr>
|
|
230
230
|
|
|
231
231
|
<tr>
|
|
@@ -281,7 +281,7 @@
|
|
|
281
281
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
282
282
|
Code coverage generated by
|
|
283
283
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
284
|
-
at 2023-02-
|
|
284
|
+
at 2023-02-27T11:16:35.784Z
|
|
285
285
|
</div>
|
|
286
286
|
<script src="prettify.js"></script>
|
|
287
287
|
<script>
|
|
@@ -664,7 +664,7 @@ export <span class="fstat-no" title="function not covered" ><span class="branch-
|
|
|
664
664
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
665
665
|
Code coverage generated by
|
|
666
666
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
667
|
-
at 2023-02-
|
|
667
|
+
at 2023-02-27T11:16:35.784Z
|
|
668
668
|
</div>
|
|
669
669
|
<script src="../prettify.js"></script>
|
|
670
670
|
<script>
|
|
@@ -625,7 +625,7 @@ export <span class="fstat-no" title="function not covered" ><span class="branch-
|
|
|
625
625
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
626
626
|
Code coverage generated by
|
|
627
627
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
628
|
-
at 2023-02-
|
|
628
|
+
at 2023-02-27T11:16:35.784Z
|
|
629
629
|
</div>
|
|
630
630
|
<script src="../prettify.js"></script>
|
|
631
631
|
<script>
|
|
@@ -23,9 +23,9 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">46.97% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>256/545</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
@@ -37,16 +37,16 @@
|
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">18.18% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>4/
|
|
42
|
+
<span class='fraction'>4/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">46.97% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>256/545</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -588,7 +588,28 @@
|
|
|
588
588
|
<a name='L523'></a><a href='#L523'>523</a>
|
|
589
589
|
<a name='L524'></a><a href='#L524'>524</a>
|
|
590
590
|
<a name='L525'></a><a href='#L525'>525</a>
|
|
591
|
-
<a name='L526'></a><a href='#L526'>526</a
|
|
591
|
+
<a name='L526'></a><a href='#L526'>526</a>
|
|
592
|
+
<a name='L527'></a><a href='#L527'>527</a>
|
|
593
|
+
<a name='L528'></a><a href='#L528'>528</a>
|
|
594
|
+
<a name='L529'></a><a href='#L529'>529</a>
|
|
595
|
+
<a name='L530'></a><a href='#L530'>530</a>
|
|
596
|
+
<a name='L531'></a><a href='#L531'>531</a>
|
|
597
|
+
<a name='L532'></a><a href='#L532'>532</a>
|
|
598
|
+
<a name='L533'></a><a href='#L533'>533</a>
|
|
599
|
+
<a name='L534'></a><a href='#L534'>534</a>
|
|
600
|
+
<a name='L535'></a><a href='#L535'>535</a>
|
|
601
|
+
<a name='L536'></a><a href='#L536'>536</a>
|
|
602
|
+
<a name='L537'></a><a href='#L537'>537</a>
|
|
603
|
+
<a name='L538'></a><a href='#L538'>538</a>
|
|
604
|
+
<a name='L539'></a><a href='#L539'>539</a>
|
|
605
|
+
<a name='L540'></a><a href='#L540'>540</a>
|
|
606
|
+
<a name='L541'></a><a href='#L541'>541</a>
|
|
607
|
+
<a name='L542'></a><a href='#L542'>542</a>
|
|
608
|
+
<a name='L543'></a><a href='#L543'>543</a>
|
|
609
|
+
<a name='L544'></a><a href='#L544'>544</a>
|
|
610
|
+
<a name='L545'></a><a href='#L545'>545</a>
|
|
611
|
+
<a name='L546'></a><a href='#L546'>546</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
|
612
|
+
<span class="cline-any cline-yes">1x</span>
|
|
592
613
|
<span class="cline-any cline-yes">1x</span>
|
|
593
614
|
<span class="cline-any cline-yes">1x</span>
|
|
594
615
|
<span class="cline-any cline-yes">1x</span>
|
|
@@ -738,6 +759,18 @@
|
|
|
738
759
|
<span class="cline-any cline-no"> </span>
|
|
739
760
|
<span class="cline-any cline-no"> </span>
|
|
740
761
|
<span class="cline-any cline-no"> </span>
|
|
762
|
+
<span class="cline-any cline-no"> </span>
|
|
763
|
+
<span class="cline-any cline-no"> </span>
|
|
764
|
+
<span class="cline-any cline-no"> </span>
|
|
765
|
+
<span class="cline-any cline-no"> </span>
|
|
766
|
+
<span class="cline-any cline-no"> </span>
|
|
767
|
+
<span class="cline-any cline-no"> </span>
|
|
768
|
+
<span class="cline-any cline-no"> </span>
|
|
769
|
+
<span class="cline-any cline-no"> </span>
|
|
770
|
+
<span class="cline-any cline-no"> </span>
|
|
771
|
+
<span class="cline-any cline-no"> </span>
|
|
772
|
+
<span class="cline-any cline-no"> </span>
|
|
773
|
+
<span class="cline-any cline-no"> </span>
|
|
741
774
|
<span class="cline-any cline-yes">2x</span>
|
|
742
775
|
<span class="cline-any cline-yes">2x</span>
|
|
743
776
|
<span class="cline-any cline-yes">2x</span>
|
|
@@ -752,6 +785,7 @@
|
|
|
752
785
|
<span class="cline-any cline-no"> </span>
|
|
753
786
|
<span class="cline-any cline-no"> </span>
|
|
754
787
|
<span class="cline-any cline-no"> </span>
|
|
788
|
+
<span class="cline-any cline-no"> </span>
|
|
755
789
|
<span class="cline-any cline-yes">2x</span>
|
|
756
790
|
<span class="cline-any cline-yes">2x</span>
|
|
757
791
|
<span class="cline-any cline-yes">2x</span>
|
|
@@ -954,6 +988,16 @@
|
|
|
954
988
|
<span class="cline-any cline-no"> </span>
|
|
955
989
|
<span class="cline-any cline-no"> </span>
|
|
956
990
|
<span class="cline-any cline-no"> </span>
|
|
991
|
+
<span class="cline-any cline-yes">2x</span>
|
|
992
|
+
<span class="cline-any cline-yes">2x</span>
|
|
993
|
+
<span class="cline-any cline-no"> </span>
|
|
994
|
+
<span class="cline-any cline-no"> </span>
|
|
995
|
+
<span class="cline-any cline-no"> </span>
|
|
996
|
+
<span class="cline-any cline-no"> </span>
|
|
997
|
+
<span class="cline-any cline-no"> </span>
|
|
998
|
+
<span class="cline-any cline-no"> </span>
|
|
999
|
+
<span class="cline-any cline-no"> </span>
|
|
1000
|
+
<span class="cline-any cline-no"> </span>
|
|
957
1001
|
<span class="cline-any cline-no"> </span>
|
|
958
1002
|
<span class="cline-any cline-no"> </span>
|
|
959
1003
|
<span class="cline-any cline-no"> </span>
|
|
@@ -971,10 +1015,6 @@
|
|
|
971
1015
|
<span class="cline-any cline-no"> </span>
|
|
972
1016
|
<span class="cline-any cline-no"> </span>
|
|
973
1017
|
<span class="cline-any cline-no"> </span>
|
|
974
|
-
<span class="cline-any cline-no"> </span>
|
|
975
|
-
<span class="cline-any cline-no"> </span>
|
|
976
|
-
<span class="cline-any cline-no"> </span>
|
|
977
|
-
<span class="cline-any cline-no"> </span>
|
|
978
1018
|
<span class="cline-any cline-yes">2x</span>
|
|
979
1019
|
<span class="cline-any cline-yes">2x</span>
|
|
980
1020
|
<span class="cline-any cline-yes">2x</span>
|
|
@@ -1142,9 +1182,13 @@ import {
|
|
|
1142
1182
|
watchCallCancelled,
|
|
1143
1183
|
watchCallCreated,
|
|
1144
1184
|
watchCallRejected,
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1185
|
+
watchCallPermissionRequest,
|
|
1186
|
+
watchCallPermissionsUpdated,
|
|
1187
|
+
watchCallRecordingStarted,
|
|
1188
|
+
watchCallRecordingStopped,
|
|
1189
|
+
} from './events';
|
|
1190
|
+
|
|
1191
|
+
import { CALL_CONFIG, CallConfig } from './config';
|
|
1148
1192
|
import { CallDropScheduler } from './CallDropScheduler';
|
|
1149
1193
|
import { StreamCoordinatorClient } from './coordinator/StreamCoordinatorClient';
|
|
1150
1194
|
import {
|
|
@@ -1153,10 +1197,7 @@ import {
|
|
|
1153
1197
|
TokenOrProvider,
|
|
1154
1198
|
User,
|
|
1155
1199
|
} from './coordinator/connection/types';
|
|
1156
|
-
import {
|
|
1157
|
-
watchCallPermissionRequest,
|
|
1158
|
-
watchCallPermissionsUpdated,
|
|
1159
|
-
} from './events/call-permissions';
|
|
1200
|
+
import { SortParamRequest } from './gen/coordinator';
|
|
1160
1201
|
|
|
1161
1202
|
/**
|
|
1162
1203
|
* A `StreamVideoClient` instance lets you communicate with our API, and authenticate users.
|
|
@@ -1228,36 +1269,48 @@ export class StreamVideoClient {
|
|
|
1228
1269
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
1229
1270
|
<span class="cstat-no" title="statement not covered" > this.on(</span>
|
|
1230
1271
|
<span class="cstat-no" title="statement not covered" > 'call.created',</span>
|
|
1231
|
-
<span class="cstat-no" title="statement not covered" > // @ts-expect-error</span>
|
|
1272
|
+
<span class="cstat-no" title="statement not covered" > // @ts-expect-error until we sort out the types</span>
|
|
1232
1273
|
<span class="cstat-no" title="statement not covered" > watchCallCreated(this.writeableStateStore),</span>
|
|
1233
1274
|
<span class="cstat-no" title="statement not covered" > );</span>
|
|
1234
1275
|
<span class="cstat-no" title="statement not covered" > this.on(</span>
|
|
1235
1276
|
<span class="cstat-no" title="statement not covered" > 'call.accepted',</span>
|
|
1236
|
-
<span class="cstat-no" title="statement not covered" > // @ts-expect-error</span>
|
|
1277
|
+
<span class="cstat-no" title="statement not covered" > // @ts-expect-error until we sort out the types</span>
|
|
1237
1278
|
<span class="cstat-no" title="statement not covered" > watchCallAccepted(this.writeableStateStore),</span>
|
|
1238
1279
|
<span class="cstat-no" title="statement not covered" > );</span>
|
|
1239
1280
|
<span class="cstat-no" title="statement not covered" > this.on(</span>
|
|
1240
1281
|
<span class="cstat-no" title="statement not covered" > 'call.rejected',</span>
|
|
1241
|
-
<span class="cstat-no" title="statement not covered" > // @ts-expect-error</span>
|
|
1282
|
+
<span class="cstat-no" title="statement not covered" > // @ts-expect-error until we sort out the types</span>
|
|
1242
1283
|
<span class="cstat-no" title="statement not covered" > watchCallRejected(this.writeableStateStore),</span>
|
|
1243
1284
|
<span class="cstat-no" title="statement not covered" > );</span>
|
|
1244
1285
|
<span class="cstat-no" title="statement not covered" > this.on(</span>
|
|
1245
1286
|
<span class="cstat-no" title="statement not covered" > 'call.cancelled',</span>
|
|
1246
|
-
<span class="cstat-no" title="statement not covered" > // @ts-expect-error</span>
|
|
1287
|
+
<span class="cstat-no" title="statement not covered" > // @ts-expect-error until we sort out the types</span>
|
|
1247
1288
|
<span class="cstat-no" title="statement not covered" > watchCallCancelled(this.writeableStateStore),</span>
|
|
1248
1289
|
<span class="cstat-no" title="statement not covered" > );</span>
|
|
1249
1290
|
<span class="cstat-no" title="statement not covered" > this.on(</span>
|
|
1250
1291
|
<span class="cstat-no" title="statement not covered" > 'call.permission_request',</span>
|
|
1251
|
-
<span class="cstat-no" title="statement not covered" > // @ts-expect-error</span>
|
|
1292
|
+
<span class="cstat-no" title="statement not covered" > // @ts-expect-error until we sort out the types</span>
|
|
1252
1293
|
<span class="cstat-no" title="statement not covered" > watchCallPermissionRequest(this.writeableStateStore),</span>
|
|
1253
1294
|
<span class="cstat-no" title="statement not covered" > );</span>
|
|
1254
1295
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
1255
1296
|
<span class="cstat-no" title="statement not covered" > this.on(</span>
|
|
1256
1297
|
<span class="cstat-no" title="statement not covered" > 'call.permissions_updated',</span>
|
|
1257
|
-
<span class="cstat-no" title="statement not covered" > // @ts-expect-error</span>
|
|
1298
|
+
<span class="cstat-no" title="statement not covered" > // @ts-expect-error until we sort out the types</span>
|
|
1258
1299
|
<span class="cstat-no" title="statement not covered" > watchCallPermissionsUpdated(this.writeableStateStore),</span>
|
|
1259
1300
|
<span class="cstat-no" title="statement not covered" > );</span>
|
|
1260
1301
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
1302
|
+
<span class="cstat-no" title="statement not covered" > this.on(</span>
|
|
1303
|
+
<span class="cstat-no" title="statement not covered" > 'call.recording_started',</span>
|
|
1304
|
+
<span class="cstat-no" title="statement not covered" > // @ts-expect-error until we sort out the types</span>
|
|
1305
|
+
<span class="cstat-no" title="statement not covered" > watchCallRecordingStarted(this.writeableStateStore),</span>
|
|
1306
|
+
<span class="cstat-no" title="statement not covered" > );</span>
|
|
1307
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1308
|
+
<span class="cstat-no" title="statement not covered" > this.on(</span>
|
|
1309
|
+
<span class="cstat-no" title="statement not covered" > 'call.recording_stopped',</span>
|
|
1310
|
+
<span class="cstat-no" title="statement not covered" > // @ts-expect-error until we sort out the types</span>
|
|
1311
|
+
<span class="cstat-no" title="statement not covered" > watchCallRecordingStopped(this.writeableStateStore),</span>
|
|
1312
|
+
<span class="cstat-no" title="statement not covered" > );</span>
|
|
1313
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1261
1314
|
<span class="cstat-no" title="statement not covered" > this.writeableStateStore.setCurrentValue(</span>
|
|
1262
1315
|
<span class="cstat-no" title="statement not covered" > this.writeableStateStore.connectedUserSubject,</span>
|
|
1263
1316
|
<span class="cstat-no" title="statement not covered" > user,</span>
|
|
@@ -1270,6 +1323,7 @@ export class StreamVideoClient {
|
|
|
1270
1323
|
* If the connection is successfully disconnected, the connected user [state variable](#readonlystatestore) will be updated accordingly
|
|
1271
1324
|
*/
|
|
1272
1325
|
disconnectUser = <span class="fstat-no" title="function not covered" >async () => {</span>
|
|
1326
|
+
<span class="cstat-no" title="statement not covered" > // FIXME OL: we should clean-up the event listeners as well</span>
|
|
1273
1327
|
<span class="cstat-no" title="statement not covered" > await this.coordinatorClient.disconnectUser();</span>
|
|
1274
1328
|
<span class="cstat-no" title="statement not covered" > this.callDropScheduler?.cleanUp();</span>
|
|
1275
1329
|
<span class="cstat-no" title="statement not covered" > this.writeableStateStore.setCurrentValue(</span>
|
|
@@ -1437,11 +1491,11 @@ export class StreamVideoClient {
|
|
|
1437
1491
|
<span class="cstat-no" title="statement not covered" > );</span>
|
|
1438
1492
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
1439
1493
|
<span class="cstat-no" title="statement not covered" > const { server, ice_servers, token } = edge.credentials;</span>
|
|
1440
|
-
<span class="cstat-no" title="statement not covered" > const sfuClient = new StreamSfuClient(server.url
|
|
1494
|
+
<span class="cstat-no" title="statement not covered" > const sfuClient = new StreamSfuClient(server.url, token);</span>
|
|
1441
1495
|
<span class="cstat-no" title="statement not covered" > const metadata = new CallMetadata(callMeta, members);</span>
|
|
1442
1496
|
<span class="cstat-no" title="statement not covered" > const callOptions = {</span>
|
|
1443
1497
|
<span class="cstat-no" title="statement not covered" > connectionConfig: this.toRtcConfiguration(ice_servers),</span>
|
|
1444
|
-
<span class="cstat-no" title="statement not covered" > edgeName: server
|
|
1498
|
+
<span class="cstat-no" title="statement not covered" > edgeName: server.edge_name,</span>
|
|
1445
1499
|
<span class="cstat-no" title="statement not covered" > };</span>
|
|
1446
1500
|
<span class="cstat-no" title="statement not covered" > const call = new Call(</span>
|
|
1447
1501
|
<span class="cstat-no" title="statement not covered" > metadata,</span>
|
|
@@ -1474,15 +1528,25 @@ export class StreamVideoClient {
|
|
|
1474
1528
|
*/
|
|
1475
1529
|
startRecording = <span class="fstat-no" title="function not covered" >async (callId: string, callType: string) => {</span>
|
|
1476
1530
|
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
1477
|
-
<span class="cstat-no" title="statement not covered" > await this.coordinatorClient.startRecording(callId, callType);</span>
|
|
1478
|
-
<span class="cstat-no" title="statement not covered" > this.writeableStateStore.setCurrentValue(</span>
|
|
1479
|
-
<span class="cstat-no" title="statement not covered" > this.writeableStateStore.callRecordingInProgressSubject,</span>
|
|
1480
|
-
<span class="cstat-no" title="statement not covered" > true,</span>
|
|
1481
|
-
<span class="cstat-no" title="statement not covered" > );</span>
|
|
1531
|
+
<span class="cstat-no" title="statement not covered" > return await this.coordinatorClient.startRecording(callId, callType);</span>
|
|
1482
1532
|
<span class="cstat-no" title="statement not covered" > } catch (error) {</span>
|
|
1483
1533
|
<span class="cstat-no" title="statement not covered" > console.log(`Failed to start recording`, error);</span>
|
|
1484
1534
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1485
1535
|
<span class="cstat-no" title="statement not covered" > };</span>
|
|
1536
|
+
|
|
1537
|
+
queryCalls = <span class="fstat-no" title="function not covered" >async (</span>
|
|
1538
|
+
<span class="cstat-no" title="statement not covered" > filterConditions: { [key: string]: any },</span>
|
|
1539
|
+
<span class="cstat-no" title="statement not covered" > sort: Array<SortParamRequest>,</span>
|
|
1540
|
+
<span class="cstat-no" title="statement not covered" > limit?: number,</span>
|
|
1541
|
+
<span class="cstat-no" title="statement not covered" > next?: string,</span>
|
|
1542
|
+
<span class="cstat-no" title="statement not covered" > ) => {</span>
|
|
1543
|
+
<span class="cstat-no" title="statement not covered" > return await this.coordinatorClient.queryCalls(</span>
|
|
1544
|
+
<span class="cstat-no" title="statement not covered" > filterConditions,</span>
|
|
1545
|
+
<span class="cstat-no" title="statement not covered" > sort,</span>
|
|
1546
|
+
<span class="cstat-no" title="statement not covered" > limit,</span>
|
|
1547
|
+
<span class="cstat-no" title="statement not covered" > next,</span>
|
|
1548
|
+
<span class="cstat-no" title="statement not covered" > );</span>
|
|
1549
|
+
<span class="cstat-no" title="statement not covered" > };</span>
|
|
1486
1550
|
|
|
1487
1551
|
/**
|
|
1488
1552
|
* Stops recording for the call described by the given `callId` and `callType`.
|
|
@@ -1491,11 +1555,7 @@ export class StreamVideoClient {
|
|
|
1491
1555
|
*/
|
|
1492
1556
|
stopRecording = <span class="fstat-no" title="function not covered" >async (callId: string, callType: string) => {</span>
|
|
1493
1557
|
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
1494
|
-
<span class="cstat-no" title="statement not covered" > await this.coordinatorClient.stopRecording(callId, callType);</span>
|
|
1495
|
-
<span class="cstat-no" title="statement not covered" > this.writeableStateStore.setCurrentValue(</span>
|
|
1496
|
-
<span class="cstat-no" title="statement not covered" > this.writeableStateStore.callRecordingInProgressSubject,</span>
|
|
1497
|
-
<span class="cstat-no" title="statement not covered" > false,</span>
|
|
1498
|
-
<span class="cstat-no" title="statement not covered" > );</span>
|
|
1558
|
+
<span class="cstat-no" title="statement not covered" > return await this.coordinatorClient.stopRecording(callId, callType);</span>
|
|
1499
1559
|
<span class="cstat-no" title="statement not covered" > } catch (error) {</span>
|
|
1500
1560
|
<span class="cstat-no" title="statement not covered" > console.log(`Failed to stop recording`, error);</span>
|
|
1501
1561
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
@@ -1561,8 +1621,8 @@ export class StreamVideoClient {
|
|
|
1561
1621
|
<span class="cstat-no" title="statement not covered" > statsJson: new TextEncoder().encode(JSON.stringify(stats)),</span>
|
|
1562
1622
|
<span class="cstat-no" title="statement not covered" > };</span>
|
|
1563
1623
|
<span class="cstat-no" title="statement not covered" > await this.coordinatorClient.reportCallStats(</span>
|
|
1564
|
-
<span class="cstat-no" title="statement not covered" > callMetadata.call.id
|
|
1565
|
-
<span class="cstat-no" title="statement not covered" > callMetadata.call.type
|
|
1624
|
+
<span class="cstat-no" title="statement not covered" > callMetadata.call.id,</span>
|
|
1625
|
+
<span class="cstat-no" title="statement not covered" > callMetadata.call.type,</span>
|
|
1566
1626
|
<span class="cstat-no" title="statement not covered" > request,</span>
|
|
1567
1627
|
<span class="cstat-no" title="statement not covered" > );</span>
|
|
1568
1628
|
<span class="cstat-no" title="statement not covered" > };</span>
|
|
@@ -1575,8 +1635,8 @@ export class StreamVideoClient {
|
|
|
1575
1635
|
<span class="cstat-no" title="statement not covered" > const latencyByEdge: GetCallEdgeServerRequest['latency_measurements'] = {};</span>
|
|
1576
1636
|
<span class="cstat-no" title="statement not covered" > await Promise.all(</span>
|
|
1577
1637
|
<span class="cstat-no" title="statement not covered" > edges.map(async (edge) => {</span>
|
|
1578
|
-
<span class="cstat-no" title="statement not covered" > latencyByEdge[edge.name
|
|
1579
|
-
<span class="cstat-no" title="statement not covered" > edge.latency_url
|
|
1638
|
+
<span class="cstat-no" title="statement not covered" > latencyByEdge[edge.name] = await measureResourceLoadLatencyTo(</span>
|
|
1639
|
+
<span class="cstat-no" title="statement not covered" > edge.latency_url,</span>
|
|
1580
1640
|
<span class="cstat-no" title="statement not covered" > );</span>
|
|
1581
1641
|
<span class="cstat-no" title="statement not covered" > }),</span>
|
|
1582
1642
|
<span class="cstat-no" title="statement not covered" > );</span>
|
|
@@ -1590,7 +1650,7 @@ export class StreamVideoClient {
|
|
|
1590
1650
|
<span class="cstat-no" title="statement not covered" > if (!config || config.length === 0) return undefined;</span>
|
|
1591
1651
|
<span class="cstat-no" title="statement not covered" > const rtcConfig: RTCConfiguration = {</span>
|
|
1592
1652
|
<span class="cstat-no" title="statement not covered" > iceServers: config.map((ice) => ({</span>
|
|
1593
|
-
<span class="cstat-no" title="statement not covered" > urls: ice.urls
|
|
1653
|
+
<span class="cstat-no" title="statement not covered" > urls: ice.urls,</span>
|
|
1594
1654
|
<span class="cstat-no" title="statement not covered" > username: ice.username,</span>
|
|
1595
1655
|
<span class="cstat-no" title="statement not covered" > credential: ice.password,</span>
|
|
1596
1656
|
<span class="cstat-no" title="statement not covered" > })),</span>
|
|
@@ -1620,8 +1680,8 @@ export class StreamVideoClient {
|
|
|
1620
1680
|
<span class="cstat-no" title="statement not covered" > event: statEvent,</span>
|
|
1621
1681
|
<span class="cstat-no" title="statement not covered" > };</span>
|
|
1622
1682
|
<span class="cstat-no" title="statement not covered" > await this.coordinatorClient.reportCallStatEvent(</span>
|
|
1623
|
-
<span class="cstat-no" title="statement not covered" > callMetadata.call.id
|
|
1624
|
-
<span class="cstat-no" title="statement not covered" > callMetadata.call.type
|
|
1683
|
+
<span class="cstat-no" title="statement not covered" > callMetadata.call.id,</span>
|
|
1684
|
+
<span class="cstat-no" title="statement not covered" > callMetadata.call.type,</span>
|
|
1625
1685
|
<span class="cstat-no" title="statement not covered" > request,</span>
|
|
1626
1686
|
<span class="cstat-no" title="statement not covered" > );</span>
|
|
1627
1687
|
<span class="cstat-no" title="statement not covered" > };</span>
|
|
@@ -1645,7 +1705,7 @@ export class StreamVideoClient {
|
|
|
1645
1705
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
1646
1706
|
Code coverage generated by
|
|
1647
1707
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1648
|
-
at 2023-02-
|
|
1708
|
+
at 2023-02-27T11:16:35.784Z
|
|
1649
1709
|
</div>
|
|
1650
1710
|
<script src="../prettify.js"></script>
|
|
1651
1711
|
<script>
|
|
@@ -115,7 +115,7 @@ export const CALL_CONFIG: Record<CallType, CallConfig> = {
|
|
|
115
115
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
116
116
|
Code coverage generated by
|
|
117
117
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
118
|
-
at 2023-02-
|
|
118
|
+
at 2023-02-27T11:16:35.784Z
|
|
119
119
|
</div>
|
|
120
120
|
<script src="../../prettify.js"></script>
|
|
121
121
|
<script>
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
26
|
<span class="strong">100% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>47/47</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
47
|
<span class="strong">100% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>47/47</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -93,6 +93,36 @@
|
|
|
93
93
|
<td data-value="15" class="abs high">15/15</td>
|
|
94
94
|
</tr>
|
|
95
95
|
|
|
96
|
+
<tr>
|
|
97
|
+
<td class="file high" data-value="index.ts"><a href="index.ts.html">index.ts</a></td>
|
|
98
|
+
<td data-value="100" class="pic high">
|
|
99
|
+
<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
|
|
100
|
+
</td>
|
|
101
|
+
<td data-value="100" class="pct high">100%</td>
|
|
102
|
+
<td data-value="2" class="abs high">2/2</td>
|
|
103
|
+
<td data-value="100" class="pct high">100%</td>
|
|
104
|
+
<td data-value="0" class="abs high">0/0</td>
|
|
105
|
+
<td data-value="100" class="pct high">100%</td>
|
|
106
|
+
<td data-value="0" class="abs high">0/0</td>
|
|
107
|
+
<td data-value="100" class="pct high">100%</td>
|
|
108
|
+
<td data-value="2" class="abs high">2/2</td>
|
|
109
|
+
</tr>
|
|
110
|
+
|
|
111
|
+
<tr>
|
|
112
|
+
<td class="file high" data-value="types.ts"><a href="types.ts.html">types.ts</a></td>
|
|
113
|
+
<td data-value="100" class="pic high">
|
|
114
|
+
<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
|
|
115
|
+
</td>
|
|
116
|
+
<td data-value="100" class="pct high">100%</td>
|
|
117
|
+
<td data-value="30" class="abs high">30/30</td>
|
|
118
|
+
<td data-value="100" class="pct high">100%</td>
|
|
119
|
+
<td data-value="0" class="abs high">0/0</td>
|
|
120
|
+
<td data-value="100" class="pct high">100%</td>
|
|
121
|
+
<td data-value="0" class="abs high">0/0</td>
|
|
122
|
+
<td data-value="100" class="pct high">100%</td>
|
|
123
|
+
<td data-value="30" class="abs high">30/30</td>
|
|
124
|
+
</tr>
|
|
125
|
+
|
|
96
126
|
</tbody>
|
|
97
127
|
</table>
|
|
98
128
|
</div>
|
|
@@ -101,7 +131,7 @@
|
|
|
101
131
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
102
132
|
Code coverage generated by
|
|
103
133
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
104
|
-
at 2023-02-
|
|
134
|
+
at 2023-02-27T11:16:35.784Z
|
|
105
135
|
</div>
|
|
106
136
|
<script src="../../prettify.js"></script>
|
|
107
137
|
<script>
|