@openreplay/tracker 16.0.2-beta.1 → 16.0.3-beta-1

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 (39) hide show
  1. package/dist/cjs/common/interaction.d.ts +2 -2
  2. package/dist/cjs/common/messages.gen.d.ts +1 -44
  3. package/dist/cjs/entry.js +9828 -0
  4. package/dist/cjs/entry.js.map +1 -0
  5. package/dist/cjs/index.js +88 -116
  6. package/dist/cjs/index.js.map +1 -1
  7. package/dist/cjs/main/app/index.d.ts +0 -5
  8. package/dist/cjs/main/app/messages.gen.d.ts +0 -5
  9. package/dist/cjs/main/app/observer/observer.d.ts +5 -1
  10. package/dist/cjs/main/app/observer/top_observer.d.ts +1 -0
  11. package/dist/cjs/main/app/ticker.d.ts +0 -4
  12. package/dist/cjs/main/entry.d.ts +5 -0
  13. package/dist/cjs/main/index.d.ts +3 -3
  14. package/dist/cjs/main/singleton.d.ts +108 -0
  15. package/dist/lib/common/interaction.d.ts +2 -2
  16. package/dist/lib/common/messages.gen.d.ts +1 -44
  17. package/dist/lib/entry.js +9821 -0
  18. package/dist/lib/entry.js.map +1 -0
  19. package/dist/lib/index.js +88 -116
  20. package/dist/lib/index.js.map +1 -1
  21. package/dist/lib/main/app/index.d.ts +0 -5
  22. package/dist/lib/main/app/messages.gen.d.ts +0 -5
  23. package/dist/lib/main/app/observer/observer.d.ts +5 -1
  24. package/dist/lib/main/app/observer/top_observer.d.ts +1 -0
  25. package/dist/lib/main/app/ticker.d.ts +0 -4
  26. package/dist/lib/main/entry.d.ts +5 -0
  27. package/dist/lib/main/index.d.ts +3 -3
  28. package/dist/lib/main/singleton.d.ts +108 -0
  29. package/dist/types/common/interaction.d.ts +2 -2
  30. package/dist/types/common/messages.gen.d.ts +1 -44
  31. package/dist/types/main/app/index.d.ts +0 -5
  32. package/dist/types/main/app/messages.gen.d.ts +0 -5
  33. package/dist/types/main/app/observer/observer.d.ts +5 -1
  34. package/dist/types/main/app/observer/top_observer.d.ts +1 -0
  35. package/dist/types/main/app/ticker.d.ts +0 -4
  36. package/dist/types/main/entry.d.ts +5 -0
  37. package/dist/types/main/index.d.ts +3 -3
  38. package/dist/types/main/singleton.d.ts +108 -0
  39. package/package.json +11 -6
package/dist/cjs/index.js CHANGED
@@ -725,7 +725,9 @@ class StringDictionary {
725
725
  this.backDict = {};
726
726
  this.getKey = (str) => {
727
727
  let isNew = false;
728
- if (!this.backDict[str]) {
728
+ // avoiding potential native object properties
729
+ const safeKey = `__${str}`;
730
+ if (!this.backDict[safeKey]) {
729
731
  isNew = true;
730
732
  // shaving the first 2 digits of the timestamp (since they are irrelevant for next millennia)
731
733
  const shavedTs = Date.now() % 10 ** (13 - 2);
@@ -737,10 +739,10 @@ class StringDictionary {
737
739
  else {
738
740
  this.lastSuffix = 1;
739
741
  }
740
- this.backDict[str] = id;
742
+ this.backDict[safeKey] = id;
741
743
  this.lastTs = shavedTs;
742
744
  }
743
- return [this.backDict[str], isNew];
745
+ return [this.backDict[safeKey], isNew];
744
746
  };
745
747
  }
746
748
  }
@@ -1677,33 +1679,6 @@ function SetNodeAttributeDictGlobal(id, name, value) {
1677
1679
  value,
1678
1680
  ];
1679
1681
  }
