@openreplay/tracker 10.0.0 → 10.0.3

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 (71) hide show
  1. package/CHANGELOG.md +14 -2
  2. package/cjs/app/index.js +1 -1
  3. package/cjs/index.js +1 -1
  4. package/cjs/modules/Network/fetchProxy.js +3 -0
  5. package/cjs/modules/Network/networkMessage.js +6 -3
  6. package/cjs/modules/network.js +2 -2
  7. package/cjs/utils.js +16 -2
  8. package/coverage/clover.xml +528 -451
  9. package/coverage/coverage-final.json +12 -11
  10. package/coverage/lcov-report/index.html +38 -38
  11. package/coverage/lcov-report/main/app/canvas.ts.html +475 -0
  12. package/coverage/lcov-report/main/app/guards.ts.html +46 -43
  13. package/coverage/lcov-report/main/app/index.html +36 -21
  14. package/coverage/lcov-report/main/app/index.ts.html +74 -8
  15. package/coverage/lcov-report/main/app/logger.ts.html +2 -2
  16. package/coverage/lcov-report/main/app/messages.gen.ts.html +38 -5
  17. package/coverage/lcov-report/main/app/nodes.ts.html +1 -1
  18. package/coverage/lcov-report/main/app/observer/iframe_observer.ts.html +1 -1
  19. package/coverage/lcov-report/main/app/observer/iframe_offsets.ts.html +1 -1
  20. package/coverage/lcov-report/main/app/observer/index.html +1 -1
  21. package/coverage/lcov-report/main/app/observer/shadow_root_observer.ts.html +1 -1
  22. package/coverage/lcov-report/main/app/observer/top_observer.ts.html +1 -1
  23. package/coverage/lcov-report/main/app/sanitizer.ts.html +12 -3
  24. package/coverage/lcov-report/main/app/session.ts.html +13 -4
  25. package/coverage/lcov-report/main/app/ticker.ts.html +1 -1
  26. package/coverage/lcov-report/main/index.html +19 -19
  27. package/coverage/lcov-report/main/index.ts.html +1 -1
  28. package/coverage/lcov-report/main/modules/Network/beaconProxy.ts.html +1 -1
  29. package/coverage/lcov-report/main/modules/Network/fetchProxy.ts.html +12 -6
  30. package/coverage/lcov-report/main/modules/Network/index.html +12 -12
  31. package/coverage/lcov-report/main/modules/Network/index.ts.html +1 -1
  32. package/coverage/lcov-report/main/modules/Network/networkMessage.ts.html +17 -8
  33. package/coverage/lcov-report/main/modules/Network/utils.ts.html +1 -1
  34. package/coverage/lcov-report/main/modules/Network/xhrProxy.ts.html +1 -1
  35. package/coverage/lcov-report/main/modules/attributeSender.ts.html +13 -4
  36. package/coverage/lcov-report/main/modules/axiosSpy.ts.html +1 -1
  37. package/coverage/lcov-report/main/modules/connection.ts.html +1 -1
  38. package/coverage/lcov-report/main/modules/console.ts.html +1 -1
  39. package/coverage/lcov-report/main/modules/constructedStyleSheets.ts.html +1 -1
  40. package/coverage/lcov-report/main/modules/cssrules.ts.html +1 -1
  41. package/coverage/lcov-report/main/modules/exception.ts.html +1 -1
  42. package/coverage/lcov-report/main/modules/featureFlags.ts.html +1 -1
  43. package/coverage/lcov-report/main/modules/focus.ts.html +1 -1
  44. package/coverage/lcov-report/main/modules/fonts.ts.html +1 -1
  45. package/coverage/lcov-report/main/modules/img.ts.html +1 -1
  46. package/coverage/lcov-report/main/modules/index.html +8 -8
  47. package/coverage/lcov-report/main/modules/input.ts.html +1 -1
  48. package/coverage/lcov-report/main/modules/mouse.ts.html +1 -1
  49. package/coverage/lcov-report/main/modules/network.ts.html +3 -3
  50. package/coverage/lcov-report/main/modules/performance.ts.html +1 -1
  51. package/coverage/lcov-report/main/modules/scroll.ts.html +1 -1
  52. package/coverage/lcov-report/main/modules/selection.ts.html +1 -1
  53. package/coverage/lcov-report/main/modules/tabs.ts.html +1 -1
  54. package/coverage/lcov-report/main/modules/timing.ts.html +19 -7
  55. package/coverage/lcov-report/main/modules/viewport.ts.html +1 -1
  56. package/coverage/lcov-report/main/utils.ts.html +79 -88
  57. package/coverage/lcov-report/webworker/BatchWriter.ts.html +1 -1
  58. package/coverage/lcov-report/webworker/MessageEncoder.gen.ts.html +17 -5
  59. package/coverage/lcov-report/webworker/PrimitiveEncoder.ts.html +1 -1
  60. package/coverage/lcov-report/webworker/QueueSender.ts.html +1 -1
  61. package/coverage/lcov-report/webworker/index.html +7 -7
  62. package/coverage/lcov-report/webworker/index.ts.html +1 -1
  63. package/coverage/lcov.info +951 -796
  64. package/lib/app/index.js +1 -1
  65. package/lib/common/tsconfig.tsbuildinfo +1 -1
  66. package/lib/index.js +1 -1
  67. package/lib/modules/Network/fetchProxy.js +3 -0
  68. package/lib/modules/Network/networkMessage.js +6 -3
  69. package/lib/modules/network.js +2 -2
  70. package/lib/utils.js +16 -2
  71. package/package.json +1 -1
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">1.18% </span>
26
+ <span class="strong">0.5% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>37/3113</span>
28
+ <span class='fraction'>16/3187</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">0.56% </span>
33
+ <span class="strong">0.24% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>9/1605</span>
35
+ <span class='fraction'>4/1647</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">0.48% </span>
40
+ <span class="strong">1.27% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>3/614</span>
42
+ <span class='fraction'>8/629</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">1.22% </span>
47
+ <span class="strong">0.51% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>37/3028</span>
49
+ <span class='fraction'>16/3102</span>
50
50
  </div>
