@openreplay/tracker 10.0.2 → 10.0.4

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 (75) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/cjs/app/index.js +1 -1
  3. package/cjs/index.js +1 -1
  4. package/cjs/modules/Network/fetchProxy.js +4 -2
  5. package/cjs/utils.js +16 -2
  6. package/coverage/clover.xml +1575 -733
  7. package/coverage/coverage-final.json +22 -14
  8. package/coverage/lcov-report/index.html +60 -45
  9. package/coverage/lcov-report/main/app/canvas.ts.html +475 -0
  10. package/coverage/lcov-report/main/app/guards.ts.html +5 -2
  11. package/coverage/lcov-report/main/app/index.html +34 -19
  12. package/coverage/lcov-report/main/app/index.ts.html +1086 -45
  13. package/coverage/lcov-report/main/app/logger.ts.html +1 -1
  14. package/coverage/lcov-report/main/app/messages.gen.ts.html +179 -146
  15. package/coverage/lcov-report/main/app/nodes.ts.html +1 -1
  16. package/coverage/lcov-report/main/app/observer/iframe_observer.ts.html +1 -1
  17. package/coverage/lcov-report/main/app/observer/iframe_offsets.ts.html +1 -1
  18. package/coverage/lcov-report/main/app/observer/index.html +1 -1
  19. package/coverage/lcov-report/main/app/observer/shadow_root_observer.ts.html +1 -1
  20. package/coverage/lcov-report/main/app/observer/top_observer.ts.html +1 -1
  21. package/coverage/lcov-report/main/app/sanitizer.ts.html +1 -1
  22. package/coverage/lcov-report/main/app/session.ts.html +1 -1
  23. package/coverage/lcov-report/main/app/ticker.ts.html +1 -1
  24. package/coverage/lcov-report/main/index.html +20 -20
  25. package/coverage/lcov-report/main/index.ts.html +274 -100
  26. package/coverage/lcov-report/main/modules/Network/beaconProxy.ts.html +19 -19
  27. package/coverage/lcov-report/main/modules/Network/fetchProxy.ts.html +97 -97
  28. package/coverage/lcov-report/main/modules/Network/index.html +65 -65
  29. package/coverage/lcov-report/main/modules/Network/index.ts.html +33 -33
  30. package/coverage/lcov-report/main/modules/Network/networkMessage.ts.html +82 -73
  31. package/coverage/lcov-report/main/modules/Network/utils.ts.html +34 -34
  32. package/coverage/lcov-report/main/modules/Network/xhrProxy.ts.html +13 -13
  33. package/coverage/lcov-report/main/modules/attributeSender.ts.html +1 -1
  34. package/coverage/lcov-report/main/modules/axiosSpy.ts.html +1 -1
  35. package/coverage/lcov-report/main/modules/conditionsManager.ts.html +799 -0
  36. package/coverage/lcov-report/main/modules/connection.ts.html +1 -1
  37. package/coverage/lcov-report/main/modules/console.ts.html +1 -1
  38. package/coverage/lcov-report/main/modules/constructedStyleSheets.ts.html +1 -1
  39. package/coverage/lcov-report/main/modules/cssrules.ts.html +1 -1
  40. package/coverage/lcov-report/main/modules/exception.ts.html +1 -1
  41. package/coverage/lcov-report/main/modules/featureFlags.ts.html +10 -7
  42. package/coverage/lcov-report/main/modules/focus.ts.html +1 -1
  43. package/coverage/lcov-report/main/modules/fonts.ts.html +1 -1
  44. package/coverage/lcov-report/main/modules/img.ts.html +1 -1
  45. package/coverage/lcov-report/main/modules/index.html +27 -12
  46. package/coverage/lcov-report/main/modules/input.ts.html +1 -1
  47. package/coverage/lcov-report/main/modules/mouse.ts.html +1 -1
  48. package/coverage/lcov-report/main/modules/network.ts.html +2 -2
  49. package/coverage/lcov-report/main/modules/performance.ts.html +1 -1
  50. package/coverage/lcov-report/main/modules/scroll.ts.html +1 -1
  51. package/coverage/lcov-report/main/modules/selection.ts.html +1 -1
  52. package/coverage/lcov-report/main/modules/tabs.ts.html +1 -1
  53. package/coverage/lcov-report/main/modules/timing.ts.html +1 -1
  54. package/coverage/lcov-report/main/modules/userTesting/SignalManager.ts.html +370 -0
  55. package/coverage/lcov-report/main/modules/userTesting/dnd.ts.html +10 -22
  56. package/coverage/lcov-report/main/modules/userTesting/index.html +57 -27
  57. package/coverage/lcov-report/main/modules/userTesting/index.ts.html +814 -115
  58. package/coverage/lcov-report/main/modules/userTesting/recorder.ts.html +136 -67
  59. package/coverage/lcov-report/main/modules/userTesting/styles.ts.html +111 -39
  60. package/coverage/lcov-report/main/modules/userTesting/utils.ts.html +364 -0
  61. package/coverage/lcov-report/main/modules/viewport.ts.html +1 -1
  62. package/coverage/lcov-report/main/utils.ts.html +101 -59
  63. package/coverage/lcov-report/webworker/BatchWriter.ts.html +1 -1
  64. package/coverage/lcov-report/webworker/MessageEncoder.gen.ts.html +17 -5
  65. package/coverage/lcov-report/webworker/PrimitiveEncoder.ts.html +1 -1
  66. package/coverage/lcov-report/webworker/QueueSender.ts.html +1 -1
  67. package/coverage/lcov-report/webworker/index.html +9 -9
  68. package/coverage/lcov-report/webworker/index.ts.html +15 -9
  69. package/coverage/lcov.info +2699 -1150
  70. package/lib/app/index.js +1 -1
  71. package/lib/common/tsconfig.tsbuildinfo +1 -1
  72. package/lib/index.js +1 -1
  73. package/lib/modules/Network/fetchProxy.js +4 -2
  74. package/lib/utils.js +16 -2
  75. 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">47.82% </span>
