@openreplay/tracker 9.0.12 → 9.0.14

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 (79) hide show
  1. package/cjs/app/index.js +2 -2
  2. package/cjs/index.js +3 -2
  3. package/cjs/modules/Network/fetchProxy.d.ts +1 -1
  4. package/cjs/modules/Network/fetchProxy.js +2 -0
  5. package/cjs/modules/mouse.js +1 -0
  6. package/cjs/modules/network.js +1 -0
  7. package/coverage/clover.xml +1783 -995
  8. package/coverage/coverage-final.json +30 -25
  9. package/coverage/lcov-report/index.html +45 -45
  10. package/coverage/lcov-report/main/app/canvas.ts.html +535 -0
  11. package/coverage/lcov-report/main/app/guards.ts.html +5 -2
  12. package/coverage/lcov-report/main/app/index.html +34 -19
  13. package/coverage/lcov-report/main/app/index.ts.html +1769 -116
  14. package/coverage/lcov-report/main/app/logger.ts.html +25 -91
  15. package/coverage/lcov-report/main/app/messages.gen.ts.html +122 -5
  16. package/coverage/lcov-report/main/app/nodes.ts.html +26 -8
  17. package/coverage/lcov-report/main/app/observer/iframe_observer.ts.html +2 -2
  18. package/coverage/lcov-report/main/app/observer/iframe_offsets.ts.html +1 -1
  19. package/coverage/lcov-report/main/app/observer/index.html +1 -1
  20. package/coverage/lcov-report/main/app/observer/shadow_root_observer.ts.html +2 -2
  21. package/coverage/lcov-report/main/app/observer/top_observer.ts.html +1 -1
  22. package/coverage/lcov-report/main/app/sanitizer.ts.html +12 -3
  23. package/coverage/lcov-report/main/app/session.ts.html +30 -9
  24. package/coverage/lcov-report/main/app/ticker.ts.html +1 -1
  25. package/coverage/lcov-report/main/index.html +13 -13
  26. package/coverage/lcov-report/main/index.ts.html +468 -102
  27. package/coverage/lcov-report/main/modules/Network/beaconProxy.ts.html +1 -1
  28. package/coverage/lcov-report/main/modules/Network/fetchProxy.ts.html +27 -6
  29. package/coverage/lcov-report/main/modules/Network/index.html +13 -13
  30. package/coverage/lcov-report/main/modules/Network/index.ts.html +1 -1
  31. package/coverage/lcov-report/main/modules/Network/networkMessage.ts.html +17 -8
  32. package/coverage/lcov-report/main/modules/Network/utils.ts.html +1 -1
  33. package/coverage/lcov-report/main/modules/Network/xhrProxy.ts.html +3 -3
  34. package/coverage/lcov-report/main/modules/attributeSender.ts.html +13 -4
  35. package/coverage/lcov-report/main/modules/axiosSpy.ts.html +1 -1
  36. package/coverage/lcov-report/main/modules/conditionsManager.ts.html +1399 -0
  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 +42 -30
  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 +10 -7
  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 +23 -20
  46. package/coverage/lcov-report/main/modules/index.html +50 -20
  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/tagWatcher.ts.html +334 -0
  55. package/coverage/lcov-report/main/modules/timing.ts.html +42 -6
  56. package/coverage/lcov-report/main/modules/userTesting/SignalManager.ts.html +370 -0
  57. package/coverage/lcov-report/main/modules/userTesting/dnd.ts.html +10 -22
  58. package/coverage/lcov-report/main/modules/userTesting/index.html +57 -27
  59. package/coverage/lcov-report/main/modules/userTesting/index.ts.html +814 -115
  60. package/coverage/lcov-report/main/modules/userTesting/recorder.ts.html +136 -67
  61. package/coverage/lcov-report/main/modules/userTesting/styles.ts.html +111 -39
  62. package/coverage/lcov-report/main/modules/userTesting/utils.ts.html +364 -0
  63. package/coverage/lcov-report/main/modules/viewport.ts.html +1 -1
  64. package/coverage/lcov-report/main/utils.ts.html +264 -6
  65. package/coverage/lcov-report/webworker/BatchWriter.ts.html +23 -5
  66. package/coverage/lcov-report/webworker/MessageEncoder.gen.ts.html +41 -5
  67. package/coverage/lcov-report/webworker/PrimitiveEncoder.ts.html +1 -1
  68. package/coverage/lcov-report/webworker/QueueSender.ts.html +18 -6
  69. package/coverage/lcov-report/webworker/index.html +17 -17
  70. package/coverage/lcov-report/webworker/index.ts.html +24 -15
  71. package/coverage/lcov.info +3283 -1718
  72. package/lib/app/index.js +2 -2
  73. package/lib/common/tsconfig.tsbuildinfo +1 -1
  74. package/lib/index.js +3 -2
  75. package/lib/modules/Network/fetchProxy.d.ts +1 -1
  76. package/lib/modules/Network/fetchProxy.js +2 -0
  77. package/lib/modules/mouse.js +1 -0
  78. package/lib/modules/network.js +1 -0
  79. package/package.json +1 -1
@@ -25,28 +25,28 @@
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">0% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>0/168</span>
28
+ <span class='fraction'>0/217</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/77</span>
35
+ <span class='fraction'>0/120</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
40
  <span class="strong">0% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>0/34</span>
42
+ <span class='fraction'>0/41</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">0% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>0/166</span>
49
+ <span class='fraction'>0/215</span>
50
50
  </div>
51
51
 
52
52
 
@@ -439,7 +439,129 @@
439
439
  <a name='L374'></a><a href='#L374'>374</a>
440
440
  <a name='L375'></a><a href='#L375'>375</a>
441
441
  <a name='L376'></a><a href='#L376'>376</a>
