@openreplay/tracker 3.5.17-beta.0 → 3.6.0-beta.0

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 (90) hide show
  1. package/.eslintignore +1 -1
  2. package/.prettierignore +1 -0
  3. package/cjs/app/guards.d.ts +2 -1
  4. package/cjs/app/guards.js +5 -1
  5. package/cjs/app/index.d.ts +12 -10
  6. package/cjs/app/index.js +38 -44
  7. package/cjs/app/messages.d.ts +52 -0
  8. package/cjs/app/messages.gen.d.ts +57 -0
  9. package/cjs/app/messages.gen.js +494 -0
  10. package/cjs/app/messages.js +235 -0
  11. package/cjs/app/nodes.js +2 -0
  12. package/cjs/app/observer/iframe_observer.js +2 -2
  13. package/cjs/app/observer/observer.d.ts +1 -2
  14. package/cjs/app/observer/observer.js +40 -39
  15. package/cjs/app/observer/shadow_root_observer.js +2 -2
  16. package/cjs/app/observer/top_observer.d.ts +9 -0
  17. package/cjs/app/observer/top_observer.js +40 -12
  18. package/cjs/app/session.d.ts +17 -1
  19. package/cjs/app/session.js +51 -3
  20. package/cjs/common/{webworker.d.ts → interaction.d.ts} +3 -3
  21. package/cjs/common/{types.js → interaction.js} +0 -0
  22. package/cjs/common/messages.gen.d.ts +382 -0
  23. package/cjs/common/messages.gen.js +62 -0
  24. package/cjs/index.d.ts +3 -3
  25. package/cjs/index.js +15 -10
  26. package/cjs/modules/adoptedStyleSheets.d.ts +2 -0
  27. package/cjs/modules/adoptedStyleSheets.js +127 -0
  28. package/cjs/modules/connection.js +2 -2
  29. package/cjs/modules/console.js +6 -20
  30. package/cjs/modules/cssrules.js +16 -12
  31. package/cjs/modules/exception.d.ts +2 -2
  32. package/cjs/modules/exception.js +18 -14
  33. package/cjs/modules/img.js +31 -21
  34. package/cjs/modules/input.js +6 -6
  35. package/cjs/modules/mouse.js +42 -33
  36. package/cjs/modules/performance.js +2 -2
  37. package/cjs/modules/scroll.js +16 -7
  38. package/cjs/modules/timing.js +4 -4
  39. package/cjs/modules/viewport.js +4 -4
  40. package/lib/app/guards.d.ts +2 -1
  41. package/lib/app/guards.js +3 -0
  42. package/lib/app/index.d.ts +12 -10
  43. package/lib/app/index.js +39 -45
  44. package/lib/app/messages.d.ts +52 -0
  45. package/lib/app/messages.gen.d.ts +57 -0
  46. package/lib/app/messages.gen.js +435 -0
  47. package/lib/app/messages.js +182 -0
  48. package/lib/app/nodes.js +2 -0
  49. package/lib/app/observer/iframe_observer.js +1 -1
  50. package/lib/app/observer/observer.d.ts +1 -2
  51. package/lib/app/observer/observer.js +40 -39
  52. package/lib/app/observer/shadow_root_observer.js +1 -1
  53. package/lib/app/observer/top_observer.d.ts +9 -0
  54. package/lib/app/observer/top_observer.js +40 -12
  55. package/lib/app/session.d.ts +17 -1
  56. package/lib/app/session.js +51 -3
  57. package/lib/common/{webworker.d.ts → interaction.d.ts} +3 -3
  58. package/lib/common/{types.js → interaction.js} +0 -0
  59. package/lib/common/messages.gen.d.ts +382 -0
  60. package/lib/common/messages.gen.js +59 -0
  61. package/lib/common/tsconfig.tsbuildinfo +1 -1
  62. package/lib/index.d.ts +3 -3
  63. package/lib/index.js +15 -10
  64. package/lib/modules/adoptedStyleSheets.d.ts +2 -0
  65. package/lib/modules/adoptedStyleSheets.js +124 -0
  66. package/lib/modules/connection.js +2 -2
  67. package/lib/modules/console.js +6 -20
  68. package/lib/modules/cssrules.js +16 -12
  69. package/lib/modules/exception.d.ts +2 -2
  70. package/lib/modules/exception.js +18 -14
  71. package/lib/modules/img.js +31 -21
  72. package/lib/modules/input.js +6 -6
  73. package/lib/modules/mouse.js +43 -34
  74. package/lib/modules/performance.js +2 -2
  75. package/lib/modules/scroll.js +17 -8
  76. package/lib/modules/timing.js +4 -4
  77. package/lib/modules/viewport.js +4 -4
  78. package/package.json +1 -1
  79. package/cjs/common/messages.d.ts +0 -444
  80. package/cjs/common/messages.js +0 -794
  81. package/cjs/common/types.d.ts +0 -9
  82. package/cjs/common/webworker.js +0 -2
  83. package/cjs/modules/longtasks.d.ts +0 -2
  84. package/cjs/modules/longtasks.js +0 -34
  85. package/lib/common/messages.d.ts +0 -444
  86. package/lib/common/messages.js +0 -790
  87. package/lib/common/types.d.ts +0 -9
  88. package/lib/common/webworker.js +0 -1
  89. package/lib/modules/longtasks.d.ts +0 -2
  90. package/lib/modules/longtasks.js +0 -31
package/.eslintignore CHANGED
@@ -5,4 +5,4 @@ cjs
5
5
  build
6
6
  .cache
7
7
  .eslintrc.cjs
8
- src/common/messages.ts
8
+ *.gen.ts
@@ -0,0 +1 @@
1
+ *.gen.ts
@@ -1,7 +1,8 @@
1
1
  export declare function isSVGElement(node: Element): node is SVGElement;
2
2
  export declare function isElementNode(node: Node): node is Element;
3
3
  export declare function isTextNode(node: Node): node is Text;
