@openreplay/tracker 16.4.10-beta.0 → 16.4.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cjs/entry.js CHANGED
@@ -60,12 +60,12 @@ fl[28] = 258, revfl[258] = 28;
60
60
  var _b = freb(fdeb, 0), revfd = _b.r;
61
61
  // map of value to reverse (assuming 16 bits)
62
62
  var rev = new u16(32768);
63
- for (var i = 0; i < 32768; ++i) {
63
+ for (var i$1 = 0; i$1 < 32768; ++i$1) {
64
64
  // reverse table algorithm from SO
65
- var x$1 = ((i & 0xAAAA) >> 1) | ((i & 0x5555) << 1);
65
+ var x$1 = ((i$1 & 0xAAAA) >> 1) | ((i$1 & 0x5555) << 1);
66
66
  x$1 = ((x$1 & 0xCCCC) >> 2) | ((x$1 & 0x3333) << 2);
67
67
  x$1 = ((x$1 & 0xF0F0) >> 4) | ((x$1 & 0x0F0F) << 4);
68
- rev[i] = (((x$1 & 0xFF00) >> 8) | ((x$1 & 0x00FF) << 8)) >> 1;
68
+ rev[i$1] = (((x$1 & 0xFF00) >> 8) | ((x$1 & 0x00FF) << 8)) >> 1;
69
69
  }
70
70
  // create huffman tree from u8 "map": index -> code length for code index
71
71
  // mb (max bits) must be at most 15
@@ -121,18 +121,18 @@ var hMap = (function (cd, mb, r) {
121
121
  });
122
122
  // fixed length tree
123
123
  var flt = new u8(288);
124
- for (var i = 0; i < 144; ++i)
125
- flt[i] = 8;
126
- for (var i = 144; i < 256; ++i)
127
- flt[i] = 9;
128
- for (var i = 256; i < 280; ++i)
129
- flt[i] = 7;
130
- for (var i = 280; i < 288; ++i)
131
- flt[i] = 8;
124
+ for (var i$1 = 0; i$1 < 144; ++i$1)
125
+ flt[i$1] = 8;
126
+ for (var i$1 = 144; i$1 < 256; ++i$1)
127
+ flt[i$1] = 9;
128
+ for (var i$1 = 256; i$1 < 280; ++i$1)
129
+ flt[i$1] = 7;
130
+ for (var i$1 = 280; i$1 < 288; ++i$1)
131
+ flt[i$1] = 8;
132
132
  // fixed distance tree
133
133
  var fdt = new u8(32);
134
- for (var i = 0; i < 32; ++i)
135
- fdt[i] = 5;
134
+ for (var i$1 = 0; i$1 < 32; ++i$1)
135
+ fdt[i$1] = 5;
136
136
  // fixed length map
137
137
  var flm = /*#__PURE__*/ hMap(flt, 9, 0);
138
138
  // fixed distance map
@@ -3649,6 +3649,27 @@ class Maintainer {
3649
3649
  }
3650
3650
  }
3651
3651
 