51
51
 
52
52
 
@@ -80,32 +80,32 @@
80
80
  </thead>
81
81
  <tbody><tr>
82
82
  <td class="file low" data-value="main"><a href="main/index.html">main</a></td>
83
- <td data-value="14.74" class="pic low">
84
- <div class="chart"><div class="cover-fill" style="width: 14%"></div><div class="cover-empty" style="width: 86%"></div></div>
85
- </td>
86
- <td data-value="14.74" class="pct low">14.74%</td>
87
- <td data-value="251" class="abs low">37/251</td>
88
- <td data-value="7.56" class="pct low">7.56%</td>
89
- <td data-value="119" class="abs low">9/119</td>
90
- <td data-value="5.45" class="pct low">5.45%</td>
91
- <td data-value="55" class="abs low">3/55</td>
92
- <td data-value="14.85" class="pct low">14.85%</td>
93
- <td data-value="249" class="abs low">37/249</td>
94
- </tr>
95
-
96
- <tr>
97
- <td class="file low" data-value="main/app"><a href="main/app/index.html">main/app</a></td>
98
83
  <td data-value="0" class="pic low">
99
84
  <div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
100
85
  </td>
101
86
  <td data-value="0" class="pct low">0%</td>
102
- <td data-value="648" class="abs low">0/648</td>
87
+ <td data-value="248" class="abs low">0/248</td>
103
88
  <td data-value="0" class="pct low">0%</td>
104
- <td data-value="240" class="abs low">0/240</td>
89
+ <td data-value="119" class="abs low">0/119</td>
105
90
  <td data-value="0" class="pct low">0%</td>
106
- <td data-value="190" class="abs low">0/190</td>
91
+ <td data-value="55" class="abs low">0/55</td>
107
92
  <td data-value="0" class="pct low">0%</td>