442
- <a name='L377'></a><a href='#L377'>377</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
442
+ <a name='L377'></a><a href='#L377'>377</a>
443
+ <a name='L378'></a><a href='#L378'>378</a>
444
+ <a name='L379'></a><a href='#L379'>379</a>
445
+ <a name='L380'></a><a href='#L380'>380</a>
446
+ <a name='L381'></a><a href='#L381'>381</a>
447
+ <a name='L382'></a><a href='#L382'>382</a>
448
+ <a name='L383'></a><a href='#L383'>383</a>
449
+ <a name='L384'></a><a href='#L384'>384</a>
450
+ <a name='L385'></a><a href='#L385'>385</a>
451
+ <a name='L386'></a><a href='#L386'>386</a>
452
+ <a name='L387'></a><a href='#L387'>387</a>
453
+ <a name='L388'></a><a href='#L388'>388</a>
454
+ <a name='L389'></a><a href='#L389'>389</a>
455
+ <a name='L390'></a><a href='#L390'>390</a>
456
+ <a name='L391'></a><a href='#L391'>391</a>
457
+ <a name='L392'></a><a href='#L392'>392</a>
458
+ <a name='L393'></a><a href='#L393'>393</a>
459
+ <a name='L394'></a><a href='#L394'>394</a>
460
+ <a name='L395'></a><a href='#L395'>395</a>
461
+ <a name='L396'></a><a href='#L396'>396</a>
462
+ <a name='L397'></a><a href='#L397'>397</a>
463
+ <a name='L398'></a><a href='#L398'>398</a>
464
+ <a name='L399'></a><a href='#L399'>399</a>
465
+ <a name='L400'></a><a href='#L400'>400</a>
466
+ <a name='L401'></a><a href='#L401'>401</a>
467
+ <a name='L402'></a><a href='#L402'>402</a>
468
+ <a name='L403'></a><a href='#L403'>403</a>
469
+ <a name='L404'></a><a href='#L404'>404</a>
470
+ <a name='L405'></a><a href='#L405'>405</a>
471
+ <a name='L406'></a><a href='#L406'>406</a>
472
+ <a name='L407'></a><a href='#L407'>407</a>
473
+ <a name='L408'></a><a href='#L408'>408</a>
474
+ <a name='L409'></a><a href='#L409'>409</a>
475
+ <a name='L410'></a><a href='#L410'>410</a>
476
+ <a name='L411'></a><a href='#L411'>411</a>
477
+ <a name='L412'></a><a href='#L412'>412</a>
478
+ <a name='L413'></a><a href='#L413'>413</a>
479
+ <a name='L414'></a><a href='#L414'>414</a>
480
+ <a name='L415'></a><a href='#L415'>415</a>
481
+ <a name='L416'></a><a href='#L416'>416</a>
482
+ <a name='L417'></a><a href='#L417'>417</a>
483
+ <a name='L418'></a><a href='#L418'>418</a>
484
+ <a name='L419'></a><a href='#L419'>419</a>
485
+ <a name='L420'></a><a href='#L420'>420</a>
486
+ <a name='L421'></a><a href='#L421'>421</a>
487
+ <a name='L422'></a><a href='#L422'>422</a>
488
+ <a name='L423'></a><a href='#L423'>423</a>
489
+ <a name='L424'></a><a href='#L424'>424</a>
490
+ <a name='L425'></a><a href='#L425'>425</a>
491
+ <a name='L426'></a><a href='#L426'>426</a>
492
+ <a name='L427'></a><a href='#L427'>427</a>
493
+ <a name='L428'></a><a href='#L428'>428</a>
494
+ <a name='L429'></a><a href='#L429'>429</a>
495
+ <a name='L430'></a><a href='#L430'>430</a>
496
+ <a name='L431'></a><a href='#L431'>431</a>
497
+ <a name='L432'></a><a href='#L432'>432</a>
498
+ <a name='L433'></a><a href='#L433'>433</a>
499
+ <a name='L434'></a><a href='#L434'>434</a>
500
+ <a name='L435'></a><a href='#L435'>435</a>
501
+ <a name='L436'></a><a href='#L436'>436</a>
502
+ <a name='L437'></a><a href='#L437'>437</a>
503
+ <a name='L438'></a><a href='#L438'>438</a>
504
+ <a name='L439'></a><a href='#L439'>439</a>
505
+ <a name='L440'></a><a href='#L440'>440</a>
506
+ <a name='L441'></a><a href='#L441'>441</a>
507
+ <a name='L442'></a><a href='#L442'>442</a>
508
+ <a name='L443'></a><a href='#L443'>443</a>
509
+ <a name='L444'></a><a href='#L444'>444</a>
510
+ <a name='L445'></a><a href='#L445'>445</a>
511
+ <a name='L446'></a><a href='#L446'>446</a>
512
+ <a name='L447'></a><a href='#L447'>447</a>
513
+ <a name='L448'></a><a href='#L448'>448</a>
514
+ <a name='L449'></a><a href='#L449'>449</a>
515
+ <a name='L450'></a><a href='#L450'>450</a>
516
+ <a name='L451'></a><a href='#L451'>451</a>
517
+ <a name='L452'></a><a href='#L452'>452</a>
518
+ <a name='L453'></a><a href='#L453'>453</a>
519
+ <a name='L454'></a><a href='#L454'>454</a>
520
+ <a name='L455'></a><a href='#L455'>455</a>
521
+ <a name='L456'></a><a href='#L456'>456</a>
522
+ <a name='L457'></a><a href='#L457'>457</a>
523
+ <a name='L458'></a><a href='#L458'>458</a>
524
+ <a name='L459'></a><a href='#L459'>459</a>
525
+ <a name='L460'></a><a href='#L460'>460</a>
526
+ <a name='L461'></a><a href='#L461'>461</a>
527
+ <a name='L462'></a><a href='#L462'>462</a>
528
+ <a name='L463'></a><a href='#L463'>463</a>
529
+ <a name='L464'></a><a href='#L464'>464</a>
530
+ <a name='L465'></a><a href='#L465'>465</a>
531
+ <a name='L466'></a><a href='#L466'>466</a>
532
+ <a name='L467'></a><a href='#L467'>467</a>
533
+ <a name='L468'></a><a href='#L468'>468</a>
534
+ <a name='L469'></a><a href='#L469'>469</a>
535
+ <a name='L470'></a><a href='#L470'>470</a>
536
+ <a name='L471'></a><a href='#L471'>471</a>
537
+ <a name='L472'></a><a href='#L472'>472</a>
538
+ <a name='L473'></a><a href='#L473'>473</a>
539
+ <a name='L474'></a><a href='#L474'>474</a>
540
+ <a name='L475'></a><a href='#L475'>475</a>
541
+ <a name='L476'></a><a href='#L476'>476</a>
542
+ <a name='L477'></a><a href='#L477'>477</a>
543
+ <a name='L478'></a><a href='#L478'>478</a>
544
+ <a name='L479'></a><a href='#L479'>479</a>
545
+ <a name='L480'></a><a href='#L480'>480</a>
546
+ <a name='L481'></a><a href='#L481'>481</a>
547
+ <a name='L482'></a><a href='#L482'>482</a>
548
+ <a name='L483'></a><a href='#L483'>483</a>
549
+ <a name='L484'></a><a href='#L484'>484</a>
550
+ <a name='L485'></a><a href='#L485'>485</a>
551
+ <a name='L486'></a><a href='#L486'>486</a>
552
+ <a name='L487'></a><a href='#L487'>487</a>
553
+ <a name='L488'></a><a href='#L488'>488</a>
554
+ <a name='L489'></a><a href='#L489'>489</a>
555
+ <a name='L490'></a><a href='#L490'>490</a>
556
+ <a name='L491'></a><a href='#L491'>491</a>
557
+ <a name='L492'></a><a href='#L492'>492</a>
558
+ <a name='L493'></a><a href='#L493'>493</a>
559
+ <a name='L494'></a><a href='#L494'>494</a>
560
+ <a name='L495'></a><a href='#L495'>495</a>
561
+ <a name='L496'></a><a href='#L496'>496</a>
562
+ <a name='L497'></a><a href='#L497'>497</a>
563
+ <a name='L498'></a><a href='#L498'>498</a>
564
+ <a name='L499'></a><a href='#L499'>499</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
443
565
  <span class="cline-any cline-neutral">&nbsp;</span>
444
566
  <span class="cline-any cline-no">&nbsp;</span>
445
567
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -469,10 +591,10 @@
469
591
  <span class="cline-any cline-no">&nbsp;</span>
470
592
  <span class="cline-any cline-no">&nbsp;</span>
471
593
  <span class="cline-any cline-no">&nbsp;</span>
472
- <span class="cline-any cline-no">&nbsp;</span>
473
594
  <span class="cline-any cline-neutral">&nbsp;</span>
474
595
  <span class="cline-any cline-no">&nbsp;</span>
475
- <span class="cline-any cline-no">&nbsp;</span>
596
+ <span class="cline-any cline-neutral">&nbsp;</span>
597
+ <span class="cline-any cline-neutral">&nbsp;</span>
476
598
  <span class="cline-any cline-neutral">&nbsp;</span>
