@openreplay/tracker 11.0.2 → 11.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 (79) hide show
  1. package/CHANGELOG.md +6 -1
  2. package/cjs/app/canvas.js +9 -7
  3. package/cjs/app/index.js +7 -6
  4. package/cjs/app/observer/iframe_observer.js +1 -1
  5. package/cjs/app/observer/shadow_root_observer.js +1 -1
  6. package/cjs/index.js +1 -1
  7. package/cjs/modules/Network/xhrProxy.js +1 -1
  8. package/coverage/clover.xml +507 -722
  9. package/coverage/coverage-final.json +10 -10
  10. package/coverage/lcov-report/index.html +32 -32
  11. package/coverage/lcov-report/main/app/canvas.ts.html +8 -14
  12. package/coverage/lcov-report/main/app/guards.ts.html +1 -1
  13. package/coverage/lcov-report/main/app/index.html +14 -14
  14. package/coverage/lcov-report/main/app/index.ts.html +106 -826
  15. package/coverage/lcov-report/main/app/logger.ts.html +1 -1
  16. package/coverage/lcov-report/main/app/messages.gen.ts.html +62 -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 +2 -2
  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 +2 -2
  22. package/coverage/lcov-report/main/app/observer/top_observer.ts.html +1 -1
  23. package/coverage/lcov-report/main/app/sanitizer.ts.html +1 -1
  24. package/coverage/lcov-report/main/app/session.ts.html +1 -1
  25. package/coverage/lcov-report/main/app/ticker.ts.html +1 -1
  26. package/coverage/lcov-report/main/index.html +9 -9
  27. package/coverage/lcov-report/main/index.ts.html +118 -223
  28. package/coverage/lcov-report/main/modules/Network/beaconProxy.ts.html +1 -1
  29. package/coverage/lcov-report/main/modules/Network/fetchProxy.ts.html +21 -6
  30. package/coverage/lcov-report/main/modules/Network/index.html +6 -6
  31. package/coverage/lcov-report/main/modules/Network/index.ts.html +1 -1
  32. package/coverage/lcov-report/main/modules/Network/networkMessage.ts.html +1 -1
  33. package/coverage/lcov-report/main/modules/Network/utils.ts.html +1 -1
  34. package/coverage/lcov-report/main/modules/Network/xhrProxy.ts.html +3 -3
  35. package/coverage/lcov-report/main/modules/attributeSender.ts.html +1 -1
  36. package/coverage/lcov-report/main/modules/axiosSpy.ts.html +1 -1
  37. package/coverage/lcov-report/main/modules/conditionsManager.ts.html +680 -179
  38. package/coverage/lcov-report/main/modules/connection.ts.html +1 -1
  39. package/coverage/lcov-report/main/modules/console.ts.html +1 -1
  40. package/coverage/lcov-report/main/modules/constructedStyleSheets.ts.html +1 -1
  41. package/coverage/lcov-report/main/modules/cssrules.ts.html +1 -1
  42. package/coverage/lcov-report/main/modules/exception.ts.html +1 -1
  43. package/coverage/lcov-report/main/modules/featureFlags.ts.html +7 -10
  44. package/coverage/lcov-report/main/modules/focus.ts.html +1 -1
  45. package/coverage/lcov-report/main/modules/fonts.ts.html +1 -1
  46. package/coverage/lcov-report/main/modules/img.ts.html +1 -1
  47. package/coverage/lcov-report/main/modules/index.html +27 -27
  48. package/coverage/lcov-report/main/modules/input.ts.html +1 -1
  49. package/coverage/lcov-report/main/modules/mouse.ts.html +1 -1
  50. package/coverage/lcov-report/main/modules/network.ts.html +1 -1
  51. package/coverage/lcov-report/main/modules/performance.ts.html +1 -1
  52. package/coverage/lcov-report/main/modules/scroll.ts.html +1 -1
  53. package/coverage/lcov-report/main/modules/selection.ts.html +1 -1
  54. package/coverage/lcov-report/main/modules/tabs.ts.html +1 -1
  55. package/coverage/lcov-report/main/modules/tagWatcher.ts.html +250 -0
  56. package/coverage/lcov-report/main/modules/timing.ts.html +1 -1
  57. package/coverage/lcov-report/main/modules/userTesting/SignalManager.ts.html +1 -1
  58. package/coverage/lcov-report/main/modules/userTesting/dnd.ts.html +1 -1
  59. package/coverage/lcov-report/main/modules/userTesting/index.html +1 -1
  60. package/coverage/lcov-report/main/modules/userTesting/index.ts.html +1 -1
  61. package/coverage/lcov-report/main/modules/userTesting/recorder.ts.html +1 -1
  62. package/coverage/lcov-report/main/modules/userTesting/styles.ts.html +1 -1
  63. package/coverage/lcov-report/main/modules/userTesting/utils.ts.html +1 -1
  64. package/coverage/lcov-report/main/modules/viewport.ts.html +1 -1
  65. package/coverage/lcov-report/main/utils.ts.html +1 -1
  66. package/coverage/lcov-report/webworker/BatchWriter.ts.html +1 -1
  67. package/coverage/lcov-report/webworker/MessageEncoder.gen.ts.html +17 -5
  68. package/coverage/lcov-report/webworker/PrimitiveEncoder.ts.html +1 -1
  69. package/coverage/lcov-report/webworker/QueueSender.ts.html +1 -1
  70. package/coverage/lcov-report/webworker/index.html +10 -10
  71. package/coverage/lcov-report/webworker/index.ts.html +16 -22
  72. package/coverage/lcov.info +986 -1371
  73. package/lib/app/canvas.js +9 -7
  74. package/lib/app/index.js +7 -6
  75. package/lib/app/observer/iframe_observer.js +1 -1
  76. package/lib/app/observer/shadow_root_observer.js +1 -1
  77. package/lib/index.js +1 -1
  78. package/lib/modules/Network/xhrProxy.js +1 -1
  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/452</span>
28
+ <span class='fraction'>0/329</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/240</span>
35
+ <span class='fraction'>0/197</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/75</span>
42
+ <span class='fraction'>0/65</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/441</span>
49
+ <span class='fraction'>0/318</span>
50
50
  </div>
51
51
 
52
52
 
@@ -930,250 +930,16 @@
930
930
  <a name='L865'></a><a href='#L865'>865</a>
931
931
  <a name='L866'></a><a href='#L866'>866</a>
932
932
  <a name='L867'></a><a href='#L867'>867</a>