108
- <td data-value="630" class="abs low">0/630</td>
93
+ <td data-value="246" class="abs low">0/246</td>
94
+ </tr>
95
+
96
+ <tr>
97
+ <td class="file low" data-value="main/app"><a href="main/app/index.html">main/app</a></td>
98
+ <td data-value="2.23" class="pic low">
99
+ <div class="chart"><div class="cover-fill" style="width: 2%"></div><div class="cover-empty" style="width: 98%"></div></div>
100
+ </td>
101
+ <td data-value="2.23" class="pct low">2.23%</td>
102
+ <td data-value="716" class="abs low">16/716</td>
103
+ <td data-value="1.48" class="pct low">1.48%</td>
104
+ <td data-value="270" class="abs low">4/270</td>
105
+ <td data-value="3.92" class="pct low">3.92%</td>
106
+ <td data-value="204" class="abs low">8/204</td>
107
+ <td data-value="2.29" class="pct low">2.29%</td>
108
+ <td data-value="698" class="abs low">16/698</td>
109
109
  </tr>
110
110
 
111
111
  <tr>
@@ -129,13 +129,13 @@
129
129
  <div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
130
130
  </td>
131
131
  <td data-value="0" class="pct low">0%</td>
132
- <td data-value="1148" class="abs low">0/1148</td>
132
+ <td data-value="1152" class="abs low">0/1152</td>
133
133
  <td data-value="0" class="pct low">0%</td>
134
- <td data-value="587" class="abs low">0/587</td>
134
+ <td data-value="588" class="abs low">0/588</td>
135
135
  <td data-value="0" class="pct low">0%</td>
136
136
  <td data-value="216" class="abs low">0/216</td>
137
137
  <td data-value="0" class="pct low">0%</td>
138
- <td data-value="1108" class="abs low">0/1108</td>
138
+ <td data-value="1113" class="abs low">0/1113</td>
139
139
  </tr>
140
140
 
141
141
  <tr>
@@ -144,13 +144,13 @@
144
144
  <div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
145
145
  </td>
146
146
  <td data-value="0" class="pct low">0%</td>
147
- <td data-value="501" class="abs low">0/501</td>
147
+ <td data-value="504" class="abs low">0/504</td>
148
148
  <td data-value="0" class="pct low">0%</td>
149
- <td data-value="257" class="abs low">0/257</td>
149
+ <td data-value="265" class="abs low">0/265</td>
150
150
  <td data-value="0" class="pct low">0%</td>
151
- <td data-value="70" class="abs low">0/70</td>
151
+ <td data-value="71" class="abs low">0/71</td>
152
152
  <td data-value="0" class="pct low">0%</td>
153
- <td data-value="489" class="abs low">0/489</td>
153
+ <td data-value="491" class="abs low">0/491</td>
154
154
  </tr>
155
155
 
156
156
  <tr>
@@ -159,13 +159,13 @@
159
159
  <div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
160
160
  </td>
161
161
  <td data-value="0" class="pct low">0%</td>
162
- <td data-value="443" class="abs low">0/443</td>
162
+ <td data-value="445" class="abs low">0/445</td>
163
163
  <td data-value="0" class="pct low">0%</td>
164
- <td data-value="361" class="abs low">0/361</td>
164
+ <td data-value="364" class="abs low">0/364</td>
165
165
  <td data-value="0" class="pct low">0%</td>
166
166
  <td data-value="54" class="abs low">0/54</td>
167
167
  <td data-value="0" class="pct low">0%</td>
168
- <td data-value="436" class="abs low">0/436</td>
168
+ <td data-value="438" class="abs low">0/438</td>
169
169
  </tr>
170
170
 
171
171
  </tbody>
@@ -176,7 +176,7 @@
176
176
  <div class='footer quiet pad2 space-top1 center small'>
177
177
  Code coverage generated by
178
178
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
179
- at 2023-10-24T10:53:06.602Z
179
+ at 2023-11-21T10:02:27.844Z
180
180
  </div>
181
181
  <script src="prettify.js"></script>
182
182
  <script>