477
599
  <span class="cline-any cline-neutral">&nbsp;</span>
478
600
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -538,7 +660,6 @@
538
660
  <span class="cline-any cline-no">&nbsp;</span>
539
661
  <span class="cline-any cline-neutral">&nbsp;</span>
540
662
  <span class="cline-any cline-neutral">&nbsp;</span>
541
- <span class="cline-any cline-neutral">&nbsp;</span>
542
663
  <span class="cline-any cline-no">&nbsp;</span>
543
664
  <span class="cline-any cline-neutral">&nbsp;</span>
544
665
  <span class="cline-any cline-no">&nbsp;</span>
@@ -555,21 +676,48 @@
555
676
  <span class="cline-any cline-neutral">&nbsp;</span>
556
677
  <span class="cline-any cline-no">&nbsp;</span>
557
678
  <span class="cline-any cline-neutral">&nbsp;</span>
558
- <span class="cline-any cline-neutral">&nbsp;</span>
559
679
  <span class="cline-any cline-no">&nbsp;</span>
680
+ <span class="cline-any cline-no">&nbsp;</span>
681
+ <span class="cline-any cline-no">&nbsp;</span>
682
+ <span class="cline-any cline-neutral">&nbsp;</span>
683
+ <span class="cline-any cline-neutral">&nbsp;</span>
684
+ <span class="cline-any cline-neutral">&nbsp;</span>
685
+ <span class="cline-any cline-neutral">&nbsp;</span>
686
+ <span class="cline-any cline-neutral">&nbsp;</span>
687
+ <span class="cline-any cline-neutral">&nbsp;</span>
560
688
  <span class="cline-any cline-neutral">&nbsp;</span>
561
689
  <span class="cline-any cline-neutral">&nbsp;</span>
562
690
  <span class="cline-any cline-neutral">&nbsp;</span>
691
+ <span class="cline-any cline-neutral">&nbsp;</span>
692
+ <span class="cline-any cline-no">&nbsp;</span>
563
693
  <span class="cline-any cline-no">&nbsp;</span>
564
694
  <span class="cline-any cline-neutral">&nbsp;</span>
695
+ <span class="cline-any cline-no">&nbsp;</span>
696
+ <span class="cline-any cline-no">&nbsp;</span>
697
+ <span class="cline-any cline-no">&nbsp;</span>
698
+ <span class="cline-any cline-no">&nbsp;</span>
699
+ <span class="cline-any cline-no">&nbsp;</span>
700
+ <span class="cline-any cline-neutral">&nbsp;</span>
701
+ <span class="cline-any cline-no">&nbsp;</span>
702
+ <span class="cline-any cline-no">&nbsp;</span>
703
+ <span class="cline-any cline-no">&nbsp;</span>
704
+ <span class="cline-any cline-no">&nbsp;</span>
565
705
  <span class="cline-any cline-neutral">&nbsp;</span>
566
706
  <span class="cline-any cline-neutral">&nbsp;</span>
707
+ <span class="cline-any cline-no">&nbsp;</span>
708
+ <span class="cline-any cline-no">&nbsp;</span>
709
+ <span class="cline-any cline-no">&nbsp;</span>
567
710
  <span class="cline-any cline-neutral">&nbsp;</span>
568
711
  <span class="cline-any cline-neutral">&nbsp;</span>
569
712
  <span class="cline-any cline-neutral">&nbsp;</span>
570
713
  <span class="cline-any cline-neutral">&nbsp;</span>
714
+ <span class="cline-any cline-no">&nbsp;</span>
715
+ <span class="cline-any cline-no">&nbsp;</span>
716
+ <span class="cline-any cline-no">&nbsp;</span>
571
717
  <span class="cline-any cline-neutral">&nbsp;</span>
572
718
  <span class="cline-any cline-neutral">&nbsp;</span>
719
+ <span class="cline-any cline-no">&nbsp;</span>
720
+ <span class="cline-any cline-no">&nbsp;</span>
573
721
  <span class="cline-any cline-neutral">&nbsp;</span>
574
722
  <span class="cline-any cline-neutral">&nbsp;</span>
575
723
  <span class="cline-any cline-no">&nbsp;</span>
@@ -592,12 +740,14 @@
592
740
  <span class="cline-any cline-no">&nbsp;</span>
593
741
  <span class="cline-any cline-no">&nbsp;</span>
594
742
  <span class="cline-any cline-no">&nbsp;</span>
743
+ <span class="cline-any cline-neutral">&nbsp;</span>
744
+ <span class="cline-any cline-no">&nbsp;</span>
595
745
  <span class="cline-any cline-no">&nbsp;</span>
596
746
  <span class="cline-any cline-neutral">&nbsp;</span>
597
747
  <span class="cline-any cline-no">&nbsp;</span>
598
748
  <span class="cline-any cline-no">&nbsp;</span>
599
749
  <span class="cline-any cline-no">&nbsp;</span>
600
- <span class="cline-any cline-neutral">&nbsp;</span>
750
+ <span class="cline-any cline-no">&nbsp;</span>
601
751
  <span class="cline-any cline-no">&nbsp;</span>
602
752
  <span class="cline-any cline-neutral">&nbsp;</span>
603
753
  <span class="cline-any cline-no">&nbsp;</span>
@@ -606,6 +756,8 @@
606
756
  <span class="cline-any cline-neutral">&nbsp;</span>
607
757
  <span class="cline-any cline-no">&nbsp;</span>
608
758
  <span class="cline-any cline-no">&nbsp;</span>
759
+ <span class="cline-any cline-neutral">&nbsp;</span>
760
+ <span class="cline-any cline-no">&nbsp;</span>
609
761
  <span class="cline-any cline-no">&nbsp;</span>
610
762
  <span class="cline-any cline-no">&nbsp;</span>
611
763
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -615,23 +767,46 @@
615
767
  <span class="cline-any cline-neutral">&nbsp;</span>
616
768
  <span class="cline-any cline-neutral">&nbsp;</span>
617
769
  <span class="cline-any cline-neutral">&nbsp;</span>
770
+ <span class="cline-any cline-neutral">&nbsp;</span>
618
771
  <span class="cline-any cline-no">&nbsp;</span>
772
+ <span class="cline-any cline-no">&nbsp;</span>
773
+ <span class="cline-any cline-neutral">&nbsp;</span>
774
+ <span class="cline-any cline-neutral">&nbsp;</span>
775
+ <span class="cline-any cline-neutral">&nbsp;</span>
619
776
  <span class="cline-any cline-neutral">&nbsp;</span>
620
777
  <span class="cline-any cline-neutral">&nbsp;</span>
778
+ <span class="cline-any cline-neutral">&nbsp;</span>
779
+ <span class="cline-any cline-neutral">&nbsp;</span>
780
+ <span class="cline-any cline-no">&nbsp;</span>
621
781
  <span class="cline-any cline-no">&nbsp;</span>
622
782
  <span class="cline-any cline-no">&nbsp;</span>
623
783
  <span class="cline-any cline-no">&nbsp;</span>
784
+ <span class="cline-any cline-no">&nbsp;</span>
785
+ <span class="cline-any cline-no">&nbsp;</span>
786
+ <span class="cline-any cline-neutral">&nbsp;</span>
787
+ <span class="cline-any cline-neutral">&nbsp;</span>
788
+ <span class="cline-any cline-neutral">&nbsp;</span>
789
+ <span class="cline-any cline-neutral">&nbsp;</span>
790
+ <span class="cline-any cline-neutral">&nbsp;</span>
791
+ <span class="cline-any cline-neutral">&nbsp;</span>
792
+ <span class="cline-any cline-neutral">&nbsp;</span>
793
+ <span class="cline-any cline-neutral">&nbsp;</span>
794
+ <span class="cline-any cline-neutral">&nbsp;</span>
624
795
  <span class="cline-any cline-neutral">&nbsp;</span>