933
- <a name='L868'></a><a href='#L868'>868</a>
934
- <a name='L869'></a><a href='#L869'>869</a>
935
- <a name='L870'></a><a href='#L870'>870</a>
936
- <a name='L871'></a><a href='#L871'>871</a>
937
- <a name='L872'></a><a href='#L872'>872</a>
938
- <a name='L873'></a><a href='#L873'>873</a>
939
- <a name='L874'></a><a href='#L874'>874</a>
940
- <a name='L875'></a><a href='#L875'>875</a>
941
- <a name='L876'></a><a href='#L876'>876</a>
942
- <a name='L877'></a><a href='#L877'>877</a>
943
- <a name='L878'></a><a href='#L878'>878</a>
944
- <a name='L879'></a><a href='#L879'>879</a>
945
- <a name='L880'></a><a href='#L880'>880</a>
946
- <a name='L881'></a><a href='#L881'>881</a>
947
- <a name='L882'></a><a href='#L882'>882</a>
948
- <a name='L883'></a><a href='#L883'>883</a>
949
- <a name='L884'></a><a href='#L884'>884</a>
950
- <a name='L885'></a><a href='#L885'>885</a>
951
- <a name='L886'></a><a href='#L886'>886</a>
952
- <a name='L887'></a><a href='#L887'>887</a>
953
- <a name='L888'></a><a href='#L888'>888</a>
954
- <a name='L889'></a><a href='#L889'>889</a>
955
- <a name='L890'></a><a href='#L890'>890</a>
956
- <a name='L891'></a><a href='#L891'>891</a>
957
- <a name='L892'></a><a href='#L892'>892</a>
958
- <a name='L893'></a><a href='#L893'>893</a>
959
- <a name='L894'></a><a href='#L894'>894</a>
960
- <a name='L895'></a><a href='#L895'>895</a>
961
- <a name='L896'></a><a href='#L896'>896</a>
962
- <a name='L897'></a><a href='#L897'>897</a>
963
- <a name='L898'></a><a href='#L898'>898</a>
964
- <a name='L899'></a><a href='#L899'>899</a>
965
- <a name='L900'></a><a href='#L900'>900</a>
966
- <a name='L901'></a><a href='#L901'>901</a>
967
- <a name='L902'></a><a href='#L902'>902</a>
968
- <a name='L903'></a><a href='#L903'>903</a>
969
- <a name='L904'></a><a href='#L904'>904</a>
970
- <a name='L905'></a><a href='#L905'>905</a>
971
- <a name='L906'></a><a href='#L906'>906</a>
972
- <a name='L907'></a><a href='#L907'>907</a>
973
- <a name='L908'></a><a href='#L908'>908</a>
974
- <a name='L909'></a><a href='#L909'>909</a>
975
- <a name='L910'></a><a href='#L910'>910</a>
976
- <a name='L911'></a><a href='#L911'>911</a>
977
- <a name='L912'></a><a href='#L912'>912</a>
978
- <a name='L913'></a><a href='#L913'>913</a>
979
- <a name='L914'></a><a href='#L914'>914</a>
980
- <a name='L915'></a><a href='#L915'>915</a>
981
- <a name='L916'></a><a href='#L916'>916</a>
982
- <a name='L917'></a><a href='#L917'>917</a>
983
- <a name='L918'></a><a href='#L918'>918</a>
984
- <a name='L919'></a><a href='#L919'>919</a>
985
- <a name='L920'></a><a href='#L920'>920</a>
986
- <a name='L921'></a><a href='#L921'>921</a>
987
- <a name='L922'></a><a href='#L922'>922</a>
988
- <a name='L923'></a><a href='#L923'>923</a>
989
- <a name='L924'></a><a href='#L924'>924</a>
990
- <a name='L925'></a><a href='#L925'>925</a>
991
- <a name='L926'></a><a href='#L926'>926</a>
992
- <a name='L927'></a><a href='#L927'>927</a>
993
- <a name='L928'></a><a href='#L928'>928</a>
994
- <a name='L929'></a><a href='#L929'>929</a>
995
- <a name='L930'></a><a href='#L930'>930</a>
996
- <a name='L931'></a><a href='#L931'>931</a>
997
- <a name='L932'></a><a href='#L932'>932</a>
998
- <a name='L933'></a><a href='#L933'>933</a>
999
- <a name='L934'></a><a href='#L934'>934</a>
1000
- <a name='L935'></a><a href='#L935'>935</a>
1001
- <a name='L936'></a><a href='#L936'>936</a>
1002
- <a name='L937'></a><a href='#L937'>937</a>
1003
- <a name='L938'></a><a href='#L938'>938</a>
1004
- <a name='L939'></a><a href='#L939'>939</a>
1005
- <a name='L940'></a><a href='#L940'>940</a>
1006
- <a name='L941'></a><a href='#L941'>941</a>
1007
- <a name='L942'></a><a href='#L942'>942</a>
1008
- <a name='L943'></a><a href='#L943'>943</a>
1009
- <a name='L944'></a><a href='#L944'>944</a>
1010
- <a name='L945'></a><a href='#L945'>945</a>
1011
- <a name='L946'></a><a href='#L946'>946</a>
1012
- <a name='L947'></a><a href='#L947'>947</a>
1013
- <a name='L948'></a><a href='#L948'>948</a>
1014
- <a name='L949'></a><a href='#L949'>949</a>
1015
- <a name='L950'></a><a href='#L950'>950</a>
1016
- <a name='L951'></a><a href='#L951'>951</a>
1017
- <a name='L952'></a><a href='#L952'>952</a>
1018
- <a name='L953'></a><a href='#L953'>953</a>
1019
- <a name='L954'></a><a href='#L954'>954</a>
1020
- <a name='L955'></a><a href='#L955'>955</a>
1021
- <a name='L956'></a><a href='#L956'>956</a>
1022
- <a name='L957'></a><a href='#L957'>957</a>
1023
- <a name='L958'></a><a href='#L958'>958</a>
1024
- <a name='L959'></a><a href='#L959'>959</a>
1025
- <a name='L960'></a><a href='#L960'>960</a>
1026
- <a name='L961'></a><a href='#L961'>961</a>
1027
- <a name='L962'></a><a href='#L962'>962</a>
1028
- <a name='L963'></a><a href='#L963'>963</a>
1029
- <a name='L964'></a><a href='#L964'>964</a>
1030
- <a name='L965'></a><a href='#L965'>965</a>
1031
- <a name='L966'></a><a href='#L966'>966</a>
1032
- <a name='L967'></a><a href='#L967'>967</a>
1033
- <a name='L968'></a><a href='#L968'>968</a>
1034
- <a name='L969'></a><a href='#L969'>969</a>
1035
- <a name='L970'></a><a href='#L970'>970</a>
1036
- <a name='L971'></a><a href='#L971'>971</a>
1037
- <a name='L972'></a><a href='#L972'>972</a>
1038
- <a name='L973'></a><a href='#L973'>973</a>
1039
- <a name='L974'></a><a href='#L974'>974</a>
1040
- <a name='L975'></a><a href='#L975'>975</a>
1041
- <a name='L976'></a><a href='#L976'>976</a>
1042
- <a name='L977'></a><a href='#L977'>977</a>
1043
- <a name='L978'></a><a href='#L978'>978</a>
1044
- <a name='L979'></a><a href='#L979'>979</a>
1045
- <a name='L980'></a><a href='#L980'>980</a>
1046
- <a name='L981'></a><a href='#L981'>981</a>
1047
- <a name='L982'></a><a href='#L982'>982</a>
1048
- <a name='L983'></a><a href='#L983'>983</a>
1049
- <a name='L984'></a><a href='#L984'>984</a>
1050
- <a name='L985'></a><a href='#L985'>985</a>
1051
- <a name='L986'></a><a href='#L986'>986</a>
1052
- <a name='L987'></a><a href='#L987'>987</a>
1053
- <a name='L988'></a><a href='#L988'>988</a>
1054
- <a name='L989'></a><a href='#L989'>989</a>
1055
- <a name='L990'></a><a href='#L990'>990</a>
1056
- <a name='L991'></a><a href='#L991'>991</a>
1057
- <a name='L992'></a><a href='#L992'>992</a>
1058
- <a name='L993'></a><a href='#L993'>993</a>
1059
- <a name='L994'></a><a href='#L994'>994</a>
1060
- <a name='L995'></a><a href='#L995'>995</a>
1061
- <a name='L996'></a><a href='#L996'>996</a>
1062
- <a name='L997'></a><a href='#L997'>997</a>
1063
- <a name='L998'></a><a href='#L998'>998</a>
1064
- <a name='L999'></a><a href='#L999'>999</a>
1065
- <a name='L1000'></a><a href='#L1000'>1000</a>
1066
- <a name='L1001'></a><a href='#L1001'>1001</a>
1067
- <a name='L1002'></a><a href='#L1002'>1002</a>
1068
- <a name='L1003'></a><a href='#L1003'>1003</a>
1069
- <a name='L1004'></a><a href='#L1004'>1004</a>
1070
- <a name='L1005'></a><a href='#L1005'>1005</a>
1071
- <a name='L1006'></a><a href='#L1006'>1006</a>
1072
- <a name='L1007'></a><a href='#L1007'>1007</a>
1073
- <a name='L1008'></a><a href='#L1008'>1008</a>
1074
- <a name='L1009'></a><a href='#L1009'>1009</a>
1075
- <a name='L1010'></a><a href='#L1010'>1010</a>
1076
- <a name='L1011'></a><a href='#L1011'>1011</a>
1077
- <a name='L1012'></a><a href='#L1012'>1012</a>
1078
- <a name='L1013'></a><a href='#L1013'>1013</a>
1079
- <a name='L1014'></a><a href='#L1014'>1014</a>
1080
- <a name='L1015'></a><a href='#L1015'>1015</a>
1081
- <a name='L1016'></a><a href='#L1016'>1016</a>
1082
- <a name='L1017'></a><a href='#L1017'>1017</a>
1083
- <a name='L1018'></a><a href='#L1018'>1018</a>
1084
- <a name='L1019'></a><a href='#L1019'>1019</a>
1085
- <a name='L1020'></a><a href='#L1020'>1020</a>
1086
- <a name='L1021'></a><a href='#L1021'>1021</a>
1087
- <a name='L1022'></a><a href='#L1022'>1022</a>
1088
- <a name='L1023'></a><a href='#L1023'>1023</a>
1089
- <a name='L1024'></a><a href='#L1024'>1024</a>
1090
- <a name='L1025'></a><a href='#L1025'>1025</a>
1091
- <a name='L1026'></a><a href='#L1026'>1026</a>
1092
- <a name='L1027'></a><a href='#L1027'>1027</a>
1093
- <a name='L1028'></a><a href='#L1028'>1028</a>
1094
- <a name='L1029'></a><a href='#L1029'>1029</a>
1095
- <a name='L1030'></a><a href='#L1030'>1030</a>
1096
- <a name='L1031'></a><a href='#L1031'>1031</a>
1097
- <a name='L1032'></a><a href='#L1032'>1032</a>
1098
- <a name='L1033'></a><a href='#L1033'>1033</a>
1099
- <a name='L1034'></a><a href='#L1034'>1034</a>
1100
- <a name='L1035'></a><a href='#L1035'>1035</a>
1101
- <a name='L1036'></a><a href='#L1036'>1036</a>
1102
- <a name='L1037'></a><a href='#L1037'>1037</a>
1103
- <a name='L1038'></a><a href='#L1038'>1038</a>
1104
- <a name='L1039'></a><a href='#L1039'>1039</a>
1105
- <a name='L1040'></a><a href='#L1040'>1040</a>
1106
- <a name='L1041'></a><a href='#L1041'>1041</a>
1107
- <a name='L1042'></a><a href='#L1042'>1042</a>
1108
- <a name='L1043'></a><a href='#L1043'>1043</a>
1109
- <a name='L1044'></a><a href='#L1044'>1044</a>
1110
- <a name='L1045'></a><a href='#L1045'>1045</a>
1111
- <a name='L1046'></a><a href='#L1046'>1046</a>
1112
- <a name='L1047'></a><a href='#L1047'>1047</a>
1113
- <a name='L1048'></a><a href='#L1048'>1048</a>
1114
- <a name='L1049'></a><a href='#L1049'>1049</a>
1115
- <a name='L1050'></a><a href='#L1050'>1050</a>
1116
- <a name='L1051'></a><a href='#L1051'>1051</a>
1117
- <a name='L1052'></a><a href='#L1052'>1052</a>
1118
- <a name='L1053'></a><a href='#L1053'>1053</a>
1119
- <a name='L1054'></a><a href='#L1054'>1054</a>
1120
- <a name='L1055'></a><a href='#L1055'>1055</a>
1121
- <a name='L1056'></a><a href='#L1056'>1056</a>
1122
- <a name='L1057'></a><a href='#L1057'>1057</a>
1123
- <a name='L1058'></a><a href='#L1058'>1058</a>
1124
- <a name='L1059'></a><a href='#L1059'>1059</a>
1125
- <a name='L1060'></a><a href='#L1060'>1060</a>
1126
- <a name='L1061'></a><a href='#L1061'>1061</a>
1127
- <a name='L1062'></a><a href='#L1062'>1062</a>
1128
- <a name='L1063'></a><a href='#L1063'>1063</a>
1129
- <a name='L1064'></a><a href='#L1064'>1064</a>
1130
- <a name='L1065'></a><a href='#L1065'>1065</a>
1131
- <a name='L1066'></a><a href='#L1066'>1066</a>
1132
- <a name='L1067'></a><a href='#L1067'>1067</a>
1133
- <a name='L1068'></a><a href='#L1068'>1068</a>
1134
- <a name='L1069'></a><a href='#L1069'>1069</a>
1135
- <a name='L1070'></a><a href='#L1070'>1070</a>
1136
- <a name='L1071'></a><a href='#L1071'>1071</a>
1137
- <a name='L1072'></a><a href='#L1072'>1072</a>
1138
- <a name='L1073'></a><a href='#L1073'>1073</a>
1139
- <a name='L1074'></a><a href='#L1074'>1074</a>
1140
- <a name='L1075'></a><a href='#L1075'>1075</a>
1141
- <a name='L1076'></a><a href='#L1076'>1076</a>
1142
- <a name='L1077'></a><a href='#L1077'>1077</a>
1143
- <a name='L1078'></a><a href='#L1078'>1078</a>
1144
- <a name='L1079'></a><a href='#L1079'>1079</a>
1145
- <a name='L1080'></a><a href='#L1080'>1080</a>
1146
- <a name='L1081'></a><a href='#L1081'>1081</a>
1147
- <a name='L1082'></a><a href='#L1082'>1082</a>
1148
- <a name='L1083'></a><a href='#L1083'>1083</a>
1149
- <a name='L1084'></a><a href='#L1084'>1084</a>
1150
- <a name='L1085'></a><a href='#L1085'>1085</a>
1151
- <a name='L1086'></a><a href='#L1086'>1086</a>
1152
- <a name='L1087'></a><a href='#L1087'>1087</a>
1153
- <a name='L1088'></a><a href='#L1088'>1088</a>
1154
- <a name='L1089'></a><a href='#L1089'>1089</a>
1155
- <a name='L1090'></a><a href='#L1090'>1090</a>
1156
- <a name='L1091'></a><a href='#L1091'>1091</a>
1157
- <a name='L1092'></a><a href='#L1092'>1092</a>
1158
- <a name='L1093'></a><a href='#L1093'>1093</a>
1159
- <a name='L1094'></a><a href='#L1094'>1094</a>
1160
- <a name='L1095'></a><a href='#L1095'>1095</a>
1161
- <a name='L1096'></a><a href='#L1096'>1096</a>
1162
- <a name='L1097'></a><a href='#L1097'>1097</a>
1163
- <a name='L1098'></a><a href='#L1098'>1098</a>
1164
- <a name='L1099'></a><a href='#L1099'>1099</a>
1165
- <a name='L1100'></a><a href='#L1100'>1100</a>
1166
- <a name='L1101'></a><a href='#L1101'>1101</a>
1167
- <a name='L1102'></a><a href='#L1102'>1102</a>
1168
- <a name='L1103'></a><a href='#L1103'>1103</a>
1169
- <a name='L1104'></a><a href='#L1104'>1104</a>
1170
- <a name='L1105'></a><a href='#L1105'>1105</a>
1171
- <a name='L1106'></a><a href='#L1106'>1106</a>
1172
- <a name='L1107'></a><a href='#L1107'>1107</a>
1173
- <a name='L1108'></a><a href='#L1108'>1108</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
933
+ <a name='L868'></a><a href='#L868'>868</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
1174
934
  <span class="cline-any cline-no">&nbsp;</span>
1175
935
  <span class="cline-any cline-neutral">&nbsp;</span>
1176
- <span class="cline-any cline-no">&nbsp;</span>
936
+ <span class="cline-any cline-neutral">&nbsp;</span>
937
+ <span class="cline-any cline-neutral">&nbsp;</span>
938
+ <span class="cline-any cline-neutral">&nbsp;</span>
939
+ <span class="cline-any cline-neutral">&nbsp;</span>
940
+ <span class="cline-any cline-neutral">&nbsp;</span>
941
+ <span class="cline-any cline-neutral">&nbsp;</span>
942
+ <span class="cline-any cline-neutral">&nbsp;</span>
1177
943
  <span class="cline-any cline-no">&nbsp;</span>
1178
944
  <span class="cline-any cline-neutral">&nbsp;</span>
1179
945
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1199,6 +965,7 @@
1199
965
  <span class="cline-any cline-neutral">&nbsp;</span>
1200
966
  <span class="cline-any cline-no">&nbsp;</span>
1201
967
  <span class="cline-any cline-no">&nbsp;</span>
968
+ <span class="cline-any cline-no">&nbsp;</span>
1202
969
  <span class="cline-any cline-neutral">&nbsp;</span>
1203
970
  <span class="cline-any cline-neutral">&nbsp;</span>
1204
971
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1227,7 +994,6 @@
1227
994
  <span class="cline-any cline-no">&nbsp;</span>
1228
995
  <span class="cline-any cline-no">&nbsp;</span>
1229
996
  <span class="cline-any cline-no">&nbsp;</span>
1230
- <span class="cline-any cline-no">&nbsp;</span>
1231
997
  <span class="cline-any cline-neutral">&nbsp;</span>
1232
998
  <span class="cline-any cline-neutral">&nbsp;</span>
1233
999
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1264,7 +1030,6 @@
1264
1030
  <span class="cline-any cline-no">&nbsp;</span>
1265
1031
  <span class="cline-any cline-no">&nbsp;</span>
1266
1032
  <span class="cline-any cline-no">&nbsp;</span>
1267
- <span class="cline-any cline-no">&nbsp;</span>
1268
1033
  <span class="cline-any cline-neutral">&nbsp;</span>
1269
1034
  <span class="cline-any cline-neutral">&nbsp;</span>
1270
1035
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1320,12 +1085,6 @@
1320
1085
  <span class="cline-any cline-no">&nbsp;</span>