26
+ <span class="strong">0% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>22/46</span>
28
+ <span class='fraction'>0/45</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
33
  <span class="strong">0% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>0/19</span>
35
+ <span class='fraction'>0/15</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">46.15% </span>
40
+ <span class="strong">0% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>6/13</span>
42
+ <span class='fraction'>0/13</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">50% </span>
47
+ <span class="strong">0% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>22/44</span>
49
+ <span class='fraction'>0/43</span>
50
50
  </div>
51
51
 
52
52
 
@@ -155,67 +155,104 @@
155
155
  <a name='L90'></a><a href='#L90'>90</a>
156
156
  <a name='L91'></a><a href='#L91'>91</a>
157
157
  <a name='L92'></a><a href='#L92'>92</a>
158
- <a name='L93'></a><a href='#L93'>93</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
159
182
  <span class="cline-any cline-neutral">&nbsp;</span>
160
- <span class="cline-any cline-yes">1x</span>
183
+ <span class="cline-any cline-no">&nbsp;</span>
161
184
  <span class="cline-any cline-neutral">&nbsp;</span>
162
185
  <span class="cline-any cline-neutral">&nbsp;</span>
163
186
  <span class="cline-any cline-neutral">&nbsp;</span>
164
187
  <span class="cline-any cline-neutral">&nbsp;</span>
165
- <span class="cline-any cline-yes">1x</span>
166
- <span class="cline-any cline-yes">2x</span>
167
- <span class="cline-any cline-yes">2x</span>
168
- <span class="cline-any cline-yes">2x</span>
169
- <span class="cline-any cline-yes">2x</span>
188
+ <span class="cline-any cline-no">&nbsp;</span>
189
+ <span class="cline-any cline-no">&nbsp;</span>
190
+ <span class="cline-any cline-no">&nbsp;</span>
191
+ <span class="cline-any cline-no">&nbsp;</span>
192
+ <span class="cline-any cline-no">&nbsp;</span>
193
+ <span class="cline-any cline-neutral">&nbsp;</span>
194
+ <span class="cline-any cline-no">&nbsp;</span>
170
195
  <span class="cline-any cline-neutral">&nbsp;</span>
171
- <span class="cline-any cline-yes">2x</span>
172
196
  <span class="cline-any cline-neutral">&nbsp;</span>
173
197
  <span class="cline-any cline-neutral">&nbsp;</span>
174
- <span class="cline-any cline-yes">2x</span>
175
198
  <span class="cline-any cline-neutral">&nbsp;</span>
176
- <span class="cline-any cline-yes">2x</span>
177
- <span class="cline-any cline-yes">2x</span>
178
- <span class="cline-any cline-yes">2x</span>
179
199
  <span class="cline-any cline-neutral">&nbsp;</span>
180
200
  <span class="cline-any cline-neutral">&nbsp;</span>
181
201
  <span class="cline-any cline-neutral">&nbsp;</span>
202
+ <span class="cline-any cline-no">&nbsp;</span>
182
203
  <span class="cline-any cline-neutral">&nbsp;</span>