625
796
  <span class="cline-any cline-neutral">&nbsp;</span>
626
797
  <span class="cline-any cline-no">&nbsp;</span>
627
798
  <span class="cline-any cline-neutral">&nbsp;</span>
628
799
  <span class="cline-any cline-neutral">&nbsp;</span>
629
800
  <span class="cline-any cline-neutral">&nbsp;</span>
801
+ <span class="cline-any cline-no">&nbsp;</span>
802
+ <span class="cline-any cline-neutral">&nbsp;</span>
630
803
  <span class="cline-any cline-neutral">&nbsp;</span>
631
804
  <span class="cline-any cline-neutral">&nbsp;</span>
805
+ <span class="cline-any cline-no">&nbsp;</span>
632
806
  <span class="cline-any cline-neutral">&nbsp;</span>
633
807
  <span class="cline-any cline-neutral">&nbsp;</span>
634
808
  <span class="cline-any cline-neutral">&nbsp;</span>
809
+ <span class="cline-any cline-no">&nbsp;</span>
635
810
  <span class="cline-any cline-neutral">&nbsp;</span>
636
811
  <span class="cline-any cline-neutral">&nbsp;</span>
637
812
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -642,6 +817,9 @@
642
817
  <span class="cline-any cline-no">&nbsp;</span>
643
818
  <span class="cline-any cline-neutral">&nbsp;</span>
644
819
  <span class="cline-any cline-neutral">&nbsp;</span>
820
+ <span class="cline-any cline-no">&nbsp;</span>
821
+ <span class="cline-any cline-no">&nbsp;</span>
822
+ <span class="cline-any cline-no">&nbsp;</span>
645
823
  <span class="cline-any cline-neutral">&nbsp;</span>
646
824
  <span class="cline-any cline-no">&nbsp;</span>
647
825
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -652,44 +830,114 @@
652
830
  <span class="cline-any cline-neutral">&nbsp;</span>
653
831
  <span class="cline-any cline-neutral">&nbsp;</span>
654
832
  <span class="cline-any cline-no">&nbsp;</span>
833
+ <span class="cline-any cline-no">&nbsp;</span>
655
834
  <span class="cline-any cline-neutral">&nbsp;</span>
835
+ <span class="cline-any cline-no">&nbsp;</span>
656
836
  <span class="cline-any cline-neutral">&nbsp;</span>
657
837
  <span class="cline-any cline-neutral">&nbsp;</span>
838
+ <span class="cline-any cline-neutral">&nbsp;</span>
839
+ <span class="cline-any cline-neutral">&nbsp;</span>
840
+ <span class="cline-any cline-neutral">&nbsp;</span>
841
+ <span class="cline-any cline-neutral">&nbsp;</span>
842
+ <span class="cline-any cline-neutral">&nbsp;</span>
843
+ <span class="cline-any cline-neutral">&nbsp;</span>
844
+ <span class="cline-any cline-neutral">&nbsp;</span>
845
+ <span class="cline-any cline-neutral">&nbsp;</span>
846
+ <span class="cline-any cline-no">&nbsp;</span>
847
+ <span class="cline-any cline-no">&nbsp;</span>
848
+ <span class="cline-any cline-neutral">&nbsp;</span>
658
849
  <span class="cline-any cline-no">&nbsp;</span>
659
850
  <span class="cline-any cline-neutral">&nbsp;</span>
660
851
  <span class="cline-any cline-neutral">&nbsp;</span>
661
852
  <span class="cline-any cline-neutral">&nbsp;</span>
662
853
  <span class="cline-any cline-no">&nbsp;</span>
854
+ <span class="cline-any cline-no">&nbsp;</span>
855
+ <span class="cline-any cline-no">&nbsp;</span>
856
+ <span class="cline-any cline-neutral">&nbsp;</span>
857
+ <span class="cline-any cline-no">&nbsp;</span>
858
+ <span class="cline-any cline-neutral">&nbsp;</span>
859
+ <span class="cline-any cline-no">&nbsp;</span>
860
+ <span class="cline-any cline-neutral">&nbsp;</span>
663
861
  <span class="cline-any cline-neutral">&nbsp;</span>
664
862
  <span class="cline-any cline-neutral">&nbsp;</span>
665
863
  <span class="cline-any cline-neutral">&nbsp;</span>
666
864
  <span class="cline-any cline-no">&nbsp;</span>
667
865
  <span class="cline-any cline-no">&nbsp;</span>
668
866
  <span class="cline-any cline-neutral">&nbsp;</span>
867
+ <span class="cline-any cline-neutral">&nbsp;</span>
669
868
  <span class="cline-any cline-no">&nbsp;</span>
670
869
  <span class="cline-any cline-neutral">&nbsp;</span>
870
+ <span class="cline-any cline-no">&nbsp;</span>
871
+ <span class="cline-any cline-neutral">&nbsp;</span>
872
+ <span class="cline-any cline-neutral">&nbsp;</span>
873
+ <span class="cline-any cline-neutral">&nbsp;</span>
874
+ <span class="cline-any cline-neutral">&nbsp;</span>
875
+ <span class="cline-any cline-neutral">&nbsp;</span>
876
+ <span class="cline-any cline-neutral">&nbsp;</span>
671
877
  <span class="cline-any cline-neutral">&nbsp;</span>
878
+ <span class="cline-any cline-no">&nbsp;</span>
879
+ <span class="cline-any cline-no">&nbsp;</span>
880
+ <span class="cline-any cline-no">&nbsp;</span>
672
881
  <span class="cline-any cline-neutral">&nbsp;</span>
673
882
  <span class="cline-any cline-no">&nbsp;</span>
883
+ <span class="cline-any cline-neutral">&nbsp;</span>
674
884
  <span class="cline-any cline-no">&nbsp;</span>
675
885
  <span class="cline-any cline-neutral">&nbsp;</span>
676
886
  <span class="cline-any cline-neutral">&nbsp;</span>
887
+ <span class="cline-any cline-neutral">&nbsp;</span>
888
+ <span class="cline-any cline-neutral">&nbsp;</span>
889
+ <span class="cline-any cline-neutral">&nbsp;</span>
890
+ <span class="cline-any cline-neutral">&nbsp;</span>
891
+ <span class="cline-any cline-neutral">&nbsp;</span>
892
+ <span class="cline-any cline-neutral">&nbsp;</span>
893
+ <span class="cline-any cline-neutral">&nbsp;</span>
894
+ <span class="cline-any cline-neutral">&nbsp;</span>
895
+ <span class="cline-any cline-neutral">&nbsp;</span>
896
+ <span class="cline-any cline-neutral">&nbsp;</span>
897
+ <span class="cline-any cline-neutral">&nbsp;</span>
898
+ <span class="cline-any cline-neutral">&nbsp;</span>
899
+ <span class="cline-any cline-neutral">&nbsp;</span>
900
+ <span class="cline-any cline-neutral">&nbsp;</span>
901
+ <span class="cline-any cline-neutral">&nbsp;</span>
902
+ <span class="cline-any cline-neutral">&nbsp;</span>
903
+ <span class="cline-any cline-no">&nbsp;</span>
904
+ <span class="cline-any cline-no">&nbsp;</span>
677
905
  <span class="cline-any cline-no">&nbsp;</span>