1321
1086
  <span class="cline-any cline-neutral">&nbsp;</span>
1322
1087
  <span class="cline-any cline-neutral">&nbsp;</span>
1323
- <span class="cline-any cline-neutral">&nbsp;</span>
1324
- <span class="cline-any cline-neutral">&nbsp;</span>
1325
- <span class="cline-any cline-no">&nbsp;</span>
1326
- <span class="cline-any cline-no">&nbsp;</span>
1327
- <span class="cline-any cline-neutral">&nbsp;</span>
1328
- <span class="cline-any cline-neutral">&nbsp;</span>
1329
1088
  <span class="cline-any cline-no">&nbsp;</span>
1330
1089
  <span class="cline-any cline-no">&nbsp;</span>
1331
1090
  <span class="cline-any cline-no">&nbsp;</span>
@@ -1343,14 +1102,11 @@
1343
1102
  <span class="cline-any cline-neutral">&nbsp;</span>
1344
1103
  <span class="cline-any cline-no">&nbsp;</span>
1345
1104
  <span class="cline-any cline-neutral">&nbsp;</span>
1346
- <span class="cline-any cline-no">&nbsp;</span>
1347
- <span class="cline-any cline-neutral">&nbsp;</span>
1348
1105
  <span class="cline-any cline-neutral">&nbsp;</span>
1349
1106
  <span class="cline-any cline-neutral">&nbsp;</span>
1350
1107
  <span class="cline-any cline-neutral">&nbsp;</span>
1351
1108
  <span class="cline-any cline-neutral">&nbsp;</span>
1352
1109
  <span class="cline-any cline-neutral">&nbsp;</span>
1353
- <span class="cline-any cline-no">&nbsp;</span>
1354
1110
  <span class="cline-any cline-neutral">&nbsp;</span>
1355
1111
  <span class="cline-any cline-no">&nbsp;</span>
1356
1112
  <span class="cline-any cline-no">&nbsp;</span>
@@ -1438,12 +1194,13 @@
1438
1194
  <span class="cline-any cline-no">&nbsp;</span>
1439
1195
  <span class="cline-any cline-no">&nbsp;</span>
1440
1196
  <span class="cline-any cline-no">&nbsp;</span>
1441
- <span class="cline-any cline-neutral">&nbsp;</span>
1197
+ <span class="cline-any cline-no">&nbsp;</span>
1442
1198
  <span class="cline-any cline-neutral">&nbsp;</span>
1443
1199
  <span class="cline-any cline-neutral">&nbsp;</span>
1444
1200
  <span class="cline-any cline-no">&nbsp;</span>
1445
1201
  <span class="cline-any cline-neutral">&nbsp;</span>
1446
1202
  <span class="cline-any cline-neutral">&nbsp;</span>
1203
+ <span class="cline-any cline-neutral">&nbsp;</span>
1447
1204
  <span class="cline-any cline-no">&nbsp;</span>
1448
1205
  <span class="cline-any cline-neutral">&nbsp;</span>
1449
1206
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1543,75 +1300,30 @@
1543
1300
  <span class="cline-any cline-neutral">&nbsp;</span>
1544
1301
  <span class="cline-any cline-neutral">&nbsp;</span>
1545
1302
  <span class="cline-any cline-no">&nbsp;</span>
1546
- <span class="cline-any cline-no">&nbsp;</span>
1547
- <span class="cline-any cline-no">&nbsp;</span>
1548
- <span class="cline-any cline-no">&nbsp;</span>
1549
- <span class="cline-any cline-neutral">&nbsp;</span>
1550
- <span class="cline-any cline-no">&nbsp;</span>
1551
- <span class="cline-any cline-neutral">&nbsp;</span>
1552
- <span class="cline-any cline-no">&nbsp;</span>
1553
1303
  <span class="cline-any cline-neutral">&nbsp;</span>
1554
1304
  <span class="cline-any cline-neutral">&nbsp;</span>
1555
1305
  <span class="cline-any cline-neutral">&nbsp;</span>
1556
1306
  <span class="cline-any cline-neutral">&nbsp;</span>
1557
1307
  <span class="cline-any cline-neutral">&nbsp;</span>
1558
- <span class="cline-any cline-neutral">&nbsp;</span>
1559
- <span class="cline-any cline-no">&nbsp;</span>
1560
1308
  <span class="cline-any cline-no">&nbsp;</span>
1561
- <span class="cline-any cline-neutral">&nbsp;</span>
1562
- <span class="cline-any cline-neutral">&nbsp;</span>
1563
- <span class="cline-any cline-neutral">&nbsp;</span>
1564
- <span class="cline-any cline-neutral">&nbsp;</span>
1565
- <span class="cline-any cline-neutral">&nbsp;</span>
1566
- <span class="cline-any cline-neutral">&nbsp;</span>
1567
- <span class="cline-any cline-neutral">&nbsp;</span>
1568
- <span class="cline-any cline-neutral">&nbsp;</span>
1569
- <span class="cline-any cline-no">&nbsp;</span>
1570
- <span class="cline-any cline-no">&nbsp;</span>
1571
- <span class="cline-any cline-no">&nbsp;</span>
1572
- <span class="cline-any cline-no">&nbsp;</span>
1573
- <span class="cline-any cline-neutral">&nbsp;</span>
1574
- <span class="cline-any cline-no">&nbsp;</span>
1575
- <span class="cline-any cline-no">&nbsp;</span>
1576
- <span class="cline-any cline-no">&nbsp;</span>
1577
- <span class="cline-any cline-neutral">&nbsp;</span>
1578
- <span class="cline-any cline-neutral">&nbsp;</span>
1579
- <span class="cline-any cline-neutral">&nbsp;</span>
1580
- <span class="cline-any cline-neutral">&nbsp;</span>
1581
1309
  <span class="cline-any cline-no">&nbsp;</span>
1582
1310
  <span class="cline-any cline-neutral">&nbsp;</span>
1583
1311
  <span class="cline-any cline-neutral">&nbsp;</span>
1584
1312
  <span class="cline-any cline-neutral">&nbsp;</span>
1585
1313
  <span class="cline-any cline-neutral">&nbsp;</span>
1586
- <span class="cline-any cline-neutral">&nbsp;</span>
1587
- <span class="cline-any cline-neutral">&nbsp;</span>
1588
- <span class="cline-any cline-neutral">&nbsp;</span>
1589
- <span class="cline-any cline-neutral">&nbsp;</span>
1590
- <span class="cline-any cline-no">&nbsp;</span>
1591
- <span class="cline-any cline-no">&nbsp;</span>
1592
1314
  <span class="cline-any cline-no">&nbsp;</span>
1593
1315
  <span class="cline-any cline-no">&nbsp;</span>
1594
1316
  <span class="cline-any cline-no">&nbsp;</span>
1595
1317
  <span class="cline-any cline-no">&nbsp;</span>
1596
- <span class="cline-any cline-no">&nbsp;</span>
1597
- <span class="cline-any cline-neutral">&nbsp;</span>
1598
- <span class="cline-any cline-neutral">&nbsp;</span>
1599
- <span class="cline-any cline-neutral">&nbsp;</span>
1600
1318
  <span class="cline-any cline-neutral">&nbsp;</span>
1601
1319
  <span class="cline-any cline-no">&nbsp;</span>
1602
1320
  <span class="cline-any cline-no">&nbsp;</span>
1603
- <span class="cline-any cline-neutral">&nbsp;</span>
1604
1321
  <span class="cline-any cline-no">&nbsp;</span>
1605
1322
  <span class="cline-any cline-neutral">&nbsp;</span>
1606
1323
  <span class="cline-any cline-neutral">&nbsp;</span>
1607
1324
  <span class="cline-any cline-neutral">&nbsp;</span>
1608
1325
  <span class="cline-any cline-neutral">&nbsp;</span>
1609
1326
  <span class="cline-any cline-no">&nbsp;</span>
1610
- <span class="cline-any cline-no">&nbsp;</span>
1611
- <span class="cline-any cline-no">&nbsp;</span>
1612
- <span class="cline-any cline-neutral">&nbsp;</span>
1613
- <span class="cline-any cline-neutral">&nbsp;</span>
1614
- <span class="cline-any cline-no">&nbsp;</span>
1615
1327
  <span class="cline-any cline-neutral">&nbsp;</span>
1616
1328
  <span class="cline-any cline-neutral">&nbsp;</span>
1617
1329
  <span class="cline-any cline-no">&nbsp;</span>
@@ -1782,201 +1494,69 @@
1782
1494
  <span class="cline-any cline-neutral">&nbsp;</span>
1783
1495
  <span class="cline-any cline-neutral">&nbsp;</span>
1784
1496
  <span class="cline-any cline-neutral">&nbsp;</span>
1785
- <span class="cline-any cline-no">&nbsp;</span>
1786
- <span class="cline-any cline-no">&nbsp;</span>
1787
- <span class="cline-any cline-no">&nbsp;</span>
1788
- <span class="cline-any cline-no">&nbsp;</span>
1789
- <span class="cline-any cline-neutral">&nbsp;</span>
1790
1497
  <span class="cline-any cline-neutral">&nbsp;</span>
1791
1498
  <span class="cline-any cline-no">&nbsp;</span>
1792
1499
  <span class="cline-any cline-no">&nbsp;</span>
1793
- <span class="cline-any cline-no">&nbsp;</span>
1794
- <span class="cline-any cline-neutral">&nbsp;</span>
1795
- <span class="cline-any cline-no">&nbsp;</span>
1796
- <span class="cline-any cline-neutral">&nbsp;</span>
1797
- <span class="cline-any cline-neutral">&nbsp;</span>
1798
- <span class="cline-any cline-neutral">&nbsp;</span>
1799
- <span class="cline-any cline-neutral">&nbsp;</span>
1800
- <span class="cline-any cline-neutral">&nbsp;</span>
1801
- <span class="cline-any cline-neutral">&nbsp;</span>
1802
- <span class="cline-any cline-neutral">&nbsp;</span>
1803
- <span class="cline-any cline-no">&nbsp;</span>
1804
- <span class="cline-any cline-no">&nbsp;</span>
1805
- <span class="cline-any cline-no">&nbsp;</span>
1806
- <span class="cline-any cline-no">&nbsp;</span>
1807
- <span class="cline-any cline-neutral">&nbsp;</span>
1808
- <span class="cline-any cline-no">&nbsp;</span>
1809
- <span class="cline-any cline-no">&nbsp;</span>
1810
- <span class="cline-any cline-no">&nbsp;</span>
1811
- <span class="cline-any cline-neutral">&nbsp;</span>
1812
- <span class="cline-any cline-neutral">&nbsp;</span>
1813
- <span class="cline-any cline-neutral">&nbsp;</span>
1814
- <span class="cline-any cline-neutral">&nbsp;</span>
1815
- <span class="cline-any cline-neutral">&nbsp;</span>
1816
- <span class="cline-any cline-neutral">&nbsp;</span>
1817
- <span class="cline-any cline-neutral">&nbsp;</span>
1818
- <span class="cline-any cline-neutral">&nbsp;</span>
1819
- <span class="cline-any cline-neutral">&nbsp;</span>
1820
- <span class="cline-any cline-neutral">&nbsp;</span>
1821
- <span class="cline-any cline-neutral">&nbsp;</span>
1822
- <span class="cline-any cline-neutral">&nbsp;</span>
1823
- <span class="cline-any cline-neutral">&nbsp;</span>
1824
- <span class="cline-any cline-neutral">&nbsp;</span>
1825
- <span class="cline-any cline-neutral">&nbsp;</span>
1826
- <span class="cline-any cline-neutral">&nbsp;</span>
1827
- <span class="cline-any cline-neutral">&nbsp;</span>
1828
- <span class="cline-any cline-neutral">&nbsp;</span>
1829
- <span class="cline-any cline-neutral">&nbsp;</span>
1830
- <span class="cline-any cline-neutral">&nbsp;</span>
1831
- <span class="cline-any cline-neutral">&nbsp;</span>
1832
- <span class="cline-any cline-neutral">&nbsp;</span>
1833
- <span class="cline-any cline-neutral">&nbsp;</span>
1834
- <span class="cline-any cline-neutral">&nbsp;</span>
1835
- <span class="cline-any cline-neutral">&nbsp;</span>
1836
- <span class="cline-any cline-neutral">&nbsp;</span>
1837
1500
  <span class="cline-any cline-neutral">&nbsp;</span>
1838
1501
  <span class="cline-any cline-no">&nbsp;</span>
1839
1502
  <span class="cline-any cline-no">&nbsp;</span>
1840
- <span class="cline-any cline-no">&nbsp;</span>
1841
- <span class="cline-any cline-neutral">&nbsp;</span>
1842
1503
  <span class="cline-any cline-neutral">&nbsp;</span>