183
- <span class="cline-any cline-yes">2x</span>
204
+ <span class="cline-any cline-no">&nbsp;</span>
205
+ <span class="cline-any cline-no">&nbsp;</span>
206
+ <span class="cline-any cline-no">&nbsp;</span>
184
207
  <span class="cline-any cline-neutral">&nbsp;</span>
185
208
  <span class="cline-any cline-neutral">&nbsp;</span>
186
209
  <span class="cline-any cline-neutral">&nbsp;</span>
187
- <span class="cline-any cline-yes">2x</span>
188
210
  <span class="cline-any cline-neutral">&nbsp;</span>
189
- <span class="cline-any cline-yes">2x</span>
190
- <span class="cline-any cline-yes">1x</span>
191
211
  <span class="cline-any cline-no">&nbsp;</span>
192
212
  <span class="cline-any cline-neutral">&nbsp;</span>
193
213
  <span class="cline-any cline-neutral">&nbsp;</span>
194
214
  <span class="cline-any cline-neutral">&nbsp;</span>
195
- <span class="cline-any cline-yes">2x</span>
215
+ <span class="cline-any cline-no">&nbsp;</span>
196
216
  <span class="cline-any cline-neutral">&nbsp;</span>
197
217
  <span class="cline-any cline-no">&nbsp;</span>
218
+ <span class="cline-any cline-no">&nbsp;</span>
219
+ <span class="cline-any cline-no">&nbsp;</span>
198
220
  <span class="cline-any cline-neutral">&nbsp;</span>
199
221
  <span class="cline-any cline-neutral">&nbsp;</span>
200
222
  <span class="cline-any cline-neutral">&nbsp;</span>
223
+ <span class="cline-any cline-no">&nbsp;</span>
201
224
  <span class="cline-any cline-neutral">&nbsp;</span>
202
- <span class="cline-any cline-yes">1x</span>
203
- <span class="cline-any cline-yes">1x</span>
225
+ <span class="cline-any cline-no">&nbsp;</span>
204
226
  <span class="cline-any cline-neutral">&nbsp;</span>
205
- <span class="cline-any cline-yes">1x</span>
206
- <span class="cline-any cline-yes">1x</span>
207
227
  <span class="cline-any cline-neutral">&nbsp;</span>
208
228
  <span class="cline-any cline-neutral">&nbsp;</span>
209
- <span class="cline-any cline-yes">1x</span>
210
229
  <span class="cline-any cline-neutral">&nbsp;</span>
230
+ <span class="cline-any cline-no">&nbsp;</span>
231
+ <span class="cline-any cline-no">&nbsp;</span>
211
232
  <span class="cline-any cline-neutral">&nbsp;</span>
212
- <span class="cline-any cline-yes">1x</span>
233
+ <span class="cline-any cline-no">&nbsp;</span>
234
+ <span class="cline-any cline-no">&nbsp;</span>
213
235
  <span class="cline-any cline-neutral">&nbsp;</span>
214
236
  <span class="cline-any cline-neutral">&nbsp;</span>
237
+ <span class="cline-any cline-no">&nbsp;</span>
215
238
  <span class="cline-any cline-neutral">&nbsp;</span>
216
239
  <span class="cline-any cline-neutral">&nbsp;</span>
217
240
  <span class="cline-any cline-no">&nbsp;</span>
241
+ <span class="cline-any cline-neutral">&nbsp;</span>
242
+ <span class="cline-any cline-neutral">&nbsp;</span>
243
+ <span class="cline-any cline-neutral">&nbsp;</span>
244
+ <span class="cline-any cline-neutral">&nbsp;</span>
218
245
  <span class="cline-any cline-no">&nbsp;</span>
246
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
219
256
  <span class="cline-any cline-no">&nbsp;</span>
220
257
  <span class="cline-any cline-no">&nbsp;</span>
221
258
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -224,11 +261,20 @@
224
261
  <span class="cline-any cline-neutral">&nbsp;</span>
225
262
  <span class="cline-any cline-neutral">&nbsp;</span>
226
263
  <span class="cline-any cline-no">&nbsp;</span>
227
- <span class="cline-any cline-no">&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-neutral">&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>
228
273
  <span class="cline-any cline-no">&nbsp;</span>
229
274
  <span class="cline-any cline-neutral">&nbsp;</span>
230
275
  <span class="cline-any cline-neutral">&nbsp;</span>
231
276
  <span class="cline-any cline-neutral">&nbsp;</span>