678
906
  <span class="cline-any cline-neutral">&nbsp;</span>
679
907
  <span class="cline-any cline-no">&nbsp;</span>
908
+ <span class="cline-any cline-neutral">&nbsp;</span>
680
909
  <span class="cline-any cline-no">&nbsp;</span>
681
910
  <span class="cline-any cline-neutral">&nbsp;</span>
682
911
  <span class="cline-any cline-neutral">&nbsp;</span>
912
+ <span class="cline-any cline-neutral">&nbsp;</span>
913
+ <span class="cline-any cline-neutral">&nbsp;</span>
914
+ <span class="cline-any cline-neutral">&nbsp;</span>
915
+ <span class="cline-any cline-neutral">&nbsp;</span>
916
+ <span class="cline-any cline-neutral">&nbsp;</span>
917
+ <span class="cline-any cline-neutral">&nbsp;</span>
918
+ <span class="cline-any cline-neutral">&nbsp;</span>
919
+ <span class="cline-any cline-neutral">&nbsp;</span>
920
+ <span class="cline-any cline-neutral">&nbsp;</span>
921
+ <span class="cline-any cline-no">&nbsp;</span>
683
922
  <span class="cline-any cline-no">&nbsp;</span>
684
923
  <span class="cline-any cline-neutral">&nbsp;</span>
924
+ <span class="cline-any cline-no">&nbsp;</span>
685
925
  <span class="cline-any cline-neutral">&nbsp;</span>
686
926
  <span class="cline-any cline-neutral">&nbsp;</span>
927
+ <span class="cline-any cline-neutral">&nbsp;</span>
928
+ <span class="cline-any cline-no">&nbsp;</span>
929
+ <span class="cline-any cline-no">&nbsp;</span>
930
+ <span class="cline-any cline-neutral">&nbsp;</span>
687
931
  <span class="cline-any cline-no">&nbsp;</span>
688
932
  <span class="cline-any cline-no">&nbsp;</span>
689
933
  <span class="cline-any cline-neutral">&nbsp;</span>
934
+ <span class="cline-any cline-neutral">&nbsp;</span>
935
+ <span class="cline-any cline-neutral">&nbsp;</span>
690
936
  <span class="cline-any cline-no">&nbsp;</span>
691
937
  <span class="cline-any cline-no">&nbsp;</span>
692
938
  <span class="cline-any cline-neutral">&nbsp;</span>
939
+ <span class="cline-any cline-no">&nbsp;</span>
940
+ <span class="cline-any cline-neutral">&nbsp;</span>
693
941
  <span class="cline-any cline-neutral">&nbsp;</span>
694
942
  <span class="cline-any cline-neutral">&nbsp;</span>
695
943
  <span class="cline-any cline-no">&nbsp;</span>
@@ -811,10 +1059,6 @@
811
1059
  <span class="cline-any cline-neutral">&nbsp;</span>
812
1060
  <span class="cline-any cline-neutral">&nbsp;</span>
813
1061
  <span class="cline-any cline-neutral">&nbsp;</span>
814
- <span class="cline-any cline-neutral">&nbsp;</span>
815
- <span class="cline-any cline-no">&nbsp;</span>
816
- <span class="cline-any cline-neutral">&nbsp;</span>
817
- <span class="cline-any cline-neutral">&nbsp;</span>
818
1062
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" >import App, { DEFAULT_INGEST_POINT } from './app/index.js'</span>
819
1063
  &nbsp;
820
1064
  <span class="cstat-no" title="statement not covered" >export { <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >d</span>efault </span>as App </span>} from './app/index.js'
@@ -845,10 +1089,9 @@ export const <span class="cstat-no" title="statement not covered" >Messages = _M
845
1089
  <span class="cstat-no" title="statement not covered" >import ConstructedStyleSheets from './modules/constructedStyleSheets.js'</span>
846
1090
  <span class="cstat-no" title="statement not covered" >import Selection from './modules/selection.js'</span>
847
1091
  <span class="cstat-no" title="statement not covered" >import Tabs from './modules/tabs.js'</span>
848
- <span class="cstat-no" title="statement not covered" >import UserTestManager from './modules/userTesting/index.js'</span>
849
1092
  &nbsp;
850
1093
  <span class="cstat-no" title="statement not covered" >import { IN_BROWSER, deprecationWarn, DOCS_HOST } from './utils.js'</span>
851
- <span class="cstat-no" title="statement not covered" >import FeatureFlags, { IFeatureFlag } from './modules/featureFlags.js'</span>
1094
+ import FeatureFlags, { IFeatureFlag } from './modules/featureFlags.js'
852
1095
  import type { Options as AppOptions } from './app/index.js'
853
1096
  import type { Options as ConsoleOptions } from './modules/console.js'
854
1097
  import type { Options as ExceptionOptions } from './modules/exception.js'
@@ -870,6 +1113,7 @@ export type Options = Partial&lt;
870
1113
  sessionToken?: string
871
1114
  respectDoNotTrack?: boolean
872
1115
  autoResetOnWindowOpen?: boolean
1116
+ resetTabOnWindowOpen?: boolean
873
1117
  network?: Partial&lt;NetworkOptions&gt;
874
1118
  mouse?: Partial&lt;MouseHandlerOptions&gt;