1843
1504
  <span class="cline-any cline-neutral">&nbsp;</span>
1844
1505
  <span class="cline-any cline-neutral">&nbsp;</span>
1845
1506
  <span class="cline-any cline-neutral">&nbsp;</span>
1846
1507
  <span class="cline-any cline-neutral">&nbsp;</span>
1847
- <span class="cline-any cline-neutral">&nbsp;</span>
1848
- <span class="cline-any cline-no">&nbsp;</span>
1849
1508
  <span class="cline-any cline-no">&nbsp;</span>
1850
1509
  <span class="cline-any cline-no">&nbsp;</span>
1851
1510
  <span class="cline-any cline-neutral">&nbsp;</span>
1852
1511
  <span class="cline-any cline-no">&nbsp;</span>
1853
1512
  <span class="cline-any cline-no">&nbsp;</span>
1854
- <span class="cline-any cline-no">&nbsp;</span>
1855
- <span class="cline-any cline-no">&nbsp;</span>
1856
- <span class="cline-any cline-no">&nbsp;</span>
1857
- <span class="cline-any cline-no">&nbsp;</span>
1858
- <span class="cline-any cline-no">&nbsp;</span>
1859
- <span class="cline-any cline-no">&nbsp;</span>
1860
1513
  <span class="cline-any cline-neutral">&nbsp;</span>
1861
1514
  <span class="cline-any cline-no">&nbsp;</span>
1862
- <span class="cline-any cline-no">&nbsp;</span>
1863
- <span class="cline-any cline-no">&nbsp;</span>
1864
1515
  <span class="cline-any cline-neutral">&nbsp;</span>
1865
1516
  <span class="cline-any cline-no">&nbsp;</span>
1866
- <span class="cline-any cline-no">&nbsp;</span>
1867
- <span class="cline-any cline-no">&nbsp;</span>
1868
- <span class="cline-any cline-no">&nbsp;</span>
1869
1517
  <span class="cline-any cline-neutral">&nbsp;</span>
1870
1518
  <span class="cline-any cline-no">&nbsp;</span>
1871
1519
  <span class="cline-any cline-neutral">&nbsp;</span>
1872
- <span class="cline-any cline-no">&nbsp;</span>
1873
- <span class="cline-any cline-neutral">&nbsp;</span>
1874
- <span class="cline-any cline-no">&nbsp;</span>
1875
1520
  <span class="cline-any cline-neutral">&nbsp;</span>
1876
1521
  <span class="cline-any cline-neutral">&nbsp;</span>
1877
1522
  <span class="cline-any cline-neutral">&nbsp;</span>
1878
1523
  <span class="cline-any cline-neutral">&nbsp;</span>
1879
1524
  <span class="cline-any cline-no">&nbsp;</span>
1880
- <span class="cline-any cline-neutral">&nbsp;</span>
1881
- <span class="cline-any cline-no">&nbsp;</span>
1882
- <span class="cline-any cline-neutral">&nbsp;</span>
1883
- <span class="cline-any cline-no">&nbsp;</span>
1884
1525
  <span class="cline-any cline-no">&nbsp;</span>
1885
1526
  <span class="cline-any cline-neutral">&nbsp;</span>
1886
- <span class="cline-any cline-no">&nbsp;</span>
1887
- <span class="cline-any cline-no">&nbsp;</span>
1888
1527
  <span class="cline-any cline-neutral">&nbsp;</span>
1889
- <span class="cline-any cline-no">&nbsp;</span>
1890
- <span class="cline-any cline-neutral">&nbsp;</span>
1891
- <span class="cline-any cline-neutral">&nbsp;</span>
1892
- <span class="cline-any cline-neutral">&nbsp;</span>
1893
- <span class="cline-any cline-no">&nbsp;</span>
1894
- <span class="cline-any cline-no">&nbsp;</span>
1895
- <span class="cline-any cline-no">&nbsp;</span>
1896
- <span class="cline-any cline-no">&nbsp;</span>
1897
- <span class="cline-any cline-no">&nbsp;</span>
1898
- <span class="cline-any cline-no">&nbsp;</span>
1899
- <span class="cline-any cline-no">&nbsp;</span>
1900
- <span class="cline-any cline-no">&nbsp;</span>
1901
- <span class="cline-any cline-no">&nbsp;</span>
1902
- <span class="cline-any cline-no">&nbsp;</span>
1903
1528
  <span class="cline-any cline-neutral">&nbsp;</span>
1904
- <span class="cline-any cline-no">&nbsp;</span>
1905
- <span class="cline-any cline-no">&nbsp;</span>
1906
- <span class="cline-any cline-no">&nbsp;</span>
1907
- <span class="cline-any cline-no">&nbsp;</span>
1908
- <span class="cline-any cline-no">&nbsp;</span>
1909
1529
  <span class="cline-any cline-neutral">&nbsp;</span>
1910
- <span class="cline-any cline-no">&nbsp;</span>
1911
1530
  <span class="cline-any cline-neutral">&nbsp;</span>
1912
- <span class="cline-any cline-no">&nbsp;</span>
1913
1531
  <span class="cline-any cline-neutral">&nbsp;</span>
1914
- <span class="cline-any cline-no">&nbsp;</span>
1915
1532
  <span class="cline-any cline-neutral">&nbsp;</span>
1916
1533
  <span class="cline-any cline-neutral">&nbsp;</span>
1917
1534
  <span class="cline-any cline-neutral">&nbsp;</span>
1918
1535
  <span class="cline-any cline-neutral">&nbsp;</span>
1919
1536
  <span class="cline-any cline-no">&nbsp;</span>
1920
- <span class="cline-any cline-neutral">&nbsp;</span>
1921
1537
  <span class="cline-any cline-no">&nbsp;</span>
1922
- <span class="cline-any cline-neutral">&nbsp;</span>
1923
1538
  <span class="cline-any cline-no">&nbsp;</span>
1924
1539
  <span class="cline-any cline-no">&nbsp;</span>
1925
- <span class="cline-any cline-neutral">&nbsp;</span>
1926
- <span class="cline-any cline-neutral">&nbsp;</span>
1927
- <span class="cline-any cline-neutral">&nbsp;</span>
1928
- <span class="cline-any cline-neutral">&nbsp;</span>
1929
- <span class="cline-any cline-neutral">&nbsp;</span>
1930
- <span class="cline-any cline-neutral">&nbsp;</span>
1931
- <span class="cline-any cline-neutral">&nbsp;</span>
1932
- <span class="cline-any cline-neutral">&nbsp;</span>
1933
- <span class="cline-any cline-neutral">&nbsp;</span>
1934
- <span class="cline-any cline-neutral">&nbsp;</span>
1935
1540
  <span class="cline-any cline-no">&nbsp;</span>
1936
1541
  <span class="cline-any cline-neutral">&nbsp;</span>
1937
- <span class="cline-any cline-neutral">&nbsp;</span>
1938
- <span class="cline-any cline-neutral">&nbsp;</span>
1939
- <span class="cline-any cline-neutral">&nbsp;</span>
1940
- <span class="cline-any cline-neutral">&nbsp;</span>
1941
- <span class="cline-any cline-neutral">&nbsp;</span>
1942
- <span class="cline-any cline-no">&nbsp;</span>
1943
1542
  <span class="cline-any cline-no">&nbsp;</span>
1944
1543
  <span class="cline-any cline-neutral">&nbsp;</span>
1945
- <span class="cline-any cline-no">&nbsp;</span>
1946
1544
  <span class="cline-any cline-neutral">&nbsp;</span>
1947
1545
  <span class="cline-any cline-neutral">&nbsp;</span>
1948
1546
  <span class="cline-any cline-neutral">&nbsp;</span>
1949
- <span class="cline-any cline-no">&nbsp;</span>
1950
- <span class="cline-any cline-no">&nbsp;</span>
1951
- <span class="cline-any cline-no">&nbsp;</span>
1952
1547
  <span class="cline-any cline-neutral">&nbsp;</span>
1953
1548
  <span class="cline-any cline-no">&nbsp;</span>
1954
- <span class="cline-any cline-no">&nbsp;</span>
1955
- <span class="cline-any cline-no">&nbsp;</span>
1956
- <span class="cline-any cline-no">&nbsp;</span>
1957
1549
  <span class="cline-any cline-neutral">&nbsp;</span>
1958
- <span class="cline-any cline-no">&nbsp;</span>
1959
1550
  <span class="cline-any cline-neutral">&nbsp;</span>
1960
1551
  <span class="cline-any cline-neutral">&nbsp;</span>
1961
1552
  <span class="cline-any cline-neutral">&nbsp;</span>
1962
1553
  <span class="cline-any cline-neutral">&nbsp;</span>
1963
- <span class="cline-any cline-no">&nbsp;</span>
1964
- <span class="cline-any cline-no">&nbsp;</span>
1965
- <span class="cline-any cline-no">&nbsp;</span>
1966
1554
  <span class="cline-any cline-neutral">&nbsp;</span>
1967
- <span class="cline-any cline-no">&nbsp;</span>
1968
- <span class="cline-any cline-no">&nbsp;</span>
1969
- <span class="cline-any cline-no">&nbsp;</span>
1970
1555
  <span class="cline-any cline-neutral">&nbsp;</span>
1971
1556
  <span class="cline-any cline-neutral">&nbsp;</span>
1972
- <span class="cline-any cline-no">&nbsp;</span>
1973
- <span class="cline-any cline-no">&nbsp;</span>
1974
1557
  <span class="cline-any cline-neutral">&nbsp;</span>
1975
- <span class="cline-any cline-no">&nbsp;</span>
1976
1558
  <span class="cline-any cline-neutral">&nbsp;</span>
1977
- <span class="cline-any cline-no">&nbsp;</span>
1978
1559
  <span class="cline-any cline-neutral">&nbsp;</span>
1979
- <span class="cline-any cline-no">&nbsp;</span>
1980
1560
  <span class="cline-any cline-neutral">&nbsp;</span>
1981
1561
  <span class="cline-any cline-neutral">&nbsp;</span>
1982
1562
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1985,24 +1565,8 @@
1985
1565
  <span class="cline-any cline-no">&nbsp;</span>
1986
1566
  <span class="cline-any cline-no">&nbsp;</span>
1987
1567
  <span class="cline-any cline-neutral">&nbsp;</span>
1988
- <span class="cline-any cline-neutral">&nbsp;</span>
1989
- <span class="cline-any cline-neutral">&nbsp;</span>
1990
- <span class="cline-any cline-neutral">&nbsp;</span>
1991
- <span class="cline-any cline-neutral">&nbsp;</span>
1992
- <span class="cline-any cline-neutral">&nbsp;</span>
1993
- <span class="cline-any cline-neutral">&nbsp;</span>
1994
- <span class="cline-any cline-neutral">&nbsp;</span>
1995
- <span class="cline-any cline-neutral">&nbsp;</span>
1996
- <span class="cline-any cline-neutral">&nbsp;</span>
1997
- <span class="cline-any cline-no">&nbsp;</span>
1998
- <span class="cline-any cline-no">&nbsp;</span>
1999
1568
  <span class="cline-any cline-no">&nbsp;</span>
2000
1569
  <span class="cline-any cline-neutral">&nbsp;</span>
2001
- <span class="cline-any cline-no">&nbsp;</span>
2002
- <span class="cline-any cline-neutral">&nbsp;</span>
2003
- <span class="cline-any cline-neutral">&nbsp;</span>
2004
- <span class="cline-any cline-neutral">&nbsp;</span>
2005
- <span class="cline-any cline-neutral">&nbsp;</span>
2006
1570
  <span class="cline-any cline-neutral">&nbsp;</span>
2007
1571
  <span class="cline-any cline-no">&nbsp;</span>
2008
1572
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2011,39 +1575,10 @@
2011
1575
  <span class="cline-any cline-neutral">&nbsp;</span>
2012
1576
  <span class="cline-any cline-neutral">&nbsp;</span>
2013
1577
  <span class="cline-any cline-neutral">&nbsp;</span>
2014
- <span class="cline-any cline-neutral">&nbsp;</span>
2015
- <span class="cline-any cline-neutral">&nbsp;</span>
2016
- <span class="cline-any cline-neutral">&nbsp;</span>
2017
- <span class="cline-any cline-neutral">&nbsp;</span>
2018
- <span class="cline-any cline-neutral">&nbsp;</span>
2019
- <span class="cline-any cline-neutral">&nbsp;</span>
2020
- <span class="cline-any cline-neutral">&nbsp;</span>
2021
- <span class="cline-any cline-neutral">&nbsp;</span>
2022
- <span class="cline-any cline-neutral">&nbsp;</span>
2023
- <span class="cline-any cline-neutral">&nbsp;</span>
2024
- <span class="cline-any cline-neutral">&nbsp;</span>
2025
- <span class="cline-any cline-neutral">&nbsp;</span>
2026
1578
  <span class="cline-any cline-no">&nbsp;</span>