277
+ <span class="cline-any cline-neutral">&nbsp;</span>
232
278
  <span class="cline-any cline-no">&nbsp;</span>
233
279
  <span class="cline-any cline-no">&nbsp;</span>
234
280
  <span class="cline-any cline-no">&nbsp;</span>
@@ -249,75 +295,98 @@
249
295
  <span class="cline-any cline-neutral">&nbsp;</span>
250
296
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import App from '../../app/index.js'
251
297
  &nbsp;
252
- export const Quality = {
298
+ export const <span class="cstat-no" title="statement not covered" >Quality = {</span>
253
299
  Standard: { width: 1280, height: 720 },
254
300
  High: { width: 1920, height: 1080 },
255
301
  }
256
302
  &nbsp;
257
- export default class Recorder {
258
- private mediaRecorder: MediaRecorder | null = null
259
- private recordedChunks: Blob[] = []
260
- private stream: MediaStream | null = null
261
- private recStartTs: number | null = null
303
+ <span class="cstat-no" title="statement not covered" >export default class R</span>ecorder {
304
+ private <span class="cstat-no" title="statement not covered" >mediaRecorder: MediaRecorder | null = null</span>
305
+ private <span class="cstat-no" title="statement not covered" >recordedChunks: Blob[] = []</span>
306
+ private <span class="cstat-no" title="statement not covered" >stream: MediaStream | null = null</span>
307
+ private <span class="cstat-no" title="statement not covered" >recStartTs: number | null = null</span>
262
308
  &nbsp;
263
- constructor(private readonly app: App) {}
309
+ <span class="fstat-no" title="function not covered" > constructor(private readonly <span class="cstat-no" title="statement not covered" >a</span>pp: App)</span> {}
264
310
  &nbsp;
265
- async startRecording(fps: number, quality: (typeof Quality)[keyof typeof Quality]) {
266
- this.recStartTs = this.app.timestamp()
311
+ async <span class="fstat-no" title="function not covered" >startRecording(</span>
312
+ fps: number,
313
+ quality: (typeof Quality)[keyof typeof Quality],
314
+ micReq: boolean,
315
+ camReq: boolean,
316
+ ) {
317
+ <span class="cstat-no" title="statement not covered" > this.recStartTs = this.app.timestamp()</span>
267
318
  &nbsp;
268
- const videoConstraints: MediaTrackConstraints = quality
269
- try {
270
- this.stream = await navigator.mediaDevices.getUserMedia({
271
- video: { ...videoConstraints, frameRate: { ideal: fps } },
272
- audio: true,
319
+ const videoConstraints: MediaTrackConstraints = <span class="cstat-no" title="statement not covered" >quality</span>
320
+ <span class="cstat-no" title="statement not covered" > try {</span>
321
+ <span class="cstat-no" title="statement not covered" > this.stream = await navigator.mediaDevices.getUserMedia({</span>
322
+ video: camReq ? { ...videoConstraints, frameRate: { ideal: fps } } : false,
323
+ audio: micReq,
273
324
  })
274
325
  &nbsp;
275
- this.mediaRecorder = new MediaRecorder(this.stream, {
326
+ <span class="cstat-no" title="statement not covered" > this.mediaRecorder = new MediaRecorder(this.stream, {</span>
276
327
  mimeType: 'video/webm;codecs=vp9',
277
328
  })
278
329
  &nbsp;
279
- this.recordedChunks = []
330
+ <span class="cstat-no" title="statement not covered" > this.recordedChunks = []</span>
280
331
  &nbsp;
281
- this.mediaRecorder.ondataavailable = (event) =&gt; {
282
- <span class="missing-if-branch" title="if path not taken" >I</span>if (event.data.size &gt; 0) {
332
+ <span class="cstat-no" title="statement not covered" > this.mediaRecorder.ondataavailable = <span class="fstat-no" title="function not covered" >(e</span>vent) =&gt; {</span>
333
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (event.data.size &gt; 0) {</span>
283
334
  <span class="cstat-no" title="statement not covered" > this.recordedChunks.push(event.data)</span>
284
335
  }
285
336
  }
286
337
  &nbsp;
287
- this.mediaRecorder.start()
338
+ <span class="cstat-no" title="statement not covered" > this.mediaRecorder.start()</span>
288
339
  } catch (error) {
289
340
  <span class="cstat-no" title="statement not covered" > console.error(error)</span>
290
341
  }
291
342
  }
292
343
  &nbsp;
293
- async stopRecording() {
294
- return new Promise&lt;Blob&gt;((resolve) =&gt; {
295
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.mediaRecorder) <span class="cstat-no" title="statement not covered" >return</span>
344
+ async <span class="fstat-no" title="function not covered" >stopRecording(</span>) {
345
+ <span class="cstat-no" title="statement not covered" > return new Promise&lt;Blob&gt;(<span class="fstat-no" title="function not covered" >(r</span>esolve) =&gt; {</span>
346
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.mediaRecorder) <span class="cstat-no" title="statement not covered" >return</span></span>
296
347
  &nbsp;
297
- this.mediaRecorder.onstop = () =&gt; {
298
- const blob = new Blob(this.recordedChunks, {
348
+ <span class="cstat-no" title="statement not covered" > this.mediaRecorder.onstop = <span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
349
+ const blob = <span class="cstat-no" title="statement not covered" >new Blob(this.recordedChunks, {</span>
299
350
  type: 'video/webm',
300
351
  })
301
- resolve(blob)
352
+ <span class="cstat-no" title="statement not covered" > resolve(blob)</span>
302
353
  }
303
354
  &nbsp;
304
- this.mediaRecorder.stop()
355
+ <span class="cstat-no" title="statement not covered" > this.mediaRecorder.stop()</span>
305
356
  })
306
357
  }
307
358
  &nbsp;
308
359
  async <span class="fstat-no" title="function not covered" >sendToAPI(</span>) {
309
360
  const blob = <span class="cstat-no" title="statement not covered" >await this.stopRecording()</span>
310
- const formData = <span class="cstat-no" title="statement not covered" >new FormData()</span>
311
- <span class="cstat-no" title="statement not covered" > formData.append('file', blob, 'record.webm')</span>
312
- <span class="cstat-no" title="statement not covered" > formData.append('start', this.recStartTs?.toString() ?? '')</span>
361
+ // const formData = new FormData()
362
+ // formData.append('file', blob, 'record.webm')
363
+ // formData.append('start', this.recStartTs?.toString() ?? '')
313
364
  &nbsp;
314
- <span class="cstat-no" title="statement not covered" > fetch('https://testapi.com/save-file', {</span>
315
- method: 'POST',
316
- body: formData,
365
+ <span class="cstat-no" title="statement not covered" > return fetch(`${this.app.options.ingestPoint}/v1/web/uxt/upload-url`, {</span>
366
+ headers: {
367
+ Authorization: `Bearer ${this.app.session.getSessionToken() as string}`,
368
+ },
317
369
  })
318
- .then(<span class="fstat-no" title="function not covered" >(r</span>esponse) =&gt; <span class="cstat-no" title="statement not covered" >response.json())</span>
319
- .then(<span class="fstat-no" title="function not covered" >(d</span>ata) =&gt; <span class="cstat-no" title="statement not covered" >console.log(data))</span>
320
- .catch(<span class="fstat-no" title="function not covered" >(e</span>rror) =&gt; <span class="cstat-no" title="statement not covered" >console.error(error))</span>
370
+ .then(<span class="fstat-no" title="function not covered" >(r</span>) =&gt; {
371
+ <span class="cstat-no" title="statement not covered" > if (r.ok) {</span>
372
+ <span class="cstat-no" title="statement not covered" > return r.json()</span>
373
+ } else {
374
+ <span class="cstat-no" title="statement not covered" > throw new Error('Failed to get upload url')</span>
375
+ }
376
+ })
377
+ .then(<span class="fstat-no" title="function not covered" >({</span> url }) =&gt; {
378
+ <span class="cstat-no" title="statement not covered" > return fetch(url, {</span>
379
+ method: 'PUT',
380
+ headers: {
381
+ 'Content-Type': 'video/webm',
382
+ },
383
+ body: blob,
384
+ })
385
+ })
386
+ .catch(console.error)
387
+ .finally(<span class="fstat-no" title="function not covered" >() =</span>&gt; {
388
+ <span class="cstat-no" title="statement not covered" > this.discard()</span>
389
+ })
321
390
  }
322
391
  &nbsp;
323
392
  async <span class="fstat-no" title="function not covered" >saveToFile(</span>fileName = <span class="branch-0 cbranch-no" title="branch not covered" >'recorded-video.webm')</span> {
@@ -346,7 +415,7 @@ export default class Recorder {
346
415
  <div class='footer quiet pad2 space-top1 center small'>
347
416
  Code coverage generated by
348
417
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
349
- at 2023-10-17T13:37:58.420Z
418
+ at 2023-12-15T15:55:44.965Z
350
419
  </div>
351
420
  <script src="../../../prettify.js"></script>
352
421
  <script>