875
1119
  flags?: {
@@ -913,7 +1157,6 @@ function <span class="fstat-no" title="function not covered" >processOptions(</s
913
1157
  &nbsp;
914
1158
  <span class="cstat-no" title="statement not covered" >export default class A</span>PI {
915
1159
  public featureFlags: FeatureFlags
916
- private readonly userTestManager: UserTestManager
917
1160
  &nbsp;
918
1161
  private readonly <span class="cstat-no" title="statement not covered" >app: App | null = null</span>
919
1162
  &nbsp;
@@ -931,83 +1174,121 @@ function <span class="fstat-no" title="function not covered" >processOptions(</s
931
1174
  )
932
1175
  <span class="cstat-no" title="statement not covered" > return</span>
933
1176
  }
934
- const doNotTrack =
935
- <span class="cstat-no" title="statement not covered" > options.respectDoNotTrack &amp;&amp;</span>
936
- (navigator.doNotTrack == '1' ||
937
- // @ts-ignore
938
- window.doNotTrack == '1')
939
- const app = (<span class="cstat-no" title="statement not covered" >this.app =</span>
940
- doNotTrack ||
941
- !('Map' in window) ||
942
- !('Set' in window) ||
943
- !('MutationObserver' in window) ||
944
- !('performance' in window) ||
945
- !('timing' in performance) ||
946
- !('startsWith' in String.prototype) ||
947
- !('Blob' in window) ||
948
- !('Worker' in window)
949
- ? null
950
- : new App(options.projectKey, options.sessionToken, options))
951
- <span class="cstat-no" title="statement not covered" > if (app !== null) {</span>
952
- <span class="cstat-no" title="statement not covered" > Viewport(app)</span>
953
- <span class="cstat-no" title="statement not covered" > CSSRules(app)</span>
954
- <span class="cstat-no" title="statement not covered" > ConstructedStyleSheets(app)</span>
955
- <span class="cstat-no" title="statement not covered" > Connection(app)</span>
956
- <span class="cstat-no" title="statement not covered" > Console(app, options)</span>
957
- <span class="cstat-no" title="statement not covered" > Exception(app, options)</span>
958
- <span class="cstat-no" title="statement not covered" > Img(app)</span>
959
- <span class="cstat-no" title="statement not covered" > Input(app, options)</span>
960
- <span class="cstat-no" title="statement not covered" > Mouse(app, options.mouse)</span>
961
- <span class="cstat-no" title="statement not covered" > Timing(app, options)</span>
962
- <span class="cstat-no" title="statement not covered" > Performance(app, options)</span>
963
- <span class="cstat-no" title="statement not covered" > Scroll(app)</span>
964
- <span class="cstat-no" title="statement not covered" > Focus(app)</span>
965
- <span class="cstat-no" title="statement not covered" > Fonts(app)</span>
966
- <span class="cstat-no" title="statement not covered" > Network(app, options.network)</span>
967
- <span class="cstat-no" title="statement not covered" > Selection(app)</span>
968
- <span class="cstat-no" title="statement not covered" > Tabs(app)</span>
969
- <span class="cstat-no" title="statement not covered" > this.featureFlags = new FeatureFlags(app)</span>
970
- ;(<span class="cstat-no" title="statement not covered" >window as any).__OPENREPLAY__ = this</span>
971
- <span class="cstat-no" title="statement not covered" > this.userTestManager = new UserTestManager(app)</span>
1177
+ const doNotTrack = <span class="cstat-no" title="statement not covered" >this.checkDoNotTrack()</span>
1178
+ const failReason: string[] = <span class="cstat-no" title="statement not covered" >[]</span>
1179
+ const conditions: string[] = <span class="cstat-no" title="statement not covered" >[</span>
1180
+ 'Map',
1181
+ 'Set',
1182
+ 'MutationObserver',
1183
+ 'performance',
1184
+ 'timing',
1185
+ 'startsWith',
1186
+ 'Blob',
1187
+ 'Worker',
1188
+ ]
972
1189
  &nbsp;
973
- <span class="cstat-no" title="statement not covered" > app.attachStartCallback(<span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
974
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (options.flags?.onFlagsLoad) {</span>
975
- <span class="cstat-no" title="statement not covered" > this.onFlagsLoad(options.flags.onFlagsLoad)</span>
976
- }
977
- <span class="cstat-no" title="statement not covered" > void this.featureFlags.reloadFlags()</span>
978
- })
979
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (options.autoResetOnWindowOpen) {</span>
980
- const wOpen = <span class="cstat-no" title="statement not covered" >window.open</span>
981
- <span class="cstat-no" title="statement not covered" > app.attachStartCallback(<span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
982
- // @ts-ignore ?
983
- <span class="cstat-no" title="statement not covered" > window.open = <span class="fstat-no" title="function not covered" >function (.</span>..args) {</span>
984
- <span class="cstat-no" title="statement not covered" > app.resetNextPageSession(true)</span>
985
- <span class="cstat-no" title="statement not covered" > wOpen.call(window, ...args)</span>
986
- <span class="cstat-no" title="statement not covered" > app.resetNextPageSession(false)</span>
1190
+ <span class="cstat-no" title="statement not covered" > if (doNotTrack) {</span>
1191
+ <span class="cstat-no" title="statement not covered" > failReason.push('doNotTrack')</span>
1192
+ } else {
1193
+ <span class="cstat-no" title="statement not covered" > for (const condition of conditions) {</span>
1194
+ <span class="cstat-no" title="statement not covered" > if (condition === 'timing') {</span>
1195
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if ('performance' in window &amp;&amp; !(condition in performance)) {</span>
1196
+ <span class="cstat-no" title="statement not covered" > failReason.push(condition)</span>
1197
+ <span class="cstat-no" title="statement not covered" > break</span>
987
1198
  }
988
- })
989
- <span class="cstat-no" title="statement not covered" > app.attachStopCallback(<span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
990
- <span class="cstat-no" title="statement not covered" > window.open = wOpen</span>
991
- })
1199
+ } else <span class="cstat-no" title="statement not covered" >if (condition === 'startsWith') {</span>
1200
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!(condition in String.prototype)) {</span>
1201
+ <span class="cstat-no" title="statement not covered" > failReason.push(condition)</span>
1202
+ <span class="cstat-no" title="statement not covered" > break</span>
1203
+ }
1204
+ } else {
1205
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!(condition in window)) {</span>
1206
+ <span class="cstat-no" title="statement not covered" > failReason.push(condition)</span>
1207
+ <span class="cstat-no" title="statement not covered" > break</span>
1208
+ }
1209
+ }
992
1210
  }
993
- } else {
994
- <span class="cstat-no" title="statement not covered" > console.log(</span>
995
- "OpenReplay: browser doesn't support API required for tracking or doNotTrack is set to 1.",
996
- )
997
- const req = <span class="cstat-no" title="statement not covered" >new XMLHttpRequest()</span>
998
- const orig = <span class="cstat-no" title="statement not covered" >options.ingestPoint || DEFAULT_INGEST_POINT</span>
999
- <span class="cstat-no" title="statement not covered" > req.open('POST', orig + '/v1/web/not-started')</span>
1000
- // no-cors issue only with text/plain or not-set Content-Type
1001
- // req.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
1002
- <span class="cstat-no" title="statement not covered" > req.send(</span>
1003
- JSON.stringify({
1004
- trackerVersion: 'TRACKER_VERSION',
1005
- projectKey: options.projectKey,
1006
- doNotTrack,
1007
- // TODO: add precise reason (an exact API missing)
1008
- }),
1211
+ }
1212
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (failReason.length &gt; 0) {</span>
1213
+ const missingApi = <span class="cstat-no" title="statement not covered" >failReason.join(',')</span>
1214
+ <span class="cstat-no" title="statement not covered" > console.error(</span>
1215
+ `OpenReplay: browser doesn't support API required for tracking or doNotTrack is set to 1. Reason: ${missingApi}`,
1009
1216
  )
1217
+ <span class="cstat-no" title="statement not covered" > this.signalStartIssue('missing_api', failReason)</span>
1218
+ <span class="cstat-no" title="statement not covered" > return</span>
1219
+ }
1220
+ &nbsp;
1221
+ const app = <span class="cstat-no" title="statement not covered" >new App(options.projectKey, options.sessionToken, options, this.signalStartIssue)</span>
1222
+ <span class="cstat-no" title="statement not covered" > this.app = app</span>
1223
+ <span class="cstat-no" title="statement not covered" > Viewport(app)</span>
1224
+ <span class="cstat-no" title="statement not covered" > CSSRules(app)</span>
1225
+ <span class="cstat-no" title="statement not covered" > ConstructedStyleSheets(app)</span>
1226
+ <span class="cstat-no" title="statement not covered" > Connection(app)</span>
1227
+ <span class="cstat-no" title="statement not covered" > Console(app, options)</span>
1228
+ <span class="cstat-no" title="statement not covered" > Exception(app, options)</span>
1229
+ <span class="cstat-no" title="statement not covered" > Img(app)</span>
1230
+ <span class="cstat-no" title="statement not covered" > Input(app, options)</span>
1231
+ <span class="cstat-no" title="statement not covered" > Mouse(app, options.mouse)</span>
1232
+ <span class="cstat-no" title="statement not covered" > Timing(app, options)</span>
1233
+ <span class="cstat-no" title="statement not covered" > Performance(app, options)</span>
1234
+ <span class="cstat-no" title="statement not covered" > Scroll(app)</span>
1235
+ <span class="cstat-no" title="statement not covered" > Focus(app)</span>
1236
+ <span class="cstat-no" title="statement not covered" > Fonts(app)</span>
1237
+ <span class="cstat-no" title="statement not covered" > Network(app, options.network)</span>
1238
+ <span class="cstat-no" title="statement not covered" > Selection(app)</span>
1239
+ <span class="cstat-no" title="statement not covered" > Tabs(app)</span>
1240
+ ;(<span class="cstat-no" title="statement not covered" >window as any).__OPENREPLAY__ = this</span>
1241
+ &nbsp;
1242
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (options.flags?.onFlagsLoad) {</span>
1243
+ <span class="cstat-no" title="statement not covered" > this.onFlagsLoad(options.flags.onFlagsLoad)</span>
1010
1244
  }
1245
+ const wOpen = <span class="cstat-no" title="statement not covered" >window.open</span>
1246
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (options.autoResetOnWindowOpen || options.resetTabOnWindowOpen) {</span>
1247
+ <span class="cstat-no" title="statement not covered" > app.attachStartCallback(<span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
1248
+ const tabId = <span class="cstat-no" title="statement not covered" >app.getTabId()</span>
1249
+ const sessStorage = <span class="cstat-no" title="statement not covered" >app.sessionStorage ?? window.sessionStorage</span>
1250
+ // @ts-ignore ?
1251
+ <span class="cstat-no" title="statement not covered" > window.open = <span class="fstat-no" title="function not covered" >function (.</span>..args) {</span>
1252
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (options.autoResetOnWindowOpen) {</span>
1253
+ <span class="cstat-no" title="statement not covered" > app.resetNextPageSession(true)</span>
1254
+ }
1255
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (options.resetTabOnWindowOpen) {</span>
1256
+ <span class="cstat-no" title="statement not covered" > sessStorage.removeItem(options.session_tabid_key || '__openreplay_tabid')</span>
1257
+ }
1258
+ <span class="cstat-no" title="statement not covered" > wOpen.call(window, ...args)</span>
1259
+ <span class="cstat-no" title="statement not covered" > app.resetNextPageSession(false)</span>
1260
+ <span class="cstat-no" title="statement not covered" > sessStorage.setItem(options.session_tabid_key || '__openreplay_tabid', tabId)</span>
1261
+ }
1262
+ })
1263
+ <span class="cstat-no" title="statement not covered" > app.attachStopCallback(<span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
1264
+ <span class="cstat-no" title="statement not covered" > window.open = wOpen</span>
1265
+ })
1266
+ }
1267
+ }
1268
+ &nbsp;
1269
+ <span class="cstat-no" title="statement not covered" > checkDoNotTrack = <span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
1270
+ <span class="cstat-no" title="statement not covered" > return (</span>
1271
+ this.options.respectDoNotTrack &amp;&amp;
1272
+ (navigator.doNotTrack == '1' ||
1273
+ // @ts-ignore
1274
+ window.doNotTrack == '1')
1275
+ )
1276
+ }
1277
+ &nbsp;
1278
+ <span class="cstat-no" title="statement not covered" > signalStartIssue = <span class="fstat-no" title="function not covered" >(r</span>eason: string, missingApi: string[]) =&gt; {</span>
1279
+ const doNotTrack = <span class="cstat-no" title="statement not covered" >this.checkDoNotTrack()</span>
1280
+ const req = <span class="cstat-no" title="statement not covered" >new XMLHttpRequest()</span>
1281
+ const orig = <span class="cstat-no" title="statement not covered" >this.options.ingestPoint || DEFAULT_INGEST_POINT</span>
1282
+ <span class="cstat-no" title="statement not covered" > req.open('POST', orig + '/v1/web/not-started')</span>
1283
+ <span class="cstat-no" title="statement not covered" > req.send(</span>
1284
+ JSON.stringify({
1285
+ trackerVersion: 'TRACKER_VERSION',
1286
+ projectKey: this.options.projectKey,
1287
+ doNotTrack,
1288
+ reason,
1289
+ missingApi,
1290
+ }),
1291
+ )
1011
1292
  }