2027
1579
  <span class="cline-any cline-no">&nbsp;</span>
2028
1580
  <span class="cline-any cline-neutral">&nbsp;</span>
2029
1581
  <span class="cline-any cline-no">&nbsp;</span>
2030
- <span class="cline-any cline-neutral">&nbsp;</span>
2031
- <span class="cline-any cline-neutral">&nbsp;</span>
2032
- <span class="cline-any cline-no">&nbsp;</span>
2033
- <span class="cline-any cline-neutral">&nbsp;</span>
2034
- <span class="cline-any cline-neutral">&nbsp;</span>
2035
- <span class="cline-any cline-neutral">&nbsp;</span>
2036
- <span class="cline-any cline-neutral">&nbsp;</span>
2037
- <span class="cline-any cline-neutral">&nbsp;</span>
2038
- <span class="cline-any cline-neutral">&nbsp;</span>
2039
- <span class="cline-any cline-no">&nbsp;</span>
2040
- <span class="cline-any cline-no">&nbsp;</span>
2041
- <span class="cline-any cline-no">&nbsp;</span>
2042
- <span class="cline-any cline-no">&nbsp;</span>
2043
- <span class="cline-any cline-neutral">&nbsp;</span>
2044
- <span class="cline-any cline-no">&nbsp;</span>
2045
- <span class="cline-any cline-no">&nbsp;</span>
2046
- <span class="cline-any cline-no">&nbsp;</span>
2047
1582
  <span class="cline-any cline-no">&nbsp;</span>
2048
1583
  <span class="cline-any cline-neutral">&nbsp;</span>
2049
1584
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2074,8 +1609,6 @@
2074
1609
  <span class="cline-any cline-neutral">&nbsp;</span>
2075
1610
  <span class="cline-any cline-neutral">&nbsp;</span>
2076
1611
  <span class="cline-any cline-no">&nbsp;</span>
2077
- <span class="cline-any cline-no">&nbsp;</span>
2078
- <span class="cline-any cline-no">&nbsp;</span>
2079
1612
  <span class="cline-any cline-neutral">&nbsp;</span>
2080
1613
  <span class="cline-any cline-no">&nbsp;</span>
2081
1614
  <span class="cline-any cline-no">&nbsp;</span>
@@ -2092,16 +1625,6 @@
2092
1625
  <span class="cline-any cline-neutral">&nbsp;</span>
2093
1626
  <span class="cline-any cline-neutral">&nbsp;</span>
2094
1627
  <span class="cline-any cline-neutral">&nbsp;</span>
2095
- <span class="cline-any cline-no">&nbsp;</span>
2096
- <span class="cline-any cline-no">&nbsp;</span>
2097
- <span class="cline-any cline-neutral">&nbsp;</span>
2098
- <span class="cline-any cline-no">&nbsp;</span>
2099
- <span class="cline-any cline-neutral">&nbsp;</span>
2100
- <span class="cline-any cline-neutral">&nbsp;</span>
2101
- <span class="cline-any cline-no">&nbsp;</span>
2102
- <span class="cline-any cline-no">&nbsp;</span>
2103
- <span class="cline-any cline-neutral">&nbsp;</span>
2104
- <span class="cline-any cline-no">&nbsp;</span>
2105
1628
  <span class="cline-any cline-neutral">&nbsp;</span>
2106
1629
  <span class="cline-any cline-no">&nbsp;</span>
2107
1630
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2113,46 +1636,29 @@
2113
1636
  <span class="cline-any cline-no">&nbsp;</span>
2114
1637
  <span class="cline-any cline-neutral">&nbsp;</span>
2115
1638
  <span class="cline-any cline-no">&nbsp;</span>
2116
- <span class="cline-any cline-no">&nbsp;</span>
2117
- <span class="cline-any cline-no">&nbsp;</span>
2118
- <span class="cline-any cline-no">&nbsp;</span>
2119
- <span class="cline-any cline-no">&nbsp;</span>
2120
- <span class="cline-any cline-no">&nbsp;</span>
2121
- <span class="cline-any cline-no">&nbsp;</span>
2122
- <span class="cline-any cline-neutral">&nbsp;</span>
2123
- <span class="cline-any cline-no">&nbsp;</span>
2124
- <span class="cline-any cline-neutral">&nbsp;</span>
2125
- <span class="cline-any cline-neutral">&nbsp;</span>
2126
- <span class="cline-any cline-no">&nbsp;</span>
2127
1639
  <span class="cline-any cline-neutral">&nbsp;</span>
2128
1640
  <span class="cline-any cline-neutral">&nbsp;</span>
2129
1641
  <span class="cline-any cline-no">&nbsp;</span>
2130
1642
  <span class="cline-any cline-no">&nbsp;</span>
2131
1643
  <span class="cline-any cline-neutral">&nbsp;</span>
2132
1644
  <span class="cline-any cline-no">&nbsp;</span>
2133
- <span class="cline-any cline-no">&nbsp;</span>
2134
1645
  <span class="cline-any cline-neutral">&nbsp;</span>
2135
1646
  <span class="cline-any cline-no">&nbsp;</span>
1647
+ <span class="cline-any cline-no">&nbsp;</span>
2136
1648
  <span class="cline-any cline-neutral">&nbsp;</span>
2137
1649
  <span class="cline-any cline-neutral">&nbsp;</span>
2138
1650
  <span class="cline-any cline-no">&nbsp;</span>
2139
1651
  <span class="cline-any cline-no">&nbsp;</span>
2140
- <span class="cline-any cline-neutral">&nbsp;</span>
2141
- <span class="cline-any cline-no">&nbsp;</span>
2142
1652
  <span class="cline-any cline-no">&nbsp;</span>
2143
1653
  <span class="cline-any cline-neutral">&nbsp;</span>
2144
- <span class="cline-any cline-neutral">&nbsp;</span>
2145
1654
  <span class="cline-any cline-no">&nbsp;</span>
2146
1655
  <span class="cline-any cline-no">&nbsp;</span>
2147
1656
  <span class="cline-any cline-neutral">&nbsp;</span>
2148
1657
  <span class="cline-any cline-neutral">&nbsp;</span>
2149
1658
  <span class="cline-any cline-no">&nbsp;</span>
2150
- <span class="cline-any cline-no">&nbsp;</span>
2151
- <span class="cline-any cline-neutral">&nbsp;</span>
2152
1659
  <span class="cline-any cline-neutral">&nbsp;</span>
2153
1660
  <span class="cline-any cline-no">&nbsp;</span>
2154
1661
  <span class="cline-any cline-neutral">&nbsp;</span>
2155
- <span class="cline-any cline-neutral">&nbsp;</span>
2156
1662
  <span class="cline-any cline-no">&nbsp;</span>
2157
1663
  <span class="cline-any cline-neutral">&nbsp;</span>
2158
1664
  <span class="cline-any cline-no">&nbsp;</span>
@@ -2197,13 +1703,11 @@
2197
1703
  <span class="cline-any cline-no">&nbsp;</span>
2198
1704
  <span class="cline-any cline-no">&nbsp;</span>
2199
1705
  <span class="cline-any cline-no">&nbsp;</span>
2200
- <span class="cline-any cline-no">&nbsp;</span>
2201
1706
  <span class="cline-any cline-neutral">&nbsp;</span>
2202
1707
  <span class="cline-any cline-neutral">&nbsp;</span>
2203
1708
  <span class="cline-any cline-no">&nbsp;</span>
2204
1709
  <span class="cline-any cline-no">&nbsp;</span>
2205
1710
  <span class="cline-any cline-no">&nbsp;</span>
2206
- <span class="cline-any cline-no">&nbsp;</span>
2207
1711
  <span class="cline-any cline-neutral">&nbsp;</span>
2208
1712
  <span class="cline-any cline-neutral">&nbsp;</span>
2209
1713
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2253,11 +1757,27 @@
2253
1757
  <span class="cline-any cline-neutral">&nbsp;</span>
2254
1758
  <span class="cline-any cline-neutral">&nbsp;</span>
2255
1759
  <span class="cline-any cline-neutral">&nbsp;</span>
1760
+ <span class="cline-any cline-neutral">&nbsp;</span>
1761
+ <span class="cline-any cline-neutral">&nbsp;</span>
1762
+ <span class="cline-any cline-neutral">&nbsp;</span>
1763
+ <span class="cline-any cline-neutral">&nbsp;</span>
1764
+ <span class="cline-any cline-neutral">&nbsp;</span>
2256
1765
  <span class="cline-any cline-no">&nbsp;</span>
2257
1766
  <span class="cline-any cline-no">&nbsp;</span>
1767
+ <span class="cline-any cline-no">&nbsp;</span>
1768
+ <span class="cline-any cline-neutral">&nbsp;</span>
2258
1769
  <span class="cline-any cline-neutral">&nbsp;</span>
2259
1770
  <span class="cline-any cline-neutral">&nbsp;</span>
2260
1771
  <span class="cline-any cline-neutral">&nbsp;</span>
1772
+ <span class="cline-any cline-neutral">&nbsp;</span>
1773
+ <span class="cline-any cline-no">&nbsp;</span>
1774
+ <span class="cline-any cline-neutral">&nbsp;</span>
1775
+ <span class="cline-any cline-no">&nbsp;</span>
1776
+ <span class="cline-any cline-neutral">&nbsp;</span>
1777
+ <span class="cline-any cline-neutral">&nbsp;</span>
1778
+ <span class="cline-any cline-neutral">&nbsp;</span>
1779
+ <span class="cline-any cline-neutral">&nbsp;</span>
1780
+ <span class="cline-any cline-no">&nbsp;</span>
2261
1781
  <span class="cline-any cline-no">&nbsp;</span>
2262
1782
  <span class="cline-any cline-no">&nbsp;</span>
2263
1783
  <span class="cline-any cline-no">&nbsp;</span>
@@ -2277,10 +1797,16 @@
2277
1797
  <span class="cline-any cline-neutral">&nbsp;</span>
2278
1798
  <span class="cline-any cline-neutral">&nbsp;</span>
2279
1799
  <span class="cline-any cline-neutral">&nbsp;</span>