4
- export declare function isRootNode(node: Node): boolean;
4
+ export declare function isDocument(node: Node): node is Document;
5
+ export declare function isRootNode(node: Node): node is Document | DocumentFragment;
5
6
  declare type TagTypeMap = {
6
7
  HTML: HTMLHtmlElement;
7
8
  IMG: HTMLImageElement;
package/cjs/app/guards.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.hasTag = exports.isRootNode = exports.isTextNode = exports.isElementNode = exports.isSVGElement = void 0;
3
+ exports.hasTag = exports.isRootNode = exports.isDocument = exports.isTextNode = exports.isElementNode = exports.isSVGElement = void 0;
4
4
  function isSVGElement(node) {
5
5
  return node.namespaceURI === 'http://www.w3.org/2000/svg';
6
6
  }
@@ -13,6 +13,10 @@ function isTextNode(node) {
13
13
  return node.nodeType === Node.TEXT_NODE;
14
14
  }
15
15
  exports.isTextNode = isTextNode;
16
+ function isDocument(node) {
17
+ return node.nodeType === Node.DOCUMENT_NODE;
18
+ }
19
+ exports.isDocument = isDocument;
16
20
  function isRootNode(node) {
17
21
  return node.nodeType === Node.DOCUMENT_NODE || node.nodeType === Node.DOCUMENT_FRAGMENT_NODE;
18
22
  }
@@ -1,5 +1,6 @@
1
- import type Message from '../common/messages.js';
1
+ import type Message from './messages.gen.js';
2
2
  import Nodes from './nodes.js';
3
+ import Observer from './observer/top_observer.js';
3
4
  import Sanitizer from './sanitizer.js';
4
5
  import Ticker from './ticker.js';
5
6
  import Logger from './logger.js';
@@ -7,7 +8,8 @@ import Session from './session.js';
7
8
  import type { Options as ObserverOptions } from './observer/top_observer.js';
8
9
  import type { Options as SanitizerOptions } from './sanitizer.js';
9
10
  import type { Options as LoggerOptions } from './logger.js';
10
- import type { Options as WebworkerOptions } from '../common/webworker.js';
11
+ import type { Options as SessOptions } from './session.js';
12
+ import type { Options as WebworkerOptions } from '../common/interaction.js';
11
13
  export interface StartOptions {
12
14
  userID?: string;
13
15
  metadata?: Record<string, string>;
@@ -34,9 +36,9 @@ declare type CommitCallback = (messages: Array<Message>) => void;
34
36
  declare type AppOptions = {
35
37
  revID: string;
36
38
  node_id: string;
39
+ session_reset_key: string;
37
40
  session_token_key: string;
38
41
  session_pageno_key: string;
39
- session_reset_key: string;
40
42
  local_uuid_key: string;
41
43
  ingestPoint: string;
42
44
  resourceBaseHref: string | null;
@@ -47,7 +49,7 @@ declare type AppOptions = {
47
49
  localStorage: Storage | null;
48
50
  sessionStorage: Storage | null;
49
51
  onStart?: StartCallback;
50
- } & WebworkerOptions;
52
+ } & WebworkerOptions & SessOptions;
51
53
  export declare type Options = AppOptions & ObserverOptions & SanitizerOptions;
52
54
  export declare const DEFAULT_INGEST_POINT = "https://api.openreplay.com/ingest";
53
55
  export default class App {
@@ -61,7 +63,7 @@ export default class App {
61
63
  readonly localStorage: Storage;
62
64
  readonly sessionStorage: Storage;
63
65
  private readonly messages;
64
- private readonly observer;
66
+ readonly observer: Observer;
65
67
  private readonly startCallbacks;
66
68
  private readonly stopCallbacks;
67
69
  private readonly commitCallbacks;
@@ -70,7 +72,7 @@ export default class App {
70
72
  private activityState;
71
73
  private readonly version;
72
74
  private readonly worker?;
73
- constructor(projectKey: string, sessionToken: string | null | undefined, options: Partial<Options>);
75
+ constructor(projectKey: string, sessionHash: string | undefined, options: Partial<Options>);
74
76
  private _debug;
75
77
  send(message: Message, urgent?: boolean): void;
76
78
  private commit;
@@ -80,17 +82,17 @@ export default class App {
80
82
  attachStopCallback(cb: () => any): void;
81
83
  attachEventListener(target: EventTarget, type: string, listener: EventListener, useSafe?: boolean, useCapture?: boolean): void;
82
84
  checkRequiredVersion(version: string): boolean;
83
- private getStartInfo;
85
+ private getTrackerInfo;
84
86
  getSessionInfo(): {
85
87
  userUUID: string | null;
86
88
  projectKey: string;
87
89
  revID: string;
88
- timestamp: number;
89
90
  trackerVersion: string;
90
91
  isSnippet: boolean;
91
- sessionID: string | null;
92
+ sessionID: string | undefined;
92
93
  metadata: Record<string, string>;
93
94
  userID: string | null;
95
+ timestamp: number;
94
96
  };
95
97
  getSessionToken(): string | undefined;
96
98
  getSessionID(): string | undefined;
@@ -103,7 +105,7 @@ export default class App {
103
105
  resetNextPageSession(flag: boolean): void;
104
106
  private _start;
105
107
  start(options?: StartOptions): Promise<StartPromiseReturn>;
106
- stop(calledFromAPI?: boolean, restarting?: boolean): void;
108
+ stop(stopWorker?: boolean): void;
107
109
  restart(): void;
108
110
  }
109
111
  export {};
package/cjs/app/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DEFAULT_INGEST_POINT = void 0;
4
- const messages_js_1 = require("../common/messages.js");
4
+ const messages_gen_js_1 = require("./messages.gen.js");
5
5
  const utils_js_1 = require("../utils.js");
6
6
  const nodes_js_1 = require("./nodes.js");
7
7
  const top_observer_js_1 = require("./observer/top_observer.js");
@@ -23,11 +23,10 @@ var ActivityState;
23
23
  // TODO: use backendHost only
24
24
  exports.DEFAULT_INGEST_POINT = 'https://api.openreplay.com/ingest';
25
25
  class App {
26
- constructor(projectKey, sessionToken, options) {
26
+ constructor(projectKey, sessionHash, options) {
27
27
  // if (options.onStart !== undefined) {
28
28
  // deprecationWarn("'onStart' option", "tracker.start().then(/* handle session info */)")
29
29
  // } ?? maybe onStart is good
30
- var _a, _b;
31
30
  this.messages = [];
32
31
  this.startCallbacks = [];
33
32
  this.stopCallbacks = [];
@@ -58,24 +57,23 @@ class App {
58
57
  this.ticker.attach(() => this.commit());
59
58
  this.debug = new logger_js_1.default(this.options.__debug__);
60
59
  this.notify = new logger_js_1.default(this.options.verbose ? logger_js_1.LogLevel.Warnings : logger_js_1.LogLevel.Silent);
61
- this.session = new session_js_1.default();
60
+ this.localStorage = this.options.localStorage || window.localStorage;
61
+ this.sessionStorage = this.options.sessionStorage || window.sessionStorage;
62
+ this.session = new session_js_1.default(this, this.options);
62
63
  this.session.attachUpdateCallback(({ userID, metadata }) => {
63
64
  if (userID != null) {
64
65
  // TODO: nullable userID
65
- this.send(new messages_js_1.UserID(userID));
66
+ this.send((0, messages_gen_js_1.UserID)(userID));
66
67
  }
67
68
  if (metadata != null) {
68
- Object.entries(metadata).forEach(([key, value]) => this.send(new messages_js_1.Metadata(key, value)));
69
+ Object.entries(metadata).forEach(([key, value]) => this.send((0, messages_gen_js_1.Metadata)(key, value)));
69
70
  }
70
71
  });
71
- // window.localStorage and window.sessionStorage should only be accessed if required, see #490, #637
72
- this.localStorage = (_a = this.options.localStorage) !== null && _a !== void 0 ? _a : window.localStorage;
73
- this.sessionStorage = (_b = this.options.sessionStorage) !== null && _b !== void 0 ? _b : window.sessionStorage;
74
- if (sessionToken != null) {
75
- this.sessionStorage.setItem(this.options.session_token_key, sessionToken);
72
+ if (sessionHash != null) {
73
+ this.session.applySessionHash(sessionHash);
76
74
  }
77
75
  try {
78
- this.worker = new Worker(URL.createObjectURL(new Blob(['"use strict";function t(t){function i(...i){return new t(...i)}return i.prototype=t.prototype,i}const i=new Map;const s=t(class{constructor(t,i,s){this.pageNo=t,this.firstIndex=i,this.timestamp=s,this._id=80}encode(t){return t.uint(80)&&t.uint(this.pageNo)&&t.uint(this.firstIndex)&&t.int(this.timestamp)}});i.set(80,s);const e=t(class{constructor(t){this.timestamp=t,this._id=0}encode(t){return t.uint(0)&&t.uint(this.timestamp)}});i.set(0,e);const n=t(class{constructor(t,i,s){this.url=t,this.referrer=i,this.navigationStart=s,this._id=4}encode(t){return t.uint(4)&&t.string(this.url)&&t.string(this.referrer)&&t.uint(this.navigationStart)}});i.set(4,n);const r=t(class{constructor(t,i){this.width=t,this.height=i,this._id=5}encode(t){return t.uint(5)&&t.uint(this.width)&&t.uint(this.height)}});i.set(5,r);const h=t(class{constructor(t,i){this.x=t,this.y=i,this._id=6}encode(t){return t.uint(6)&&t.int(this.x)&&t.int(this.y)}});i.set(6,h);const o=t(class{constructor(){this._id=7}encode(t){return t.uint(7)}});i.set(7,o);const c=t(class{constructor(t,i,s,e,n){this.id=t,this.parentID=i,this.index=s,this.tag=e,this.svg=n,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)}});i.set(8,c);const a=t(class{constructor(t,i,s){this.id=t,this.parentID=i,this.index=s,this._id=9}encode(t){return t.uint(9)&&t.uint(this.id)&&t.uint(this.parentID)&&t.uint(this.index)}});i.set(9,a);const u=t(class{constructor(t,i,s){this.id=t,this.parentID=i,this.index=s,this._id=10}encode(t){return t.uint(10)&&t.uint(this.id)&&t.uint(this.parentID)&&t.uint(this.index)}});i.set(10,u);const d=t(class{constructor(t){this.id=t,this._id=11}encode(t){return t.uint(11)&&t.uint(this.id)}});i.set(11,d);const l=t(class{constructor(t,i,s){this.id=t,this.name=i,this.value=s,this._id=12}encode(t){return t.uint(12)&&t.uint(this.id)&&t.string(this.name)&&t.string(this.value)}});i.set(12,l);const p=t(class{constructor(t,i){this.id=t,this.name=i,this._id=13}encode(t){return t.uint(13)&&t.uint(this.id)&&t.string(this.name)}});i.set(13,p);const g=t(class{constructor(t,i){this.id=t,this.data=i,this._id=14}encode(t){return t.uint(14)&&t.uint(this.id)&&t.string(this.data)}});i.set(14,g);const m=t(class{constructor(t,i,s){this.id=t,this.x=i,this.y=s,this._id=16}encode(t){return t.uint(16)&&t.uint(this.id)&&t.int(this.x)&&t.int(this.y)}});i.set(16,m);const f=t(class{constructor(t,i){this.id=t,this.label=i,this._id=17}encode(t){return t.uint(17)&&t.uint(this.id)&&t.string(this.label)}});i.set(17,f);const y=t(class{constructor(t,i,s){this.id=t,this.value=i,this.mask=s,this._id=18}encode(t){return t.uint(18)&&t.uint(this.id)&&t.string(this.value)&&t.int(this.mask)}});i.set(18,y);const _=t(class{constructor(t,i){this.id=t,this.checked=i,this._id=19}encode(t){return t.uint(19)&&t.uint(this.id)&&t.boolean(this.checked)}});i.set(19,_);const v=t(class{constructor(t,i){this.x=t,this.y=i,this._id=20}encode(t){return t.uint(20)&&t.uint(this.x)&&t.uint(this.y)}});i.set(20,v);const S=t(class{constructor(t,i){this.level=t,this.value=i,this._id=22}encode(t){return t.uint(22)&&t.string(this.level)&&t.string(this.value)}});i.set(22,S);const b=t(class{constructor(t,i,s,e,n,r,h,o,c){this.requestStart=t,this.responseStart=i,this.responseEnd=s,this.domContentLoadedEventStart=e,this.domContentLoadedEventEnd=n,this.loadEventStart=r,this.loadEventEnd=h,this.firstPaint=o,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)}});i.set(23,b);const w=t(class{constructor(t,i,s){this.speedIndex=t,this.visuallyComplete=i,this.timeToInteractive=s,this._id=24}encode(t){return t.uint(24)&&t.uint(this.speedIndex)&&t.uint(this.visuallyComplete)&&t.uint(this.timeToInteractive)}});i.set(24,w);const E=t(class{constructor(t,i,s){this.name=t,this.message=i,this.payload=s,this._id=25}encode(t){return t.uint(25)&&t.string(this.name)&&t.string(this.message)&&t.string(this.payload)}});i.set(25,E);const x=t(class{constructor(t,i){this.name=t,this.payload=i,this._id=27}encode(t){return t.uint(27)&&t.string(this.name)&&t.string(this.payload)}});i.set(27,x);const T=t(class{constructor(t){this.id=t,this._id=28}encode(t){return t.uint(28)&&t.string(this.id)}});i.set(28,T);const z=t(class{constructor(t){this.id=t,this._id=29}encode(t){return t.uint(29)&&t.string(this.id)}});i.set(29,z);const k=t(class{constructor(t,i){this.key=t,this.value=i,this._id=30}encode(t){return t.uint(30)&&t.string(this.key)&&t.string(this.value)}});i.set(30,k);const A=t(class{constructor(t,i,s){this.id=t,this.rule=i,this.index=s,this._id=37}encode(t){return t.uint(37)&&t.uint(this.id)&&t.string(this.rule)&&t.uint(this.index)}});i.set(37,A);const I=t(class{constructor(t,i){this.id=t,this.index=i,this._id=38}encode(t){return t.uint(38)&&t.uint(this.id)&&t.uint(this.index)}});i.set(38,I);const L=t(class{constructor(t,i,s,e,n,r,h){this.method=t,this.url=i,this.request=s,this.response=e,this.status=n,this.timestamp=r,this.duration=h,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)}});i.set(39,L);const C=t(class{constructor(t,i,s,e){this.name=t,this.duration=i,this.args=s,this.result=e,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)}});i.set(40,C);const M=t(class{constructor(t,i){this.key=t,this.value=i,this._id=41}encode(t){return t.uint(41)&&t.string(this.key)&&t.string(this.value)}});i.set(41,M);const N=t(class{constructor(t){this.type=t,this._id=42}encode(t){return t.uint(42)&&t.string(this.type)}});i.set(42,N);const B=t(class{constructor(t,i,s){this.action=t,this.state=i,this.duration=s,this._id=44}encode(t){return t.uint(44)&&t.string(this.action)&&t.string(this.state)&&t.uint(this.duration)}});i.set(44,B);const U=t(class{constructor(t,i){this.mutation=t,this.state=i,this._id=45}encode(t){return t.uint(45)&&t.string(this.mutation)&&t.string(this.state)}});i.set(45,U);const R=t(class{constructor(t,i){this.type=t,this.payload=i,this._id=46}encode(t){return t.uint(46)&&t.string(this.type)&&t.string(this.payload)}});i.set(46,R);const O=t(class{constructor(t,i,s){this.action=t,this.state=i,this.duration=s,this._id=47}encode(t){return t.uint(47)&&t.string(this.action)&&t.string(this.state)&&t.uint(this.duration)}});i.set(47,O);const P=t(class{constructor(t,i,s,e){this.operationKind=t,this.operationName=i,this.variables=s,this.response=e,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)}});i.set(48,P);const q=t(class{constructor(t,i,s,e){this.frames=t,this.ticks=i,this.totalJSHeapSize=s,this.usedJSHeapSize=e,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)}});i.set(49,q);const D=t(class{constructor(t,i,s,e,n,r,h,o){this.timestamp=t,this.duration=i,this.ttfb=s,this.headerSize=e,this.encodedBodySize=n,this.decodedBodySize=r,this.url=h,this.initiator=o,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)}});i.set(53,D);const W=t(class{constructor(t,i){this.downlink=t,this.type=i,this._id=54}encode(t){return t.uint(54)&&t.uint(this.downlink)&&t.string(this.type)}});i.set(54,W);const H=t(class{constructor(t){this.hidden=t,this._id=55}encode(t){return t.uint(55)&&t.boolean(this.hidden)}});i.set(55,H);const J=t(class{constructor(t,i,s,e,n,r,h){this.timestamp=t,this.duration=i,this.context=s,this.containerType=e,this.containerSrc=n,this.containerId=r,this.containerName=h,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)}});i.set(59,J);const F=t(class{constructor(t,i,s,e){this.id=t,this.name=i,this.value=s,this.baseURL=e,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)}});i.set(60,F);const X=t(class{constructor(t,i,s){this.id=t,this.data=i,this.baseURL=s,this._id=61}encode(t){return t.uint(61)&&t.uint(this.id)&&t.string(this.data)&&t.string(this.baseURL)}});i.set(61,X);const G=t(class{constructor(t,i){this.type=t,this.value=i,this._id=63}encode(t){return t.uint(63)&&t.string(this.type)&&t.string(this.value)}});i.set(63,G);const K=t(class{constructor(t,i){this.name=t,this.payload=i,this._id=64}encode(t){return t.uint(64)&&t.string(this.name)&&t.string(this.payload)}});i.set(64,K);const j=t(class{constructor(){this._id=65}encode(t){return t.uint(65)}});i.set(65,j);const Q=t(class{constructor(t,i,s,e){this.id=t,this.rule=i,this.index=s,this.baseURL=e,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)}});i.set(67,Q);const V=t(class{constructor(t,i,s,e){this.id=t,this.hesitationTime=i,this.label=s,this.selector=e,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)}});i.set(69,V);const Y=t(class{constructor(t,i){this.frameID=t,this.id=i,this._id=70}encode(t){return t.uint(70)&&t.uint(this.frameID)&&t.uint(this.id)}});i.set(70,Y);class Z{constructor(t,i,s,e=10,n=1e3){this.onUnauthorised=i,this.onFailure=s,this.MAX_ATTEMPTS_COUNT=e,this.ATTEMPT_TIMEOUT=n,this.attemptsCount=0,this.busy=!1,this.queue=[],this.token=null,this.ingestURL=t+"/v1/web/i"}authorise(t){this.token=t}push(t){this.busy||!this.token?this.queue.push(t):this.sendBatch(t)}retry(t){this.attemptsCount>=this.MAX_ATTEMPTS_COUNT?this.onFailure():(this.attemptsCount++,setTimeout(()=>this.sendBatch(t),this.ATTEMPT_TIMEOUT*this.attemptsCount))}sendBatch(t){this.busy=!0,fetch(this.ingestURL,{body:t,method:"POST",headers:{Authorization:"Bearer "+this.token},keepalive:t.length<65536}).then(i=>{if(401===i.status)return this.busy=!1,void this.onUnauthorised();if(i.status>=400)return void this.retry(t);this.attemptsCount=0;const s=this.queue.shift();s?this.sendBatch(s):this.busy=!1}).catch(i=>{console.warn("OpenReplay:",i),this.retry(t)})}clean(){this.queue.length=0}}const tt="function"==typeof TextEncoder?new TextEncoder:{encode(t){const i=t.length,s=new Uint8Array(3*i);let e=-1;for(let n=0,r=0,h=0;h!==i;){if(n=t.charCodeAt(h),h+=1,n>=55296&&n<=56319){if(h===i){s[e+=1]=239,s[e+=1]=191,s[e+=1]=189;break}if(r=t.charCodeAt(h),!(r>=56320&&r<=57343)){s[e+=1]=239,s[e+=1]=191,s[e+=1]=189;continue}if(n=1024*(n-55296)+r-56320+65536,h+=1,n>65535){s[e+=1]=240|n>>>18,s[e+=1]=128|n>>>12&63,s[e+=1]=128|n>>>6&63,s[e+=1]=128|63&n;continue}}n<=127?s[e+=1]=0|n:n<=2047?(s[e+=1]=192|n>>>6,s[e+=1]=128|63&n):(s[e+=1]=224|n>>>12,s[e+=1]=128|n>>>6&63,s[e+=1]=128|63&n)}return s.subarray(0,e+1)}};class it{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 i=tt.encode(t),s=i.byteLength;return!(!this.uint(s)||this.offset+s>this.size)&&(this.data.set(i,this.offset),this.offset+=s,!0)}reset(){this.offset=0,this.checkpointOffset=0}flush(){const t=this.data.slice(0,this.checkpointOffset);return this.reset(),t}}class st{constructor(t,i,s){this.pageNo=t,this.timestamp=i,this.onBatch=s,this.nextIndex=0,this.beaconSize=2e5,this.writer=new it(this.beaconSize),this.isEmpty=!0,this.beaconSizeLimit=1e6,this.prepare()}prepare(){this.writer.isEmpty()&&new s(this.pageNo,this.nextIndex,this.timestamp).encode(this.writer)}write(t){const i=t.encode(this.writer);return i&&(this.isEmpty=!1,this.writer.checkpoint(),this.nextIndex++),i}setBeaconSizeLimit(t){this.beaconSizeLimit=t}writeMessage(t){if(t instanceof e&&(this.timestamp=t.timestamp),!this.write(t))for(this.finaliseBatch();!this.write(t);){if(this.beaconSize===this.beaconSizeLimit)return console.warn("OpenReplay: beacon size overflow. Skipping large message."),this.writer.reset(),this.prepare(),void(this.isEmpty=!0);this.beaconSize=Math.min(2*this.beaconSize,this.beaconSizeLimit),this.writer=new it(this.beaconSize),this.prepare(),this.isEmpty=!0}}finaliseBatch(){this.isEmpty||(this.onBatch(this.writer.flush()),this.prepare(),this.isEmpty=!0)}clean(){this.writer.reset()}}var et;!function(t){t[t.NotActive=0]="NotActive",t[t.Starting=1]="Starting",t[t.Stopping=2]="Stopping",t[t.Active=3]="Active"}(et||(et={}));let nt=null,rt=null;function ht(){rt&&rt.finaliseBatch()}function ot(){et.Stopping,null!==at&&(clearInterval(at),at=null),rt&&(rt.clean(),rt=null),et.NotActive}et.NotActive;let ct,at=null;self.onmessage=({data:t})=>{if(null!=t){if("stop"===t)return ht(),void ot();if(Array.isArray(t)){if(!rt)throw new Error("WebWorker: writer not initialised. Service Should be Started.");const s=rt;t.forEach(t=>{const e=new(i.get(t._id));Object.assign(e,t),e instanceof H&&(e.hidden?ct=setTimeout(()=>self.postMessage("restart"),18e5):clearTimeout(ct)),s.writeMessage(e)})}else{if("start"===t.type)return et.Starting,nt=new Z(t.ingestPoint,()=>{self.postMessage("restart")},()=>{nt&&(nt.clean(),nt=null),ot(),self.postMessage("failed")},t.connAttemptCount,t.connAttemptGap),rt=new st(t.pageNo,t.timestamp,t=>nt&&nt.push(t)),null===at&&(at=setInterval(ht,1e4)),et.Active;if("auth"===t.type){if(!nt)throw new Error("WebWorker: sender not initialised. Received auth.");if(!rt)throw new Error("WebWorker: writer not initialised. Received auth.");return nt.authorise(t.token),void(t.beaconSizeLimit&&rt.setBeaconSizeLimit(t.beaconSizeLimit))}}}else ht()};'], { type: 'text/javascript' })));
76
+ this.worker = new Worker(URL.createObjectURL(new Blob(['"use strict";var t;!function(t){t[t.BatchMetadata=81]="BatchMetadata",t[t.PartitionedMessage=82]="PartitionedMessage",t[t.Timestamp=0]="Timestamp",t[t.SetPageLocation=4]="SetPageLocation",t[t.SetViewportSize=5]="SetViewportSize",t[t.SetViewportScroll=6]="SetViewportScroll",t[t.CreateDocument=7]="CreateDocument",t[t.CreateElementNode=8]="CreateElementNode",t[t.CreateTextNode=9]="CreateTextNode",t[t.MoveNode=10]="MoveNode",t[t.RemoveNode=11]="RemoveNode",t[t.SetNodeAttribute=12]="SetNodeAttribute",t[t.RemoveNodeAttribute=13]="RemoveNodeAttribute",t[t.SetNodeData=14]="SetNodeData",t[t.SetNodeScroll=16]="SetNodeScroll",t[t.SetInputTarget=17]="SetInputTarget",t[t.SetInputValue=18]="SetInputValue",t[t.SetInputChecked=19]="SetInputChecked",t[t.MouseMove=20]="MouseMove",t[t.ConsoleLog=22]="ConsoleLog",t[t.PageLoadTiming=23]="PageLoadTiming",t[t.PageRenderTiming=24]="PageRenderTiming",t[t.JSException=25]="JSException",t[t.RawCustomEvent=27]="RawCustomEvent",t[t.UserID=28]="UserID",t[t.UserAnonymousID=29]="UserAnonymousID",t[t.Metadata=30]="Metadata",t[t.CSSInsertRule=37]="CSSInsertRule",t[t.CSSDeleteRule=38]="CSSDeleteRule",t[t.Fetch=39]="Fetch",t[t.Profiler=40]="Profiler",t[t.OTable=41]="OTable",t[t.StateAction=42]="StateAction",t[t.Redux=44]="Redux",t[t.Vuex=45]="Vuex",t[t.MobX=46]="MobX",t[t.NgRx=47]="NgRx",t[t.GraphQL=48]="GraphQL",t[t.PerformanceTrack=49]="PerformanceTrack",t[t.ResourceTiming=53]="ResourceTiming",t[t.ConnectionInformation=54]="ConnectionInformation",t[t.SetPageVisibility=55]="SetPageVisibility",t[t.LongTask=59]="LongTask",t[t.SetNodeAttributeURLBased=60]="SetNodeAttributeURLBased",t[t.SetCSSDataURLBased=61]="SetCSSDataURLBased",t[t.TechnicalInfo=63]="TechnicalInfo",t[t.CustomIssue=64]="CustomIssue",t[t.CSSInsertRuleURLBased=67]="CSSInsertRuleURLBased",t[t.MouseClick=69]="MouseClick",t[t.CreateIFrameDocument=70]="CreateIFrameDocument",t[t.AdoptedSSReplaceURLBased=71]="AdoptedSSReplaceURLBased",t[t.AdoptedSSInsertRuleURLBased=73]="AdoptedSSInsertRuleURLBased",t[t.AdoptedSSDeleteRule=75]="AdoptedSSDeleteRule",t[t.AdoptedSSAddOwner=76]="AdoptedSSAddOwner",t[t.AdoptedSSRemoveOwner=77]="AdoptedSSRemoveOwner"}(t||(t={}));class e{constructor(t,e,i,s=10,n=1e3){this.onUnauthorised=e,this.onFailure=i,this.MAX_ATTEMPTS_COUNT=s,this.ATTEMPT_TIMEOUT=n,this.attemptsCount=0,this.busy=!1,this.queue=[],this.token=null,this.ingestURL=t+"/v1/web/i"}authorise(t){this.token=t}push(t){this.busy||!this.token?this.queue.push(t):this.sendBatch(t)}retry(t){this.attemptsCount>=this.MAX_ATTEMPTS_COUNT?this.onFailure():(this.attemptsCount++,setTimeout(()=>this.sendBatch(t),this.ATTEMPT_TIMEOUT*this.attemptsCount))}sendBatch(t){this.busy=!0,fetch(this.ingestURL,{body:t,method:"POST",headers:{Authorization:"Bearer "+this.token},keepalive:t.length<65536}).then(e=>{if(401===e.status)return this.busy=!1,void this.onUnauthorised();if(e.status>=400)return void this.retry(t);this.attemptsCount=0;const i=this.queue.shift();i?this.sendBatch(i):this.busy=!1}).catch(e=>{console.warn("OpenReplay:",e),this.retry(t)})}clean(){this.queue.length=0}}const i="function"==typeof TextEncoder?new TextEncoder:{encode(t){const e=t.length,i=new Uint8Array(3*e);let s=-1;for(let n=0,r=0,h=0;h!==e;){if(n=t.charCodeAt(h),h+=1,n>=55296&&n<=56319){if(h===e){i[s+=1]=239,i[s+=1]=191,i[s+=1]=189;break}if(r=t.charCodeAt(h),!(r>=56320&&r<=57343)){i[s+=1]=239,i[s+=1]=191,i[s+=1]=189;continue}if(n=1024*(n-55296)+r-56320+65536,h+=1,n>65535){i[s+=1]=240|n>>>18,i[s+=1]=128|n>>>12&63,i[s+=1]=128|n>>>6&63,i[s+=1]=128|63&n;continue}}n<=127?i[s+=1]=0|n:n<=2047?(i[s+=1]=192|n>>>6,i[s+=1]=128|63&n):(i[s+=1]=224|n>>>12,i[s+=1]=128|n>>>6&63,i[s+=1]=128|63&n)}return i.subarray(0,s+1)}};class s extends class{constructor(t){this.size=t,this.offset=0,this.checkpointOffset=0,this.data=new Uint8Array(t)}getCurrentOffset(){return this.offset}checkpoint(){this.checkpointOffset=this.offset}isEmpty(){return 0===this.offset}skip(t){return this.offset+=t,this.offset<=this.size}set(t,e){this.data.set(t,e)}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 e=i.encode(t),s=e.byteLength;return!(!this.uint(s)||this.offset+s>this.size)&&(this.data.set(e,this.offset),this.offset+=s,!0)}reset(){this.offset=0,this.checkpointOffset=0}flush(){const t=this.data.slice(0,this.checkpointOffset);return this.reset(),t}}{encode(e){switch(e[0]){case t.BatchMetadata:return this.uint(e[1])&&this.uint(e[2])&&this.uint(e[3])&&this.int(e[4])&&this.string(e[5]);case t.PartitionedMessage:return this.uint(e[1])&&this.uint(e[2]);case t.Timestamp:return this.uint(e[1]);case t.SetPageLocation:return this.string(e[1])&&this.string(e[2])&&this.uint(e[3]);case t.SetViewportSize:return this.uint(e[1])&&this.uint(e[2]);case t.SetViewportScroll:return this.int(e[1])&&this.int(e[2]);case t.CreateDocument:return!0;case t.CreateElementNode:return this.uint(e[1])&&this.uint(e[2])&&this.uint(e[3])&&this.string(e[4])&&this.boolean(e[5]);case t.CreateTextNode:case t.MoveNode:return this.uint(e[1])&&this.uint(e[2])&&this.uint(e[3]);case t.RemoveNode:return this.uint(e[1]);case t.SetNodeAttribute:return this.uint(e[1])&&this.string(e[2])&&this.string(e[3]);case t.RemoveNodeAttribute:case t.SetNodeData:return this.uint(e[1])&&this.string(e[2]);case t.SetNodeScroll:return this.uint(e[1])&&this.int(e[2])&&this.int(e[3]);case t.SetInputTarget:return this.uint(e[1])&&this.string(e[2]);case t.SetInputValue:return this.uint(e[1])&&this.string(e[2])&&this.int(e[3]);case t.SetInputChecked:return this.uint(e[1])&&this.boolean(e[2]);case t.MouseMove:return this.uint(e[1])&&this.uint(e[2]);case t.ConsoleLog:return this.string(e[1])&&this.string(e[2]);case t.PageLoadTiming:return this.uint(e[1])&&this.uint(e[2])&&this.uint(e[3])&&this.uint(e[4])&&this.uint(e[5])&&this.uint(e[6])&&this.uint(e[7])&&this.uint(e[8])&&this.uint(e[9]);case t.PageRenderTiming:return this.uint(e[1])&&this.uint(e[2])&&this.uint(e[3]);case t.JSException:return this.string(e[1])&&this.string(e[2])&&this.string(e[3]);case t.RawCustomEvent:return this.string(e[1])&&this.string(e[2]);case t.UserID:case t.UserAnonymousID:return this.string(e[1]);case t.Metadata:return this.string(e[1])&&this.string(e[2]);case t.CSSInsertRule:return this.uint(e[1])&&this.string(e[2])&&this.uint(e[3]);case t.CSSDeleteRule:return this.uint(e[1])&&this.uint(e[2]);case t.Fetch:return this.string(e[1])&&this.string(e[2])&&this.string(e[3])&&this.string(e[4])&&this.uint(e[5])&&this.uint(e[6])&&this.uint(e[7]);case t.Profiler:return this.string(e[1])&&this.uint(e[2])&&this.string(e[3])&&this.string(e[4]);case t.OTable:return this.string(e[1])&&this.string(e[2]);case t.StateAction:return this.string(e[1]);case t.Redux:return this.string(e[1])&&this.string(e[2])&&this.uint(e[3]);case t.Vuex:case t.MobX:return this.string(e[1])&&this.string(e[2]);case t.NgRx:return this.string(e[1])&&this.string(e[2])&&this.uint(e[3]);case t.GraphQL:return this.string(e[1])&&this.string(e[2])&&this.string(e[3])&&this.string(e[4]);case t.PerformanceTrack:return this.int(e[1])&&this.int(e[2])&&this.uint(e[3])&&this.uint(e[4]);case t.ResourceTiming:return this.uint(e[1])&&this.uint(e[2])&&this.uint(e[3])&&this.uint(e[4])&&this.uint(e[5])&&this.uint(e[6])&&this.string(e[7])&&this.string(e[8]);case t.ConnectionInformation:return this.uint(e[1])&&this.string(e[2]);case t.SetPageVisibility:return this.boolean(e[1]);case t.LongTask:return this.uint(e[1])&&this.uint(e[2])&&this.uint(e[3])&&this.uint(e[4])&&this.string(e[5])&&this.string(e[6])&&this.string(e[7]);case t.SetNodeAttributeURLBased:return this.uint(e[1])&&this.string(e[2])&&this.string(e[3])&&this.string(e[4]);case t.SetCSSDataURLBased:return this.uint(e[1])&&this.string(e[2])&&this.string(e[3]);case t.TechnicalInfo:case t.CustomIssue:return this.string(e[1])&&this.string(e[2]);case t.CSSInsertRuleURLBased:return this.uint(e[1])&&this.string(e[2])&&this.uint(e[3])&&this.string(e[4]);case t.MouseClick:return this.uint(e[1])&&this.uint(e[2])&&this.string(e[3])&&this.string(e[4]);case t.CreateIFrameDocument:return this.uint(e[1])&&this.uint(e[2]);case t.AdoptedSSReplaceURLBased:return this.uint(e[1])&&this.string(e[2])&&this.string(e[3]);case t.AdoptedSSInsertRuleURLBased:return this.uint(e[1])&&this.string(e[2])&&this.uint(e[3])&&this.string(e[4]);case t.AdoptedSSDeleteRule:case t.AdoptedSSAddOwner:case t.AdoptedSSRemoveOwner:return this.uint(e[1])&&this.uint(e[2])}}}class n{constructor(t,e,i,n){this.pageNo=t,this.timestamp=e,this.url=i,this.onBatch=n,this.nextIndex=0,this.beaconSize=2e5,this.encoder=new s(this.beaconSize),this.sizeBuffer=new Uint8Array(3),this.isEmpty=!0,this.beaconSizeLimit=1e6,this.prepare()}writeType(t){return this.encoder.uint(t[0])}writeFields(t){return this.encoder.encode(t)}writeSizeAt(t,e){for(let e=0;e<3;e++)this.sizeBuffer[e]=t>>8*e;this.encoder.set(this.sizeBuffer,e)}prepare(){if(!this.encoder.isEmpty())return;const e=[t.BatchMetadata,1,this.pageNo,this.nextIndex,this.timestamp,this.url];this.writeType(e),this.writeFields(e),this.isEmpty=!0}writeWithSize(e){const i=this.encoder;if(!this.writeType(e)||!i.skip(3))return!1;const s=i.getCurrentOffset(),n=this.writeFields(e);if(n){const n=i.getCurrentOffset()-s;if(n>16777215)return console.warn("OpenReplay: max message size overflow."),!1;this.writeSizeAt(n,s-3),i.checkpoint(),this.isEmpty=this.isEmpty&&e[0]===t.Timestamp,this.nextIndex++}return n}setBeaconSizeLimit(t){this.beaconSizeLimit=t}writeMessage(e){if(e[0]===t.Timestamp&&(this.timestamp=e[1]),e[0]===t.SetPageLocation&&(this.url=e[1]),!this.writeWithSize(e))for(this.finaliseBatch();!this.writeWithSize(e);){if(this.beaconSize===this.beaconSizeLimit)return console.warn("OpenReplay: beacon size overflow. Skipping large message.",e),this.encoder.reset(),void this.prepare();this.beaconSize=Math.min(2*this.beaconSize,this.beaconSizeLimit),this.encoder=new s(this.beaconSize),this.prepare()}}finaliseBatch(){this.isEmpty||(this.onBatch(this.encoder.flush()),this.prepare())}clean(){this.encoder.reset()}}var r;!function(t){t[t.NotActive=0]="NotActive",t[t.Starting=1]="Starting",t[t.Stopping=2]="Stopping",t[t.Active=3]="Active"}(r||(r={}));let h=null,a=null;function o(){a&&a.finaliseBatch()}function u(){r.Stopping,null!==d&&(clearInterval(d),d=null),a&&(a.clean(),a=null),r.NotActive}r.NotActive;let c,d=null;self.onmessage=({data:i})=>{if(null!=i){if("stop"===i)return o(),void u();if(Array.isArray(i)){if(!a)throw new Error("WebWorker: writer not initialised. Service Should be Started.");const e=a;i.forEach(i=>{i[0]===t.SetPageVisibility&&(i[1]?c=setTimeout(()=>self.postMessage("restart"),18e5):clearTimeout(c)),e.writeMessage(i)})}else{if("start"===i.type)return r.Starting,h=new e(i.ingestPoint,()=>{self.postMessage("restart")},()=>{h&&(h.clean(),h=null),u(),self.postMessage("failed")},i.connAttemptCount,i.connAttemptGap),a=new n(i.pageNo,i.timestamp,i.url,t=>h&&h.push(t)),null===d&&(d=setInterval(o,1e4)),r.Active;if("auth"===i.type){if(!h)throw new Error("WebWorker: sender not initialised. Received auth.");if(!a)throw new Error("WebWorker: writer not initialised. Received auth.");return h.authorise(i.token),void(i.beaconSizeLimit&&a.setBeaconSizeLimit(i.beaconSizeLimit))}}}else o()};'], { type: 'text/javascript' })));
79
77
  this.worker.onerror = (e) => {
80
78
  this._debug('webworker_error', e);
81
79
  };
@@ -132,7 +130,7 @@ class App {
132
130
  }
133
131
  commit() {
134
132
  if (this.worker && this.messages.length) {
135
- this.messages.unshift(new messages_js_1.Timestamp((0, utils_js_1.timestamp)()));
133
+ this.messages.unshift((0, messages_gen_js_1.Timestamp)((0, utils_js_1.timestamp)()));
136
134
  this.worker.postMessage(this.messages);
137
135
  this.commitCallbacks.forEach((cb) => cb(this.messages));
138
136
  this.messages.length = 0;
@@ -146,7 +144,7 @@ class App {
146
144
  }
147
145
  catch (e) {
148
146
  app._debug('safe_fn_call', e);
149
- // time: timestamp(),
147
+ // time: now(),
150
148
  // name: e.name,
151
149
  // message: e.message,
152
150
  // stack: e.stack
@@ -174,30 +172,32 @@ class App {
174
172
  const reqVer = version.split(/[.-]/);
175
173
  const ver = this.version.split(/[.-]/);
176
174
  for (let i = 0; i < 3; i++) {
177
- if (Number(ver[i]) < Number(reqVer[i]) || isNaN(Number(ver[i])) || isNaN(Number(reqVer[i]))) {
175
+ if (isNaN(Number(ver[i])) || isNaN(Number(reqVer[i]))) {
176
+ return false;
177
+ }
178
+ if (Number(ver[i]) > Number(reqVer[i])) {
179
+ return true;
180
+ }
181
+ if (Number(ver[i]) < Number(reqVer[i])) {
178
182
  return false;
179
183
  }
180
184
  }
181
185
  return true;
182
186
  }
183
- getStartInfo() {
187
+ getTrackerInfo() {
184
188
  return {
185
189
  userUUID: this.localStorage.getItem(this.options.local_uuid_key),
186
190
  projectKey: this.projectKey,
187
191
  revID: this.revID,
188
- timestamp: (0, utils_js_1.timestamp)(),
189
192
  trackerVersion: this.version,
190
193
  isSnippet: this.options.__is_snippet,
191
194
  };
192
195
  }
193
196
  getSessionInfo() {
194
- return Object.assign(Object.assign({}, this.session.getInfo()), this.getStartInfo());
197
+ return Object.assign(Object.assign({}, this.session.getInfo()), this.getTrackerInfo());
195
198
  }
196
199
  getSessionToken() {
197
- const token = this.sessionStorage.getItem(this.options.session_token_key);
198
- if (token !== null) {
199
- return token;
200
- }
200
+ return this.session.getSessionToken();
201
201
  }
202
202
  getSessionID() {
203
203
  return this.session.getInfo().sessionID || undefined;
@@ -214,7 +214,7 @@ class App {
214
214
  return this.options.resourceBaseHref;
215
215
  }
216
216
  else if (typeof this.options.resourceBaseHref === 'object') {
217
- //switch between types
217
+ //TODO: switch between types
218
218
  }
219
219
  if (document.baseURI) {
220
220
  return document.baseURI;
@@ -251,19 +251,13 @@ class App {
251
251
  return Promise.resolve(UnsuccessfulStart('OpenReplay: trying to call `start()` on the instance that has been started already.'));
252
252
  }
253
253
  this.activityState = ActivityState.Starting;
254
- let pageNo = 0;
255
- const pageNoStr = this.sessionStorage.getItem(this.options.session_pageno_key);
256
- if (pageNoStr != null) {
257
- pageNo = parseInt(pageNoStr);
258
- pageNo++;
259
- }
260
- this.sessionStorage.setItem(this.options.session_pageno_key, pageNo.toString());
261
- const startInfo = this.getStartInfo();
254
+ const timestamp = (0, utils_js_1.timestamp)();
262
255
  const startWorkerMsg = {
263
256
  type: 'start',
264
- pageNo,
257
+ pageNo: this.session.incPageNo(),
265
258
  ingestPoint: this.options.ingestPoint,
266
- timestamp: startInfo.timestamp,
259
+ timestamp,
260
+ url: document.URL,
267
261
  connAttemptCount: this.options.connAttemptCount,
268
262
  connAttemptGap: this.options.connAttemptGap,
269
263
  };
@@ -283,7 +277,7 @@ class App {
283
277
  headers: {
284
278
  'Content-Type': 'application/json',
285
279
  },
286
- body: JSON.stringify(Object.assign(Object.assign({}, startInfo), { userID: this.session.getInfo().userID, token: this.sessionStorage.getItem(this.options.session_token_key), deviceMemory: performance_js_1.deviceMemory,
280
+ body: JSON.stringify(Object.assign(Object.assign({}, this.getTrackerInfo()), { timestamp, userID: this.session.getInfo().userID, token: this.session.getSessionToken(), deviceMemory: performance_js_1.deviceMemory,
287
281
  jsHeapSizeLimit: performance_js_1.jsHeapSizeLimit, reset: startOpts.forceNew || sReset !== null })),
288
282
  })
289
283
  .then((r) => {
@@ -302,15 +296,18 @@ class App {
302
296
  if (!this.worker) {
303
297
  return Promise.reject('no worker found after start request (this might not happen)');
304
298
  }
305
- const { token, userUUID, sessionID, beaconSizeLimit } = r;
299
+ const { token, userUUID, sessionID, beaconSizeLimit, startTimestamp, // real startTS, derived from sessionID
300
+ } = r;
306
301
  if (typeof token !== 'string' ||
307
302
  typeof userUUID !== 'string' ||
303
+ //typeof startTimestamp !== 'number' ||
304
+ //typeof sessionID !== 'string' ||
308
305
  (typeof beaconSizeLimit !== 'number' && typeof beaconSizeLimit !== 'undefined')) {
309
306
  return Promise.reject(`Incorrect server response: ${JSON.stringify(r)}`);
310
307
  }
311
- this.sessionStorage.setItem(this.options.session_token_key, token);
308
+ this.session.setSessionToken(token);
312
309
  this.localStorage.setItem(this.options.local_uuid_key, userUUID);
313
- this.session.update({ sessionID }); // TODO: no no-explicit 'any'
310
+ this.session.update({ sessionID, timestamp: startTimestamp || timestamp }); // TODO: no no-explicit 'any'
314
311
  const startWorkerMsg = {
315
312
  type: 'auth',
316
313
  token,
@@ -330,8 +327,8 @@ class App {
330
327
  return SuccessfulStart(onStartInfo);
331
328
  })
332
329
  .catch((reason) => {
333
- this.sessionStorage.removeItem(this.options.session_token_key);
334
330
  this.stop();
331
+ this.session.reset();
335
332
  if (reason === CANCELED) {
336
333
  return UnsuccessfulStart(CANCELED);
337
334
  }
@@ -356,7 +353,7 @@ class App {
356
353
  });
357
354
  }
358
355
  }
359
- stop(calledFromAPI = false, restarting = false) {
356
+ stop(stopWorker = true) {
360
357
  if (this.activityState !== ActivityState.NotActive) {
361
358
  try {
362
359
  this.sanitizer.clear();
@@ -364,11 +361,8 @@ class App {
364
361
  this.nodes.clear();
365
362
  this.ticker.stop();
366
363
  this.stopCallbacks.forEach((cb) => cb());
367
- if (calledFromAPI) {
368
- this.session.reset();
369
- }
370
364
  this.notify.log('OpenReplay tracking stopped.');
371
- if (this.worker && !restarting) {
365
+ if (this.worker && stopWorker) {
372
366
  this.worker.postMessage('stop');
373
367
  }
374
368
  }
@@ -378,7 +372,7 @@ class App {
378
372
  }
379
373
  }
380
374
  restart() {
381
- this.stop(false, true);
375
+ this.stop(false);
382
376
  this.start({ forceNew: false });
383
377
  }
384
378
  }
@@ -0,0 +1,52 @@
1
+ import * as Messages from '../common/messages.gen.js';
2
+ export { default } from '../common/messages.gen.js';
3
+ export declare function BatchMetadata(version: number, pageNo: number, firstIndex: number, timestamp: number, location: string): Messages.BatchMetadata;
4
+ export declare function PartitionedMessage(partNo: number, partTotal: number): Messages.PartitionedMessage;
5
+ export declare function Timestamp(timestamp: number): Messages.Timestamp;
6
+ export declare function SetPageLocation(url: string, referrer: string, navigationStart: number): Messages.SetPageLocation;
7
+ export declare function SetViewportSize(width: number, height: number): Messages.SetViewportSize;
8
+ export declare function SetViewportScroll(x: number, y: number): Messages.SetViewportScroll;
9
+ export declare function CreateDocument(): Messages.CreateDocument;
10
+ export declare function CreateElementNode(id: number, parentID: number, index: number, tag: string, svg: boolean): Messages.CreateElementNode;
11
+ export declare function CreateTextNode(id: number, parentID: number, index: number): Messages.CreateTextNode;
12
+ export declare function MoveNode(id: number, parentID: number, index: number): Messages.MoveNode;
13
+ export declare function RemoveNode(id: number): Messages.RemoveNode;
14
+ export declare function SetNodeAttribute(id: number, name: string, value: string): Messages.SetNodeAttribute;
15
+ export declare function RemoveNodeAttribute(id: number, name: string): Messages.RemoveNodeAttribute;
16
+ export declare function SetNodeData(id: number, data: string): Messages.SetNodeData;
17
+ export declare function SetNodeScroll(id: number, x: number, y: number): Messages.SetNodeScroll;
18
+ export declare function SetInputTarget(id: number, label: string): Messages.SetInputTarget;
19
+ export declare function SetInputValue(id: number, value: string, mask: number): Messages.SetInputValue;
20
+ export declare function SetInputChecked(id: number, checked: boolean): Messages.SetInputChecked;
21
+ export declare function MouseMove(x: number, y: number): Messages.MouseMove;
22
+ export declare function ConsoleLog(level: string, value: string): Messages.ConsoleLog;
23
+ export declare function PageLoadTiming(requestStart: number, responseStart: number, responseEnd: number, domContentLoadedEventStart: number, domContentLoadedEventEnd: number, loadEventStart: number, loadEventEnd: number, firstPaint: number, firstContentfulPaint: number): Messages.PageLoadTiming;
24
+ export declare function PageRenderTiming(speedIndex: number, visuallyComplete: number, timeToInteractive: number): Messages.PageRenderTiming;
25
+ export declare function JSException(name: string, message: string, payload: string): Messages.JSException;
26
+ export declare function RawCustomEvent(name: string, payload: string): Messages.RawCustomEvent;
27
+ export declare function UserID(id: string): Messages.UserID;
28
+ export declare function UserAnonymousID(id: string): Messages.UserAnonymousID;
29
+ export declare function Metadata(key: string, value: string): Messages.Metadata;
30
+ export declare function CSSInsertRule(id: number, rule: string, index: number): Messages.CSSInsertRule;
31
+ export declare function CSSDeleteRule(id: number, index: number): Messages.CSSDeleteRule;
32
+ export declare function Fetch(method: string, url: string, request: string, response: string, status: number, timestamp: number, duration: number): Messages.Fetch;
33
+ export declare function Profiler(name: string, duration: number, args: string, result: string): Messages.Profiler;
34
+ export declare function OTable(key: string, value: string): Messages.OTable;
35
+ export declare function StateAction(type: string): Messages.StateAction;
36
+ export declare function Redux(action: string, state: string, duration: number): Messages.Redux;
37
+ export declare function Vuex(mutation: string, state: string): Messages.Vuex;
38
+ export declare function MobX(type: string, payload: string): Messages.MobX;
39
+ export declare function NgRx(action: string, state: string, duration: number): Messages.NgRx;
40
+ export declare function GraphQL(operationKind: string, operationName: string, variables: string, response: string): Messages.GraphQL;
41
+ export declare function PerformanceTrack(frames: number, ticks: number, totalJSHeapSize: number, usedJSHeapSize: number): Messages.PerformanceTrack;
42
+ export declare function ResourceTiming(timestamp: number, duration: number, ttfb: number, headerSize: number, encodedBodySize: number, decodedBodySize: number, url: string, initiator: string): Messages.ResourceTiming;
43
+ export declare function ConnectionInformation(downlink: number, type: string): Messages.ConnectionInformation;
44
+ export declare function SetPageVisibility(hidden: boolean): Messages.SetPageVisibility;
45
+ export declare function LongTask(timestamp: number, duration: number, context: number, containerType: number, containerSrc: string, containerId: string, containerName: string): Messages.LongTask;
46
+ export declare function SetNodeAttributeURLBased(id: number, name: string, value: string, baseURL: string): Messages.SetNodeAttributeURLBased;
47
+ export declare function SetCSSDataURLBased(id: number, data: string, baseURL: string): Messages.SetCSSDataURLBased;
48
+ export declare function TechnicalInfo(type: string, value: string): Messages.TechnicalInfo;
49
+ export declare function CustomIssue(name: string, payload: string): Messages.CustomIssue;
50
+ export declare function CSSInsertRuleURLBased(id: number, rule: string, index: number, baseURL: string): Messages.CSSInsertRuleURLBased;
51
+ export declare function MouseClick(id: number, hesitationTime: number, label: string, selector: string): Messages.MouseClick;
52
+ export declare function CreateIFrameDocument(frameID: number, id: number): Messages.CreateIFrameDocument;
@@ -0,0 +1,57 @@
1
+ import * as Messages from '../common/messages.gen.js';
2
+ export { default } from '../common/messages.gen.js';
3
+ export declare function BatchMetadata(version: number, pageNo: number, firstIndex: number, timestamp: number, location: string): Messages.BatchMetadata;
4
+ export declare function PartitionedMessage(partNo: number, partTotal: number): Messages.PartitionedMessage;
5
+ export declare function Timestamp(timestamp: number): Messages.Timestamp;
6
+ export declare function SetPageLocation(url: string, referrer: string, navigationStart: number): Messages.SetPageLocation;
7
+ export declare function SetViewportSize(width: number, height: number): Messages.SetViewportSize;
8
+ export declare function SetViewportScroll(x: number, y: number): Messages.SetViewportScroll;
9
+ export declare function CreateDocument(): Messages.CreateDocument;
10
+ export declare function CreateElementNode(id: number, parentID: number, index: number, tag: string, svg: boolean): Messages.CreateElementNode;
11
+ export declare function CreateTextNode(id: number, parentID: number, index: number): Messages.CreateTextNode;
12
+ export declare function MoveNode(id: number, parentID: number, index: number): Messages.MoveNode;
13
+ export declare function RemoveNode(id: number): Messages.RemoveNode;
14
+ export declare function SetNodeAttribute(id: number, name: string, value: string): Messages.SetNodeAttribute;
15
+ export declare function RemoveNodeAttribute(id: number, name: string): Messages.RemoveNodeAttribute;
16
+ export declare function SetNodeData(id: number, data: string): Messages.SetNodeData;
17
+ export declare function SetNodeScroll(id: number, x: number, y: number): Messages.SetNodeScroll;
18
+ export declare function SetInputTarget(id: number, label: string): Messages.SetInputTarget;
19
+ export declare function SetInputValue(id: number, value: string, mask: number): Messages.SetInputValue;
20
+ export declare function SetInputChecked(id: number, checked: boolean): Messages.SetInputChecked;
21
+ export declare function MouseMove(x: number, y: number): Messages.MouseMove;
22
+ export declare function ConsoleLog(level: string, value: string): Messages.ConsoleLog;
23
+ export declare function PageLoadTiming(requestStart: number, responseStart: number, responseEnd: number, domContentLoadedEventStart: number, domContentLoadedEventEnd: number, loadEventStart: number, loadEventEnd: number, firstPaint: number, firstContentfulPaint: number): Messages.PageLoadTiming;
24
+ export declare function PageRenderTiming(speedIndex: number, visuallyComplete: number, timeToInteractive: number): Messages.PageRenderTiming;
25
+ export declare function JSException(name: string, message: string, payload: string): Messages.JSException;
26
+ export declare function RawCustomEvent(name: string, payload: string): Messages.RawCustomEvent;
27
+ export declare function UserID(id: string): Messages.UserID;
28
+ export declare function UserAnonymousID(id: string): Messages.UserAnonymousID;
29
+ export declare function Metadata(key: string, value: string): Messages.Metadata;
30
+ export declare function CSSInsertRule(id: number, rule: string, index: number): Messages.CSSInsertRule;
31
+ export declare function CSSDeleteRule(id: number, index: number): Messages.CSSDeleteRule;
32
+ export declare function Fetch(method: string, url: string, request: string, response: string, status: number, timestamp: number, duration: number): Messages.Fetch;
33
+ export declare function Profiler(name: string, duration: number, args: string, result: string): Messages.Profiler;
34
+ export declare function OTable(key: string, value: string): Messages.OTable;
35
+ export declare function StateAction(type: string): Messages.StateAction;
36
+ export declare function Redux(action: string, state: string, duration: number): Messages.Redux;
37
+ export declare function Vuex(mutation: string, state: string): Messages.Vuex;
38
+ export declare function MobX(type: string, payload: string): Messages.MobX;
39
+ export declare function NgRx(action: string, state: string, duration: number): Messages.NgRx;
40
+ export declare function GraphQL(operationKind: string, operationName: string, variables: string, response: string): Messages.GraphQL;
41
+ export declare function PerformanceTrack(frames: number, ticks: number, totalJSHeapSize: number, usedJSHeapSize: number): Messages.PerformanceTrack;
42
+ export declare function ResourceTiming(timestamp: number, duration: number, ttfb: number, headerSize: number, encodedBodySize: number, decodedBodySize: number, url: string, initiator: string): Messages.ResourceTiming;
43
+ export declare function ConnectionInformation(downlink: number, type: string): Messages.ConnectionInformation;
44
+ export declare function SetPageVisibility(hidden: boolean): Messages.SetPageVisibility;
45
+ export declare function LongTask(timestamp: number, duration: number, context: number, containerType: number, containerSrc: string, containerId: string, containerName: string): Messages.LongTask;
46
+ export declare function SetNodeAttributeURLBased(id: number, name: string, value: string, baseURL: string): Messages.SetNodeAttributeURLBased;
47
+ export declare function SetCSSDataURLBased(id: number, data: string, baseURL: string): Messages.SetCSSDataURLBased;
48
+ export declare function TechnicalInfo(type: string, value: string): Messages.TechnicalInfo;
49
+ export declare function CustomIssue(name: string, payload: string): Messages.CustomIssue;
50
+ export declare function CSSInsertRuleURLBased(id: number, rule: string, index: number, baseURL: string): Messages.CSSInsertRuleURLBased;
51
+ export declare function MouseClick(id: number, hesitationTime: number, label: string, selector: string): Messages.MouseClick;
52
+ export declare function CreateIFrameDocument(frameID: number, id: number): Messages.CreateIFrameDocument;
53
+ export declare function AdoptedSSReplaceURLBased(sheetID: number, text: string, baseURL: string): Messages.AdoptedSSReplaceURLBased;
54
+ export declare function AdoptedSSInsertRuleURLBased(sheetID: number, rule: string, index: number, baseURL: string): Messages.AdoptedSSInsertRuleURLBased;
55
+ export declare function AdoptedSSDeleteRule(sheetID: number, index: number): Messages.AdoptedSSDeleteRule;
56
+ export declare function AdoptedSSAddOwner(sheetID: number, id: number): Messages.AdoptedSSAddOwner;
57
+ export declare function AdoptedSSRemoveOwner(sheetID: number, id: number): Messages.AdoptedSSRemoveOwner;