1012
1293
  &nbsp;
1013
1294
  <span class="fstat-no" title="function not covered" > isFlagEnabled(</span>flagName: string): boolean {
@@ -1015,23 +1296,30 @@ function <span class="fstat-no" title="function not covered" >processOptions(</s
1015
1296
  }
1016
1297
  &nbsp;
1017
1298
  <span class="fstat-no" title="function not covered" > onFlagsLoad(</span>callback: (flags: IFeatureFlag[]) =&gt; void): void {
1018
- <span class="cstat-no" title="statement not covered" > this.featureFlags.onFlagsLoad(callback)</span>
1299
+ <span class="cstat-no" title="statement not covered" > this.app?.featureFlags.onFlagsLoad(callback)</span>
1019
1300
  }
1020
1301
  &nbsp;
1021
1302
  <span class="fstat-no" title="function not covered" > clearPersistFlags(</span>) {
1022
- <span class="cstat-no" title="statement not covered" > this.featureFlags.clearPersistFlags()</span>
1303
+ <span class="cstat-no" title="statement not covered" > this.app?.featureFlags.clearPersistFlags()</span>
1023
1304
  }
1024
1305
  &nbsp;
1025
1306
  <span class="fstat-no" title="function not covered" > reloadFlags(</span>) {
1026
- <span class="cstat-no" title="statement not covered" > return this.featureFlags.reloadFlags()</span>
1307
+ <span class="cstat-no" title="statement not covered" > return this.app?.featureFlags.reloadFlags()</span>
1027
1308
  }
1028
1309
  &nbsp;
1029
1310
  <span class="fstat-no" title="function not covered" > getFeatureFlag(</span>flagName: string): IFeatureFlag | undefined {
1030
- <span class="cstat-no" title="statement not covered" > return this.featureFlags.getFeatureFlag(flagName)</span>
1311
+ <span class="cstat-no" title="statement not covered" > return this.app?.featureFlags.getFeatureFlag(flagName)</span>
1031
1312
  }
1032
1313
  &nbsp;
1033
1314
  <span class="fstat-no" title="function not covered" > getAllFeatureFlags(</span>) {
1034
- <span class="cstat-no" title="statement not covered" > return this.featureFlags.flags</span>
1315
+ <span class="cstat-no" title="statement not covered" > return this.app?.featureFlags.flags</span>
1316
+ }
1317
+ &nbsp;
1318
+ public <span class="cstat-no" title="statement not covered" >restartCanvasTracking = <span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
1319
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.app === null) {</span>
1320
+ <span class="cstat-no" title="statement not covered" > return</span>
1321
+ }
1322
+ <span class="cstat-no" title="statement not covered" > this.app.restartCanvasTracking()</span>
1035
1323
  }
1036
1324
  &nbsp;
1037
1325
  <span class="fstat-no" title="function not covered" > use&lt;</span>T&gt;(fn: (app: App | null, options?: Options) =&gt; T): T {
@@ -1044,19 +1332,94 @@ function <span class="fstat-no" title="function not covered" >processOptions(</s
1044
1332
  }
1045
1333
  <span class="cstat-no" title="statement not covered" > return this.app.active()</span>
1046
1334
  }