2280
- <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 ConditionsManager from '../modules/conditionsManager.js'</span>
2281
- <span class="cstat-no" title="statement not covered" >import FeatureFlags from '../modules/featureFlags.js'</span>
2282
- import type Message from './messages.gen.js'
2283
- <span class="cstat-no" title="statement not covered" >import { Timestamp, Metadata, UserID, Type as MType, TabChange, TabData } from './messages.gen.js'</span>
1800
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import type Message from './messages.gen.js'
1801
+ <span class="cstat-no" title="statement not covered" >import {</span>
1802
+ Timestamp,
1803
+ Metadata,
1804
+ UserID,
1805
+ Type as MType,
1806
+ TabChange,
1807
+ TabData,
1808
+ WSChannel,
1809
+ } from './messages.gen.js'
2284
1810
  <span class="cstat-no" title="statement not covered" >import {</span>
2285
1811
  now,
2286
1812
  adjustTimeOrigin,
@@ -2306,6 +1832,7 @@ import type { Options as SessOptions } from './session.js'
2306
1832
  import type { Options as NetworkOptions } from '../modules/network.js'
2307
1833
  <span class="cstat-no" title="statement not covered" >import CanvasRecorder from './canvas.js'</span>
2308
1834
  <span class="cstat-no" title="statement not covered" >import UserTestManager from '../modules/userTesting/index.js'</span>
1835
+ <span class="cstat-no" title="statement not covered" >import TagWatcher from '../modules/tagWatcher.js'</span>
2309
1836
  &nbsp;
2310
1837
  import type {
2311
1838
  Options as WebworkerOptions,
@@ -2333,7 +1860,6 @@ interface OnStartInfo {
2333
1860
  &nbsp;
2334
1861
  const CANCELED = <span class="cstat-no" title="statement not covered" >'canceled' as const</span>
2335
1862
  const uxtStorageKey = <span class="cstat-no" title="statement not covered" >'or_uxt_active'</span>
2336
- const bufferStorageKey = <span class="cstat-no" title="statement not covered" >'or_buffer_1'</span>
2337
1863
  const START_ERROR = <span class="cstat-no" title="statement not covered" >':(' as const</span>
2338
1864
  type SuccessfulStart = OnStartInfo &amp; {
2339
1865
  success: true
@@ -2371,7 +1897,6 @@ type CommitCallback = (messages: Array&lt;Message&gt;) =&gt; void
2371
1897
  <span class="cstat-no" title="statement not covered" > NotActive,</span>
2372
1898
  <span class="cstat-no" title="statement not covered" > Starting,</span>
2373
1899
  <span class="cstat-no" title="statement not covered" > Active,</span>
2374
- <span class="cstat-no" title="statement not covered" > ColdStart,</span>
2375
1900
  }
2376
1901
  &nbsp;
2377
1902
  type AppOptions = {
@@ -2425,14 +1950,8 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
2425
1950
  readonly localStorage: Storage
2426
1951
  readonly sessionStorage: Storage
2427
1952
  private readonly <span class="cstat-no" title="statement not covered" >messages: Array&lt;Message&gt; = []</span>
2428
- /**
2429
- * we need 2 buffers so we don't lose anything
2430
- * @read coldStart implementation
2431
- * */
2432
- private <span class="cstat-no" title="statement not covered" >bufferedMessages1: Array&lt;Message&gt; = []</span>
2433
- private <span class="cstat-no" title="statement not covered" >bufferedMessages2: Array&lt;Message&gt; = []</span>
2434
1953
  /* private */
2435
- readonly observer: Observer // non-private for attachContextCallback
1954
+ readonly observer: Observer // non-privat for attachContextCallback
2436
1955
  private readonly <span class="cstat-no" title="statement not covered" >startCallbacks: Array&lt;StartCallback&gt; = []</span>
2437
1956
  private readonly <span class="cstat-no" title="statement not covered" >stopCallbacks: Array&lt;() =&gt; any&gt; = []</span>
2438
1957
  private readonly <span class="cstat-no" title="statement not covered" >commitCallbacks: Array&lt;CommitCallback&gt; = []</span>
@@ -2450,15 +1969,12 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
2450
1969
  public attributeSender: AttributeSender
2451
1970
  private <span class="cstat-no" title="statement not covered" >canvasRecorder: CanvasRecorder | null = null</span>
2452
1971
  private uxtManager: UserTestManager
2453
- private <span class="cstat-no" title="statement not covered" >conditionsManager: ConditionsManager | null = null</span>
2454
- public featureFlags: FeatureFlags
2455
- &nbsp;
2456
- <span class="fstat-no" title="function not covered" > constructor(</span>
2457
- projectKey: string,
2458
- sessionToken: string | undefined,
2459
- options: Partial&lt;Options&gt;,
2460
- private readonly <span class="cstat-no" title="statement not covered" >signalError: (error: string, apis: string[]) =&gt; void,</span>
2461
- ) {
1972
+ private tagWatcher: TagWatcher
1973
+ &nbsp;
1974
+ <span class="fstat-no" title="function not covered" > constructor(p</span>rojectKey: string, sessionToken: string | undefined, options: Partial&lt;Options&gt;) {
1975
+ // if (options.onStart !== undefined) {
1976
+ // deprecationWarn("'onStart' option", "tracker.start().then(/* handle session info */)")
1977
+ // } ?? maybe onStart is good
2462
1978
  <span class="cstat-no" title="statement not covered" > this.contextId = Math.random().toString(36).slice(2)</span>
2463
1979
  <span class="cstat-no" title="statement not covered" > this.projectKey = projectKey</span>
2464
1980
  <span class="cstat-no" title="statement not covered" > this.networkOptions = options.network</span>
@@ -2502,7 +2018,7 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
2502
2018
  <span class="cstat-no" title="statement not covered" > this.notify = new Logger(this.options.verbose ? LogLevel.Warnings : LogLevel.Silent)</span>
2503
2019
  <span class="cstat-no" title="statement not covered" > this.session = new Session(this, this.options)</span>
2504
2020
  <span class="cstat-no" title="statement not covered" > this.attributeSender = new AttributeSender(this, Boolean(this.options.disableStringDict))</span>
2505
- <span class="cstat-no" title="statement not covered" > this.featureFlags = new FeatureFlags(this)</span>
2021
+ <span class="cstat-no" title="statement not covered" > this.tagWatcher = new TagWatcher(this.sessionStorage, this.debug.error, <span class="fstat-no" title="function not covered" >(t</span>ag) =&gt; <span class="cstat-no" title="statement not covered" >console.log(`Tag ${tag} has been rendered`))</span></span>
2506
2022
  <span class="cstat-no" title="statement not covered" > this.session.attachUpdateCallback(<span class="fstat-no" title="function not covered" >({</span> userID, metadata }) =&gt; {</span>
2507
2023
  <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (userID != null) {</span>
2508
2024
  // TODO: nullable userID
@@ -2530,25 +2046,26 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
2530
2046
  <span class="cstat-no" title="statement not covered" > this.stop(false)</span>
2531
2047
  <span class="cstat-no" title="statement not covered" > void this.start({}, true)</span>
2532
2048
  } else <span class="cstat-no" title="statement not covered" >if (data === 'not_init') {</span>
2533
- <span class="cstat-no" title="statement not covered" > console.warn('WebWorker: writer not initialised. Restarting tracker')</span>
2049
+ <span class="cstat-no" title="statement not covered" > this.debug.warn('OR WebWorker: writer not initialised. Restarting tracker')</span>
2534
2050
  } else <span class="cstat-no" title="statement not covered" >if (data.type === 'failure') {</span>
2535
2051
  <span class="cstat-no" title="statement not covered" > this.stop(false)</span>
2052
+ <span class="cstat-no" title="statement not covered" > this.debug.error('worker_failed', data.reason)</span>
2536
2053
  <span class="cstat-no" title="statement not covered" > this._debug('worker_failed', data.reason)</span>
2537
2054
  } else <span class="cstat-no" title="statement not covered" ><span class="missing-if-branch" title="if path not taken" >I</span>if (data.type === 'compress') {</span>
2538
2055
  const batch = <span class="cstat-no" title="statement not covered" >data.batch</span>
2539
2056
  const batchSize = <span class="cstat-no" title="statement not covered" >batch.byteLength</span>
2540
2057
  <span class="cstat-no" title="statement not covered" > if (batchSize &gt; this.compressionThreshold) {</span>
2541
2058
  <span class="cstat-no" title="statement not covered" > gzip(data.batch, { mtime: 0 }, <span class="fstat-no" title="function not covered" >(e</span>rr, result) =&gt; {</span>
2542
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (err) {</span>
2543
- <span class="cstat-no" title="statement not covered" > console.error('Openreplay compression error:', err)</span>
2059
+ <span class="cstat-no" title="statement not covered" > if (err) {</span>
2060
+ <span class="cstat-no" title="statement not covered" > this.debug.error('Openreplay compression error:', err)</span>
2544
2061
  <span class="cstat-no" title="statement not covered" > this.stop(false)</span>
2545
2062
  <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.restartAttempts &lt; 3) {</span>
2546
2063
  <span class="cstat-no" title="statement not covered" > this.restartAttempts += 1</span>
2547
2064
  <span class="cstat-no" title="statement not covered" > void this.start({}, true)</span>
2548
2065
  }
2066
+ } else {
2067
+ <span class="cstat-no" title="statement not covered" > this.worker?.postMessage({ type: 'compressed', batch: result })</span>
2549
2068
  }
2550
- // @ts-ignore
2551
- <span class="cstat-no" title="statement not covered" > this.worker?.postMessage({ type: 'compressed', batch: result })</span>
2552
2069
  })
2553
2070
  } else {
2554
2071
  <span class="cstat-no" title="statement not covered" > this.worker?.postMessage({ type: 'uncompressed', batch: batch })</span>
@@ -2647,17 +2164,9 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
2647
2164
  <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this._usingOldFetchPlugin &amp;&amp; message[0] === MType.NetworkRequest) {</span>
2648
2165
  <span class="cstat-no" title="statement not covered" > return</span>
2649
2166
  }
2650
- &nbsp;
2651
2167
  // ====================================================
2652
- <span class="cstat-no" title="statement not covered" > if (this.activityState === ActivityState.ColdStart) {</span>
2653
- <span class="cstat-no" title="statement not covered" > this.bufferedMessages1.push(message)</span>
2654
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.singleBuffer) {</span>
2655
- <span class="cstat-no" title="statement not covered" > this.bufferedMessages2.push(message)</span>
2656
- }
2657
- <span class="cstat-no" title="statement not covered" > this.conditionsManager?.processMessage(message)</span>
2658
- } else {
2659
- <span class="cstat-no" title="statement not covered" > this.messages.push(message)</span>
2660
- }
2168
+ &nbsp;
2169
+ <span class="cstat-no" title="statement not covered" > this.messages.push(message)</span>
2661
2170
  // TODO: commit on start if there were `urgent` sends;
2662
2171
  // Clarify where urgent can be used for;
2663
2172
  // Clarify workflow for each type of message in case it was sent before start
@@ -2668,11 +2177,7 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
2668
2177
  }
2669
2178
  }
2670
2179
  &nbsp;
2671
- /**
2672
- * Normal workflow: add timestamp and tab data to batch, then commit it
2673
- * every ~30ms
2674
- * */
2675
- private <span class="fstat-no" title="function not covered" >_nCommit(</span>): void {
2180
+ private <span class="fstat-no" title="function not covered" >commit(</span>): void {
2676
2181
  <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.worker !== undefined &amp;&amp; this.messages.length) {</span>
2677
2182
  <span class="cstat-no" title="statement not covered" > requestIdleCb(<span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
2678
2183
  <span class="cstat-no" title="statement not covered" > this.messages.unshift(TabData(this.session.getTabId()))</span>
@@ -2684,39 +2189,6 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
2684
2189
  })
2685
2190
  }
2686
2191
  }
2687
- &nbsp;
2688
- <span class="cstat-no" title="statement not covered" > coldStartCommitN = 0</span>
2689
- &nbsp;
2690
- /**
2691
- * Cold start: add timestamp and tab data to both batches
2692
- * every 2nd tick, ~60ms
2693
- * this will make batches a bit larger and replay will work with bigger jumps every frame
2694
- * but in turn we don't overload batch writer on session start with 1000 batches
2695
- * */
2696
- private <span class="fstat-no" title="function not covered" >_cStartCommit(</span>): void {
2697
- <span class="cstat-no" title="statement not covered" > this.coldStartCommitN += 1</span>
2698
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.coldStartCommitN === 2) {</span>
2699
- <span class="cstat-no" title="statement not covered" > this.bufferedMessages1.push(Timestamp(this.timestamp()))</span>
2700
- <span class="cstat-no" title="statement not covered" > this.bufferedMessages1.push(TabData(this.session.getTabId()))</span>
2701
- <span class="cstat-no" title="statement not covered" > this.bufferedMessages2.push(Timestamp(this.timestamp()))</span>
2702
- <span class="cstat-no" title="statement not covered" > this.bufferedMessages2.push(TabData(this.session.getTabId()))</span>
2703
- <span class="cstat-no" title="statement not covered" > this.coldStartCommitN = 0</span>
2704
- }
2705
- }
2706
- &nbsp;
2707
- private <span class="fstat-no" title="function not covered" >commit(</span>): void {
2708
- <span class="cstat-no" title="statement not covered" > if (this.activityState === ActivityState.ColdStart) {</span>
2709
- <span class="cstat-no" title="statement not covered" > this._cStartCommit()</span>
2710
- } else {
2711
- <span class="cstat-no" title="statement not covered" > this._nCommit()</span>
2712
- }
2713
- }
2714
- &nbsp;
2715
- private <span class="fstat-no" title="function not covered" >postToWorker(</span>messages: Array&lt;Message&gt;) {
2716
- <span class="cstat-no" title="statement not covered" > this.worker?.postMessage(messages)</span>
2717
- <span class="cstat-no" title="statement not covered" > this.commitCallbacks.forEach(<span class="fstat-no" title="function not covered" >(c</span>b) =&gt; <span class="cstat-no" title="statement not covered" >cb(messages))</span></span>
2718
- <span class="cstat-no" title="statement not covered" > messages.length = 0</span>
2719
- }
2720
2192
  &nbsp;
2721
2193
  private <span class="cstat-no" title="statement not covered" >delay = 0</span>
2722
2194
  &nbsp;
@@ -2888,193 +2360,20 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
2888
2360
  <span class="cstat-no" title="statement not covered" > this.sessionStorage.removeItem(this.options.session_reset_key)</span>
2889
2361
  }
2890
2362
  }
2891
- &nbsp;
2892
- <span class="cstat-no" title="statement not covered" > coldInterval: ReturnType&lt;typeof setInterval&gt; | null = null</span>
2893
- <span class="cstat-no" title="statement not covered" > orderNumber = 0</span>
2894
- <span class="cstat-no" title="statement not covered" > coldStartTs = 0</span>
2895
- <span class="cstat-no" title="statement not covered" > singleBuffer = false</span>
2896
- &nbsp;
2897
- private <span class="fstat-no" title="function not covered" >checkSessionToken(</span>forceNew?: boolean) {
2898
- const lsReset = <span class="cstat-no" title="statement not covered" >this.sessionStorage.getItem(this.options.session_reset_key) !== null</span>
2899
- const needNewSessionID = <span class="cstat-no" title="statement not covered" >forceNew || lsReset</span>
2900
- const sessionToken = <span class="cstat-no" title="statement not covered" >this.session.getSessionToken()</span>
2901
- &nbsp;
2902
- <span class="cstat-no" title="statement not covered" > return needNewSessionID || !sessionToken</span>
2903
- }
2904
- /**
2905
- * start buffering messages without starting the actual session, which gives
2906
- * user 30 seconds to "activate" and record session by calling `start()` on conditional trigger
2907
- * and we will then send buffered batch, so it won't get lost
2908
- * */
2909
- public async <span class="fstat-no" title="function not covered" >coldStart(</span>startOpts: StartOptions = <span class="branch-0 cbranch-no" title="branch not covered" >{},</span> conditional?: boolean) {
2910
- <span class="cstat-no" title="statement not covered" > this.singleBuffer = false</span>
2911
- const second = <span class="cstat-no" title="statement not covered" >1000</span>
2912
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (conditional) {</span>
2913
- <span class="cstat-no" title="statement not covered" > this.conditionsManager = new ConditionsManager(this, startOpts)</span>
2914
- }
2915
- const isNewSession = <span class="cstat-no" title="statement not covered" >this.checkSessionToken(startOpts.forceNew)</span>
2916
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (conditional) {</span>
2917
- const r = <span class="cstat-no" title="statement not covered" >await fetch(this.options.ingestPoint + '/v1/web/start', {</span>
2918
- method: 'POST',
2919
- headers: {
2920
- 'Content-Type': 'application/json',
2921
- },
2922
- body: JSON.stringify({
2923
- ...this.getTrackerInfo(),
2924
- timestamp: now(),
2925
- doNotRecord: true,
2926
- bufferDiff: 0,
2927
- userID: this.session.getInfo().userID,
2928
- token: undefined,
2929
- deviceMemory,
2930
- jsHeapSizeLimit,
2931
- timezone: getTimezone(),
2932
- }),
2933
- })
2934
- // this token is needed to fetch conditions and flags,
2935
- // but it can't be used to record a session
2936
- const {
2937
- token,
2938
- userBrowser,
2939
- userCity,
2940
- userCountry,
2941
- userDevice,
2942
- userOS,
2943
- userState,
2944
- projectID,
2945
- } = <span class="cstat-no" title="statement not covered" >await r.json()</span>
2946
- <span class="cstat-no" title="statement not covered" > this.session.assign({ projectID })</span>
2947
- <span class="cstat-no" title="statement not covered" > this.session.setUserInfo({</span>
2948
- userBrowser,
2949
- userCity,
2950
- userCountry,
2951
- userDevice,
2952
- userOS,
2953
- userState,
2954
- })
2955
- <span class="cstat-no" title="statement not covered" > await this.conditionsManager?.fetchConditions(token as string)</span>
2956
- <span class="cstat-no" title="statement not covered" > await this.featureFlags.reloadFlags(token as string)</span>
2957
- <span class="cstat-no" title="statement not covered" > this.conditionsManager?.processFlags(this.featureFlags.flags)</span>
2958
- }
2959
- const cycle = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
2960
- <span class="cstat-no" title="statement not covered" > this.orderNumber += 1</span>
2961
- <span class="cstat-no" title="statement not covered" > adjustTimeOrigin()</span>
2962
- <span class="cstat-no" title="statement not covered" > this.coldStartTs = now()</span>
2963
- <span class="cstat-no" title="statement not covered" > if (this.orderNumber % 2 === 0) {</span>
2964
- <span class="cstat-no" title="statement not covered" > this.bufferedMessages1.length = 0</span>
2965
- <span class="cstat-no" title="statement not covered" > this.bufferedMessages1.push(Timestamp(this.timestamp()))</span>
2966
- <span class="cstat-no" title="statement not covered" > this.bufferedMessages1.push(TabData(this.session.getTabId()))</span>
2967
- } else {
2968
- <span class="cstat-no" title="statement not covered" > this.bufferedMessages2.length = 0</span>
2969
- <span class="cstat-no" title="statement not covered" > this.bufferedMessages2.push(Timestamp(this.timestamp()))</span>
2970
- <span class="cstat-no" title="statement not covered" > this.bufferedMessages2.push(TabData(this.session.getTabId()))</span>
2971
- }
2972
- <span class="cstat-no" title="statement not covered" > this.stop(false)</span>
2973
- <span class="cstat-no" title="statement not covered" > this.activityState = ActivityState.ColdStart</span>
2974
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (startOpts.sessionHash) {</span>
2975
- <span class="cstat-no" title="statement not covered" > this.session.applySessionHash(startOpts.sessionHash)</span>
2976
- }
2977
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (startOpts.forceNew) {</span>
2978
- // Reset session metadata only if requested directly
2979
- <span class="cstat-no" title="statement not covered" > this.session.reset()</span>
2980
- }
2981
- <span class="cstat-no" title="statement not covered" > this.session.assign({</span>
2982
- // MBTODO: maybe it would make sense to `forceNew` if the `userID` was changed
2983
- userID: startOpts.userID,
2984
- metadata: startOpts.metadata,
2985
- })
2986
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!isNewSession) {</span>
2987
- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
2988
- <span class="cstat-no" title="statement not covered" > this.send(TabChange(this.session.getTabId()))</span>
2989
- }
2990
- <span class="cstat-no" title="statement not covered" > this.observer.observe()</span>
2991
- <span class="cstat-no" title="statement not covered" > this.ticker.start()</span>
2992
- }
2993
- <span class="cstat-no" title="statement not covered" > this.coldInterval = setInterval(<span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
2994
- <span class="cstat-no" title="statement not covered" > cycle()</span>
2995
- }, 30 * second)
2996
- <span class="cstat-no" title="statement not covered" > cycle()</span>
2997
- }
2998
- &nbsp;
2999
- public <span class="fstat-no" title="function not covered" >offlineRecording(</span>startOpts: StartOptions = <span class="branch-0 cbranch-no" title="branch not covered" >{})</span> {
3000
- <span class="cstat-no" title="statement not covered" > this.singleBuffer = true</span>
3001
- const isNewSession = <span class="cstat-no" title="statement not covered" >this.checkSessionToken(startOpts.forceNew)</span>
3002
- <span class="cstat-no" title="statement not covered" > adjustTimeOrigin()</span>
3003
- <span class="cstat-no" title="statement not covered" > this.coldStartTs = now()</span>
3004
- <span class="cstat-no" title="statement not covered" > this.bufferedMessages1.length = 0</span>
3005
- const saverBuffer = <span class="cstat-no" title="statement not covered" >this.localStorage.getItem(bufferStorageKey)</span>
3006
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (saverBuffer) {</span>
3007
- const data = <span class="cstat-no" title="statement not covered" >JSON.parse(saverBuffer)</span>
3008
- <span class="cstat-no" title="statement not covered" > this.bufferedMessages1 = Array.isArray(data) ? data : []</span>
3009
- <span class="cstat-no" title="statement not covered" > this.localStorage.removeItem(bufferStorageKey)</span>
3010
- }
3011
- <span class="cstat-no" title="statement not covered" > this.bufferedMessages1.push(Timestamp(this.timestamp()))</span>
3012
- <span class="cstat-no" title="statement not covered" > this.bufferedMessages1.push(TabData(this.session.getTabId()))</span>
3013
- <span class="cstat-no" title="statement not covered" > this.activityState = ActivityState.ColdStart</span>
3014
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (startOpts.sessionHash) {</span>
3015
- <span class="cstat-no" title="statement not covered" > this.session.applySessionHash(startOpts.sessionHash)</span>
3016
- }
3017
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (startOpts.forceNew) {</span>
3018
- // Reset session metadata only if requested directly
3019
- <span class="cstat-no" title="statement not covered" > this.session.reset()</span>
3020
- }
3021
- <span class="cstat-no" title="statement not covered" > this.session.assign({</span>
3022
- // MBTODO: maybe it would make sense to `forceNew` if the `userID` was changed
3023
- userID: startOpts.userID,
3024
- metadata: startOpts.metadata,
3025
- })
3026
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!isNewSession) {</span>
3027
- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
3028
- <span class="cstat-no" title="statement not covered" > this.send(TabChange(this.session.getTabId()))</span>
3029
- }
3030
- <span class="cstat-no" title="statement not covered" > this.observer.observe()</span>
3031
- <span class="cstat-no" title="statement not covered" > this.ticker.start()</span>
3032
- }
3033
- &nbsp;
3034
- /**
3035
- * Saves the captured messages in localStorage (or whatever is used in its place)
3036
- *
3037
- * Then when this.offlineRecording is called, it will preload this messages and clear the storage item
3038
- *
3039
- * Keeping the size of local storage reasonable is up to the end users of this library
3040
- * */
3041
- public <span class="fstat-no" title="function not covered" >saveBuffer(</span>) {
3042
- <span class="cstat-no" title="statement not covered" > this.localStorage.setItem(bufferStorageKey, JSON.stringify(this.bufferedMessages1))</span>
3043
- }
3044
- &nbsp;
3045
- /**
3046
- * Uploads the stored buffer to create session
3047
- * */
3048
- public <span class="fstat-no" title="function not covered" >uploadOfflineRecording(</span>) {
3049
- const buffer = <span class="cstat-no" title="statement not covered" >this.bufferedMessages1</span>
3050
- <span class="cstat-no" title="statement not covered" > this.stop(false)</span>
3051
- // then fetch it
3052
- <span class="cstat-no" title="statement not covered" > this.clearBuffers()</span>
3053
- }
3054
2363
  &nbsp;
