@openreplay/tracker 3.4.6 → 3.4.10

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 (94) hide show
  1. package/cjs/app/index.d.ts +7 -7
  2. package/cjs/app/index.js +22 -21
  3. package/cjs/app/logger.d.ts +0 -0
  4. package/cjs/app/logger.js +1 -0
  5. package/cjs/app/observer/iframe_observer.d.ts +1 -1
  6. package/cjs/app/observer/iframe_observer.js +8 -7
  7. package/cjs/app/observer/observer.d.ts +5 -2
  8. package/cjs/app/observer/observer.js +70 -49
  9. package/cjs/app/observer/shadow_root_observer.d.ts +1 -1
  10. package/cjs/app/observer/shadow_root_observer.js +4 -4
  11. package/cjs/app/observer/top_observer.d.ts +3 -3
  12. package/cjs/app/observer/top_observer.js +28 -24
  13. package/cjs/app/observer.d.ts +1 -1
  14. package/cjs/app/observer.js +26 -22
  15. package/cjs/app/sanitizer.d.ts +0 -0
  16. package/cjs/app/sanitizer.js +1 -0
  17. package/cjs/app/ticker.d.ts +1 -1
  18. package/cjs/index.d.ts +11 -10
  19. package/cjs/index.js +59 -56
  20. package/cjs/messages/index.d.ts +2 -2
  21. package/cjs/messages/message.d.ts +1 -1
  22. package/cjs/modules/connection.d.ts +1 -1
  23. package/cjs/modules/connection.js +2 -2
  24. package/cjs/modules/console.d.ts +1 -1
  25. package/cjs/modules/console.js +6 -6
  26. package/cjs/modules/cssrules.d.ts +1 -1
  27. package/cjs/modules/cssrules.js +4 -4
  28. package/cjs/modules/exception.d.ts +2 -2
  29. package/cjs/modules/exception.js +4 -4
  30. package/cjs/modules/img.d.ts +1 -1
  31. package/cjs/modules/img.js +6 -6
  32. package/cjs/modules/input.d.ts +1 -1
  33. package/cjs/modules/input.js +11 -11
  34. package/cjs/modules/longtasks.d.ts +1 -1
  35. package/cjs/modules/longtasks.js +2 -2
  36. package/cjs/modules/mouse.d.ts +1 -1
  37. package/cjs/modules/mouse.js +10 -10
  38. package/cjs/modules/performance.d.ts +1 -1
  39. package/cjs/modules/performance.js +5 -5
  40. package/cjs/modules/scroll.d.ts +1 -1
  41. package/cjs/modules/scroll.js +3 -3
  42. package/cjs/modules/timing.d.ts +1 -1
  43. package/cjs/modules/timing.js +6 -6
  44. package/cjs/modules/viewport.d.ts +1 -1
  45. package/cjs/modules/viewport.js +4 -4
  46. package/cjs/utils.js +1 -1
  47. package/lib/app/index.d.ts +7 -7
  48. package/lib/app/index.js +10 -9
  49. package/lib/app/logger.d.ts +0 -0
  50. package/lib/app/logger.js +1 -0
  51. package/lib/app/observer/iframe_observer.d.ts +1 -1
  52. package/lib/app/observer/iframe_observer.js +7 -6
  53. package/lib/app/observer/observer.d.ts +5 -2
  54. package/lib/app/observer/observer.js +58 -37
  55. package/lib/app/observer/shadow_root_observer.d.ts +1 -1
  56. package/lib/app/observer/shadow_root_observer.js +2 -2
  57. package/lib/app/observer/top_observer.d.ts +3 -3
  58. package/lib/app/observer/top_observer.js +22 -18
  59. package/lib/app/observer.d.ts +1 -1
  60. package/lib/app/observer.js +9 -5
  61. package/lib/app/sanitizer.d.ts +0 -0
  62. package/lib/app/sanitizer.js +1 -0
  63. package/lib/app/ticker.d.ts +1 -1
  64. package/lib/index.d.ts +11 -10
  65. package/lib/index.js +25 -22
  66. package/lib/messages/index.d.ts +2 -2
  67. package/lib/messages/message.d.ts +1 -1
  68. package/lib/messages/tsconfig.tsbuildinfo +1 -1
  69. package/lib/modules/connection.d.ts +1 -1
  70. package/lib/modules/connection.js +1 -1
  71. package/lib/modules/console.d.ts +1 -1
  72. package/lib/modules/console.js +4 -4
  73. package/lib/modules/cssrules.d.ts +1 -1
  74. package/lib/modules/cssrules.js +1 -1
  75. package/lib/modules/exception.d.ts +2 -2
  76. package/lib/modules/exception.js +1 -1
  77. package/lib/modules/img.d.ts +1 -1
  78. package/lib/modules/img.js +2 -2
  79. package/lib/modules/input.d.ts +1 -1
  80. package/lib/modules/input.js +2 -2
  81. package/lib/modules/longtasks.d.ts +1 -1
  82. package/lib/modules/longtasks.js +1 -1
  83. package/lib/modules/mouse.d.ts +1 -1
  84. package/lib/modules/mouse.js +3 -3
  85. package/lib/modules/performance.d.ts +1 -1
  86. package/lib/modules/performance.js +2 -2
  87. package/lib/modules/scroll.d.ts +1 -1
  88. package/lib/modules/scroll.js +1 -1
  89. package/lib/modules/timing.d.ts +1 -1
  90. package/lib/modules/timing.js +3 -3
  91. package/lib/modules/viewport.d.ts +1 -1
  92. package/lib/modules/viewport.js +1 -1
  93. package/package.json +2 -2
  94. package/tsconfig-base.json +1 -1
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const utils_1 = require("../utils");
4
- const messages_1 = require("../messages");
3
+ const utils_js_1 = require("../utils.js");
4
+ const index_js_1 = require("../messages/index.js");
5
5
  function default_1(app) {
6
6
  const sendImgSrc = app.safe(function () {
7
7
  const id = app.nodes.getID(this);
@@ -13,12 +13,12 @@ function default_1(app) {
13
13
  return;
14
14
  }
15
15
  if (naturalWidth === 0 && naturalHeight === 0) {
16
- if (src != null && utils_1.isURL(src)) { // TODO: How about relative urls ? Src type is null sometimes.
17
- app.send(new messages_1.ResourceTiming(utils_1.timestamp(), 0, 0, 0, 0, 0, src, 'img'));
16
+ if (src != null && (0, utils_js_1.isURL)(src)) { // TODO: How about relative urls ? Src type is null sometimes.
17
+ app.send(new index_js_1.ResourceTiming((0, utils_js_1.timestamp)(), 0, 0, 0, 0, 0, src, 'img'));
18
18
  }
19
19
  }
20
20
  else if (src.length < 1e5) {
21
- app.send(new messages_1.SetNodeAttributeURLBased(id, 'src', src, app.getBaseHref()));
21
+ app.send(new index_js_1.SetNodeAttributeURLBased(id, 'src', src, app.getBaseHref()));
22
22
  }
23
23
  });
24
24
  const observer = new MutationObserver((mutations) => {
@@ -30,7 +30,7 @@ function default_1(app) {
30
30
  return;
31
31
  }
32
32
  const src = target.src;
33
- app.send(new messages_1.SetNodeAttributeURLBased(id, 'src', src, app.getBaseHref()));
33
+ app.send(new index_js_1.SetNodeAttributeURLBased(id, 'src', src, app.getBaseHref()));
34
34
  }
35
35
  }
36
36
  });
@@ -1,4 +1,4 @@
1
- import App from '../app';
1
+ import App from "../app/index.js";
2
2
  export declare function getInputLabel(node: HTMLInputElement): string;