1680
- function CSSInsertRule(id, rule, index) {
1681
- return [
1682
- 37 /* Messages.Type.CSSInsertRule */,
1683
- id,
1684
- rule,
1685
- index,
1686
- ];
1687
- }
1688
- function CSSDeleteRule(id, index) {
1689
- return [
1690
- 38 /* Messages.Type.CSSDeleteRule */,
1691
- id,
1692
- index,
1693
- ];
1694
- }
1695
- function Fetch(method, url, request, response, status, timestamp, duration) {
1696
- return [
1697
- 39 /* Messages.Type.Fetch */,
1698
- method,
1699
- url,
1700
- request,
1701
- response,
1702
- status,
1703
- timestamp,
1704
- duration,
1705
- ];
1706
- }
1707
1682
  function Profiler(name, duration, args, result) {
1708
1683
  return [
1709
1684
  40 /* Messages.Type.Profiler */,
@@ -1846,18 +1821,6 @@ function SetNodeFocus(id) {
1846
1821
  id,
1847
1822
  ];
1848
1823
  }
1849
- function LongTask(timestamp, duration, context, containerType, containerSrc, containerId, containerName) {
1850
- return [
1851
- 59 /* Messages.Type.LongTask */,
1852
- timestamp,
1853
- duration,
1854
- context,
1855
- containerType,
1856
- containerSrc,
1857
- containerId,
1858
- containerName,
1859
- ];
1860
- }
1861
1824
  function SetNodeAttributeURLBased(id, name, value, baseURL) {
1862
1825
  return [
1863
1826
  60 /* Messages.Type.SetNodeAttributeURLBased */,
@@ -1889,15 +1852,6 @@ function CustomIssue(name, payload) {
1889
1852
  payload,
1890
1853
  ];
1891
1854
  }
1892
- function CSSInsertRuleURLBased(id, rule, index, baseURL) {
1893
- return [
1894
- 67 /* Messages.Type.CSSInsertRuleURLBased */,
1895
- id,
1896
- rule,
1897
- index,
1898
- baseURL,
1899
- ];
1900
- }
1901
1855
  function MouseClick(id, hesitationTime, label, selector, normalizedX, normalizedY) {
1902
1856
  return [
1903
1857
  68 /* Messages.Type.MouseClick */,
@@ -2136,9 +2090,6 @@ var _Messages = /*#__PURE__*/Object.freeze({
2136
2090
  AdoptedSSRemoveOwner: AdoptedSSRemoveOwner,
2137
2091
  AdoptedSSReplaceURLBased: AdoptedSSReplaceURLBased,
2138
2092
  BatchMetadata: BatchMetadata,
2139
- CSSDeleteRule: CSSDeleteRule,
2140
- CSSInsertRule: CSSInsertRule,
2141
- CSSInsertRuleURLBased: CSSInsertRuleURLBased,
2142
2093
  CanvasNode: CanvasNode,
2143
2094
  ConnectionInformation: ConnectionInformation,
2144
2095
  ConsoleLog: ConsoleLog,
@@ -2148,13 +2099,11 @@ var _Messages = /*#__PURE__*/Object.freeze({
2148
2099
  CreateTextNode: CreateTextNode,
2149
2100
  CustomEvent: CustomEvent,
2150
2101
  CustomIssue: CustomIssue,
2151
- Fetch: Fetch,
2152
2102
  GraphQL: GraphQL,
2153
2103
  GraphQLDeprecated: GraphQLDeprecated,
2154
2104
  InputChange: InputChange,
2155
2105
  JSException: JSException,
2156
2106
  LoadFontFace: LoadFontFace,
2157
- LongTask: LongTask,
2158
2107
  Metadata: Metadata,
2159
2108
  MobX: MobX,
2160
2109
  MouseClick: MouseClick,
@@ -2592,9 +2541,7 @@ const spinnerStyles = {
2592
2541
  };
2593
2542
 
2594
2543
  const Quality = {
2595
- Standard: { width: 1280, height: 720 },
2596
- High: { width: 1920, height: 1080 },
2597
- };
2544
+ Standard: { width: 1280, height: 720 }};
2598
2545
  class Recorder {
2599
2546
  constructor(app) {
2600
2547
  this.app = app;
@@ -3756,29 +3703,76 @@ class Nodes {
3756
3703
  }
3757
3704
 
3758
3705
  const iconCache = {};
3759
- const domParser = new DOMParser();
3760
- async function parseUseEl(useElement, mode) {
3706
+ const svgUrlCache = {};
3707
+ async function parseUseEl(useElement, mode, domParser) {
3761
3708
  try {
3762
3709
  const href = useElement.getAttribute('xlink:href') || useElement.getAttribute('href');
3763
3710
  if (!href) {
3764
3711
  console.debug('Openreplay: xlink:href or href not found on <use>.');
3765
3712
  return;
3766
3713
  }
3767
- const [url, symbolId] = href.split('#');
3768
- if (!url || !symbolId) {
3769
- console.debug('Openreplay: Invalid xlink:href or href found on <use>.');
3714
+ let [url, symbolId] = href.split('#');
3715
+ // happens if svg spritemap is local, fastest case for us
3716
+ if (!url && symbolId) {
3717
+ const symbol = document.querySelector(href);
3718
+ if (symbol) {
3719
+ const inlineSvg = `
3720
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="${symbol.getAttribute('viewBox') || '0 0 24 24'}">
3721
+ ${symbol.innerHTML}
3722
+ </svg>
3723
+ `.trim();
3724
+ iconCache[symbolId] = inlineSvg;
3725
+ return inlineSvg;
3726
+ }
3727
+ else {
3728
+ console.warn('Openreplay: Sprite symbol not found in the document.');
3729
+ return;
3730
+ }
3731
+ }
3732
+ if (!url && !symbolId) {
3733
+ console.warn('Openreplay: Invalid xlink:href or href found on <use>.');
3770
3734
  return;
3771
3735
  }
3772
3736
  if (iconCache[symbolId]) {
3773
3737
  return iconCache[symbolId];
3774
3738
  }
3775
- const response = await fetch(url);
3776
- const svgText = await response.text();
3777
- const svgDoc = domParser.parseFromString(svgText, 'image/svg+xml');
3739
+ let svgDoc;
3740
+ if (svgUrlCache[url]) {
3741
+ if (svgUrlCache[url] === 1) {
3742
+ await new Promise((resolve) => {
3743
+ let tries = 0;
3744
+ const interval = setInterval(() => {
3745
+ if (tries > 100) {
3746
+ clearInterval(interval);
3747
+ resolve(false);
3748
+ }
3749
+ if (svgUrlCache[url] !== 1) {
3750
+ svgDoc = svgUrlCache[url];
3751
+ clearInterval(interval);
3752
+ resolve(true);
3753
+ }
3754
+ else {
3755
+ tries++;
3756
+ }
3757
+ }, 100);
3758
+ });
3759
+ }
3760
+ else {
3761
+ svgDoc = svgUrlCache[url] ?? `<svg xmlns="http://www.w3.org/2000/svg"></svg>`;
3762
+ }
3763
+ }
3764
+ else {
3765
+ svgUrlCache[url] = 1;
3766
+ const response = await fetch(url);
3767
+ const svgText = await response.text();
3768
+ svgDoc = domParser.parseFromString(svgText, 'image/svg+xml');
3769
+ svgUrlCache[url] = svgDoc;
3770
+ }
3771
+ // @ts-ignore
3778
3772
  const symbol = svgDoc.getElementById(symbolId);
3779
3773
  if (!symbol) {
3780
3774
  console.debug('Openreplay: Symbol not found in SVG.');
3781
- return;
3775
+ return '';
3782
3776
  }
3783
3777
  if (mode === 'inline') ;
3784
3778
  if (mode === 'svgtext') {
@@ -3833,7 +3827,7 @@ var RecentsType;
3833
3827
  RecentsType[RecentsType["Changed"] = 2] = "Changed";
3834
3828
  })(RecentsType || (RecentsType = {}));
3835
3829
  class Observer {
3836
- constructor(app, isTopContext = false) {
3830
+ constructor(app, isTopContext = false, options = { disableSprites: false }) {
3837
3831
  this.app = app;
3838
3832
  this.isTopContext = isTopContext;
3839
3833
  this.commited = [];
@@ -3841,6 +3835,9 @@ class Observer {
3841
3835
  this.indexes = [];
3842
3836
  this.attributesMap = new Map();
3843
3837
  this.textSet = new Set();
3838
+ this.disableSprites = false;
3839
+ this.domParser = new DOMParser();
3840
+ this.disableSprites = options.disableSprites;
3844
3841
  this.observer = createMutationObserver(this.app.safe((mutations) => {
3845
3842
  for (const mutation of mutations) {
3846
3843
  // mutations order is sequential
@@ -3935,8 +3932,8 @@ class Observer {
3935
3932
  if (value === null) {
3936
3933
  this.app.send(RemoveNodeAttribute(id, name));
3937
3934
  }
3938
- if (isUseElement(node) && name === 'href') {
3939
- parseUseEl(node, 'svgtext')
3935
+ if (isUseElement(node) && name === 'href' && !this.disableSprites) {
3936
+ parseUseEl(node, 'svgtext', this.domParser)
3940
3937
  .then((svgData) => {
3941
3938
  if (svgData) {
3942
3939
  this.app.send(SetNodeAttribute(id, name, `_$OPENREPLAY_SPRITE$_${svgData}`));
@@ -4289,7 +4286,11 @@ class IFrameOffsets {
4289
4286
  const attachShadowNativeFn = IN_BROWSER ? Element.prototype.attachShadow : () => new ShadowRoot();
4290
4287
  class TopObserver extends Observer {
4291
4288
  constructor(params) {
4292
- super(params.app, true);
4289
+ const opts = Object.assign({
4290
+ captureIFrames: true,
4291
+ disableSprites: false,
4292
+ }, params.options);
4293
+ super(params.app, true, opts);
4293
4294
  this.iframeOffsets = new IFrameOffsets();
4294
4295
  this.contextCallbacks = [];
4295
4296
  // Attached once per Tracker instance
@@ -4299,9 +4300,7 @@ class TopObserver extends Observer {
4299
4300
  this.docObservers = new WeakMap();
4300
4301
  this.shadowRootObservers = new WeakMap();
4301
4302
  this.app = params.app;
4302
- this.options = Object.assign({
4303
- captureIFrames: true,
4304
- }, params.options);
4303
+ this.options = opts;
4305
4304
  // IFrames
4306
4305
  this.app.nodes.attachNodeCallback((node) => {
4307
4306
  if (hasTag(node, 'iframe') &&
@@ -4635,10 +4634,6 @@ function wrap(callback, n) {
4635
4634
  }
4636
4635
  };
4637
4636
  }
4638
- /**
4639
- * Takes a callback and n as number of turn skips
4640
- * Every tick is 30ms, so attach(cb, 3) will call cb every 90ms
4641
- * */
4642
4637
  class Ticker {
4643
4638
  constructor(app) {
4644
4639
  this.app = app;
@@ -4680,7 +4675,7 @@ class Ticker {
4680
4675
  * this value is injected during build time via rollup
4681
4676
  * */
4682
4677
  // @ts-ignore
4683
- const workerBodyFn = "!function(){\"use strict\";class t{constructor(t,s,i,e=10,n=250,h,r){this.onUnauthorised=s,this.onFailure=i,this.MAX_ATTEMPTS_COUNT=e,this.ATTEMPT_TIMEOUT=n,this.onCompress=h,this.pageNo=r,this.attemptsCount=0,this.busy=!1,this.queue=[],this.token=null,this.lastBatchNum=0,this.ingestURL=t+\"/v1/web/i\",this.isCompressing=void 0!==h}getQueueStatus(){return 0===this.queue.length&&!this.busy}authorise(t){this.token=t,this.busy||this.sendNext()}push(t){if(this.busy||!this.token)this.queue.push(t);else if(this.busy=!0,this.isCompressing&&this.onCompress)this.onCompress(t);else{const s=++this.lastBatchNum;this.sendBatch(t,!1,s)}}sendNext(){const t=this.queue.shift();if(t)if(this.busy=!0,this.isCompressing&&this.onCompress)this.onCompress(t);else{const s=++this.lastBatchNum;this.sendBatch(t,!1,s)}else this.busy=!1}retry(t,s,i){this.attemptsCount>=this.MAX_ATTEMPTS_COUNT?this.onFailure(`Failed to send batch after ${this.attemptsCount} attempts.`):(this.attemptsCount++,setTimeout((()=>this.sendBatch(t,s,i)),this.ATTEMPT_TIMEOUT*this.attemptsCount))}sendBatch(t,s,i){var e;const n=null==i?void 0:i.toString().replace(/^([^_]+)_([^_]+).*/,\"$1_$2_$3\");this.busy=!0;const h={Authorization:`Bearer ${this.token}`};if(s&&(h[\"Content-Encoding\"]=\"gzip\"),null===this.token)return void setTimeout((()=>{this.sendBatch(t,s,`${null!=i?i:\"noBatchNum\"}_newToken`)}),500);const r=new AbortController,a=setTimeout((()=>{r.abort()}),3e4);fetch(`${this.ingestURL}?batch=${null!==(e=this.pageNo)&&void 0!==e?e:\"noPageNum\"}_${null!=n?n:\"noBatchNum\"}`,{body:t,method:\"POST\",headers:h,keepalive:t.length<65536,signal:r.signal}).then((e=>{if(clearTimeout(a),401===e.status)return this.busy=!1,void this.onUnauthorised();e.status>=400?this.retry(t,s,`${null!=i?i:\"noBatchNum\"}_network:${e.status}`):(this.attemptsCount=0,this.sendNext())})).catch((e=>{clearTimeout(a),console.warn(\"OpenReplay:\",e),this.retry(t,s,`${null!=i?i:\"noBatchNum\"}_reject:${e.message}`)}))}sendCompressed(t){const s=++this.lastBatchNum;this.sendBatch(t,!0,s)}sendUncompressed(t){const s=++this.lastBatchNum;this.sendBatch(t,!1,s)}clean(){this.sendNext(),setTimeout((()=>{this.token=null,this.queue.length=0}),10)}}const s=\"function\"==typeof TextEncoder?new TextEncoder:{encode(t){const s=t.length,i=new Uint8Array(3*s);let e=-1;for(let n=0,h=0,r=0;r!==s;){if(n=t.charCodeAt(r),r+=1,n>=55296&&n<=56319){if(r===s){i[e+=1]=239,i[e+=1]=191,i[e+=1]=189;break}if(h=t.charCodeAt(r),!(h>=56320&&h<=57343)){i[e+=1]=239,i[e+=1]=191,i[e+=1]=189;continue}if(n=1024*(n-55296)+h-56320+65536,r+=1,n>65535){i[e+=1]=240|n>>>18,i[e+=1]=128|n>>>12&63,i[e+=1]=128|n>>>6&63,i[e+=1]=128|63&n;continue}}n<=127?i[e+=1]=0|n:n<=2047?(i[e+=1]=192|n>>>6,i[e+=1]=128|63&n):(i[e+=1]=224|n>>>12,i[e+=1]=128|n>>>6&63,i[e+=1]=128|63&n)}return i.subarray(0,e+1)}};class i{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}get isEmpty(){return 0===this.offset}skip(t){return this.offset+=t,this.offset<=this.size}set(t,s){this.data.set(t,s)}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=s.encode(t),e=i.byteLength;return!(!this.uint(e)||this.offset+e>this.size)&&(this.data.set(i,this.offset),this.offset+=e,!0)}reset(){this.offset=0,this.checkpointOffset=0}flush(){const t=this.data.slice(0,this.checkpointOffset);return this.reset(),t}}class e extends i{encode(t){switch(t[0]){case 0:case 11:case 114:case 115:return this.uint(t[1]);case 4:case 44:case 47:return this.string(t[1])&&this.string(t[2])&&this.uint(t[3]);case 5:case 20:case 38:case 70:case 75:case 76:case 77:case 82:return this.uint(t[1])&&this.uint(t[2]);case 6:return this.int(t[1])&&this.int(t[2]);case 7:return!0;case 8:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3])&&this.string(t[4])&&this.boolean(t[5]);case 9:case 10:case 24:case 35:case 51:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3]);case 12:case 52:case 61:case 71:return this.uint(t[1])&&this.string(t[2])&&this.string(t[3]);case 13:case 14:case 17:case 34:case 50:case 54:return this.uint(t[1])&&this.string(t[2]);case 16:return this.uint(t[1])&&this.int(t[2])&&this.int(t[3]);case 18:return this.uint(t[1])&&this.string(t[2])&&this.int(t[3]);case 19:return this.uint(t[1])&&this.boolean(t[2]);case 21:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4])&&this.string(t[5])&&this.uint(t[6])&&this.uint(t[7])&&this.uint(t[8]);case 22:case 27:case 30:case 41:case 45:case 46:case 43:case 63:case 64:case 79:case 124:return this.string(t[1])&&this.string(t[2]);case 23:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3])&&this.uint(t[4])&&this.uint(t[5])&&this.uint(t[6])&&this.uint(t[7])&&this.uint(t[8])&&this.uint(t[9]);case 28:case 29:case 42:case 117:case 118:return this.string(t[1]);case 37:return this.uint(t[1])&&this.string(t[2])&&this.uint(t[3]);case 39:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4])&&this.uint(t[5])&&this.uint(t[6])&&this.uint(t[7]);case 40:return this.string(t[1])&&this.uint(t[2])&&this.string(t[3])&&this.string(t[4]);case 48:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4])&&this.int(t[5]);case 49:return this.int(t[1])&&this.int(t[2])&&this.uint(t[3])&&this.uint(t[4]);case 53:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3])&&this.uint(t[4])&&this.uint(t[5])&&this.uint(t[6])&&this.string(t[7])&&this.string(t[8]);case 55:return this.boolean(t[1]);case 57:case 60:return this.uint(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4]);case 58:case 120:return this.int(t[1]);case 59:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3])&&this.uint(t[4])&&this.string(t[5])&&this.string(t[6])&&this.string(t[7]);case 67:case 73:return this.uint(t[1])&&this.string(t[2])&&this.uint(t[3])&&this.string(t[4]);case 68:return this.uint(t[1])&&this.uint(t[2])&&this.string(t[3])&&this.string(t[4])&&this.uint(t[5])&&this.uint(t[6]);case 69:return this.uint(t[1])&&this.uint(t[2])&&this.string(t[3])&&this.string(t[4]);case 78:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4]);case 81:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3])&&this.int(t[4])&&this.string(t[5]);case 83:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4])&&this.string(t[5])&&this.uint(t[6])&&this.uint(t[7])&&this.uint(t[8])&&this.uint(t[9]);case 84:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.uint(t[4])&&this.string(t[5])&&this.string(t[6]);case 112:return this.uint(t[1])&&this.string(t[2])&&this.boolean(t[3])&&this.string(t[4])&&this.int(t[5])&&this.int(t[6]);case 113:return this.uint(t[1])&&this.uint(t[2])&&this.string(t[3]);case 116:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3])&&this.uint(t[4])&&this.uint(t[5])&&this.uint(t[6])&&this.string(t[7])&&this.string(t[8])&&this.uint(t[9])&&this.boolean(t[10]);case 119:return this.string(t[1])&&this.uint(t[2]);case 121:return this.string(t[1])&&this.string(t[2])&&this.uint(t[3])&&this.uint(t[4]);case 122:return this.string(t[1])&&this.string(t[2])&&this.uint(t[3])&&this.string(t[4]);case 123:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4])&&this.uint(t[5])}}}class n{constructor(t,s,i,n,h,r){this.pageNo=t,this.timestamp=s,this.url=i,this.onBatch=n,this.tabId=h,this.onOfflineEnd=r,this.nextIndex=0,this.beaconSize=2e5,this.encoder=new e(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,s){for(let s=0;s<3;s++)this.sizeBuffer[s]=t>>8*s;this.encoder.set(this.sizeBuffer,s)}prepare(){if(!this.encoder.isEmpty)return;const t=[81,1,this.pageNo,this.nextIndex,this.timestamp,this.url],s=[118,this.tabId];this.writeType(t),this.writeFields(t),this.writeWithSize(s),this.isEmpty=!0}writeWithSize(t){const s=this.encoder;if(!this.writeType(t)||!s.skip(3))return!1;const i=s.getCurrentOffset(),e=this.writeFields(t);if(e){const e=s.getCurrentOffset()-i;if(e>16777215)return console.warn(\"OpenReplay: max message size overflow.\"),!1;this.writeSizeAt(e,i-3),s.checkpoint(),this.isEmpty=this.isEmpty&&0===t[0],this.nextIndex++}return e}setBeaconSizeLimit(t){this.beaconSizeLimit=t}writeMessage(t){if(\"q_end\"===t[0])return this.finaliseBatch(),this.onOfflineEnd();0===t[0]&&(this.timestamp=t[1]),122===t[0]&&(this.url=t[1]),this.writeWithSize(t)||(this.finaliseBatch(),this.writeWithSize(t)||(this.encoder=new e(this.beaconSizeLimit),this.prepare(),this.writeWithSize(t)?this.finaliseBatch():console.warn(\"OpenReplay: beacon size overflow. Skipping large message.\",t,this),this.encoder=new e(this.beaconSize),this.prepare()))}finaliseBatch(){if(this.isEmpty)return;const t=this.encoder.flush();this.onBatch(t),this.prepare()}clean(){this.encoder.reset()}}var h;!function(t){t[t.NotActive=0]=\"NotActive\",t[t.Starting=1]=\"Starting\",t[t.Stopping=2]=\"Stopping\",t[t.Active=3]=\"Active\",t[t.Stopped=4]=\"Stopped\"}(h||(h={}));let r=null,a=null,u=h.NotActive;function o(){a&&a.finaliseBatch()}function c(){return new Promise((t=>{u=h.Stopping,null!==p&&(clearInterval(p),p=null),a&&(a.clean(),a=null),r&&(r.clean(),setTimeout((()=>{r=null}),20)),setTimeout((()=>{u=h.NotActive,t(null)}),100)}))}function l(){[h.Stopped,h.Stopping].includes(u)||(postMessage(\"a_stop\"),c().then((()=>{postMessage(\"a_start\")})))}let g,p=null;self.onmessage=({data:s})=>{if(null!=s)if(\"heartbeat_q\"!==s){if(\"stop\"===s)return o(),void c().then((()=>{u=h.Stopped}));if(\"forceFlushBatch\"!==s){if(!Array.isArray(s)){if(\"compressed\"===s.type){if(!r)return console.debug(\"OR WebWorker: sender not initialised. Compressed batch.\"),void l();s.batch&&r.sendCompressed(s.batch)}if(\"uncompressed\"===s.type){if(!r)return console.debug(\"OR WebWorker: sender not initialised. Uncompressed batch.\"),void l();s.batch&&r.sendUncompressed(s.batch)}return\"start\"===s.type?(u=h.Starting,r=new t(s.ingestPoint,(()=>{l()}),(t=>{!function(t){postMessage({type:\"failure\",reason:t}),c()}(t)}),s.connAttemptCount,s.connAttemptGap,(t=>{postMessage({type:\"compress\",batch:t},[t.buffer])}),s.pageNo),a=new n(s.pageNo,s.timestamp,s.url,(t=>{r&&r.push(t)}),s.tabId,(()=>postMessage({type:\"queue_empty\"}))),null===p&&(p=setInterval(o,1e4)),u=h.Active):\"auth\"===s.type?r?a?(r.authorise(s.token),void(s.beaconSizeLimit&&a.setBeaconSizeLimit(s.beaconSizeLimit))):(console.debug(\"OR WebWorker: writer not initialised. Received auth.\"),void l()):(console.debug(\"OR WebWorker: sender not initialised. Received auth.\"),void l()):void 0}if(a){const t=a;s.forEach((s=>{55===s[0]&&(s[1]?g=setTimeout((()=>l()),18e5):clearTimeout(g)),t.writeMessage(s)}))}else postMessage(\"not_init\"),l()}else o()}else setTimeout((()=>{postMessage(\"heartbeat_a\")}),50);else o()}}();\n";
4678
+ const workerBodyFn = "!function(){\"use strict\";class t{constructor(t,s,i,e=10,n=250,h,r){this.onUnauthorised=s,this.onFailure=i,this.MAX_ATTEMPTS_COUNT=e,this.ATTEMPT_TIMEOUT=n,this.onCompress=h,this.pageNo=r,this.attemptsCount=0,this.busy=!1,this.queue=[],this.token=null,this.lastBatchNum=0,this.ingestURL=t+\"/v1/web/i\",this.isCompressing=void 0!==h}getQueueStatus(){return 0===this.queue.length&&!this.busy}authorise(t){this.token=t,this.busy||this.sendNext()}push(t){if(this.busy||!this.token)this.queue.push(t);else if(this.busy=!0,this.isCompressing&&this.onCompress)this.onCompress(t);else{const s=++this.lastBatchNum;this.sendBatch(t,!1,s)}}sendNext(){const t=this.queue.shift();if(t)if(this.busy=!0,this.isCompressing&&this.onCompress)this.onCompress(t);else{const s=++this.lastBatchNum;this.sendBatch(t,!1,s)}else this.busy=!1}retry(t,s,i){this.attemptsCount>=this.MAX_ATTEMPTS_COUNT?this.onFailure(`Failed to send batch after ${this.attemptsCount} attempts.`):(this.attemptsCount++,setTimeout((()=>this.sendBatch(t,s,i)),this.ATTEMPT_TIMEOUT*this.attemptsCount))}sendBatch(t,s,i){var e;const n=null==i?void 0:i.toString().replace(/^([^_]+)_([^_]+).*/,\"$1_$2_$3\");this.busy=!0;const h={Authorization:`Bearer ${this.token}`};s&&(h[\"Content-Encoding\"]=\"gzip\"),null!==this.token?fetch(`${this.ingestURL}?batch=${null!==(e=this.pageNo)&&void 0!==e?e:\"noPageNum\"}_${null!=n?n:\"noBatchNum\"}`,{body:t,method:\"POST\",headers:h,keepalive:t.length<65536}).then((e=>{if(401===e.status)return this.busy=!1,void this.onUnauthorised();e.status>=400?this.retry(t,s,`${null!=i?i:\"noBatchNum\"}_network:${e.status}`):(this.attemptsCount=0,this.sendNext())})).catch((e=>{console.warn(\"OpenReplay:\",e),this.retry(t,s,`${null!=i?i:\"noBatchNum\"}_reject:${e.message}`)})):setTimeout((()=>{this.sendBatch(t,s,`${null!=i?i:\"noBatchNum\"}_newToken`)}),500)}sendCompressed(t){const s=++this.lastBatchNum;this.sendBatch(t,!0,s)}sendUncompressed(t){const s=++this.lastBatchNum;this.sendBatch(t,!1,s)}clean(){this.sendNext(),setTimeout((()=>{this.token=null,this.queue.length=0}),10)}}const s=\"function\"==typeof TextEncoder?new TextEncoder:{encode(t){const s=t.length,i=new Uint8Array(3*s);let e=-1;for(let n=0,h=0,r=0;r!==s;){if(n=t.charCodeAt(r),r+=1,n>=55296&&n<=56319){if(r===s){i[e+=1]=239,i[e+=1]=191,i[e+=1]=189;break}if(h=t.charCodeAt(r),!(h>=56320&&h<=57343)){i[e+=1]=239,i[e+=1]=191,i[e+=1]=189;continue}if(n=1024*(n-55296)+h-56320+65536,r+=1,n>65535){i[e+=1]=240|n>>>18,i[e+=1]=128|n>>>12&63,i[e+=1]=128|n>>>6&63,i[e+=1]=128|63&n;continue}}n<=127?i[e+=1]=0|n:n<=2047?(i[e+=1]=192|n>>>6,i[e+=1]=128|63&n):(i[e+=1]=224|n>>>12,i[e+=1]=128|n>>>6&63,i[e+=1]=128|63&n)}return i.subarray(0,e+1)}};class i{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}get isEmpty(){return 0===this.offset}skip(t){return this.offset+=t,this.offset<=this.size}set(t,s){this.data.set(t,s)}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=s.encode(t),e=i.byteLength;return!(!this.uint(e)||this.offset+e>this.size)&&(this.data.set(i,this.offset),this.offset+=e,!0)}reset(){this.offset=0,this.checkpointOffset=0}flush(){const t=this.data.slice(0,this.checkpointOffset);return this.reset(),t}}class e extends i{encode(t){switch(t[0]){case 0:case 11:case 114:case 115:return this.uint(t[1]);case 4:case 44:case 47:return this.string(t[1])&&this.string(t[2])&&this.uint(t[3]);case 5:case 20:case 70:case 75:case 76:case 77:case 82:return this.uint(t[1])&&this.uint(t[2]);case 6:return this.int(t[1])&&this.int(t[2]);case 7:return!0;case 8:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3])&&this.string(t[4])&&this.boolean(t[5]);case 9:case 10:case 24:case 35:case 51:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3]);case 12:case 52:case 61:case 71:return this.uint(t[1])&&this.string(t[2])&&this.string(t[3]);case 13:case 14:case 17:case 34:case 50:case 54:return this.uint(t[1])&&this.string(t[2]);case 16:return this.uint(t[1])&&this.int(t[2])&&this.int(t[3]);case 18:return this.uint(t[1])&&this.string(t[2])&&this.int(t[3]);case 19:return this.uint(t[1])&&this.boolean(t[2]);case 21:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4])&&this.string(t[5])&&this.uint(t[6])&&this.uint(t[7])&&this.uint(t[8]);case 22:case 27:case 30:case 41:case 45:case 46:case 43:case 63:case 64:case 79:case 124:return this.string(t[1])&&this.string(t[2]);case 23:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3])&&this.uint(t[4])&&this.uint(t[5])&&this.uint(t[6])&&this.uint(t[7])&&this.uint(t[8])&&this.uint(t[9]);case 28:case 29:case 42:case 117:case 118:return this.string(t[1]);case 40:return this.string(t[1])&&this.uint(t[2])&&this.string(t[3])&&this.string(t[4]);case 48:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4])&&this.int(t[5]);case 49:return this.int(t[1])&&this.int(t[2])&&this.uint(t[3])&&this.uint(t[4]);case 53:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3])&&this.uint(t[4])&&this.uint(t[5])&&this.uint(t[6])&&this.string(t[7])&&this.string(t[8]);case 55:return this.boolean(t[1]);case 57:case 60:return this.uint(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4]);case 58:case 120:return this.int(t[1]);case 68:return this.uint(t[1])&&this.uint(t[2])&&this.string(t[3])&&this.string(t[4])&&this.uint(t[5])&&this.uint(t[6]);case 69:return this.uint(t[1])&&this.uint(t[2])&&this.string(t[3])&&this.string(t[4]);case 73:return this.uint(t[1])&&this.string(t[2])&&this.uint(t[3])&&this.string(t[4]);case 78:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4]);case 81:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3])&&this.int(t[4])&&this.string(t[5]);case 83:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4])&&this.string(t[5])&&this.uint(t[6])&&this.uint(t[7])&&this.uint(t[8])&&this.uint(t[9]);case 84:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.uint(t[4])&&this.string(t[5])&&this.string(t[6]);case 112:return this.uint(t[1])&&this.string(t[2])&&this.boolean(t[3])&&this.string(t[4])&&this.int(t[5])&&this.int(t[6]);case 113:return this.uint(t[1])&&this.uint(t[2])&&this.string(t[3]);case 116:return this.uint(t[1])&&this.uint(t[2])&&this.uint(t[3])&&this.uint(t[4])&&this.uint(t[5])&&this.uint(t[6])&&this.string(t[7])&&this.string(t[8])&&this.uint(t[9])&&this.boolean(t[10]);case 119:return this.string(t[1])&&this.uint(t[2]);case 121:return this.string(t[1])&&this.string(t[2])&&this.uint(t[3])&&this.uint(t[4]);case 122:return this.string(t[1])&&this.string(t[2])&&this.uint(t[3])&&this.string(t[4]);case 123:return this.string(t[1])&&this.string(t[2])&&this.string(t[3])&&this.string(t[4])&&this.uint(t[5])}}}class n{constructor(t,s,i,n,h,r){this.pageNo=t,this.timestamp=s,this.url=i,this.onBatch=n,this.tabId=h,this.onOfflineEnd=r,this.nextIndex=0,this.beaconSize=2e5,this.encoder=new e(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,s){for(let s=0;s<3;s++)this.sizeBuffer[s]=t>>8*s;this.encoder.set(this.sizeBuffer,s)}prepare(){if(!this.encoder.isEmpty)return;const t=[81,1,this.pageNo,this.nextIndex,this.timestamp,this.url],s=[118,this.tabId];this.writeType(t),this.writeFields(t),this.writeWithSize(s),this.isEmpty=!0}writeWithSize(t){const s=this.encoder;if(!this.writeType(t)||!s.skip(3))return!1;const i=s.getCurrentOffset(),e=this.writeFields(t);if(e){const e=s.getCurrentOffset()-i;if(e>16777215)return console.warn(\"OpenReplay: max message size overflow.\"),!1;this.writeSizeAt(e,i-3),s.checkpoint(),this.isEmpty=this.isEmpty&&0===t[0],this.nextIndex++}return e}setBeaconSizeLimit(t){this.beaconSizeLimit=t}writeMessage(t){if(\"q_end\"===t[0])return this.finaliseBatch(),this.onOfflineEnd();0===t[0]&&(this.timestamp=t[1]),122===t[0]&&(this.url=t[1]),this.writeWithSize(t)||(this.finaliseBatch(),this.writeWithSize(t)||(this.encoder=new e(this.beaconSizeLimit),this.prepare(),this.writeWithSize(t)?this.finaliseBatch():console.warn(\"OpenReplay: beacon size overflow. Skipping large message.\",t,this),this.encoder=new e(this.beaconSize),this.prepare()))}finaliseBatch(){if(this.isEmpty)return;const t=this.encoder.flush();this.onBatch(t),this.prepare()}clean(){this.encoder.reset()}}var h;!function(t){t[t.NotActive=0]=\"NotActive\",t[t.Starting=1]=\"Starting\",t[t.Stopping=2]=\"Stopping\",t[t.Active=3]=\"Active\",t[t.Stopped=4]=\"Stopped\"}(h||(h={}));let r=null,a=null,u=h.NotActive;function o(){a&&a.finaliseBatch()}function c(){return new Promise((t=>{u=h.Stopping,null!==p&&(clearInterval(p),p=null),a&&(a.clean(),a=null),r&&(r.clean(),setTimeout((()=>{r=null}),20)),setTimeout((()=>{u=h.NotActive,t(null)}),100)}))}function l(){[h.Stopped,h.Stopping].includes(u)||(postMessage(\"a_stop\"),c().then((()=>{postMessage(\"a_start\")})))}let g,p=null;self.onmessage=({data:s})=>{if(null!=s){if(\"stop\"===s)return o(),void c().then((()=>{u=h.Stopped}));if(\"forceFlushBatch\"!==s){if(!Array.isArray(s)){if(\"compressed\"===s.type){if(!r)return console.debug(\"OR WebWorker: sender not initialised. Compressed batch.\"),void l();s.batch&&r.sendCompressed(s.batch)}if(\"uncompressed\"===s.type){if(!r)return console.debug(\"OR WebWorker: sender not initialised. Uncompressed batch.\"),void l();s.batch&&r.sendUncompressed(s.batch)}return\"start\"===s.type?(u=h.Starting,r=new t(s.ingestPoint,(()=>{l()}),(t=>{!function(t){postMessage({type:\"failure\",reason:t}),c()}(t)}),s.connAttemptCount,s.connAttemptGap,(t=>{postMessage({type:\"compress\",batch:t},[t.buffer])}),s.pageNo),a=new n(s.pageNo,s.timestamp,s.url,(t=>{r&&r.push(t)}),s.tabId,(()=>postMessage({type:\"queue_empty\"}))),null===p&&(p=setInterval(o,1e4)),u=h.Active):\"auth\"===s.type?r?a?(r.authorise(s.token),void(s.beaconSizeLimit&&a.setBeaconSizeLimit(s.beaconSizeLimit))):(console.debug(\"OR WebWorker: writer not initialised. Received auth.\"),void l()):(console.debug(\"OR WebWorker: sender not initialised. Received auth.\"),void l()):void 0}if(a){const t=a;s.forEach((s=>{55===s[0]&&(s[1]?g=setTimeout((()=>l()),18e5):clearTimeout(g)),t.writeMessage(s)}))}else postMessage(\"not_init\"),l()}else o()}else o()}}();\n";
4684
4679
  const CANCELED = 'canceled';
4685
4680
  const uxtStorageKey = 'or_uxt_active';
4686
4681
  const bufferStorageKey = 'or_buffer_1';
@@ -4734,7 +4729,7 @@ class App {
4734
4729
  this.stopCallbacks = [];
4735
4730
  this.commitCallbacks = [];
4736
4731
  this.activityState = ActivityState.NotActive;
4737
- this.version = '16.0.2-beta.1'; // TODO: version compatability check inside each plugin.
4732
+ this.version = '16.0.3-beta-1'; // TODO: version compatability check inside each plugin.
4738
4733
  this.socketMode = false;
4739
4734
  this.compressionThreshold = 24 * 1000;
4740
4735
  this.bc = null;
@@ -4966,8 +4961,6 @@ class App {
4966
4961
  }
4967
4962
  };
4968
4963
  this.startTimeout = null;
4969
- this.heartbeatInterval = null;
4970
- this.restartTimeout = null;
4971
4964
  this.coldStartCommitN = 0;
4972
4965
  this.delay = 0;
4973
4966
  this.attachStartCallback = (cb, useSafe = false) => {
@@ -5069,6 +5062,7 @@ class App {
5069
5062
  fixedCanvasScaling: false,
5070
5063
  disableCanvas: false,
5071
5064
  captureIFrames: true,
5065
+ disableSprites: false,
5072
5066
  obscureTextEmails: true,
5073
5067
  obscureTextNumbers: false,
5074
5068
  crossdomain: {
@@ -5247,17 +5241,6 @@ class App {
5247
5241
  this.worker.postMessage(null);
5248
5242
  }
5249
5243
  };
5250
- this.heartbeatInterval = setInterval(() => {
5251
- if (this.worker) {
5252
- this.restartTimeout = setTimeout(() => {
5253
- this.stop();
5254
- this.waitStatus(ActivityState.NotActive).then(() => {
5255
- void this.start(this.prevOpts);
5256
- });
5257
- }, 10000);
5258
- this.worker.postMessage('heartbeat_q');
5259
- }
5260
- }, 20000);
5261
5244
  // keep better tactics, discard others?
5262
5245
  this.attachEventListener(window, 'beforeunload', alertWorker, false);
5263
5246
  this.attachEventListener(document.body, 'mouseleave', alertWorker, false, false);
@@ -5288,12 +5271,6 @@ class App {
5288
5271
  else if (data === 'not_init') {
5289
5272
  this.debug.warn('OR WebWorker: writer not initialised. Restarting tracker');
5290
5273
  }
5291
- else if (data === 'heartbeat_a') {
5292
- if (this.restartTimeout) {
5293
- clearTimeout(this.restartTimeout);
5294
- this.restartTimeout = null;
5295
- }
5296
- }
5297
5274
  else if (data.type === 'failure') {
5298
5275
  this.stop(false);
5299
5276
  this.debug.error('worker_failed', data.reason);
@@ -5365,8 +5342,7 @@ class App {
5365
5342
  * */
5366
5343
  _nCommit() {
5367
5344
  if (this.socketMode) {
5368
- this.messages.unshift(TabData(this.session.getTabId()));
5369
- this.messages.unshift(Timestamp(this.timestamp()));
5345
+ this.messages.unshift(Timestamp(this.timestamp()), TabData(this.session.getTabId()));
5370
5346
  this.commitCallbacks.forEach((cb) => cb(this.messages));
5371
5347
  this.messages.length = 0;
5372
5348
  return;
@@ -5385,8 +5361,7 @@ class App {
5385
5361
  }
5386
5362
  try {
5387
5363
  requestIdleCb(() => {
5388
- this.messages.unshift(TabData(this.session.getTabId()));
5389
- this.messages.unshift(Timestamp(this.timestamp()));
5364
+ this.messages.unshift(Timestamp(this.timestamp()), TabData(this.session.getTabId()));
5390
5365
  this.worker?.postMessage(this.messages);
5391
5366
  this.commitCallbacks.forEach((cb) => cb(this.messages));
5392
5367
  this.messages.length = 0;
@@ -5409,20 +5384,13 @@ class App {
5409
5384
  _cStartCommit() {
5410
5385
  this.coldStartCommitN += 1;
5411
5386
  if (this.coldStartCommitN === 2) {
5412
- this.bufferedMessages1.push(Timestamp(this.timestamp()));
5413
- this.bufferedMessages1.push(TabData(this.session.getTabId()));
5414
- this.bufferedMessages2.push(Timestamp(this.timestamp()));
5415
- this.bufferedMessages2.push(TabData(this.session.getTabId()));
5387
+ const payload = [Timestamp(this.timestamp()), TabData(this.session.getTabId())];
5388
+ this.bufferedMessages1.push(...payload);
5389
+ this.bufferedMessages2.push(...payload);
5416
5390
  this.coldStartCommitN = 0;
5417
5391
  }
5418
5392
  }
5419
- /**
5420
- * called every 30ms via this.ticker
5421
- * */
5422
5393
  commit() {
5423
- if (this.activityState === ActivityState.NotActive) {
5424
- return;
5425
- }
5426
5394
  if (this.activityState === ActivityState.ColdStart) {
5427
5395
  this._cStartCommit();
5428
5396
  }
@@ -5445,6 +5413,10 @@ class App {
5445
5413
  }
5446
5414
  catch (e) {
5447
5415
  app._debug('safe_fn_call', e);
5416
+ // time: this.timestamp(),
5417
+ // name: e.name,
5418
+ // message: e.message,
5419
+ // stack: e.stack
5448
5420
  }
5449
5421
  }; // TODO: correct typing
5450
5422
  }
@@ -7273,7 +7245,7 @@ function roundNumber(num) {
7273
7245
  return Math.round(num * 1e4);
7274
7246
  }
7275
7247
 
7276
- var e,o=-1,a=function(e){addEventListener("pageshow",(function(n){n.persisted&&(o=n.timeStamp,e(n));}),!0);},c=function(){var e=self.performance&&performance.getEntriesByType&&performance.getEntriesByType("navigation")[0];if(e&&e.responseStart>0&&e.responseStart<performance.now())return e},u=function(){var e=c();return e&&e.activationStart||0},f=function(e,n){var t=c(),r="navigate";o>=0?r="back-forward-cache":t&&(document.prerendering||u()>0?r="prerender":document.wasDiscarded?r="restore":t.type&&(r=t.type.replace(/_/g,"-")));return {name:e,value:void 0===n?-1:n,rating:"good",delta:0,entries:[],id:"v4-".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12),navigationType:r}},s=function(e,n,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){var r=new PerformanceObserver((function(e){Promise.resolve().then((function(){n(e.getEntries());}));}));return r.observe(Object.assign({type:e,buffered:!0},t||{})),r}}catch(e){}},d=function(e,n,t,r){var i,o;return function(a){n.value>=0&&(a||r)&&((o=n.value-(i||0))||void 0===i)&&(i=n.value,n.delta=o,n.rating=function(e,n){return e>n[1]?"poor":e>n[0]?"needs-improvement":"good"}(n.value,t),e(n));}},l=function(e){requestAnimationFrame((function(){return requestAnimationFrame((function(){return e()}))}));},p=function(e){document.addEventListener("visibilitychange",(function(){"hidden"===document.visibilityState&&e();}));},v=function(e){var n=!1;return function(){n||(e(),n=!0);}},m=-1,h=function(){return "hidden"!==document.visibilityState||document.prerendering?1/0:0},g=function(e){"hidden"===document.visibilityState&&m>-1&&(m="visibilitychange"===e.type?e.timeStamp:0,T());},y=function(){addEventListener("visibilitychange",g,!0),addEventListener("prerenderingchange",g,!0);},T=function(){removeEventListener("visibilitychange",g,!0),removeEventListener("prerenderingchange",g,!0);},E=function(){return m<0&&(m=h(),y(),a((function(){setTimeout((function(){m=h(),y();}),0);}))),{get firstHiddenTime(){return m}}},C=function(e){document.prerendering?addEventListener("prerenderingchange",(function(){return e()}),!0):e();},b=[1800,3e3],S=function(e,n){n=n||{},C((function(){var t,r=E(),i=f("FCP"),o=s("paint",(function(e){e.forEach((function(e){"first-contentful-paint"===e.name&&(o.disconnect(),e.startTime<r.firstHiddenTime&&(i.value=Math.max(e.startTime-u(),0),i.entries.push(e),t(!0)));}));}));o&&(t=d(e,i,b,n.reportAllChanges),a((function(r){i=f("FCP"),t=d(e,i,b,n.reportAllChanges),l((function(){i.value=performance.now()-r.timeStamp,t(!0);}));})));}));},L=[.1,.25],w=function(e,n){n=n||{},S(v((function(){var t,r=f("CLS",0),i=0,o=[],c=function(e){e.forEach((function(e){if(!e.hadRecentInput){var n=o[0],t=o[o.length-1];i&&e.startTime-t.startTime<1e3&&e.startTime-n.startTime<5e3?(i+=e.value,o.push(e)):(i=e.value,o=[e]);}})),i>r.value&&(r.value=i,r.entries=o,t());},u=s("layout-shift",c);u&&(t=d(e,r,L,n.reportAllChanges),p((function(){c(u.takeRecords()),t(!0);})),a((function(){i=0,r=f("CLS",0),t=d(e,r,L,n.reportAllChanges),l((function(){return t()}));})),setTimeout(t,0));})));},A=0,I=1/0,P=0,M=function(e){e.forEach((function(e){e.interactionId&&(I=Math.min(I,e.interactionId),P=Math.max(P,e.interactionId),A=P?(P-I)/7+1:0);}));},k=function(){return e?A:performance.interactionCount||0},F=function(){"interactionCount"in performance||e||(e=s("event",M,{type:"event",buffered:!0,durationThreshold:0}));},D=[],x=new Map,R=0,B=function(){var e=Math.min(D.length-1,Math.floor((k()-R)/50));return D[e]},H=[],q=function(e){if(H.forEach((function(n){return n(e)})),e.interactionId||"first-input"===e.entryType){var n=D[D.length-1],t=x.get(e.interactionId);if(t||D.length<10||e.duration>n.latency){if(t)e.duration>t.latency?(t.entries=[e],t.latency=e.duration):e.duration===t.latency&&e.startTime===t.entries[0].startTime&&t.entries.push(e);else {var r={id:e.interactionId,latency:e.duration,entries:[e]};x.set(r.id,r),D.push(r);}D.sort((function(e,n){return n.latency-e.latency})),D.length>10&&D.splice(10).forEach((function(e){return x.delete(e.id)}));}}},O=function(e){var n=self.requestIdleCallback||self.setTimeout,t=-1;return e=v(e),"hidden"===document.visibilityState?e():(t=n(e),p(e)),t},N=[200,500],j=function(e,n){"PerformanceEventTiming"in self&&"interactionId"in PerformanceEventTiming.prototype&&(n=n||{},C((function(){var t;F();var r,i=f("INP"),o=function(e){O((function(){e.forEach(q);var n=B();n&&n.latency!==i.value&&(i.value=n.latency,i.entries=n.entries,r());}));},c=s("event",o,{durationThreshold:null!==(t=n.durationThreshold)&&void 0!==t?t:40});r=d(e,i,N,n.reportAllChanges),c&&(c.observe({type:"first-input",buffered:!0}),p((function(){o(c.takeRecords()),r(!0);})),a((function(){R=k(),D.length=0,x.clear(),i=f("INP"),r=d(e,i,N,n.reportAllChanges);})));})));},_=[2500,4e3],z={},G=function(e,n){n=n||{},C((function(){var t,r=E(),i=f("LCP"),o=function(e){n.reportAllChanges||(e=e.slice(-1)),e.forEach((function(e){e.startTime<r.firstHiddenTime&&(i.value=Math.max(e.startTime-u(),0),i.entries=[e],t());}));},c=s("largest-contentful-paint",o);if(c){t=d(e,i,_,n.reportAllChanges);var m=v((function(){z[i.id]||(o(c.takeRecords()),c.disconnect(),z[i.id]=!0,t(!0));}));["keydown","click"].forEach((function(e){addEventListener(e,(function(){return O(m)}),{once:!0,capture:!0});})),p(m),a((function(r){i=f("LCP"),t=d(e,i,_,n.reportAllChanges),l((function(){i.value=performance.now()-r.timeStamp,z[i.id]=!0,t(!0);}));}));}}));},J=[800,1800],K=function e(n){document.prerendering?C((function(){return e(n)})):"complete"!==document.readyState?addEventListener("load",(function(){return e(n)}),!0):setTimeout(n,0);},Q=function(e,n){n=n||{};var t=f("TTFB"),r=d(e,t,J,n.reportAllChanges);K((function(){var i=c();i&&(t.value=Math.max(i.responseStart-u(),0),t.entries=[i],r(!0),a((function(){t=f("TTFB",0),(r=d(e,t,J,n.reportAllChanges))(!0);})));}));};
7248
+ var e,o=-1,a=function(e){addEventListener("pageshow",(function(n){n.persisted&&(o=n.timeStamp,e(n));}),true);},c=function(){var e=self.performance&&performance.getEntriesByType&&performance.getEntriesByType("navigation")[0];if(e&&e.responseStart>0&&e.responseStart<performance.now())return e},u=function(){var e=c();return e&&e.activationStart||0},f=function(e,n){var t=c(),r="navigate";o>=0?r="back-forward-cache":t&&(document.prerendering||u()>0?r="prerender":document.wasDiscarded?r="restore":t.type&&(r=t.type.replace(/_/g,"-")));return {name:e,value:void 0===n?-1:n,rating:"good",delta:0,entries:[],id:"v4-".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12),navigationType:r}},s=function(e,n,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){var r=new PerformanceObserver((function(e){Promise.resolve().then((function(){n(e.getEntries());}));}));return r.observe(Object.assign({type:e,buffered:!0},t||{})),r}}catch(e){}},d=function(e,n,t,r){var i,o;return function(a){n.value>=0&&(a||r)&&((o=n.value-(i||0))||void 0===i)&&(i=n.value,n.delta=o,n.rating=function(e,n){return e>n[1]?"poor":e>n[0]?"needs-improvement":"good"}(n.value,t),e(n));}},l=function(e){requestAnimationFrame((function(){return requestAnimationFrame((function(){return e()}))}));},p=function(e){document.addEventListener("visibilitychange",(function(){"hidden"===document.visibilityState&&e();}));},v=function(e){var n=false;return function(){n||(e(),n=true);}},m=-1,h=function(){return "hidden"!==document.visibilityState||document.prerendering?1/0:0},g=function(e){"hidden"===document.visibilityState&&m>-1&&(m="visibilitychange"===e.type?e.timeStamp:0,T());},y=function(){addEventListener("visibilitychange",g,true),addEventListener("prerenderingchange",g,true);},T=function(){removeEventListener("visibilitychange",g,true),removeEventListener("prerenderingchange",g,true);},E=function(){return m<0&&(m=h(),y(),a((function(){setTimeout((function(){m=h(),y();}),0);}))),{get firstHiddenTime(){return m}}},C=function(e){document.prerendering?addEventListener("prerenderingchange",(function(){return e()}),true):e();},b=[1800,3e3],S=function(e,n){n=n||{},C((function(){var t,r=E(),i=f("FCP"),o=s("paint",(function(e){e.forEach((function(e){"first-contentful-paint"===e.name&&(o.disconnect(),e.startTime<r.firstHiddenTime&&(i.value=Math.max(e.startTime-u(),0),i.entries.push(e),t(true)));}));}));o&&(t=d(e,i,b,n.reportAllChanges),a((function(r){i=f("FCP"),t=d(e,i,b,n.reportAllChanges),l((function(){i.value=performance.now()-r.timeStamp,t(true);}));})));}));},L=[.1,.25],w=function(e,n){n=n||{},S(v((function(){var t,r=f("CLS",0),i=0,o=[],c=function(e){e.forEach((function(e){if(!e.hadRecentInput){var n=o[0],t=o[o.length-1];i&&e.startTime-t.startTime<1e3&&e.startTime-n.startTime<5e3?(i+=e.value,o.push(e)):(i=e.value,o=[e]);}})),i>r.value&&(r.value=i,r.entries=o,t());},u=s("layout-shift",c);u&&(t=d(e,r,L,n.reportAllChanges),p((function(){c(u.takeRecords()),t(true);})),a((function(){i=0,r=f("CLS",0),t=d(e,r,L,n.reportAllChanges),l((function(){return t()}));})),setTimeout(t,0));})));},A=0,I=1/0,P=0,M=function(e){e.forEach((function(e){e.interactionId&&(I=Math.min(I,e.interactionId),P=Math.max(P,e.interactionId),A=P?(P-I)/7+1:0);}));},k=function(){return e?A:performance.interactionCount||0},F=function(){"interactionCount"in performance||e||(e=s("event",M,{type:"event",buffered:true,durationThreshold:0}));},D=[],x=new Map,R=0,B=function(){var e=Math.min(D.length-1,Math.floor((k()-R)/50));return D[e]},H=[],q=function(e){if(H.forEach((function(n){return n(e)})),e.interactionId||"first-input"===e.entryType){var n=D[D.length-1],t=x.get(e.interactionId);if(t||D.length<10||e.duration>n.latency){if(t)e.duration>t.latency?(t.entries=[e],t.latency=e.duration):e.duration===t.latency&&e.startTime===t.entries[0].startTime&&t.entries.push(e);else {var r={id:e.interactionId,latency:e.duration,entries:[e]};x.set(r.id,r),D.push(r);}D.sort((function(e,n){return n.latency-e.latency})),D.length>10&&D.splice(10).forEach((function(e){return x.delete(e.id)}));}}},O=function(e){var n=self.requestIdleCallback||self.setTimeout,t=-1;return e=v(e),"hidden"===document.visibilityState?e():(t=n(e),p(e)),t},N=[200,500],j=function(e,n){"PerformanceEventTiming"in self&&"interactionId"in PerformanceEventTiming.prototype&&(n=n||{},C((function(){var t;F();var r,i=f("INP"),o=function(e){O((function(){e.forEach(q);var n=B();n&&n.latency!==i.value&&(i.value=n.latency,i.entries=n.entries,r());}));},c=s("event",o,{durationThreshold:null!==(t=n.durationThreshold)&&void 0!==t?t:40});r=d(e,i,N,n.reportAllChanges),c&&(c.observe({type:"first-input",buffered:true}),p((function(){o(c.takeRecords()),r(true);})),a((function(){R=k(),D.length=0,x.clear(),i=f("INP"),r=d(e,i,N,n.reportAllChanges);})));})));},_=[2500,4e3],z={},G=function(e,n){n=n||{},C((function(){var t,r=E(),i=f("LCP"),o=function(e){n.reportAllChanges||(e=e.slice(-1)),e.forEach((function(e){e.startTime<r.firstHiddenTime&&(i.value=Math.max(e.startTime-u(),0),i.entries=[e],t());}));},c=s("largest-contentful-paint",o);if(c){t=d(e,i,_,n.reportAllChanges);var m=v((function(){z[i.id]||(o(c.takeRecords()),c.disconnect(),z[i.id]=true,t(true));}));["keydown","click"].forEach((function(e){addEventListener(e,(function(){return O(m)}),{once:true,capture:true});})),p(m),a((function(r){i=f("LCP"),t=d(e,i,_,n.reportAllChanges),l((function(){i.value=performance.now()-r.timeStamp,z[i.id]=true,t(true);}));}));}}));},J=[800,1800],K=function e(n){document.prerendering?C((function(){return e(n)})):"complete"!==document.readyState?addEventListener("load",(function(){return e(n)}),true):setTimeout(n,0);},Q=function(e,n){n=n||{};var t=f("TTFB"),r=d(e,t,J,n.reportAllChanges);K((function(){var i=c();i&&(t.value=Math.max(i.responseStart-u(),0),t.entries=[i],r(true),a((function(){t=f("TTFB",0),(r=d(e,t,J,n.reportAllChanges))(true);})));}));};
7277
7249
 
7278
7250
  function getPaintBlocks(resources) {
7279
7251
  const paintBlocks = [];
@@ -9217,7 +9189,7 @@ class API {
9217
9189
  this.signalStartIssue = (reason, missingApi) => {
9218
9190
  const doNotTrack = this.checkDoNotTrack();
9219
9191
  console.log("Tracker couldn't start due to:", JSON.stringify({
9220
- trackerVersion: '16.0.2-beta.1',
9192
+ trackerVersion: '16.0.3-beta-1',
9221
9193
  projectKey: this.options.projectKey,
9222
9194
  doNotTrack,
9223
9195
  reason: missingApi.length ? `missing api: ${missingApi.join(',')}` : reason,