3055
2364
  private <span class="fstat-no" title="function not covered" >_start(</span>startOpts: StartOptions = <span class="branch-0 cbranch-no" title="branch not covered" >{},</span> resetByWorker = <span class="branch-0 cbranch-no" title="branch not covered" >false)</span>: Promise&lt;StartPromiseReturn&gt; {
3056
- const isColdStart = <span class="cstat-no" title="statement not covered" >this.activityState === ActivityState.ColdStart</span>
3057
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (isColdStart &amp;&amp; this.coldInterval) {</span>
3058
- <span class="cstat-no" title="statement not covered" > clearInterval(this.coldInterval)</span>
3059
- }
3060
2365
  <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.worker) {</span>
3061
- const reason = <span class="cstat-no" title="statement not covered" >'No worker found: perhaps, CSP is not set.'</span>
3062
- <span class="cstat-no" title="statement not covered" > this.signalError(reason, [])</span>
3063
- <span class="cstat-no" title="statement not covered" > return Promise.resolve(UnsuccessfulStart(reason))</span>
2366
+ <span class="cstat-no" title="statement not covered" > return Promise.resolve(UnsuccessfulStart('No worker found: perhaps, CSP is not set.'))</span>
3064
2367
  }
3065
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
3066
- this.activityState === ActivityState.Active ||
3067
- this.activityState === ActivityState.Starting
3068
- ) {
3069
- const reason =
3070
- <span class="cstat-no" title="statement not covered" > 'OpenReplay: trying to call `start()` on the instance that has been started already.'</span>
3071
- <span class="cstat-no" title="statement not covered" > this.signalError(reason, [])</span>
3072
- <span class="cstat-no" title="statement not covered" > return Promise.resolve(UnsuccessfulStart(reason))</span>
2368
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.activityState !== ActivityState.NotActive) {</span>
2369
+ <span class="cstat-no" title="statement not covered" > return Promise.resolve(</span>
2370
+ UnsuccessfulStart(
2371
+ 'OpenReplay: trying to call `start()` on the instance that has been started already.',
2372
+ ),
2373
+ )
3073
2374
  }
3074
2375
  <span class="cstat-no" title="statement not covered" > this.activityState = ActivityState.Starting</span>
3075
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!isColdStart) {</span>
3076
- <span class="cstat-no" title="statement not covered" > adjustTimeOrigin()</span>
3077
- }
2376
+ <span class="cstat-no" title="statement not covered" > adjustTimeOrigin()</span>
3078
2377
  &nbsp;
3079
2378
  <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (startOpts.sessionHash) {</span>
3080
2379
  <span class="cstat-no" title="statement not covered" > this.session.applySessionHash(startOpts.sessionHash)</span>
@@ -3101,13 +2400,15 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
3101
2400
  tabId: this.session.getTabId(),
3102
2401
  })
3103
2402
  &nbsp;
3104
- const sessionToken = <span class="cstat-no" title="statement not covered" >this.session.getSessionToken()</span>
3105
- const isNewSession = <span class="cstat-no" title="statement not covered" >this.checkSessionToken(startOpts.forceNew)</span>
2403
+ const lsReset = <span class="cstat-no" title="statement not covered" >this.sessionStorage.getItem(this.options.session_reset_key) !== null</span>
3106
2404
  <span class="cstat-no" title="statement not covered" > this.sessionStorage.removeItem(this.options.session_reset_key)</span>