3
3
  export declare const enum InputMode {
4
4
  Plain = 0,
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getInputLabel = void 0;
4
- const utils_1 = require("../utils");
5
- const messages_1 = require("../messages");
4
+ const utils_js_1 = require("../utils.js");
5
+ const index_js_1 = require("../messages/index.js");
6
6
  function isInput(node) {
7
7
  if (!(node instanceof HTMLInputElement)) {
8
8
  return false;
@@ -22,7 +22,7 @@ function isCheckable(node) {
22
22
  const type = node.type;
23
23
  return type === 'checkbox' || type === 'radio';
24
24
  }
25
- const labelElementFor = utils_1.IN_BROWSER && 'labels' in HTMLInputElement.prototype
25
+ const labelElementFor = utils_js_1.IN_BROWSER && 'labels' in HTMLInputElement.prototype
26
26
  ? (node) => {
27
27
  let p = node;
28
28
  while ((p = p.parentNode) !== null) {
@@ -51,7 +51,7 @@ const labelElementFor = utils_1.IN_BROWSER && 'labels' in HTMLInputElement.proto
51
51
  }
52
52
  };
53
53
  function getInputLabel(node) {
54
- let label = utils_1.getLabelAttribute(node);
54
+ let label = (0, utils_js_1.getLabelAttribute)(node);
55
55
  if (label === null) {
56
56
  const labelElement = labelElementFor(node);
57
57
  label =
@@ -59,7 +59,7 @@ function getInputLabel(node) {
59
59
  ? node.placeholder || node.name
60
60
  : labelElement.innerText;
61
61
  }
62
- return utils_1.normSpaces(label).slice(0, 100);
62
+ return (0, utils_js_1.normSpaces)(label).slice(0, 100);
63
63
  }
64
64
  exports.getInputLabel = getInputLabel;
65
65
  function default_1(app, opts) {
@@ -71,16 +71,16 @@ function default_1(app, opts) {
71
71
  function sendInputTarget(id, node) {
72
72
  const label = getInputLabel(node);
73
73
  if (label !== '') {
74
- app.send(new messages_1.SetInputTarget(id, label));
74
+ app.send(new index_js_1.SetInputTarget(id, label));
75
75
  }
76
76
  }
77
77
  function sendInputValue(id, node) {
78
78
  let value = node.value;
79
79
  let inputMode = options.defaultInputMode;
80
- if (node.type === 'password' || utils_1.hasOpenreplayAttribute(node, 'hidden')) {
80
+ if (node.type === 'password' || (0, utils_js_1.hasOpenreplayAttribute)(node, 'hidden')) {
81
81
  inputMode = 2 /* Hidden */;
82
82
  }
83
- else if (utils_1.hasOpenreplayAttribute(node, 'obscured') ||
83
+ else if ((0, utils_js_1.hasOpenreplayAttribute)(node, 'obscured') ||
84
84
  (inputMode === 0 /* Plain */ &&
85
85
  ((options.obscureInputNumbers && /\d\d\d\d/.test(value)) ||
86
86
  (options.obscureInputEmails &&
@@ -98,7 +98,7 @@ function default_1(app, opts) {
98
98
  value = '';
99
99
  break;
100
100
  }
101
- app.send(new messages_1.SetInputValue(id, value, mask));
101
+ app.send(new index_js_1.SetInputValue(id, value, mask));
102
102
  }
103
103
  const inputValues = new Map();
104
104
  const checkableValues = new Map();
@@ -132,7 +132,7 @@ function default_1(app, opts) {
132
132
  }
133
133
  if (checked !== node.checked) {
134
134
  checkableValues.set(id, node.checked);
135
- app.send(new messages_1.SetInputChecked(id, node.checked));
135
+ app.send(new index_js_1.SetInputChecked(id, node.checked));
136
136
  }
137
137
  });
138
138
  });
@@ -149,7 +149,7 @@ function default_1(app, opts) {
149
149
  }
150
150
  if (isCheckable(node)) {
151
151
  checkableValues.set(id, node.checked);
152
- app.send(new messages_1.SetInputChecked(id, node.checked));
152
+ app.send(new index_js_1.SetInputChecked(id, node.checked));
153
153
  return;
154
154
  }
155
155
  }));
@@ -1,2 +1,2 @@
1
- import App from '../app';
1
+ import App from "../app/index.js";
2
2
  export default function (app: App): void;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const messages_1 = require("../messages");
3
+ const index_js_1 = require("../messages/index.js");
4
4
  ;
5
5
  ;
6
6
  function default_1(app) {
@@ -18,7 +18,7 @@ function default_1(app) {
18
18
  id = container.containerId;
19
19
  src = container.containerSrc;
20
20
  }
21
- app.send(new messages_1.LongTask(entry.startTime + performance.timing.navigationStart, entry.duration, Math.max(contexts.indexOf(entry.name), 0), Math.max(containerTypes.indexOf(type), 0), name, id, src));
21
+ app.send(new index_js_1.LongTask(entry.startTime + performance.timing.navigationStart, entry.duration, Math.max(contexts.indexOf(entry.name), 0), Math.max(containerTypes.indexOf(type), 0), name, id, src));
22
22
  }
23
23
  const observer = new PerformanceObserver((list) => list.getEntries().forEach(longTask));
24
24
  observer.observe({ entryTypes: ['longtask'] });
@@ -1,2 +1,2 @@
1
- import App from '../app';
1
+ import App from "../app/index.js";
2
2
  export default function (app: App): void;
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const utils_1 = require("../utils");
4
- const messages_1 = require("../messages");
5
- const input_1 = require("./input");
3
+ const utils_js_1 = require("../utils.js");
4
+ const index_js_1 = require("../messages/index.js");
5
+ const input_js_1 = require("./input.js");
6
6
  function _getSelector(target) {
7
7
  let el = target;
8
8
  let selector = null;
@@ -33,7 +33,7 @@ function getTarget(target) {
33
33
  function _getTarget(target) {
34
34
  let element = target;
35
35
  while (element !== null && element !== document.documentElement) {
36
- if (utils_1.hasOpenreplayAttribute(element, 'masked')) {
36
+ if ((0, utils_js_1.hasOpenreplayAttribute)(element, 'masked')) {
37
37
  return null;
38
38
  }
39
39
  element = element.parentElement;
@@ -59,7 +59,7 @@ function _getTarget(target) {
59
59
  tag === 'LI' ||
60
60
  element.onclick != null ||
61
61
  element.getAttribute('role') === 'button' ||
62
- utils_1.getLabelAttribute(element) !== null) {
62
+ (0, utils_js_1.getLabelAttribute)(element) !== null) {
63
63
  return element;
64
64
  }
65
65
  element = element.parentElement;
@@ -72,13 +72,13 @@ function default_1(app) {
72
72
  // opts,
73
73
  // );
74
74
  function getTargetLabel(target) {
75
- const dl = utils_1.getLabelAttribute(target);
75
+ const dl = (0, utils_js_1.getLabelAttribute)(target);
76
76
  if (dl !== null) {
77
77
  return dl;
78
78
  }
79
79
  const tag = target.tagName.toUpperCase();
80
80
  if (tag === 'INPUT') {
81
- return input_1.getInputLabel(target);
81
+ return (0, input_js_1.getInputLabel)(target);
82
82
  }
83
83
  if (tag === 'BUTTON' ||
84
84
  tag === 'A' ||
@@ -86,7 +86,7 @@ function default_1(app) {
86
86
  target.onclick != null ||
87
87
  target.getAttribute('role') === 'button') {
88
88
  const label = app.observer.getInnerTextSecure(target);
89
- return utils_1.normSpaces(label).slice(0, 100);
89
+ return (0, utils_js_1.normSpaces)(label).slice(0, 100);
90
90
  }
91
91
  return '';
92
92
  }
@@ -103,7 +103,7 @@ function default_1(app) {
103
103
  });
104
104
  const sendMouseMove = () => {
105
105
  if (mousePositionChanged) {
106
- app.send(new messages_1.MouseMove(mousePositionX, mousePositionY));
106
+ app.send(new index_js_1.MouseMove(mousePositionX, mousePositionY));
107
107
  mousePositionChanged = false;
108
108
  }
109
109
  };
@@ -131,7 +131,7 @@ function default_1(app) {
131
131
  const id = app.nodes.getID(target);
132
132
  if (id !== undefined) {
133
133
  sendMouseMove();
134
- app.send(new messages_1.MouseClick(id, mouseTarget === target
134
+ app.send(new index_js_1.MouseClick(id, mouseTarget === target
135
135
  ? Math.round(performance.now() - mouseTargetTime)
136
136
  : 0, getTargetLabel(target), getSelector(id, target)), true);
137
137
  }
@@ -1,4 +1,4 @@
1
- import App from '../app';
1
+ import App from "../app/index.js";
2
2
  export declare const deviceMemory: number;
3
3
  export declare const jsHeapSizeLimit: number;
4
4
  export interface Options {
@@ -1,12 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.jsHeapSizeLimit = exports.deviceMemory = void 0;
4
- const utils_1 = require("../utils");
5
- const messages_1 = require("../messages");
6
- const perf = utils_1.IN_BROWSER && 'performance' in window && 'memory' in performance // works in Chrome only
4
+ const utils_js_1 = require("../utils.js");
5
+ const index_js_1 = require("../messages/index.js");
6
+ const perf = utils_js_1.IN_BROWSER && 'performance' in window && 'memory' in performance // works in Chrome only
7
7
  ? performance
8
8
  : { memory: {} };
9
- exports.deviceMemory = utils_1.IN_BROWSER ? (navigator.deviceMemory || 0) * 1024 : 0;
9
+ exports.deviceMemory = utils_js_1.IN_BROWSER ? (navigator.deviceMemory || 0) * 1024 : 0;
10
10
  exports.jsHeapSizeLimit = perf.memory.jsHeapSizeLimit || 0;
11
11
  function default_1(app, opts) {
12
12
  const options = Object.assign({
@@ -34,7 +34,7 @@ function default_1(app, opts) {
34
34
  if (frames === undefined || ticks === undefined) {
35
35
  return;
36
36
  }
37
- app.send(new messages_1.PerformanceTrack(frames, ticks, perf.memory.totalJSHeapSize || 0, perf.memory.usedJSHeapSize || 0));
37
+ app.send(new index_js_1.PerformanceTrack(frames, ticks, perf.memory.totalJSHeapSize || 0, perf.memory.usedJSHeapSize || 0));
38
38
  ticks = frames = document.hidden ? -1 : 0;
39
39
  };
40
40
  app.attachStartCallback(() => {
@@ -1,2 +1,2 @@
1
- import App from '../app';
1
+ import App from "../app/index.js";
2
2
  export default function (app: App): void;
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const messages_1 = require("../messages");
3
+ const index_js_1 = require("../messages/index.js");
4
4
  function default_1(app) {
5
5
  let documentScroll = false;
6
6
  const nodeScroll = new Map();
7
- const sendSetViewportScroll = app.safe(() => app.send(new messages_1.SetViewportScroll(window.pageXOffset ||
7
+ const sendSetViewportScroll = app.safe(() => app.send(new index_js_1.SetViewportScroll(window.pageXOffset ||
8
8
  (document.documentElement && document.documentElement.scrollLeft) ||
9
9
  (document.body && document.body.scrollLeft) ||
10
10
  0, window.pageYOffset ||
@@ -14,7 +14,7 @@ function default_1(app) {
14
14
  const sendSetNodeScroll = app.safe((s, node) => {
15
15
  const id = app.nodes.getID(node);
16
16
  if (id !== undefined) {
17
- app.send(new messages_1.SetNodeScroll(id, s[0], s[1]));
17
+ app.send(new index_js_1.SetNodeScroll(id, s[0], s[1]));
18
18
  }
19
19
  });
20
20
  app.attachStartCallback(sendSetViewportScroll);
@@ -1,4 +1,4 @@
1
- import App from '../app';
1
+ import App from "../app/index.js";
2
2
  export interface Options {
3
3
  captureResourceTimings: boolean;
4
4
  capturePageLoadTimings: boolean;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const utils_1 = require("../utils");
4
- const messages_1 = require("../messages");
3
+ const utils_js_1 = require("../utils.js");
4
+ const index_js_1 = require("../messages/index.js");
5
5
  function getPaintBlocks(resources) {
6
6
  const paintBlocks = [];
7
7
  const elements = document.getElementsByTagName('*');
@@ -84,12 +84,12 @@ function default_1(app, opts) {
84
84
  });
85
85
  let resources = {};
86
86
  function resourceTiming(entry) {
87
- if (entry.duration <= 0 || !utils_1.isURL(entry.name) || app.isServiceURL(entry.name))
87
+ if (entry.duration < 0 || !(0, utils_js_1.isURL)(entry.name) || app.isServiceURL(entry.name))
88
88
  return;
89
89
  if (resources !== null) {
90
90
  resources[entry.name] = entry.startTime + entry.duration;
91
91
  }
92
- sendOnStart(new messages_1.ResourceTiming(entry.startTime + performance.timing.navigationStart, entry.duration, entry.responseStart && entry.startTime
92
+ sendOnStart(new index_js_1.ResourceTiming(entry.startTime + performance.timing.navigationStart, entry.duration, entry.responseStart && entry.startTime
93
93
  ? entry.responseStart - entry.startTime
94
94
  : 0, entry.transferSize > entry.encodedBodySize
95
95
  ? entry.transferSize - entry.encodedBodySize
@@ -123,7 +123,7 @@ function default_1(app, opts) {
123
123
  if (performance.timing.loadEventEnd || performance.now() > 30000) {
124
124
  pageLoadTimingSent = true;
125
125
  const { navigationStart, requestStart, responseStart, responseEnd, domContentLoadedEventStart, domContentLoadedEventEnd, loadEventStart, loadEventEnd, } = performance.timing;
126
- app.send(new messages_1.PageLoadTiming(requestStart - navigationStart || 0, responseStart - navigationStart || 0, responseEnd - navigationStart || 0, domContentLoadedEventStart - navigationStart || 0, domContentLoadedEventEnd - navigationStart || 0, loadEventStart - navigationStart || 0, loadEventEnd - navigationStart || 0, firstPaint, firstContentfulPaint));
126
+ app.send(new index_js_1.PageLoadTiming(requestStart - navigationStart || 0, responseStart - navigationStart || 0, responseEnd - navigationStart || 0, domContentLoadedEventStart - navigationStart || 0, domContentLoadedEventEnd - navigationStart || 0, loadEventStart - navigationStart || 0, loadEventEnd - navigationStart || 0, firstPaint, firstContentfulPaint));
127
127
  }
128
128
  }, 30);
129
129
  }
@@ -160,7 +160,7 @@ function default_1(app, opts) {
160
160
  ? Math.max(interactiveWindowStartTime, firstContentfulPaint, performance.timing.domContentLoadedEventEnd -
161
161
  performance.timing.navigationStart || 0)
162
162
  : 0;
163
- app.send(new messages_1.PageRenderTiming(speedIndex, firstContentfulPaint > visuallyComplete
163
+ app.send(new index_js_1.PageRenderTiming(speedIndex, firstContentfulPaint > visuallyComplete
164
164
  ? firstContentfulPaint
165
165
  : visuallyComplete, timeToInteractive));
166
166
  }
@@ -1,2 +1,2 @@
1
- import App from '../app';
1
+ import App from "../app/index.js";
2
2
  export default function (app: App): void;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const messages_1 = require("../messages");
3
+ const index_js_1 = require("../messages/index.js");
4
4
  function default_1(app) {
5
5
  let url, width, height;
6
6
  let navigationStart = performance.timing.navigationStart;
@@ -8,7 +8,7 @@ function default_1(app) {
8
8
  const { URL } = document;
9
9
  if (URL !== url) {
10
10
  url = URL;
11
- app.send(new messages_1.SetPageLocation(url, document.referrer, navigationStart));
11
+ app.send(new index_js_1.SetPageLocation(url, document.referrer, navigationStart));
12
12
  navigationStart = 0;
13
13
  }
14
14
  });
@@ -17,12 +17,12 @@ function default_1(app) {
17
17
  if (innerWidth !== width || innerHeight !== height) {
18
18
  width = innerWidth;
19
19
  height = innerHeight;
20
- app.send(new messages_1.SetViewportSize(width, height));
20
+ app.send(new index_js_1.SetViewportSize(width, height));
21
21
  }
22
22
  });
23
23
  const sendSetPageVisibility = document.hidden === undefined
24
24
  ? Function.prototype
25
- : app.safe(() => app.send(new messages_1.SetPageVisibility(document.hidden)));
25
+ : app.safe(() => app.send(new index_js_1.SetPageVisibility(document.hidden)));
26
26
  app.attachStartCallback(() => {
27
27
  url = '';
28
28
  width = height = -1;
package/cjs/utils.js CHANGED
@@ -26,7 +26,7 @@ function deprecationWarn(nameOfFeature, useInstead, docsPath = "/") {
26
26
  if (warnedFeatures[nameOfFeature]) {
27
27
  return;
28
28
  }
29
- exports.warn(`OpenReplay: ${nameOfFeature} is deprecated. ${useInstead ? `Please, use ${useInstead} instead.` : ""} Visit ${exports.DOCS_HOST}${docsPath} for more information.`);
29
+ (0, exports.warn)(`OpenReplay: ${nameOfFeature} is deprecated. ${useInstead ? `Please, use ${useInstead} instead.` : ""} Visit ${exports.DOCS_HOST}${docsPath} for more information.`);
30
30
  warnedFeatures[nameOfFeature] = true;
31
31
  }
32
32
  exports.deprecationWarn = deprecationWarn;
@@ -1,10 +1,10 @@
1
- import Message from '../messages/message';
2
- import Nodes from './nodes';
3
- import Observer from './observer';
4
- import Ticker from './ticker';
5
- import type { Options as ObserverOptions } from './observer';
6
- import type { Options as WebworkerOptions } from '../messages/webworker';
7
- interface OnStartInfo {
1
+ import Message from "../messages/message.js";
2
+ import Nodes from "./nodes.js";
3
+ import Observer from "./observer/top_observer.js";
4
+ import Ticker from "./ticker.js";
5
+ import type { Options as ObserverOptions } from "./observer.js";
6
+ import type { Options as WebworkerOptions } from "../messages/webworker.js";
7
+ export interface OnStartInfo {
8
8
  sessionID: string;
9
9
  sessionToken: string;
10
10
  userUUID: string;
package/lib/app/index.js CHANGED
@@ -1,9 +1,9 @@
1
- import { timestamp, log, warn } from '../utils';
2
- import { Timestamp } from '../messages';
3
- import Nodes from './nodes';
4
- import Observer from './observer';
5
- import Ticker from './ticker';
6
- import { deviceMemory, jsHeapSizeLimit } from '../modules/performance';
1
+ import { timestamp, log, warn } from "../utils.js";
2
+ import { Timestamp } from "../messages/index.js";
3
+ import Nodes from "./nodes.js";
4
+ import Observer from "./observer/top_observer.js";
5
+ import Ticker from "./ticker.js";
6
+ import { deviceMemory, jsHeapSizeLimit } from "../modules/performance.js";
7
7
  // TODO: use backendHost only
8
8
  export const DEFAULT_INGEST_POINT = 'https://api.openreplay.com/ingest';
9
9
  export default class App {
@@ -14,7 +14,7 @@ export default class App {
14
14
  this.commitCallbacks = [];
15
15
  this._sessionID = null;
16
16
  this.isActive = false;
17
- this.version = '3.4.6';
17
+ this.version = '3.4.10';
18
18
  this.projectKey = projectKey;
19
19
  this.options = Object.assign({
20
20
  revID: '',
@@ -40,7 +40,7 @@ export default class App {
40
40
  this.ticker = new Ticker(this);
41
41
  this.ticker.attach(() => this.commit());
42
42
  try {
43
- this.worker = new Worker(URL.createObjectURL(new Blob([`"use strict";function t(t){function s(...s){return new t(...s)}return s.prototype=t.prototype,s}const s=new Map;const i=t(class{constructor(t,s,i){this.pageNo=t,this.firstIndex=s,this.timestamp=i,this._id=80}encode(t){return t.uint(80)&&t.uint(this.pageNo)&&t.uint(this.firstIndex)&&t.int(this.timestamp)}});s.set(80,i);const n=t(class{constructor(t){this.timestamp=t,this._id=0}encode(t){return t.uint(0)&&t.uint(this.timestamp)}});s.set(0,n);const e=t(class{constructor(t,s,i){this.url=t,this.referrer=s,this.navigationStart=i,this._id=4}encode(t){return t.uint(4)&&t.string(this.url)&&t.string(this.referrer)&&t.uint(this.navigationStart)}});s.set(4,e);const r=t(class{constructor(t,s){this.width=t,this.height=s,this._id=5}encode(t){return t.uint(5)&&t.uint(this.width)&&t.uint(this.height)}});s.set(5,r);const o=t(class{constructor(t,s){this.x=t,this.y=s,this._id=6}encode(t){return t.uint(6)&&t.int(this.x)&&t.int(this.y)}});s.set(6,o);const h=t(class{constructor(){this._id=7}encode(t){return t.uint(7)}});s.set(7,h);const c=t(class{constructor(t,s,i,n,e){this.id=t,this.parentID=s,this.index=i,this.tag=n,this.svg=e,this._id=8}encode(t){return t.uint(8)&&t.uint(this.id)&&t.uint(this.parentID)&&t.uint(this.index)&&t.string(this.tag)&&t.boolean(this.svg)}});s.set(8,c);const u=t(class{constructor(t,s,i){this.id=t,this.parentID=s,this.index=i,this._id=9}encode(t){return t.uint(9)&&t.uint(this.id)&&t.uint(this.parentID)&&t.uint(this.index)}});s.set(9,u);const a=t(class{constructor(t,s,i){this.id=t,this.parentID=s,this.index=i,this._id=10}encode(t){return t.uint(10)&&t.uint(this.id)&&t.uint(this.parentID)&&t.uint(this.index)}});s.set(10,a);const d=t(class{constructor(t){this.id=t,this._id=11}encode(t){return t.uint(11)&&t.uint(this.id)}});s.set(11,d);const l=t(class{constructor(t,s,i){this.id=t,this.name=s,this.value=i,this._id=12}encode(t){return t.uint(12)&&t.uint(this.id)&&t.string(this.name)&&t.string(this.value)}});s.set(12,l);const g=t(class{constructor(t,s){this.id=t,this.name=s,this._id=13}encode(t){return t.uint(13)&&t.uint(this.id)&&t.string(this.name)}});s.set(13,g);const f=t(class{constructor(t,s){this.id=t,this.data=s,this._id=14}encode(t){return t.uint(14)&&t.uint(this.id)&&t.string(this.data)}});s.set(14,f);const p=t(class{constructor(t,s,i){this.id=t,this.x=s,this.y=i,this._id=16}encode(t){return t.uint(16)&&t.uint(this.id)&&t.int(this.x)&&t.int(this.y)}});s.set(16,p);const m=t(class{constructor(t,s){this.id=t,this.label=s,this._id=17}encode(t){return t.uint(17)&&t.uint(this.id)&&t.string(this.label)}});s.set(17,m);const _=t(class{constructor(t,s,i){this.id=t,this.value=s,this.mask=i,this._id=18}encode(t){return t.uint(18)&&t.uint(this.id)&&t.string(this.value)&&t.int(this.mask)}});s.set(18,_);const y=t(class{constructor(t,s){this.id=t,this.checked=s,this._id=19}encode(t){return t.uint(19)&&t.uint(this.id)&&t.boolean(this.checked)}});s.set(19,y);const v=t(class{constructor(t,s){this.x=t,this.y=s,this._id=20}encode(t){return t.uint(20)&&t.uint(this.x)&&t.uint(this.y)}});s.set(20,v);const S=t(class{constructor(t,s){this.level=t,this.value=s,this._id=22}encode(t){return t.uint(22)&&t.string(this.level)&&t.string(this.value)}});s.set(22,S);const b=t(class{constructor(t,s,i,n,e,r,o,h,c){this.requestStart=t,this.responseStart=s,this.responseEnd=i,this.domContentLoadedEventStart=n,this.domContentLoadedEventEnd=e,this.loadEventStart=r,this.loadEventEnd=o,this.firstPaint=h,this.firstContentfulPaint=c,this._id=23}encode(t){return t.uint(23)&&t.uint(this.requestStart)&&t.uint(this.responseStart)&&t.uint(this.responseEnd)&&t.uint(this.domContentLoadedEventStart)&&t.uint(this.domContentLoadedEventEnd)&&t.uint(this.loadEventStart)&&t.uint(this.loadEventEnd)&&t.uint(this.firstPaint)&&t.uint(this.firstContentfulPaint)}});s.set(23,b);const x=t(class{constructor(t,s,i){this.speedIndex=t,this.visuallyComplete=s,this.timeToInteractive=i,this._id=24}encode(t){return t.uint(24)&&t.uint(this.speedIndex)&&t.uint(this.visuallyComplete)&&t.uint(this.timeToInteractive)}});s.set(24,x);const E=t(class{constructor(t,s,i){this.name=t,this.message=s,this.payload=i,this._id=25}encode(t){return t.uint(25)&&t.string(this.name)&&t.string(this.message)&&t.string(this.payload)}});s.set(25,E);const k=t(class{constructor(t,s){this.name=t,this.payload=s,this._id=27}encode(t){return t.uint(27)&&t.string(this.name)&&t.string(this.payload)}});s.set(27,k);const I=t(class{constructor(t){this.id=t,this._id=28}encode(t){return t.uint(28)&&t.string(this.id)}});s.set(28,I);const z=t(class{constructor(t){this.id=t,this._id=29}encode(t){return t.uint(29)&&t.string(this.id)}});s.set(29,z);const w=t(class{constructor(t,s){this.key=t,this.value=s,this._id=30}encode(t){return t.uint(30)&&t.string(this.key)&&t.string(this.value)}});s.set(30,w);const T=t(class{constructor(t,s,i){this.id=t,this.rule=s,this.index=i,this._id=37}encode(t){return t.uint(37)&&t.uint(this.id)&&t.string(this.rule)&&t.uint(this.index)}});s.set(37,T);const L=t(class{constructor(t,s){this.id=t,this.index=s,this._id=38}encode(t){return t.uint(38)&&t.uint(this.id)&&t.uint(this.index)}});s.set(38,L);const A=t(class{constructor(t,s,i,n,e,r,o){this.method=t,this.url=s,this.request=i,this.response=n,this.status=e,this.timestamp=r,this.duration=o,this._id=39}encode(t){return t.uint(39)&&t.string(this.method)&&t.string(this.url)&&t.string(this.request)&&t.string(this.response)&&t.uint(this.status)&&t.uint(this.timestamp)&&t.uint(this.duration)}});s.set(39,A);const C=t(class{constructor(t,s,i,n){this.name=t,this.duration=s,this.args=i,this.result=n,this._id=40}encode(t){return t.uint(40)&&t.string(this.name)&&t.uint(this.duration)&&t.string(this.args)&&t.string(this.result)}});s.set(40,C);const M=t(class{constructor(t,s){this.key=t,this.value=s,this._id=41}encode(t){return t.uint(41)&&t.string(this.key)&&t.string(this.value)}});s.set(41,M);const R=t(class{constructor(t){this.type=t,this._id=42}encode(t){return t.uint(42)&&t.string(this.type)}});s.set(42,R);const N=t(class{constructor(t,s,i){this.action=t,this.state=s,this.duration=i,this._id=44}encode(t){return t.uint(44)&&t.string(this.action)&&t.string(this.state)&&t.uint(this.duration)}});s.set(44,N);const D=t(class{constructor(t,s){this.mutation=t,this.state=s,this._id=45}encode(t){return t.uint(45)&&t.string(this.mutation)&&t.string(this.state)}});s.set(45,D);const U=t(class{constructor(t,s){this.type=t,this.payload=s,this._id=46}encode(t){return t.uint(46)&&t.string(this.type)&&t.string(this.payload)}});s.set(46,U);const O=t(class{constructor(t,s,i){this.action=t,this.state=s,this.duration=i,this._id=47}encode(t){return t.uint(47)&&t.string(this.action)&&t.string(this.state)&&t.uint(this.duration)}});s.set(47,O);const q=t(class{constructor(t,s,i,n){this.operationKind=t,this.operationName=s,this.variables=i,this.response=n,this._id=48}encode(t){return t.uint(48)&&t.string(this.operationKind)&&t.string(this.operationName)&&t.string(this.variables)&&t.string(this.response)}});s.set(48,q);const H=t(class{constructor(t,s,i,n){this.frames=t,this.ticks=s,this.totalJSHeapSize=i,this.usedJSHeapSize=n,this._id=49}encode(t){return t.uint(49)&&t.int(this.frames)&&t.int(this.ticks)&&t.uint(this.totalJSHeapSize)&&t.uint(this.usedJSHeapSize)}});s.set(49,H);const P=t(class{constructor(t,s,i,n,e,r,o,h){this.timestamp=t,this.duration=s,this.ttfb=i,this.headerSize=n,this.encodedBodySize=e,this.decodedBodySize=r,this.url=o,this.initiator=h,this._id=53}encode(t){return t.uint(53)&&t.uint(this.timestamp)&&t.uint(this.duration)&&t.uint(this.ttfb)&&t.uint(this.headerSize)&&t.uint(this.encodedBodySize)&&t.uint(this.decodedBodySize)&&t.string(this.url)&&t.string(this.initiator)}});s.set(53,P);const B=t(class{constructor(t,s){this.downlink=t,this.type=s,this._id=54}encode(t){return t.uint(54)&&t.uint(this.downlink)&&t.string(this.type)}});s.set(54,B);const J=t(class{constructor(t){this.hidden=t,this._id=55}encode(t){return t.uint(55)&&t.boolean(this.hidden)}});s.set(55,J);const j=t(class{constructor(t,s,i,n,e,r,o){this.timestamp=t,this.duration=s,this.context=i,this.containerType=n,this.containerSrc=e,this.containerId=r,this.containerName=o,this._id=59}encode(t){return t.uint(59)&&t.uint(this.timestamp)&&t.uint(this.duration)&&t.uint(this.context)&&t.uint(this.containerType)&&t.string(this.containerSrc)&&t.string(this.containerId)&&t.string(this.containerName)}});s.set(59,j);const G=t(class{constructor(t,s,i,n){this.id=t,this.name=s,this.value=i,this.baseURL=n,this._id=60}encode(t){return t.uint(60)&&t.uint(this.id)&&t.string(this.name)&&t.string(this.value)&&t.string(this.baseURL)}});s.set(60,G);const K=t(class{constructor(t,s,i){this.id=t,this.data=s,this.baseURL=i,this._id=61}encode(t){return t.uint(61)&&t.uint(this.id)&&t.string(this.data)&&t.string(this.baseURL)}});s.set(61,K);const X=t(class{constructor(t,s){this.type=t,this.value=s,this._id=63}encode(t){return t.uint(63)&&t.string(this.type)&&t.string(this.value)}});s.set(63,X);const F=t(class{constructor(t,s){this.name=t,this.payload=s,this._id=64}encode(t){return t.uint(64)&&t.string(this.name)&&t.string(this.payload)}});s.set(64,F);const Q=t(class{constructor(){this._id=65}encode(t){return t.uint(65)}});s.set(65,Q);const V=t(class{constructor(t,s,i,n){this.id=t,this.rule=s,this.index=i,this.baseURL=n,this._id=67}encode(t){return t.uint(67)&&t.uint(this.id)&&t.string(this.rule)&&t.uint(this.index)&&t.string(this.baseURL)}});s.set(67,V);const W=t(class{constructor(t,s,i,n){this.id=t,this.hesitationTime=s,this.label=i,this.selector=n,this._id=69}encode(t){return t.uint(69)&&t.uint(this.id)&&t.uint(this.hesitationTime)&&t.string(this.label)&&t.string(this.selector)}});s.set(69,W);const Y=t(class{constructor(t,s){this.frameID=t,this.id=s,this._id=70}encode(t){return t.uint(70)&&t.uint(this.frameID)&&t.uint(this.id)}});s.set(70,Y);const Z="function"==typeof TextEncoder?new TextEncoder:{encode(t){const s=t.length,i=new Uint8Array(3*s);let n=-1;for(var e=0,r=0,o=0;o!==s;){if(e=t.charCodeAt(o),o+=1,e>=55296&&e<=56319){if(o===s){i[n+=1]=239,i[n+=1]=191,i[n+=1]=189;break}if(!((r=t.charCodeAt(o))>=56320&&r<=57343)){i[n+=1]=239,i[n+=1]=191,i[n+=1]=189;continue}if(o+=1,(e=1024*(e-55296)+r-56320+65536)>65535){i[n+=1]=240|e>>>18,i[n+=1]=128|e>>>12&63,i[n+=1]=128|e>>>6&63,i[n+=1]=128|63&e;continue}}e<=127?i[n+=1]=0|e:e<=2047?(i[n+=1]=192|e>>>6,i[n+=1]=128|63&e):(i[n+=1]=224|e>>>12,i[n+=1]=128|e>>>6&63,i[n+=1]=128|63&e)}return i.subarray(0,n+1)}};class tt{constructor(t){this.size=t,this.offset=0,this.checkpointOffset=0,this.data=new Uint8Array(t)}checkpoint(){this.checkpointOffset=this.offset}isEmpty(){return 0===this.offset}boolean(t){return this.data[this.offset++]=+t,this.offset<=this.size}uint(t){for((t<0||t>Number.MAX_SAFE_INTEGER)&&(t=0);t>=128;)this.data[this.offset++]=t%256|128,t=Math.floor(t/128);return this.data[this.offset++]=t,this.offset<=this.size}int(t){return t=Math.round(t),this.uint(t>=0?2*t:-2*t-1)}string(t){const s=Z.encode(t),i=s.byteLength;return!(!this.uint(i)||this.offset+i>this.size)&&(this.data.set(s,this.offset),this.offset+=i,!0)}reset(){this.offset=0,this.checkpointOffset=0}flush(){const t=this.data.slice(0,this.checkpointOffset);return this.reset(),t}}let st,it=1e6,nt=4e5,et=new tt(nt),rt="",ot="",ht=0,ct=0,ut=0,at=0,dt=!0;function lt(){return new i(ht,at,ct).encode(et)}const gt=[];let ft,pt=!1,mt=0,_t=8e3,yt=10;function vt(){if(dt||""===ot||""===rt)return;const t=et.flush();pt?gt.push(t):(pt=!0,function t(s){const i=new XMLHttpRequest;i.open("POST",rt+"/v1/web/i",!1),i.setRequestHeader("Authorization","Bearer "+ot),i.onreadystatechange=function(){if(4===this.readyState){if(0==this.status)return;if(this.status>=400)return St(),gt.length=0,401===this.status?void self.postMessage("restart"):void self.postMessage(null);const s=gt.shift();s?t(s):pt=!1}},i.onerror=function(i){if(mt>=yt)return St(),void self.postMessage(null);mt++,setTimeout(()=>t(s),_t)},i.send(s.buffer)}(t)),dt=!0,lt()}function St(){rt="",ot="",clearInterval(st),et.reset()}self.onmessage=({data:t})=>{if(null!==t)return"stop"===t?(vt(),void St()):Array.isArray(t)?void t.forEach(t=>{const i=new(s.get(t._id));if(Object.assign(i,t),i instanceof n?ct=i.timestamp:i instanceof J&&(i.hidden?ft=setTimeout(()=>self.postMessage("restart"),3e5):clearTimeout(ft)),et.checkpoint(),!i.encode(et)&&(vt(),!i.encode(et)))for(;!i.encode(et);){if(nt===it)return console.warn("OpenReplay: beacon size overflow."),et.reset(),void lt();nt=Math.min(2*nt,it),et=new tt(nt),lt()}at++,dt=!1}):(rt=t.ingestPoint||rt,ot=t.token||ot,ht=t.pageNo||ht,ct=t.startTimestamp||ct,ut=t.timeAdjustment||ut,yt=t.connAttemptCount||yt,_t=t.connAttemptGap||_t,it=t.beaconSizeLimit||it,nt=Math.min(it,t.beaconSize||nt),et.isEmpty()&&lt(),void(null==st&&(st=setInterval(vt,2e4))));vt()};
43
+ this.worker = new Worker(URL.createObjectURL(new Blob([`"use strict";function t(t){function s(...s){return new t(...s)}return s.prototype=t.prototype,s}const s=new Map;const i=t(class{constructor(t,s,i){this.pageNo=t,this.firstIndex=s,this.timestamp=i,this._id=80}encode(t){return t.uint(80)&&t.uint(this.pageNo)&&t.uint(this.firstIndex)&&t.int(this.timestamp)}});s.set(80,i);const n=t(class{constructor(t){this.timestamp=t,this._id=0}encode(t){return t.uint(0)&&t.uint(this.timestamp)}});s.set(0,n);const e=t(class{constructor(t,s,i){this.url=t,this.referrer=s,this.navigationStart=i,this._id=4}encode(t){return t.uint(4)&&t.string(this.url)&&t.string(this.referrer)&&t.uint(this.navigationStart)}});s.set(4,e);const r=t(class{constructor(t,s){this.width=t,this.height=s,this._id=5}encode(t){return t.uint(5)&&t.uint(this.width)&&t.uint(this.height)}});s.set(5,r);const o=t(class{constructor(t,s){this.x=t,this.y=s,this._id=6}encode(t){return t.uint(6)&&t.int(this.x)&&t.int(this.y)}});s.set(6,o);const h=t(class{constructor(){this._id=7}encode(t){return t.uint(7)}});s.set(7,h);const c=t(class{constructor(t,s,i,n,e){this.id=t,this.parentID=s,this.index=i,this.tag=n,this.svg=e,this._id=8}encode(t){return t.uint(8)&&t.uint(this.id)&&t.uint(this.parentID)&&t.uint(this.index)&&t.string(this.tag)&&t.boolean(this.svg)}});s.set(8,c);const u=t(class{constructor(t,s,i){this.id=t,this.parentID=s,this.index=i,this._id=9}encode(t){return t.uint(9)&&t.uint(this.id)&&t.uint(this.parentID)&&t.uint(this.index)}});s.set(9,u);const a=t(class{constructor(t,s,i){this.id=t,this.parentID=s,this.index=i,this._id=10}encode(t){return t.uint(10)&&t.uint(this.id)&&t.uint(this.parentID)&&t.uint(this.index)}});s.set(10,a);const d=t(class{constructor(t){this.id=t,this._id=11}encode(t){return t.uint(11)&&t.uint(this.id)}});s.set(11,d);const l=t(class{constructor(t,s,i){this.id=t,this.name=s,this.value=i,this._id=12}encode(t){return t.uint(12)&&t.uint(this.id)&&t.string(this.name)&&t.string(this.value)}});s.set(12,l);const g=t(class{constructor(t,s){this.id=t,this.name=s,this._id=13}encode(t){return t.uint(13)&&t.uint(this.id)&&t.string(this.name)}});s.set(13,g);const f=t(class{constructor(t,s){this.id=t,this.data=s,this._id=14}encode(t){return t.uint(14)&&t.uint(this.id)&&t.string(this.data)}});s.set(14,f);const p=t(class{constructor(t,s,i){this.id=t,this.x=s,this.y=i,this._id=16}encode(t){return t.uint(16)&&t.uint(this.id)&&t.int(this.x)&&t.int(this.y)}});s.set(16,p);const m=t(class{constructor(t,s){this.id=t,this.label=s,this._id=17}encode(t){return t.uint(17)&&t.uint(this.id)&&t.string(this.label)}});s.set(17,m);const _=t(class{constructor(t,s,i){this.id=t,this.value=s,this.mask=i,this._id=18}encode(t){return t.uint(18)&&t.uint(this.id)&&t.string(this.value)&&t.int(this.mask)}});s.set(18,_);const y=t(class{constructor(t,s){this.id=t,this.checked=s,this._id=19}encode(t){return t.uint(19)&&t.uint(this.id)&&t.boolean(this.checked)}});s.set(19,y);const v=t(class{constructor(t,s){this.x=t,this.y=s,this._id=20}encode(t){return t.uint(20)&&t.uint(this.x)&&t.uint(this.y)}});s.set(20,v);const S=t(class{constructor(t,s){this.level=t,this.value=s,this._id=22}encode(t){return t.uint(22)&&t.string(this.level)&&t.string(this.value)}});s.set(22,S);const b=t(class{constructor(t,s,i,n,e,r,o,h,c){this.requestStart=t,this.responseStart=s,this.responseEnd=i,this.domContentLoadedEventStart=n,this.domContentLoadedEventEnd=e,this.loadEventStart=r,this.loadEventEnd=o,this.firstPaint=h,this.firstContentfulPaint=c,this._id=23}encode(t){return t.uint(23)&&t.uint(this.requestStart)&&t.uint(this.responseStart)&&t.uint(this.responseEnd)&&t.uint(this.domContentLoadedEventStart)&&t.uint(this.domContentLoadedEventEnd)&&t.uint(this.loadEventStart)&&t.uint(this.loadEventEnd)&&t.uint(this.firstPaint)&&t.uint(this.firstContentfulPaint)}});s.set(23,b);const x=t(class{constructor(t,s,i){this.speedIndex=t,this.visuallyComplete=s,this.timeToInteractive=i,this._id=24}encode(t){return t.uint(24)&&t.uint(this.speedIndex)&&t.uint(this.visuallyComplete)&&t.uint(this.timeToInteractive)}});s.set(24,x);const E=t(class{constructor(t,s,i){this.name=t,this.message=s,this.payload=i,this._id=25}encode(t){return t.uint(25)&&t.string(this.name)&&t.string(this.message)&&t.string(this.payload)}});s.set(25,E);const k=t(class{constructor(t,s){this.name=t,this.payload=s,this._id=27}encode(t){return t.uint(27)&&t.string(this.name)&&t.string(this.payload)}});s.set(27,k);const I=t(class{constructor(t){this.id=t,this._id=28}encode(t){return t.uint(28)&&t.string(this.id)}});s.set(28,I);const z=t(class{constructor(t){this.id=t,this._id=29}encode(t){return t.uint(29)&&t.string(this.id)}});s.set(29,z);const w=t(class{constructor(t,s){this.key=t,this.value=s,this._id=30}encode(t){return t.uint(30)&&t.string(this.key)&&t.string(this.value)}});s.set(30,w);const T=t(class{constructor(t,s,i){this.id=t,this.rule=s,this.index=i,this._id=37}encode(t){return t.uint(37)&&t.uint(this.id)&&t.string(this.rule)&&t.uint(this.index)}});s.set(37,T);const L=t(class{constructor(t,s){this.id=t,this.index=s,this._id=38}encode(t){return t.uint(38)&&t.uint(this.id)&&t.uint(this.index)}});s.set(38,L);const A=t(class{constructor(t,s,i,n,e,r,o){this.method=t,this.url=s,this.request=i,this.response=n,this.status=e,this.timestamp=r,this.duration=o,this._id=39}encode(t){return t.uint(39)&&t.string(this.method)&&t.string(this.url)&&t.string(this.request)&&t.string(this.response)&&t.uint(this.status)&&t.uint(this.timestamp)&&t.uint(this.duration)}});s.set(39,A);const C=t(class{constructor(t,s,i,n){this.name=t,this.duration=s,this.args=i,this.result=n,this._id=40}encode(t){return t.uint(40)&&t.string(this.name)&&t.uint(this.duration)&&t.string(this.args)&&t.string(this.result)}});s.set(40,C);const M=t(class{constructor(t,s){this.key=t,this.value=s,this._id=41}encode(t){return t.uint(41)&&t.string(this.key)&&t.string(this.value)}});s.set(41,M);const R=t(class{constructor(t){this.type=t,this._id=42}encode(t){return t.uint(42)&&t.string(this.type)}});s.set(42,R);const N=t(class{constructor(t,s,i){this.action=t,this.state=s,this.duration=i,this._id=44}encode(t){return t.uint(44)&&t.string(this.action)&&t.string(this.state)&&t.uint(this.duration)}});s.set(44,N);const D=t(class{constructor(t,s){this.mutation=t,this.state=s,this._id=45}encode(t){return t.uint(45)&&t.string(this.mutation)&&t.string(this.state)}});s.set(45,D);const U=t(class{constructor(t,s){this.type=t,this.payload=s,this._id=46}encode(t){return t.uint(46)&&t.string(this.type)&&t.string(this.payload)}});s.set(46,U);const O=t(class{constructor(t,s,i){this.action=t,this.state=s,this.duration=i,this._id=47}encode(t){return t.uint(47)&&t.string(this.action)&&t.string(this.state)&&t.uint(this.duration)}});s.set(47,O);const q=t(class{constructor(t,s,i,n){this.operationKind=t,this.operationName=s,this.variables=i,this.response=n,this._id=48}encode(t){return t.uint(48)&&t.string(this.operationKind)&&t.string(this.operationName)&&t.string(this.variables)&&t.string(this.response)}});s.set(48,q);const H=t(class{constructor(t,s,i,n){this.frames=t,this.ticks=s,this.totalJSHeapSize=i,this.usedJSHeapSize=n,this._id=49}encode(t){return t.uint(49)&&t.int(this.frames)&&t.int(this.ticks)&&t.uint(this.totalJSHeapSize)&&t.uint(this.usedJSHeapSize)}});s.set(49,H);const P=t(class{constructor(t,s,i,n,e,r,o,h){this.timestamp=t,this.duration=s,this.ttfb=i,this.headerSize=n,this.encodedBodySize=e,this.decodedBodySize=r,this.url=o,this.initiator=h,this._id=53}encode(t){return t.uint(53)&&t.uint(this.timestamp)&&t.uint(this.duration)&&t.uint(this.ttfb)&&t.uint(this.headerSize)&&t.uint(this.encodedBodySize)&&t.uint(this.decodedBodySize)&&t.string(this.url)&&t.string(this.initiator)}});s.set(53,P);const B=t(class{constructor(t,s){this.downlink=t,this.type=s,this._id=54}encode(t){return t.uint(54)&&t.uint(this.downlink)&&t.string(this.type)}});s.set(54,B);const J=t(class{constructor(t){this.hidden=t,this._id=55}encode(t){return t.uint(55)&&t.boolean(this.hidden)}});s.set(55,J);const j=t(class{constructor(t,s,i,n,e,r,o){this.timestamp=t,this.duration=s,this.context=i,this.containerType=n,this.containerSrc=e,this.containerId=r,this.containerName=o,this._id=59}encode(t){return t.uint(59)&&t.uint(this.timestamp)&&t.uint(this.duration)&&t.uint(this.context)&&t.uint(this.containerType)&&t.string(this.containerSrc)&&t.string(this.containerId)&&t.string(this.containerName)}});s.set(59,j);const G=t(class{constructor(t,s,i,n){this.id=t,this.name=s,this.value=i,this.baseURL=n,this._id=60}encode(t){return t.uint(60)&&t.uint(this.id)&&t.string(this.name)&&t.string(this.value)&&t.string(this.baseURL)}});s.set(60,G);const K=t(class{constructor(t,s,i){this.id=t,this.data=s,this.baseURL=i,this._id=61}encode(t){return t.uint(61)&&t.uint(this.id)&&t.string(this.data)&&t.string(this.baseURL)}});s.set(61,K);const X=t(class{constructor(t,s){this.type=t,this.value=s,this._id=63}encode(t){return t.uint(63)&&t.string(this.type)&&t.string(this.value)}});s.set(63,X);const F=t(class{constructor(t,s){this.name=t,this.payload=s,this._id=64}encode(t){return t.uint(64)&&t.string(this.name)&&t.string(this.payload)}});s.set(64,F);const Q=t(class{constructor(){this._id=65}encode(t){return t.uint(65)}});s.set(65,Q);const V=t(class{constructor(t,s,i,n){this.id=t,this.rule=s,this.index=i,this.baseURL=n,this._id=67}encode(t){return t.uint(67)&&t.uint(this.id)&&t.string(this.rule)&&t.uint(this.index)&&t.string(this.baseURL)}});s.set(67,V);const W=t(class{constructor(t,s,i,n){this.id=t,this.hesitationTime=s,this.label=i,this.selector=n,this._id=69}encode(t){return t.uint(69)&&t.uint(this.id)&&t.uint(this.hesitationTime)&&t.string(this.label)&&t.string(this.selector)}});s.set(69,W);const Y=t(class{constructor(t,s){this.frameID=t,this.id=s,this._id=70}encode(t){return t.uint(70)&&t.uint(this.frameID)&&t.uint(this.id)}});s.set(70,Y);const Z="function"==typeof TextEncoder?new TextEncoder:{encode(t){const s=t.length,i=new Uint8Array(3*s);let n=-1;for(var e=0,r=0,o=0;o!==s;){if(e=t.charCodeAt(o),o+=1,e>=55296&&e<=56319){if(o===s){i[n+=1]=239,i[n+=1]=191,i[n+=1]=189;break}if(!((r=t.charCodeAt(o))>=56320&&r<=57343)){i[n+=1]=239,i[n+=1]=191,i[n+=1]=189;continue}if(o+=1,(e=1024*(e-55296)+r-56320+65536)>65535){i[n+=1]=240|e>>>18,i[n+=1]=128|e>>>12&63,i[n+=1]=128|e>>>6&63,i[n+=1]=128|63&e;continue}}e<=127?i[n+=1]=0|e:e<=2047?(i[n+=1]=192|e>>>6,i[n+=1]=128|63&e):(i[n+=1]=224|e>>>12,i[n+=1]=128|e>>>6&63,i[n+=1]=128|63&e)}return i.subarray(0,n+1)}};class tt{constructor(t){this.size=t,this.offset=0,this.checkpointOffset=0,this.data=new Uint8Array(t)}checkpoint(){this.checkpointOffset=this.offset}isEmpty(){return 0===this.offset}boolean(t){return this.data[this.offset++]=+t,this.offset<=this.size}uint(t){for((t<0||t>Number.MAX_SAFE_INTEGER)&&(t=0);t>=128;)this.data[this.offset++]=t%256|128,t=Math.floor(t/128);return this.data[this.offset++]=t,this.offset<=this.size}int(t){return t=Math.round(t),this.uint(t>=0?2*t:-2*t-1)}string(t){const s=Z.encode(t),i=s.byteLength;return!(!this.uint(i)||this.offset+i>this.size)&&(this.data.set(s,this.offset),this.offset+=i,!0)}reset(){this.offset=0,this.checkpointOffset=0}flush(){const t=this.data.slice(0,this.checkpointOffset);return this.reset(),t}}let st,it=1e6,nt=4e5,et=new tt(nt),rt="",ot="",ht=0,ct=0,ut=0,at=0,dt=!0;function lt(){return new i(ht,at,ct).encode(et)}const gt=[];let ft,pt=!1,mt=0,_t=8e3,yt=10;function vt(){if(dt||""===ot||""===rt)return;const t=et.flush();pt?gt.push(t):(pt=!0,function t(s){const i=new XMLHttpRequest;i.open("POST",rt+"/v1/web/i",!1),i.setRequestHeader("Authorization","Bearer "+ot),i.onreadystatechange=function(){if(4===this.readyState){if(0==this.status)return;if(this.status>=400)return St(),gt.length=0,401===this.status?void self.postMessage("restart"):void self.postMessage(null);const s=gt.shift();s?t(s):pt=!1}},i.onerror=function(i){if(mt>=yt)return St(),void self.postMessage(null);mt++,setTimeout(()=>t(s),_t)},i.send(s.buffer)}(t)),dt=!0,lt()}function St(){rt="",ot="",clearInterval(st),et.reset()}self.onmessage=({data:t})=>{if(null!==t)return"stop"===t?(vt(),void St()):Array.isArray(t)?void t.forEach(t=>{const i=new(s.get(t._id));if(Object.assign(i,t),i instanceof n?ct=i.timestamp:i instanceof J&&(i.hidden?ft=setTimeout(()=>self.postMessage("restart"),3e5):clearTimeout(ft)),et.checkpoint(),!i.encode(et)&&(vt(),!i.encode(et)))for(;!i.encode(et);){if(nt===it)return console.warn("OpenReplay: beacon size overflow."),et.reset(),void lt();nt=Math.min(2*nt,it),et=new tt(nt),lt()}at++,dt=!1}):(rt=t.ingestPoint||rt,ot=t.token||ot,ht=t.pageNo||ht,ct=t.startTimestamp||ct,ut=t.timeAdjustment||ut,yt=t.connAttemptCount||yt,_t=t.connAttemptGap||_t,it=t.beaconSizeLimit||it,nt=Math.min(it,t.beaconSize||nt),et.isEmpty()&&lt(),void(null==st&&(st=setInterval(vt,8e3))));vt()};
44
44
  `], { type: 'text/javascript' })));
45
45
  this.worker.onerror = e => {
46
46
  this._debug("webworker_error", e);
@@ -255,13 +255,14 @@ export default class App {
255
255
  return onStartInfo;
256
256
  })
257
257
  .catch(e => {
258
+ sessionStorage.removeItem(this.options.session_token_key);
258
259
  this.stop();
259
260
  warn("OpenReplay was unable to start. ", e);
260
261
  this._debug("session_start", e);
261
262
  throw e;
262
263
  });
263
264
  }
264
- return Promise.reject("Player is active");
265
+ return Promise.reject("Player is already active");
265
266
  }
266
267
  start(reset = false) {
267
268
  if (!document.hidden) {
File without changes
@@ -0,0 +1 @@
1
+ "use strict";
@@ -1,4 +1,4 @@
1
- import Observer from './observer';
1
+ import Observer from "./observer.js";
2
2
  export default class IFrameObserver extends Observer {
3
3
  observe(iframe: HTMLIFrameElement): void;
4
4
  }
@@ -1,18 +1,19 @@
1
- import Observer from './observer';
2
- import { CreateIFrameDocument, } from '../../messages';
1
+ import Observer from "./observer.js";
2
+ import { CreateIFrameDocument } from "../../messages/index.js";
3
3
  export default class IFrameObserver extends Observer {
4
4
  observe(iframe) {
5
5
  const doc = iframe.contentDocument;
6
- const frameID = this.app.nodes.getID(iframe);
7
- if (!doc || frameID === undefined) {
6
+ const hostID = this.app.nodes.getID(iframe);
7
+ if (!doc || hostID === undefined) {
8
8
  return;
9
9
  } //log TODO common app.logger
10
+ // Have to observe document, because the inner <html> might be changed
10
11
  this.observeRoot(doc, (docID) => {
11
12
  if (docID === undefined) {
12
- console.log("OpenReplay: Document not bound");
13
+ console.log("OpenReplay: Iframe document not bound");
13
14
  return;
14
15
  }
15
- this.app.send(CreateIFrameDocument(frameID, docID));
16
+ this.app.send(CreateIFrameDocument(hostID, docID));
16
17
  });
17
18
  }
18
19
  }
@@ -1,4 +1,4 @@
1
- import App from '../index';
1
+ import App from "../index.js";
2
2
  export interface Window extends globalThis.Window {
3
3
  HTMLInputElement: typeof HTMLInputElement;
4
4
  HTMLLinkElement: typeof HTMLLinkElement;
@@ -30,9 +30,12 @@ export default abstract class Observer<AdditionalOptions = {}> {
30
30
  private readonly textSet;
31
31
  private readonly textMasked;
32
32
  protected readonly options: Options & AdditionalOptions;
33
+ private readonly inUpperContext;
33
34
  constructor(app: App, options: Partial<Options> & AdditionalOptions, context?: Window);
34
35
  private clear;
35
36
  private sendNodeAttribute;
37
+ getInnerTextSecure(el: HTMLElement): string;
38
+ private checkObscure;
36
39
  private sendNodeData;
37
40
  private bindNode;
38
41
  private bindTree;
@@ -40,7 +43,7 @@ export default abstract class Observer<AdditionalOptions = {}> {
40
43
  private _commitNode;
41
44
  private commitNode;
42
45
  private commitNodes;
43
- protected observeRoot(node: Node, beforeCommit: (id?: number) => unknown): void;
46
+ protected observeRoot(node: Node, beforeCommit: (id?: number) => unknown, nodeToBind?: Node): void;
44
47
  disconnect(): void;
45
48
  }
46
49
  export {};