3652
+ // 4 levels, 128 frames between each level, 8_388_608 nodes per page
3653
+ // lets hope no one will need more :D
3654
+ const BITS_LEVEL = 2; // 4
3655
+ const BITS_ORDER = 7; // 128
3656
+ const BITS_NODE = 22; // 8_388_608
3657
+ const SHIFT_ORDER = BITS_NODE;
3658
+ const SHIFT_LEVEL = BITS_NODE + BITS_ORDER;
3659
+ const MASK_NODE = (1 << BITS_NODE) - 1;
3660
+ const MASK_ORDER = (1 << BITS_ORDER) - 1;
3661
+ const MASK_LEVEL = (1 << BITS_LEVEL) - 1;
3662
+ function pack(level, order, nodeId) {
3663
+ if (level < 0 || level > MASK_LEVEL)
3664
+ throw new RangeError('OR: nesting level overflow, max 4');
3665
+ if (order < 0 || order > MASK_ORDER)
3666
+ throw new RangeError('OR: frame order overflow, max 128');
3667
+ const v = ((level & MASK_LEVEL) << SHIFT_LEVEL) |
3668
+ ((order & MASK_ORDER) << SHIFT_ORDER) |
3669
+ (nodeId & MASK_NODE);
3670
+ return v >>> 0;
3671
+ }
3672
+
3652
3673
  class Nodes {
3653
3674
  constructor(params) {
3654
3675
  this.nodes = new Map();
@@ -3676,6 +3697,9 @@ class Nodes {
3676
3697
  }
3677
3698
  listeners.push([type, listener, useCapture]);
3678
3699
  };
3700
+ this.createFrameId = (level, frameOrder) => {
3701
+ return pack(level, frameOrder, 0);
3702
+ };
3679
3703
  this.unregisterNode = (node) => {
3680
3704
  const id = node[this.node_id];
3681
3705
  if (id !== undefined) {
@@ -3696,16 +3720,8 @@ class Nodes {
3696
3720
  this.maintainer = new Maintainer(this.nodes, this.unregisterNode, params.maintainer);
3697
3721
  this.maintainer.start();
3698
3722
  }
3699
- syntheticMode(frameOrder) {
3700
- const maxSafeNumber = Number.MAX_SAFE_INTEGER;
3701
- const placeholderSize = 99999999;
3702
- const nextFrameId = placeholderSize * frameOrder;
3703
- // I highly doubt that this will ever happen,
3704
- // but it will be easier to debug if it does
3705
- if (nextFrameId > maxSafeNumber) {
3706
- throw new Error('Placeholder id overflow');
3707
- }
3708
- this.nextNodeId = nextFrameId;
3723
+ crossdomainMode(level, frameOrder) {
3724
+ this.nextNodeId = this.createFrameId(level, frameOrder);
3709
3725
  }
3710
3726
  registerNode(node) {
3711
3727
  let id = node[this.node_id];
@@ -4913,7 +4929,7 @@ class TopObserver extends Observer {
4913
4929
  this.app.nodes.callNodeCallbacks(document, true);
4914
4930
  }, window.document.documentElement);
4915
4931
  }
4916
- crossdomainObserve(rootNodeId, frameOder) {
4932
+ crossdomainObserve(rootNodeId, frameOder, frameLevel) {
4917
4933
  const observer = this;
4918
4934
  Element.prototype.attachShadow = function () {
4919
4935
  // eslint-disable-next-line
@@ -4922,7 +4938,7 @@ class TopObserver extends Observer {
4922
4938
  return shadow;
4923
4939
  };
4924
4940
  this.app.nodes.clear();
4925
- this.app.nodes.syntheticMode(frameOder);
4941
+ this.app.nodes.crossdomainMode(frameLevel, frameOder);
4926
4942
  const iframeObserver = new IFrameObserver(this.app);
4927
4943
  this.iframeObservers.set(window.document, iframeObserver);
4928
4944
  iframeObserver.syntheticObserve(rootNodeId, window.document);
@@ -5276,7 +5292,7 @@ class App {
5276
5292
  this.stopCallbacks = [];
5277
5293
  this.commitCallbacks = [];
5278
5294
  this.activityState = ActivityState.NotActive;
5279
- this.version = '16.4.10-beta.0'; // TODO: version compatability check inside each plugin.
5295
+ this.version = '16.4.10'; // TODO: version compatability check inside each plugin.
5280
5296
  this.socketMode = false;
5281
5297
  this.compressionThreshold = 24 * 1000;
5282
5298
  this.bc = null;
@@ -5286,10 +5302,8 @@ class App {
5286
5302
  this.rootId = null;
5287
5303
  this.pageFrames = [];
5288
5304
  this.frameOderNumber = 0;
5289
- this.features = {
5290
- 'feature-flags': true,
5291
- 'usability-test': true,
5292
- };
5305
+ this.frameLevel = 0;
5306
+ this.features = {};
5293
5307
  this.emptyBatchCounter = 0;
5294
5308
  /** used by child iframes for crossdomain only */
5295
5309
  this.parentActive = false;
@@ -5319,6 +5333,7 @@ class App {
5319
5333
  this.rootId = data.id;
5320
5334
  this.session.setSessionToken(data.token, this.projectKey);
5321
5335
  this.frameOderNumber = data.frameOrderNumber;
5336
+ this.frameLevel = data.frameLevel;
5322
5337
  this.debug.log('starting iframe tracking', data);
5323
5338
  this.allowAppStart();
5324
5339
  }
@@ -5368,8 +5383,8 @@ class App {
5368
5383
  line: proto.iframeId,
5369
5384
  id,
5370
5385
  token,
5371
- // since indexes go from 0 we +1
5372
5386
  frameOrderNumber: order,
5387
+ frameLevel: this.frameLevel + 1,
5373
5388
  };
5374
5389
  this.debug.log('Got child frame signal; nodeId', id, event.source, iframeData);
5375
5390
  // @ts-ignore
@@ -5856,6 +5871,7 @@ class App {
5856
5871
  * listen for messages from parent window, so we can signal that we're alive
5857
5872
  * */
5858
5873
  window.addEventListener('message', this.parentCrossDomainFrameListener);
5874
+ window.addEventListener('message', this.crossDomainIframeListener);
5859
5875
  setInterval(() => {
5860
5876
  if (document.hidden) {
5861
5877
  return;
@@ -6449,7 +6465,7 @@ class App {
6449
6465
  }
6450
6466
  await this.tagWatcher.fetchTags(this.options.ingestPoint, token);
6451
6467
  this.activityState = ActivityState.Active;
6452
- if (this.options.crossdomain?.enabled && !this.insideIframe) {
6468
+ if (this.options.crossdomain?.enabled) {
6453
6469
  void this.bootChildrenFrames();
6454
6470
  }
6455
6471
  if (canvasEnabled && !this.options.canvas.disableCanvas) {
@@ -6477,7 +6493,7 @@ class App {
6477
6493
  }
6478
6494
  else {
6479
6495
  if (this.insideIframe && this.rootId) {
6480
- this.observer.crossdomainObserve(this.rootId, this.frameOderNumber);
6496
+ this.observer.crossdomainObserve(this.rootId, this.frameOderNumber, this.frameLevel);
6481
6497
  }
6482
6498
  else {
6483
6499
  this.observer.observe();
@@ -6631,7 +6647,7 @@ class App {
6631
6647
  stop(stopWorker = true) {
6632
6648
  if (this.activityState !== ActivityState.NotActive) {
6633
6649
  try {
6634
- if (!this.insideIframe && this.options.crossdomain?.enabled) {
6650
+ if (this.options.crossdomain?.enabled) {
6635
6651
  this.killChildrenFrames();
6636
6652
  }
6637
6653
  this.attributeSender.clear();
@@ -7605,7 +7621,7 @@ function getUniqueSiblingClass(el) {
7605
7621
  return null;
7606
7622
  }
7607
7623
 
7608
- 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);})));}));};
7624
+ let e=-1;const t=t=>{addEventListener("pageshow",(n=>{n.persisted&&(e=n.timeStamp,t(n));}),true);},n=(e,t,n,i)=>{let s,o;return r=>{t.value>=0&&(r||i)&&(o=t.value-(s??0),(o||void 0===s)&&(s=t.value,t.delta=o,t.rating=((e,t)=>e>t[1]?"poor":e>t[0]?"needs-improvement":"good")(t.value,n),e(t)));}},i=e=>{requestAnimationFrame((()=>requestAnimationFrame((()=>e()))));},s=()=>{const e=performance.getEntriesByType("navigation")[0];if(e&&e.responseStart>0&&e.responseStart<performance.now())return e},o=()=>{const e=s();return e?.activationStart??0},r=(t,n=-1)=>{const i=s();let r="navigate";e>=0?r="back-forward-cache":i&&(document.prerendering||o()>0?r="prerender":document.wasDiscarded?r="restore":i.type&&(r=i.type.replace(/_/g,"-")));return {name:t,value:n,rating:"good",delta:0,entries:[],id:`v5-${Date.now()}-${Math.floor(8999999999999*Math.random())+1e12}`,navigationType:r}},c=new WeakMap;function a(e,t){return c.get(e)||c.set(e,new t),c.get(e)}class d{t;i=0;o=[];h(e){if(e.hadRecentInput)return;const t=this.o[0],n=this.o.at(-1);this.i&&t&&n&&e.startTime-n.startTime<1e3&&e.startTime-t.startTime<5e3?(this.i+=e.value,this.o.push(e)):(this.i=e.value,this.o=[e]),this.t?.(e);}}const h=(e,t,n={})=>{try{if(PerformanceObserver.supportedEntryTypes.includes(e)){const i=new PerformanceObserver((e=>{Promise.resolve().then((()=>{t(e.getEntries());}));}));return i.observe({type:e,buffered:!0,...n}),i}}catch{}},f=e=>{let t=false;return ()=>{t||(e(),t=true);}};let u=-1;const l=new Set,m=()=>"hidden"!==document.visibilityState||document.prerendering?1/0:0,p=e=>{if("hidden"===document.visibilityState){if("visibilitychange"===e.type)for(const e of l)e();isFinite(u)||(u="visibilitychange"===e.type?e.timeStamp:0,removeEventListener("prerenderingchange",p,true));}},v=()=>{if(u<0){const e=o(),n=document.prerendering?void 0:globalThis.performance.getEntriesByType("visibility-state").filter((t=>"hidden"===t.name&&t.startTime>e))[0]?.startTime;u=n??m(),addEventListener("visibilitychange",p,true),addEventListener("prerenderingchange",p,true),t((()=>{setTimeout((()=>{u=m();}));}));}return {get firstHiddenTime(){return u},onHidden(e){l.add(e);}}},g=e=>{document.prerendering?addEventListener("prerenderingchange",(()=>e()),true):e();},y=[1800,3e3],E=(e,s={})=>{g((()=>{const c=v();let a,d=r("FCP");const f=h("paint",(e=>{for(const t of e)"first-contentful-paint"===t.name&&(f.disconnect(),t.startTime<c.firstHiddenTime&&(d.value=Math.max(t.startTime-o(),0),d.entries.push(t),a(true)));}));f&&(a=n(e,d,y,s.reportAllChanges),t((t=>{d=r("FCP"),a=n(e,d,y,s.reportAllChanges),i((()=>{d.value=performance.now()-t.timeStamp,a(true);}));})));}));},b=[.1,.25],L=(e,s={})=>{const o=v();E(f((()=>{let c,f=r("CLS",0);const u=a(s,d),l=e=>{for(const t of e)u.h(t);u.i>f.value&&(f.value=u.i,f.entries=u.o,c());},m=h("layout-shift",l);m&&(c=n(e,f,b,s.reportAllChanges),o.onHidden((()=>{l(m.takeRecords()),c(true);})),t((()=>{u.i=0,f=r("CLS",0),c=n(e,f,b,s.reportAllChanges),i((()=>c()));})),setTimeout(c));})));};let P=0,T=1/0,_=0;const M=e=>{for(const t of e)t.interactionId&&(T=Math.min(T,t.interactionId),_=Math.max(_,t.interactionId),P=_?(_-T)/7+1:0);};let w;const C=()=>w?P:performance.interactionCount??0,I=()=>{"interactionCount"in performance||w||(w=h("event",M,{type:"event",buffered:true,durationThreshold:0}));};let F=0;class k{u=[];l=new Map;m;p;v(){F=C(),this.u.length=0,this.l.clear();}L(){const e=Math.min(this.u.length-1,Math.floor((C()-F)/50));return this.u[e]}h(e){if(this.m?.(e),!e.interactionId&&"first-input"!==e.entryType)return;const t=this.u.at(-1);let n=this.l.get(e.interactionId);if(n||this.u.length<10||e.duration>t.P){if(n?e.duration>n.P?(n.entries=[e],n.P=e.duration):e.duration===n.P&&e.startTime===n.entries[0].startTime&&n.entries.push(e):(n={id:e.interactionId,entries:[e],P:e.duration},this.l.set(n.id,n),this.u.push(n)),this.u.sort(((e,t)=>t.P-e.P)),this.u.length>10){const e=this.u.splice(10);for(const t of e)this.l.delete(t.id);}this.p?.(n);}}}const A=e=>{const t=globalThis.requestIdleCallback||setTimeout;"hidden"===document.visibilityState?e():(e=f(e),addEventListener("visibilitychange",e,{once:true,capture:true}),t((()=>{e(),removeEventListener("visibilitychange",e,{capture:true});})));},B=[200,500],S=(e,i={})=>{if(!globalThis.PerformanceEventTiming||!("interactionId"in PerformanceEventTiming.prototype))return;const s=v();g((()=>{I();let o,c=r("INP");const d=a(i,k),f=e=>{A((()=>{for(const t of e)d.h(t);const t=d.L();t&&t.P!==c.value&&(c.value=t.P,c.entries=t.entries,o());}));},u=h("event",f,{durationThreshold:i.durationThreshold??40});o=n(e,c,B,i.reportAllChanges),u&&(u.observe({type:"first-input",buffered:true}),s.onHidden((()=>{f(u.takeRecords()),o(true);})),t((()=>{d.v(),c=r("INP"),o=n(e,c,B,i.reportAllChanges);})));}));};class N{m;h(e){this.m?.(e);}}const q=[2500,4e3],x=(e,s={})=>{g((()=>{const c=v();let d,u=r("LCP");const l=a(s,N),m=e=>{s.reportAllChanges||(e=e.slice(-1));for(const t of e)l.h(t),t.startTime<c.firstHiddenTime&&(u.value=Math.max(t.startTime-o(),0),u.entries=[t],d());},p=h("largest-contentful-paint",m);if(p){d=n(e,u,q,s.reportAllChanges);const o=f((()=>{m(p.takeRecords()),p.disconnect(),d(true);})),c=e=>{e.isTrusted&&(A(o),removeEventListener(e.type,c,{capture:true}));};for(const e of ["keydown","click","visibilitychange"])addEventListener(e,c,{capture:true});t((t=>{u=r("LCP"),d=n(e,u,q,s.reportAllChanges),i((()=>{u.value=performance.now()-t.timeStamp,d(true);}));}));}}));},H=[800,1800],O=e=>{document.prerendering?g((()=>O(e))):"complete"!==document.readyState?addEventListener("load",(()=>O(e)),true):setTimeout(e);},$=(e,i={})=>{let c=r("TTFB"),a=n(e,c,H,i.reportAllChanges);O((()=>{const d=s();d&&(c.value=Math.max(d.responseStart-o(),0),c.entries=[d],a(true),t((()=>{c=r("TTFB",0),a=n(e,c,H,i.reportAllChanges),a(true);})));}));};
7609
7625
 
7610
7626
  function getPaintBlocks(resources) {
7611
7627
  const paintBlocks = [];
@@ -7718,10 +7734,10 @@ function Timing (app, opts) {
7718
7734
  // onINP(): Chromium
7719
7735
  // onLCP(): Chromium, Firefox
7720
7736
  // onTTFB(): Chromium, Firefox, Safari
7721
- w(onVitalsSignal);
7722
- j(onVitalsSignal);
7723
- G(onVitalsSignal);
7724
- Q(onVitalsSignal);
7737
+ L(onVitalsSignal);
7738
+ S(onVitalsSignal);
7739
+ x(onVitalsSignal);
7740
+ $(onVitalsSignal);
7725
7741
  });
7726
7742
  app.attachStopCallback(function () {
7727
7743
  observer.disconnect();
@@ -8512,7 +8528,9 @@ class NetworkMessage {
8512
8528
  });
8513
8529
  if (!messageInfo)
8514
8530
  return null;
8515
- const isGraphql = messageInfo.url.includes("/graphql");
8531
+ const gqlHeader = "application/graphql-response";
8532
+ const isGraphql = messageInfo.url.includes("/graphql")
8533
+ || Object.values(messageInfo.request.headers).some(v => v.includes(gqlHeader));
8516
8534
  if (isGraphql && messageInfo.response.body && typeof messageInfo.response.body === 'string') {
8517
8535
  const isError = messageInfo.response.body.includes("errors");
8518
8536
  messageInfo.status = isError ? 400 : 200;
@@ -8818,6 +8836,7 @@ class FetchProxyHandler {
8818
8836
  this.tokenUrlMatcher = tokenUrlMatcher;
8819
8837
  }
8820
8838
  apply(target, _, argsList) {
8839
+ var _a;
8821
8840
  const input = argsList[0];
8822
8841
  const init = argsList[1];
8823
8842
  if (!input ||
@@ -8833,6 +8852,31 @@ class FetchProxyHandler {
8833
8852
  }
8834
8853
  const item = new NetworkMessage(this.ignoredHeaders, this.setSessionTokenHeader, this.sanitize);
8835
8854
  this.beforeFetch(item, input, init);
8855
+ const signal = (argsList[0] instanceof Request ? argsList[0].signal : undefined) ||
8856
+ ((_a = argsList[1]) === null || _a === void 0 ? void 0 : _a.signal);
8857
+ // guard to avoid double-send
8858
+ let abortedNotified = false;
8859
+ const notifyAbort = () => {
8860
+ if (abortedNotified)
8861
+ return;
8862
+ abortedNotified = true;
8863
+ item.endTime = performance.now();
8864
+ item.duration = item.endTime - (item.startTime || item.endTime);
8865
+ item.status = 0;
8866
+ item.statusText = "Aborted";
8867
+ item.readyState = 0;
8868
+ const msg = item.getMessage();
8869
+ if (msg)
8870
+ this.sendMessage(msg);
8871
+ };
8872
+ if (signal) {
8873
+ if (signal.aborted) {
8874
+ notifyAbort();
8875
+ }
8876
+ else {
8877
+ signal.addEventListener("abort", notifyAbort, { once: true });
8878
+ }
8879
+ }
8836
8880
  this.setSessionTokenHeader((name, value) => {
8837
8881
  if (this.tokenUrlMatcher !== undefined) {
8838
8882
  if (!this.tokenUrlMatcher(item.url)) {
@@ -8861,11 +8905,22 @@ class FetchProxyHandler {
8861
8905
  }
8862
8906
  });
8863
8907
  return target.apply(window, argsList)
8864
- .then(this.afterFetch(item))
8908
+ .then(this.afterFetch(item, () => {
8909
+ abortedNotified = true;
8910
+ }))
8865
8911
  .catch((e) => {
8866
- // mock finally
8867
8912
  item.endTime = performance.now();
8868
8913
  item.duration = item.endTime - (item.startTime || item.endTime);
8914
+ if (e && e.name === "AbortError") {
8915
+ item.status = 0;
8916
+ item.statusText = "Aborted";
8917
+ item.readyState = 0;
8918
+ if (!abortedNotified) {
8919
+ const msg = item.getMessage();
8920
+ if (msg)
8921
+ this.sendMessage(msg);
8922
+ }
8923
+ }
8869
8924
  throw e;
8870
8925
  });
8871
8926
  }
@@ -8917,8 +8972,10 @@ class FetchProxyHandler {
8917
8972
  item.requestData = genStringBody(init.body);
8918
8973
  }
8919
8974
  }
8920
- afterFetch(item) {
8975
+ afterFetch(item, onResolved) {
8921
8976
  return (resp) => {
8977
+ if (onResolved)
8978
+ onResolved === null || onResolved === void 0 ? void 0 : onResolved();
8922
8979
  item.endTime = performance.now();
8923
8980
  item.duration = item.endTime - (item.startTime || item.endTime);
8924
8981
  item.status = resp.status;
@@ -8954,7 +9011,15 @@ class FetchProxyHandler {
8954
9011
  }
8955
9012
  })
8956
9013
  .catch((e) => {
8957
- if (e.name !== "AbortError") {
9014
+ if (e.name === "AbortError") {
9015
+ item.status = 0;
9016
+ item.statusText = "Aborted";
9017
+ item.readyState = 0;
9018
+ const msg = item.getMessage();
9019
+ if (msg)
9020
+ this.sendMessage(msg);
9021
+ }
9022
+ else {
8958
9023
  throw e;
8959
9024
  }
8960
9025
  });
@@ -9650,7 +9715,7 @@ class API {
9650
9715
  this.signalStartIssue = (reason, missingApi) => {
9651
9716
  const doNotTrack = this.checkDoNotTrack();
9652
9717
  console.log("Tracker couldn't start due to:", JSON.stringify({
9653
- trackerVersion: '16.4.10-beta.0',
9718
+ trackerVersion: '16.4.10',
9654
9719
  projectKey: this.options.projectKey,
9655
9720
  doNotTrack,
9656
9721
  reason: missingApi.length ? `missing api: ${missingApi.join(',')}` : reason,