2405
+ const needNewSessionID = <span class="cstat-no" title="statement not covered" >startOpts.forceNew || lsReset || resetByWorker</span>
2406
+ const sessionToken = <span class="cstat-no" title="statement not covered" >this.session.getSessionToken()</span>
2407
+ const isNewSession = <span class="cstat-no" title="statement not covered" >needNewSessionID || !sessionToken</span>
3107
2408
  &nbsp;
3108
2409
  <span class="cstat-no" title="statement not covered" > this.debug.log(</span>
3109
2410
  'OpenReplay: starting session; need new session id?',
3110
- isNewSession,
2411
+ needNewSessionID,
3111
2412
  'session token: ',
3112
2413
  sessionToken,
3113
2414
  )
@@ -3120,8 +2421,6 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
3120
2421
  body: JSON.stringify({
3121
2422
  ...this.getTrackerInfo(),
3122
2423
  timestamp,
3123
- doNotRecord: false,
3124
- bufferDiff: timestamp - this.coldStartTs,
3125
2424
  userID: this.session.getInfo().userID,
3126
2425
  token: isNewSession ? undefined : sessionToken,
3127
2426
  deviceMemory,
@@ -3144,14 +2443,10 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
3144
2443
  })
3145
2444
  .then(<span class="fstat-no" title="function not covered" >(r</span>) =&gt; {
3146
2445
  <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.worker) {</span>
3147
- const reason = <span class="cstat-no" title="statement not covered" >'no worker found after start request (this might not happen)'</span>
3148
- <span class="cstat-no" title="statement not covered" > this.signalError(reason, [])</span>
3149
- <span class="cstat-no" title="statement not covered" > return Promise.reject(reason)</span>
2446
+ <span class="cstat-no" title="statement not covered" > return Promise.reject('no worker found after start request (this might not happen)')</span>
3150
2447
  }
3151
2448
  <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.activityState === ActivityState.NotActive) {</span>
3152
- const reason = <span class="cstat-no" title="statement not covered" >'Tracker stopped during authorization'</span>
3153
- <span class="cstat-no" title="statement not covered" > this.signalError(reason, [])</span>
3154
- <span class="cstat-no" title="statement not covered" > return Promise.reject(reason)</span>
2449
+ <span class="cstat-no" title="statement not covered" > return Promise.reject('Tracker stopped during authorization')</span>
3155
2450
  }
3156
2451
  const {
3157
2452
  token,
@@ -3180,9 +2475,7 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
3180
2475
  typeof delay !== 'number' ||
3181
2476
  (typeof beaconSizeLimit !== 'number' &amp;&amp; typeof beaconSizeLimit !== 'undefined')
3182
2477
  ) {
3183
- const reason = <span class="cstat-no" title="statement not covered" >`Incorrect server response: ${JSON.stringify(r)}`</span>
3184
- <span class="cstat-no" title="statement not covered" > this.signalError(reason, [])</span>
3185
- <span class="cstat-no" title="statement not covered" > return Promise.reject(reason)</span>
2478
+ <span class="cstat-no" title="statement not covered" > return Promise.reject(`Incorrect server response: ${JSON.stringify(r)}`)</span>
3186
2479
  }
3187
2480
  <span class="cstat-no" title="statement not covered" > this.delay = delay</span>
3188
2481
  <span class="cstat-no" title="statement not covered" > this.session.setSessionToken(token)</span>
@@ -3199,6 +2492,13 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
3199
2492
  timestamp: startTimestamp || timestamp,
3200
2493
  projectID,
3201
2494
  })
2495
+ &nbsp;
2496
+ <span class="cstat-no" title="statement not covered" > this.worker.postMessage({</span>
2497
+ type: 'auth',
2498
+ token,
2499
+ beaconSizeLimit,
2500
+ })
2501
+ &nbsp;
3202
2502
  <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!isNewSession &amp;&amp; token === sessionToken) {</span>
3203
2503
  <span class="cstat-no" title="statement not covered" > this.debug.log('continuing session on new tab', this.session.getTabId())</span>
3204
2504
  // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
@@ -3210,48 +2510,13 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
3210
2510
  )
3211
2511
  <span class="cstat-no" title="statement not covered" > this.localStorage.setItem(this.options.local_uuid_key, userUUID)</span>
3212
2512
  &nbsp;
3213
- <span class="cstat-no" title="statement not covered" > this.worker.postMessage({</span>
3214
- type: 'auth',
3215
- token,
3216
- beaconSizeLimit,
3217
- })
3218
- &nbsp;
3219
2513
  <span class="cstat-no" title="statement not covered" > this.compressionThreshold = compressionThreshold</span>
3220
2514
  const onStartInfo = <span class="cstat-no" title="statement not covered" >{ sessionToken: token, userUUID, sessionID }</span>
3221
2515
  &nbsp;
3222
- const flushBuffer = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(b</span>uffer: Message[]) =&gt; {</span>
3223
- let ended = <span class="cstat-no" title="statement not covered" >false</span>
3224
- const messagesBatch: Message[] = <span class="cstat-no" title="statement not covered" >[buffer.shift() as unknown as Message]</span>
3225
- <span class="cstat-no" title="statement not covered" > while (!ended) {</span>
3226
- const nextMsg = <span class="cstat-no" title="statement not covered" >buffer[0]</span>
3227
- <span class="cstat-no" title="statement not covered" > if (!nextMsg || nextMsg[0] === MType.Timestamp) {</span>
3228
- <span class="cstat-no" title="statement not covered" > ended = true</span>
3229
- } else {
3230
- <span class="cstat-no" title="statement not covered" > messagesBatch.push(buffer.shift() as unknown as Message)</span>
3231
- }
3232
- }
3233
- <span class="cstat-no" title="statement not covered" > this.postToWorker(messagesBatch)</span>
3234
- }
3235
2516
  // TODO: start as early as possible (before receiving the token)
3236
2517
  <span class="cstat-no" title="statement not covered" > this.startCallbacks.forEach(<span class="fstat-no" title="function not covered" >(c</span>b) =&gt; <span class="cstat-no" title="statement not covered" >cb(onStartInfo))</span> /</span>/ MBTODO: callbacks after DOM "mounted" (observed)
3237
- <span class="cstat-no" title="statement not covered" > void this.featureFlags.reloadFlags()</span>
3238
- /** --------------- COLD START BUFFER ------------------*/
3239
- <span class="cstat-no" title="statement not covered" > this.activityState = ActivityState.Active</span>
3240
- <span class="cstat-no" title="statement not covered" > if (isColdStart) {</span>
3241
- const biggestBurger =
3242
- <span class="cstat-no" title="statement not covered" > this.bufferedMessages1.length &gt; this.bufferedMessages2.length</span>
3243
- ? this.bufferedMessages1
3244
- : this.bufferedMessages2
3245
- <span class="cstat-no" title="statement not covered" > while (biggestBurger.length &gt; 0) {</span>
3246
- <span class="cstat-no" title="statement not covered" > flushBuffer(biggestBurger)</span>
3247
- }
3248
- <span class="cstat-no" title="statement not covered" > this.clearBuffers()</span>
3249
- <span class="cstat-no" title="statement not covered" > this.commit()</span>
3250
- /** --------------- COLD START BUFFER ------------------*/
3251
- } else {
3252
- <span class="cstat-no" title="statement not covered" > this.observer.observe()</span>
3253
- <span class="cstat-no" title="statement not covered" > this.ticker.start()</span>
3254
- }
2518
+ <span class="cstat-no" title="statement not covered" > this.observer.observe()</span>
2519
+ <span class="cstat-no" title="statement not covered" > this.ticker.start()</span>
3255
2520
  &nbsp;
3256
2521
  <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (canvasEnabled) {</span>
3257
2522
  <span class="cstat-no" title="statement not covered" > this.canvasRecorder =</span>
@@ -3259,6 +2524,7 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
3259
2524
  new CanvasRecorder(this, { fps: canvasFPS, quality: canvasQuality })
3260
2525
  <span class="cstat-no" title="statement not covered" > this.canvasRecorder.startTracking()</span>
3261
2526
  }
2527
+ <span class="cstat-no" title="statement not covered" > this.activityState = ActivityState.Active</span>
3262
2528
  &nbsp;
3263
2529
  <span class="cstat-no" title="statement not covered" > this.notify.log('OpenReplay tracking started.')</span>
3264
2530
  // get rid of onStart ?
@@ -3303,13 +2569,11 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
3303
2569
  <span class="cstat-no" title="statement not covered" > this.stop()</span>
3304
2570
  <span class="cstat-no" title="statement not covered" > this.session.reset()</span>
3305
2571
  <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (reason === CANCELED) {</span>
3306
- <span class="cstat-no" title="statement not covered" > this.signalError(CANCELED, [])</span>
3307
2572
  <span class="cstat-no" title="statement not covered" > return UnsuccessfulStart(CANCELED)</span>
3308
2573
  }
3309
2574
  &nbsp;
3310
2575
  <span class="cstat-no" title="statement not covered" > this.notify.log('OpenReplay was unable to start. ', reason)</span>
3311
2576
  <span class="cstat-no" title="statement not covered" > this._debug('session_start', reason)</span>
3312
- <span class="cstat-no" title="statement not covered" > this.signalError(START_ERROR, [])</span>
3313
2577
  <span class="cstat-no" title="statement not covered" > return UnsuccessfulStart(START_ERROR)</span>
3314
2578
  })
3315
2579
  }
@@ -3359,9 +2623,24 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
3359
2623
  <span class="cstat-no" title="statement not covered" > return this.session.getTabId()</span>
3360
2624
  }
3361
2625
  &nbsp;
3362
- <span class="fstat-no" title="function not covered" > clearBuffers(</span>) {
3363
- <span class="cstat-no" title="statement not covered" > this.bufferedMessages1.length = 0</span>
3364
- <span class="cstat-no" title="statement not covered" > this.bufferedMessages2.length = 0</span>
2626
+ /**
2627
+ * Creates a named hook that expects event name, data string and msg direction (up/down),
2628
+ * it will skip any message bigger than 5 mb or event name bigger than 255 symbols
2629
+ * @returns {(msgType: string, data: string, dir: 'up' | 'down') =&gt; void}
2630
+ * */
2631
+ <span class="fstat-no" title="function not covered" > trackWs(</span>channelName: string): (msgType: string, data: string, dir: 'up' | 'down') =&gt; void {
2632
+ const channel = <span class="cstat-no" title="statement not covered" >channelName</span>
2633
+ <span class="cstat-no" title="statement not covered" > return <span class="fstat-no" title="function not covered" >(m</span>sgType: string, data: string, dir: 'up' | 'down' = <span class="branch-0 cbranch-no" title="branch not covered" >'down')</span> =&gt; {</span>
2634
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
2635
+ typeof msgType !== 'string' ||
2636
+ typeof data !== 'string' ||
2637
+ data.length &gt; 5 * 1024 * 1024 ||
2638
+ msgType.length &gt; 255
2639
+ ) {
2640
+ <span class="cstat-no" title="statement not covered" > return</span>
2641
+ }
2642
+ <span class="cstat-no" title="statement not covered" > this.send(WSChannel('websocket', channel, data, this.timestamp(), dir, msgType))</span>
2643
+ }
3365
2644
  }
3366
2645
  &nbsp;
3367
2646
  <span class="fstat-no" title="function not covered" > stop(</span>stopWorker = <span class="branch-0 cbranch-no" title="branch not covered" >true)</span>: void {
@@ -3374,6 +2653,7 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
3374
2653
  <span class="cstat-no" title="statement not covered" > this.ticker.stop()</span>
3375
2654
  <span class="cstat-no" title="statement not covered" > this.stopCallbacks.forEach(<span class="fstat-no" title="function not covered" >(c</span>b) =&gt; <span class="cstat-no" title="statement not covered" >cb())</span></span>
3376
2655
  <span class="cstat-no" title="statement not covered" > this.notify.log('OpenReplay tracking stopped.')</span>
2656
+ <span class="cstat-no" title="statement not covered" > this.tagWatcher.clear()</span>
3377
2657
  <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.worker &amp;&amp; stopWorker) {</span>
3378
2658
  <span class="cstat-no" title="statement not covered" > this.worker.postMessage('stop')</span>
3379
2659
  }
@@ -3391,7 +2671,7 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
3391
2671
  <div class='footer quiet pad2 space-top1 center small'>
3392
2672
  Code coverage generated by
3393
2673
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
3394
- at 2023-12-15T15:55:44.965Z
2674
+ at 2024-01-09T10:19:51.427Z
3395
2675
  </div>
3396
2676
  <script src="../../prettify.js"></script>
3397
2677
  <script>