@@ -0,0 +1,475 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for main/app/canvas.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">main/app</a> canvas.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">0% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>0/60</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">0% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>0/18</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">0% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>0/13</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">0% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>0/59</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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
197
+ <span class="cline-any cline-no">&nbsp;</span>
198
+ <span class="cline-any cline-no">&nbsp;</span>
199
+ <span class="cline-any cline-neutral">&nbsp;</span>
200
+ <span class="cline-any cline-neutral">&nbsp;</span>
201
+ <span class="cline-any cline-neutral">&nbsp;</span>
202
+ <span class="cline-any cline-neutral">&nbsp;</span>
203
+ <span class="cline-any cline-neutral">&nbsp;</span>
204
+ <span class="cline-any cline-neutral">&nbsp;</span>
205
+ <span class="cline-any cline-neutral">&nbsp;</span>
206
+ <span class="cline-any cline-neutral">&nbsp;</span>
207
+ <span class="cline-any cline-neutral">&nbsp;</span>
208
+ <span class="cline-any cline-neutral">&nbsp;</span>
209
+ <span class="cline-any cline-neutral">&nbsp;</span>
210
+ <span class="cline-any cline-neutral">&nbsp;</span>
211
+ <span class="cline-any cline-no">&nbsp;</span>
212
+ <span class="cline-any cline-no">&nbsp;</span>
213
+ <span class="cline-any cline-neutral">&nbsp;</span>
214
+ <span class="cline-any cline-neutral">&nbsp;</span>
215
+ <span class="cline-any cline-neutral">&nbsp;</span>
216
+ <span class="cline-any cline-no">&nbsp;</span>
217
+ <span class="cline-any cline-no">&nbsp;</span>
218
+ <span class="cline-any cline-neutral">&nbsp;</span>
219
+ <span class="cline-any cline-no">&nbsp;</span>
220
+ <span class="cline-any cline-neutral">&nbsp;</span>
221
+ <span class="cline-any cline-neutral">&nbsp;</span>
222
+ <span class="cline-any cline-neutral">&nbsp;</span>
223
+ <span class="cline-any cline-no">&nbsp;</span>
224
+ <span class="cline-any cline-no">&nbsp;</span>
225
+ <span class="cline-any cline-no">&nbsp;</span>
226
+ <span class="cline-any cline-no">&nbsp;</span>
227
+ <span class="cline-any cline-neutral">&nbsp;</span>
228
+ <span class="cline-any cline-no">&nbsp;</span>
229
+ <span class="cline-any cline-no">&nbsp;</span>
230
+ <span class="cline-any cline-neutral">&nbsp;</span>
231
+ <span class="cline-any cline-neutral">&nbsp;</span>
232
+ <span class="cline-any cline-neutral">&nbsp;</span>
233
+ <span class="cline-any cline-no">&nbsp;</span>
234
+ <span class="cline-any cline-no">&nbsp;</span>
235
+ <span class="cline-any cline-no">&nbsp;</span>
236
+ <span class="cline-any cline-no">&nbsp;</span>
237
+ <span class="cline-any cline-no">&nbsp;</span>
238
+ <span class="cline-any cline-no">&nbsp;</span>
239
+ <span class="cline-any cline-no">&nbsp;</span>
240
+ <span class="cline-any cline-no">&nbsp;</span>
241
+ <span class="cline-any cline-neutral">&nbsp;</span>
242
+ <span class="cline-any cline-no">&nbsp;</span>
243
+ <span class="cline-any cline-no">&nbsp;</span>
244
+ <span class="cline-any cline-no">&nbsp;</span>
245
+ <span class="cline-any cline-no">&nbsp;</span>
246
+ <span class="cline-any cline-no">&nbsp;</span>
247
+ <span class="cline-any cline-neutral">&nbsp;</span>
248
+ <span class="cline-any cline-neutral">&nbsp;</span>
249
+ <span class="cline-any cline-neutral">&nbsp;</span>
250
+ <span class="cline-any cline-no">&nbsp;</span>
251
+ <span class="cline-any cline-neutral">&nbsp;</span>
252
+ <span class="cline-any cline-neutral">&nbsp;</span>
253
+ <span class="cline-any cline-neutral">&nbsp;</span>
254
+ <span class="cline-any cline-neutral">&nbsp;</span>
255
+ <span class="cline-any cline-no">&nbsp;</span>
256
+ <span class="cline-any cline-no">&nbsp;</span>
257
+ <span class="cline-any cline-no">&nbsp;</span>
258
+ <span class="cline-any cline-neutral">&nbsp;</span>
259
+ <span class="cline-any cline-no">&nbsp;</span>
260
+ <span class="cline-any cline-no">&nbsp;</span>
261
+ <span class="cline-any cline-no">&nbsp;</span>
262
+ <span class="cline-any cline-no">&nbsp;</span>
263
+ <span class="cline-any cline-neutral">&nbsp;</span>
264
+ <span class="cline-any cline-neutral">&nbsp;</span>
265
+ <span class="cline-any cline-neutral">&nbsp;</span>
266
+ <span class="cline-any cline-no">&nbsp;</span>
267
+ <span class="cline-any cline-neutral">&nbsp;</span>
268
+ <span class="cline-any cline-neutral">&nbsp;</span>
269
+ <span class="cline-any cline-neutral">&nbsp;</span>
270
+ <span class="cline-any cline-neutral">&nbsp;</span>
271
+ <span class="cline-any cline-neutral">&nbsp;</span>
272
+ <span class="cline-any cline-neutral">&nbsp;</span>
273
+ <span class="cline-any cline-neutral">&nbsp;</span>
274
+ <span class="cline-any cline-no">&nbsp;</span>
275
+ <span class="cline-any cline-neutral">&nbsp;</span>
276
+ <span class="cline-any cline-neutral">&nbsp;</span>
277
+ <span class="cline-any cline-no">&nbsp;</span>
278
+ <span class="cline-any cline-neutral">&nbsp;</span>
279
+ <span class="cline-any cline-neutral">&nbsp;</span>
280
+ <span class="cline-any cline-neutral">&nbsp;</span>
281
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
286
+ <span class="cline-any cline-neutral">&nbsp;</span>
287
+ <span class="cline-any cline-neutral">&nbsp;</span>
288
+ <span class="cline-any cline-no">&nbsp;</span>
289
+ <span class="cline-any cline-neutral">&nbsp;</span>
290
+ <span class="cline-any cline-neutral">&nbsp;</span>
291
+ <span class="cline-any cline-neutral">&nbsp;</span>
292
+ <span class="cline-any cline-neutral">&nbsp;</span>
293
+ <span class="cline-any cline-neutral">&nbsp;</span>
294
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
298
+ <span class="cline-any cline-neutral">&nbsp;</span>
299
+ <span class="cline-any cline-neutral">&nbsp;</span>
300
+ <span class="cline-any cline-no">&nbsp;</span>
301
+ <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
305
+ <span class="cline-any cline-no">&nbsp;</span>
306
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
310
+ <span class="cline-any cline-neutral">&nbsp;</span>
311
+ <span class="cline-any cline-no">&nbsp;</span>
312
+ <span class="cline-any cline-neutral">&nbsp;</span>
313
+ <span class="cline-any cline-neutral">&nbsp;</span>
314
+ <span class="cline-any cline-neutral">&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-neutral">&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-neutral">&nbsp;</span>
324
+ <span class="cline-any cline-neutral">&nbsp;</span>
325
+ <span class="cline-any cline-no">&nbsp;</span>
326
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import App from '../app/index.js'
327
+ <span class="cstat-no" title="statement not covered" >import { hasTag } from './guards.js'</span>
328
+ <span class="cstat-no" title="statement not covered" >import Message, { CanvasNode } from './messages.gen.js'</span>
329
+ &nbsp;
330
+ interface CanvasSnapshot {
331
+ images: { data: string; id: number }[]
332
+ createdAt: number
333
+ }
334
+ &nbsp;
335
+ interface Options {
336
+ fps: number
337
+ quality: 'low' | 'medium' | 'high'
338
+ }
339
+ &nbsp;
340
+ class CanvasRecorder {
341
+ private <span class="cstat-no" title="statement not covered" >snapshots: Record&lt;number, CanvasSnapshot&gt; = {}</span>
342
+ private readonly <span class="cstat-no" title="statement not covered" >intervals: NodeJS.Timeout[] = []</span>
343
+ private readonly interval: number
344
+ &nbsp;
345
+ <span class="fstat-no" title="function not covered" > constructor(</span>
346
+ private readonly <span class="cstat-no" title="statement not covered" >app: App,</span>
347
+ private readonly <span class="cstat-no" title="statement not covered" >options: Options,</span>
348
+ ) {
349
+ <span class="cstat-no" title="statement not covered" > this.interval = 1000 / options.fps</span>
350
+ }
351
+ &nbsp;
352
+ <span class="fstat-no" title="function not covered" > startTracking(</span>) {
353
+ <span class="cstat-no" title="statement not covered" > this.app.nodes.attachNodeCallback(<span class="fstat-no" title="function not covered" >(n</span>ode: Node): void =&gt; {</span>
354
+ const id = <span class="cstat-no" title="statement not covered" >this.app.nodes.getID(node)</span>
355
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!id || !hasTag(node, 'canvas') || this.snapshots[id]) {</span>
356
+ <span class="cstat-no" title="statement not covered" > return</span>
357
+ }
358
+ const ts = <span class="cstat-no" title="statement not covered" >this.app.timestamp()</span>
359
+ <span class="cstat-no" title="statement not covered" > this.snapshots[id] = {</span>
360
+ images: [],
361
+ createdAt: ts,
362
+ }
363
+ const canvasMsg = <span class="cstat-no" title="statement not covered" >CanvasNode(id.toString(), ts)</span>
364
+ <span class="cstat-no" title="statement not covered" > this.app.send(canvasMsg as Message)</span>
365
+ const int = <span class="cstat-no" title="statement not covered" >setInterval(<span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
366
+ const cid = <span class="cstat-no" title="statement not covered" >this.app.nodes.getID(node)</span>
367
+ const canvas = <span class="cstat-no" title="statement not covered" >cid ? this.app.nodes.getNode(cid) : undefined</span>
368
+ <span class="cstat-no" title="statement not covered" > if (!canvas || !hasTag(canvas, 'canvas') || canvas !== node) {</span>
369
+ <span class="cstat-no" title="statement not covered" > console.log('Canvas element not in sync')</span>
370
+ <span class="cstat-no" title="statement not covered" > clearInterval(int)</span>
371
+ } else {
372
+ const snapshot = <span class="cstat-no" title="statement not covered" >captureSnapshot(canvas, this.options.quality)</span>
373
+ <span class="cstat-no" title="statement not covered" > this.snapshots[id].images.push({ id: this.app.timestamp(), data: snapshot })</span>
374
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.snapshots[id].images.length &gt; 9) {</span>
375
+ <span class="cstat-no" title="statement not covered" > this.sendSnaps(this.snapshots[id].images, id, this.snapshots[id].createdAt)</span>
376
+ <span class="cstat-no" title="statement not covered" > this.snapshots[id].images = []</span>
377
+ }
378
+ }
379
+ }, this.interval)
380
+ <span class="cstat-no" title="statement not covered" > this.intervals.push(int)</span>
381
+ })
382
+ }
383
+ &nbsp;
384
+ <span class="fstat-no" title="function not covered" > sendSnaps(</span>images: { data: string; id: number }[], canvasId: number, createdAt: number) {
385
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (Object.keys(this.snapshots).length === 0) {</span>
386
+ <span class="cstat-no" title="statement not covered" > console.log(this.snapshots)</span>
387
+ <span class="cstat-no" title="statement not covered" > return</span>
388
+ }
389
+ const formData = <span class="cstat-no" title="statement not covered" >new FormData()</span>
390
+ <span class="cstat-no" title="statement not covered" > images.forEach(<span class="fstat-no" title="function not covered" >(s</span>napshot) =&gt; {</span>
391
+ const blob = <span class="cstat-no" title="statement not covered" >dataUrlToBlob(snapshot.data)[0]</span>
392
+ <span class="cstat-no" title="statement not covered" > formData.append('snapshot', blob, `${createdAt}_${canvasId}_${snapshot.id}.jpeg`)</span>
393
+ // saveImageData(snapshot.data, `${createdAt}_${canvasId}_${snapshot.id}.jpeg`)
394
+ })
395
+ &nbsp;
396
+ <span class="cstat-no" title="statement not covered" > fetch(this.app.options.ingestPoint + '/v1/web/images', {</span>
397
+ method: 'POST',
398
+ headers: {
399
+ Authorization: `Bearer ${this.app.session.getSessionToken() ?? ''}`,
400
+ },
401
+ body: formData,
402
+ })
403
+ .then(<span class="fstat-no" title="function not covered" >(r</span>) =&gt; {
404
+ <span class="cstat-no" title="statement not covered" > console.log('done', r)</span>
405
+ })
406
+ .catch(<span class="fstat-no" title="function not covered" >(e</span>) =&gt; {
407
+ <span class="cstat-no" title="statement not covered" > console.error('error saving canvas', e)</span>
408
+ })
409
+ }
410
+ &nbsp;
411
+ <span class="fstat-no" title="function not covered" > clear(</span>) {
412
+ <span class="cstat-no" title="statement not covered" > console.log('cleaning up')</span>
413
+ <span class="cstat-no" title="statement not covered" > this.intervals.forEach(<span class="fstat-no" title="function not covered" >(i</span>nt) =&gt; <span class="cstat-no" title="statement not covered" >clearInterval(int))</span></span>
414
+ <span class="cstat-no" title="statement not covered" > this.snapshots = {}</span>
415
+ }
416
+ }
417
+ &nbsp;
418
+ const qualityInt = <span class="cstat-no" title="statement not covered" >{</span>
419
+ low: 0.33,
420
+ medium: 0.55,
421
+ high: 0.8,
422
+ }
423
+ &nbsp;
424
+ function <span class="fstat-no" title="function not covered" >captureSnapshot(</span>canvas: HTMLCanvasElement, quality: 'low' | 'medium' | 'high' = <span class="branch-0 cbranch-no" title="branch not covered" >'medium')</span> {
425
+ const imageFormat = <span class="cstat-no" title="statement not covered" >'image/jpeg' </span>// or /png'
426
+ <span class="cstat-no" title="statement not covered" > return canvas.toDataURL(imageFormat, qualityInt[quality])</span>
427
+ }
428
+ &nbsp;
429
+ function <span class="fstat-no" title="function not covered" >dataUrlToBlob(</span>dataUrl: string): [Blob, Uint8Array] {
430
+ const [header, base64] = <span class="cstat-no" title="statement not covered" >dataUrl.split(',')</span>
431
+ // @ts-ignore
432
+ const mime = <span class="cstat-no" title="statement not covered" >header.match(/:(.*?);/)[1]</span>
433
+ const blobStr = <span class="cstat-no" title="statement not covered" >atob(base64)</span>
434
+ let n = <span class="cstat-no" title="statement not covered" >blobStr.length</span>
435
+ const u8arr = <span class="cstat-no" title="statement not covered" >new Uint8Array(n)</span>
436
+ &nbsp;
437
+ <span class="cstat-no" title="statement not covered" > while (n--) {</span>
438
+ <span class="cstat-no" title="statement not covered" > u8arr[n] = blobStr.charCodeAt(n)</span>
439
+ }
440
+ &nbsp;
441
+ <span class="cstat-no" title="statement not covered" > return [new Blob([u8arr], { type: mime }), u8arr]</span>
442
+ }
443
+ &nbsp;
444
+ function <span class="fstat-no" title="function not covered" >saveImageData(</span>imageDataUrl: string, name: string) {
445
+ const link = <span class="cstat-no" title="statement not covered" >document.createElement('a')</span>
446
+ <span class="cstat-no" title="statement not covered" > link.href = imageDataUrl</span>
447
+ <span class="cstat-no" title="statement not covered" > link.download = name</span>
448
+ <span class="cstat-no" title="statement not covered" > link.style.display = 'none'</span>
449
+ &nbsp;
450
+ <span class="cstat-no" title="statement not covered" > document.body.appendChild(link)</span>
451
+ <span class="cstat-no" title="statement not covered" > link.click()</span>
452
+ <span class="cstat-no" title="statement not covered" > document.body.removeChild(link)</span>
453
+ }
454
+ &nbsp;
455
+ <span class="cstat-no" title="statement not covered" >export default CanvasRecorder</span>
456
+ &nbsp;</pre></td></tr></table></pre>
457
+
458
+ <div class='push'></div><!-- for sticky footer -->
459
+ </div><!-- /wrapper -->
460
+ <div class='footer quiet pad2 space-top1 center small'>
461
+ Code coverage generated by
462
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
463
+ at 2023-11-21T10:02:27.844Z
464
+ </div>
465
+ <script src="../../prettify.js"></script>
466
+ <script>
467
+ window.onload = function () {
468
+ prettyPrint();
469
+ };
470
+ </script>
471
+ <script src="../../sorter.js"></script>
472
+ <script src="../../block-navigation.js"></script>
473
+ </body>
474
+ </html>
475
+