1335
+ &nbsp;
1336
+ /**
1337
+ * Creates a named hook that expects event name, data string and msg direction (up/down),
1338
+ * it will skip any message bigger than 5 mb or event name bigger than 255 symbols
1339
+ * msg direction is "down" (incoming) by default
1340
+ *
1341
+ * @returns {(msgType: string, data: string, dir: 'up' | 'down') =&gt; void}
1342
+ * */
1343
+ <span class="fstat-no" title="function not covered" > trackWs(</span>channelName: string) {
1344
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.app === null) {</span>
1345
+ <span class="cstat-no" title="statement not covered" > return</span>
1346
+ }
1347
+ <span class="cstat-no" title="statement not covered" > return this.app.trackWs(channelName)</span>
1348
+ }
1047
1349
  &nbsp;
1048
1350
  <span class="fstat-no" title="function not covered" > start(</span>startOpts?: Partial&lt;StartOptions&gt;): Promise&lt;StartPromiseReturn&gt; {
1351
+ <span class="cstat-no" title="statement not covered" > if (this.browserEnvCheck()) {</span>
1352
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.app === null) {</span>
1353
+ <span class="cstat-no" title="statement not covered" > return Promise.reject("Browser doesn't support required api, or doNotTrack is active.")</span>
1354
+ }
1355
+ <span class="cstat-no" title="statement not covered" > return this.app.start(startOpts)</span>
1356
+ } else {
1357
+ <span class="cstat-no" title="statement not covered" > return Promise.reject('Trying to start not in browser.')</span>
1358
+ }
1359
+ }
1360
+ &nbsp;
1361
+ <span class="fstat-no" title="function not covered" > browserEnvCheck(</span>) {
1049
1362
  <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!IN_BROWSER) {</span>
1050
1363
  <span class="cstat-no" title="statement not covered" > console.error(</span>
1051
1364
  `OpenReplay: you are trying to start Tracker on a node.js environment. If you want to use OpenReplay with SSR, please, use componentDidMount or useEffect API for placing the \`tracker.start()\` line. Check documentation on ${DOCS_HOST}${DOCS_SETUP}`,
1052
1365
  )
1366
+ <span class="cstat-no" title="statement not covered" > return false</span>
1367
+ }
1368
+ <span class="cstat-no" title="statement not covered" > return true</span>
1369
+ }
1370
+ &nbsp;
1371
+ /**
1372
+ * start buffering messages without starting the actual session, which gives user 30 seconds to "activate" and record
1373
+ * session by calling start() on conditional trigger and we will then send buffered batch, so it won't get lost
1374
+ * */
1375
+ <span class="fstat-no" title="function not covered" > coldStart(</span>startOpts?: Partial&lt;StartOptions&gt;, conditional?: boolean) {
1376
+ <span class="cstat-no" title="statement not covered" > if (this.browserEnvCheck()) {</span>
1377
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.app === null) {</span>
1378
+ <span class="cstat-no" title="statement not covered" > return Promise.reject('Tracker not initialized')</span>
1379
+ }
1380
+ <span class="cstat-no" title="statement not covered" > void this.app.coldStart(startOpts, conditional)</span>
1381
+ } else {
1382
+ <span class="cstat-no" title="statement not covered" > return Promise.reject('Trying to start not in browser.')</span>
1383
+ }
1384
+ }
1385
+ &nbsp;
1386
+ /**
1387
+ * Starts offline session recording. Keep in mind that only user device time will be used for timestamps.
1388
+ * (no backend delay sync)
1389
+ *
1390
+ * @param {Object} startOpts - options for session start, same as .start()
1391
+ * @param {Function} onSessionSent - callback that will be called once session is fully sent
1392
+ * @returns methods to manipulate buffer:
1393
+ *
1394
+ * saveBuffer - to save it in localStorage
1395
+ *
1396
+ * getBuffer - returns current buffer
1397
+ *
1398
+ * setBuffer - replaces current buffer with given
1399
+ * */
1400
+ <span class="fstat-no" title="function not covered" > startOfflineRecording(</span>startOpts: Partial&lt;StartOptions&gt;, onSessionSent: () =&gt; void) {
1401
+ <span class="cstat-no" title="statement not covered" > if (this.browserEnvCheck()) {</span>
1402
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.app === null) {</span>
1403
+ <span class="cstat-no" title="statement not covered" > return Promise.reject('Tracker not initialized')</span>
1404
+ }
1405
+ <span class="cstat-no" title="statement not covered" > return this.app.offlineRecording(startOpts, onSessionSent)</span>
1406
+ } else {
1053
1407
  <span class="cstat-no" title="statement not covered" > return Promise.reject('Trying to start not in browser.')</span>
1054
1408
  }
1409
+ }
1410
+ &nbsp;
1411
+ /**
1412
+ * Uploads the stored session buffer to backend
1413
+ * @returns promise that resolves once messages are loaded, it has to be awaited
1414
+ * so the session can be uploaded properly
1415
+ * @resolve {boolean} - if messages were loaded successfully
1416
+ * @reject {string} - error message
1417
+ * */
1418
+ <span class="fstat-no" title="function not covered" > uploadOfflineRecording(</span>) {
1055
1419
  <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.app === null) {</span>
1056
- <span class="cstat-no" title="statement not covered" > return Promise.reject("Browser doesn't support required api, or doNotTrack is active.")</span>
1420
+ <span class="cstat-no" title="statement not covered" > return</span>
1057
1421
  }
1058
- // TODO: check argument type
1059
- <span class="cstat-no" title="statement not covered" > return this.app.start(startOpts)</span>
1422
+ <span class="cstat-no" title="statement not covered" > return this.app.uploadOfflineRecording()</span>
1060
1423
  }
1061
1424
  &nbsp;
1062
1425
  <span class="fstat-no" title="function not covered" > stop(</span>): string | undefined {
@@ -1095,6 +1458,13 @@ function <span class="fstat-no" title="function not covered" >processOptions(</s
1095
1458
  <span class="cstat-no" title="statement not covered" > return this.app.getTabId()</span>
1096
1459
  }
1097
1460
  &nbsp;
1461
+ <span class="fstat-no" title="function not covered" > getUxId(</span>) {
1462
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.app === null) {</span>
1463
+ <span class="cstat-no" title="statement not covered" > return null</span>
1464
+ }
1465
+ <span class="cstat-no" title="statement not covered" > return this.app.getUxtId()</span>
1466
+ }
1467
+ &nbsp;
1098
1468
  <span class="fstat-no" title="function not covered" > sessionID(</span>): string | null | undefined {
1099
1469
  <span class="cstat-no" title="statement not covered" > deprecationWarn("'sessionID' method", "'getSessionID' method", '/')</span>
1100
1470
  <span class="cstat-no" title="statement not covered" > return this.getSessionID()</span>
@@ -1186,10 +1556,6 @@ function <span class="fstat-no" title="function not covered" >processOptions(</s
1186
1556
  }
1187
1557
  }
1188
1558
  }
1189
- &nbsp;
1190
- <span class="fstat-no" title="function not covered" > createTestingWidget(</span>) {
1191
- <span class="cstat-no" title="statement not covered" > this.userTestManager.createGreeting('Test name goes here,', false, false)</span>
1192
- }
1193
1559
  }
1194
1560
  &nbsp;</pre></td></tr></table></pre>
1195
1561
 
@@ -1198,7 +1564,7 @@ function <span class="fstat-no" title="function not covered" >processOptions(</s
1198
1564
  <div class='footer quiet pad2 space-top1 center small'>
1199
1565
  Code coverage generated by
1200
1566
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1201
- at 2023-10-17T13:37:58.420Z
1567
+ at 2024-01-23T12:19:37.435Z
1202
1568
  </div>
1203
1569
  <script src="../prettify.js"></script>
1204
1570
  <script>