@openreplay/tracker 17.2.4 → 17.2.5

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/index.js CHANGED
@@ -1746,7 +1746,7 @@ class CanvasRecorder {
1746
1746
  setTimeout(() => {
1747
1747
  this.app.nodes.scanTree(this.captureCanvas);
1748
1748
  this.app.nodes.attachNodeCallback(this.captureCanvas);
1749
- }, 250);
1749
+ }, 125);
1750
1750
  }
1751
1751
  sendSnaps(images, canvasId, createdAt) {
1752
1752
  if (Object.keys(this.snapshots).length === 0) {
@@ -1777,14 +1777,20 @@ class CanvasRecorder {
1777
1777
  }
1778
1778
  async uploadBatch(images, canvasId, createdAt) {
1779
1779
  if (this.options.isDebug) {
1780
- const fileEntries = [];
1781
- images.forEach((snapshot) => {
1782
- if (!snapshot.data)
1783
- return;
1784
- fileEntries.push({ data: snapshot.data, name: `${createdAt}_${canvasId}_${snapshot.id}.${this.fileExt}` });
1785
- });
1786
- void saveArchive(fileEntries, `canvas_${canvasId}_${createdAt}`);
1787
- return;
1780
+ const packed = await packFrames(images);
1781
+ if (packed) {
1782
+ const fileName = `${createdAt}_${canvasId}.${this.fileExt}.frames`;
1783
+ const url = URL.createObjectURL(new Blob([packed]));
1784
+ const link = document.createElement('a');
1785
+ link.href = url;
1786
+ link.download = fileName;
1787
+ link.style.display = 'none';
1788
+ document.body.appendChild(link);
1789
+ link.click();
1790
+ document.body.removeChild(link);
1791
+ URL.revokeObjectURL(url);
1792
+ }
1793
+ // fall through to also send to backend
1788
1794
  }
1789
1795
  let formData;
1790
1796
  if (this.options.framesSupport) {
@@ -1929,80 +1935,36 @@ function captureSnapshot(canvas, quality = 'medium', dummy, fixedScaling = false
1929
1935
  canvas.toBlob(onBlob, imageFormat, qualityInt[quality]);
1930
1936
  }
1931
1937
  }
1932
- async function saveArchive(files, archiveName) {
1933
- const zipBlob = await createZipBlob(files);
1934
- const url = URL.createObjectURL(zipBlob);
1935
- const link = document.createElement('a');
1936
- link.href = url;
1937
- link.download = `${archiveName}.zip`;
1938
- link.style.display = 'none';
1939
- document.body.appendChild(link);
1940
- link.click();
1941
- document.body.removeChild(link);
1942
- URL.revokeObjectURL(url);
1943
- }
1944
- async function createZipBlob(files) {
1945
- const parts = [];
1946
- const centralDir = [];
1938
+ async function packFrames(images) {
1939
+ const buffers = [];
1940
+ let totalSize = 0;
1941
+ for (const snapshot of images) {
1942
+ if (!snapshot.data)
1943
+ continue;
1944
+ const ab = await snapshot.data.arrayBuffer();
1945
+ buffers.push(ab);
1946
+ totalSize += 8 + 4 + ab.byteLength;
1947
+ }
1948
+ if (totalSize === 0)
1949
+ return null;
1950
+ const packed = new ArrayBuffer(totalSize);
1951
+ const view = new DataView(packed);
1952
+ const bytes = new Uint8Array(packed);
1947
1953
  let offset = 0;
1948
- for (const file of files) {
1949
- const nameBytes = new TextEncoder().encode(file.name);
1950
- const dataBytes = new Uint8Array(await file.data.arrayBuffer());
1951
- const crc = crc32(dataBytes);
1952
- // Local file header (30 bytes + filename)
1953
- const local = new Uint8Array(30 + nameBytes.length);
1954
- const lv = new DataView(local.buffer);
1955
- lv.setUint32(0, 0x04034b50, true);
1956
- lv.setUint16(4, 20, true);
1957
- lv.setUint16(8, 0, true);
1958
- lv.setUint32(14, crc, true);
1959
- lv.setUint32(18, dataBytes.length, true);
1960
- lv.setUint32(22, dataBytes.length, true);
1961
- lv.setUint16(26, nameBytes.length, true);
1962
- local.set(nameBytes, 30);
1963
- // Central directory entry (46 bytes + filename)
1964
- const cd = new Uint8Array(46 + nameBytes.length);
1965
- const cv = new DataView(cd.buffer);
1966
- cv.setUint32(0, 0x02014b50, true);
1967
- cv.setUint16(4, 20, true);
1968
- cv.setUint16(6, 20, true);
1969
- cv.setUint32(16, crc, true);
1970
- cv.setUint32(20, dataBytes.length, true);
1971
- cv.setUint32(24, dataBytes.length, true);
1972
- cv.setUint16(28, nameBytes.length, true);
1973
- cv.setUint32(42, offset, true);
1974
- cd.set(nameBytes, 46);
1975
- parts.push(local);
1976
- parts.push(dataBytes);
1977
- centralDir.push(cd);
1978
- offset += local.length + dataBytes.length;
1979
- }
1980
- const cdOffset = offset;
1981
- let cdSize = 0;
1982
- for (const entry of centralDir) {
1983
- parts.push(entry);
1984
- cdSize += entry.length;
1985
- }
1986
- // End of central directory (22 bytes)
1987
- const eocd = new Uint8Array(22);
1988
- const ev = new DataView(eocd.buffer);
1989
- ev.setUint32(0, 0x06054b50, true);
1990
- ev.setUint16(8, files.length, true);
1991
- ev.setUint16(10, files.length, true);
1992
- ev.setUint32(12, cdSize, true);
1993
- ev.setUint32(16, cdOffset, true);
1994
- parts.push(eocd);
1995
- return new Blob(parts, { type: 'application/zip' });
1996
- }
1997
- function crc32(data) {
1998
- let crc = 0xffffffff;
1999
- for (let i = 0; i < data.length; i++) {
2000
- crc ^= data[i];
2001
- for (let j = 0; j < 8; j++) {
2002
- crc = (crc >>> 1) ^ (crc & 1 ? 0xedb88320 : 0);
2003
- }
2004
- }
2005
- return (crc ^ 0xffffffff) >>> 0;
1954
+ for (let i = 0; i < images.length; i++) {
1955
+ if (!images[i].data)
1956
+ continue;
1957
+ const ab = buffers.shift();
1958
+ const ts = images[i].id;
1959
+ view.setUint32(offset, ts % 0x100000000, true);
1960
+ view.setUint32(offset + 4, Math.floor(ts / 0x100000000), true);
1961
+ offset += 8;
1962
+ view.setUint32(offset, ab.byteLength, true);
1963
+ offset += 4;
1964
+ bytes.set(new Uint8Array(ab), offset);
1965
+ offset += ab.byteLength;
1966
+ }
1967
+ return packed;
2006
1968
  }
2007
1969
 
2008
1970
  const LogLevel = {
@@ -3852,7 +3814,7 @@ class App {
3852
3814
  this.stopCallbacks = [];
3853
3815
  this.commitCallbacks = [];
3854
3816
  this.activityState = ActivityState.NotActive;
3855
- this.version = '17.2.4'; // TODO: version compatability check inside each plugin.
3817
+ this.version = '17.2.5'; // TODO: version compatability check inside each plugin.
3856
3818
  this.socketMode = false;
3857
3819
  this.compressionThreshold = 24 * 1000;
3858
3820
  this.bc = null;
@@ -5036,7 +4998,6 @@ class App {
5036
4998
  if (startOpts.startCallback) {
5037
4999
  startOpts.startCallback(SuccessfulStart(onStartInfo));
5038
5000
  }
5039
- await this.tagWatcher.fetchTags(this.options.ingestPoint, token);
5040
5001
  this.activityState = ActivityState.Active;
5041
5002
  if (this.options.crossdomain?.enabled) {
5042
5003
  void this.bootChildrenFrames();
@@ -5073,6 +5034,7 @@ class App {
5073
5034
  }
5074
5035
  this.ticker.start();
5075
5036
  this.canvasRecorder?.startTracking();
5037
+ void this.tagWatcher.fetchTags(this.options.ingestPoint, token);
5076
5038
  return SuccessfulStart(onStartInfo);
5077
5039
  }
5078
5040
  catch (reason) {
@@ -6176,7 +6138,7 @@ function getUniqueSiblingClass(el) {
6176
6138
  return null;
6177
6139
  }
6178
6140
 
6179
- 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);})));}));};
6141
+ 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);})));}));};
6180
6142
 
6181
6143
  function getPaintBlocks(resources) {
6182
6144
  const paintBlocks = [];
@@ -6309,10 +6271,10 @@ function Timing (app, opts) {
6309
6271
  // onINP(): Chromium
6310
6272
  // onLCP(): Chromium, Firefox
6311
6273
  // onTTFB(): Chromium, Firefox, Safari
6312
- w(onVitalsSignal);
6313
- j(onVitalsSignal);
6314
- G(onVitalsSignal);
6315
- Q(onVitalsSignal);
6274
+ L(onVitalsSignal);
6275
+ S(onVitalsSignal);
6276
+ x(onVitalsSignal);
6277
+ $(onVitalsSignal);
6316
6278
  });
6317
6279
  app.attachStopCallback(function () {
6318
6280
  observer.disconnect();
@@ -7113,7 +7075,9 @@ class NetworkMessage {
7113
7075
  });
7114
7076
  if (!messageInfo)
7115
7077
  return null;
7116
- const isGraphql = messageInfo.url.includes("/graphql");
7078
+ const gqlHeader = "application/graphql-response";
7079
+ const isGraphql = messageInfo.url.includes("/graphql")
7080
+ || Object.values(messageInfo.request.headers).some(v => v.includes(gqlHeader));
7117
7081
  if (isGraphql && messageInfo.response.body && typeof messageInfo.response.body === 'string') {
7118
7082
  const isError = messageInfo.response.body.includes("errors");
7119
7083
  messageInfo.status = isError ? 400 : 200;
@@ -7419,6 +7383,7 @@ class FetchProxyHandler {
7419
7383
  this.tokenUrlMatcher = tokenUrlMatcher;
7420
7384
  }
7421
7385
  apply(target, _, argsList) {
7386
+ var _a;
7422
7387
  const input = argsList[0];
7423
7388
  const init = argsList[1];
7424
7389
  if (!input ||
@@ -7434,6 +7399,31 @@ class FetchProxyHandler {
7434
7399
  }
7435
7400
  const item = new NetworkMessage(this.ignoredHeaders, this.setSessionTokenHeader, this.sanitize);
7436
7401
  this.beforeFetch(item, input, init);
7402
+ const signal = (argsList[0] instanceof Request ? argsList[0].signal : undefined) ||
7403
+ ((_a = argsList[1]) === null || _a === void 0 ? void 0 : _a.signal);
7404
+ // guard to avoid double-send
7405
+ let abortedNotified = false;
7406
+ const notifyAbort = () => {
7407
+ if (abortedNotified)
7408
+ return;
7409
+ abortedNotified = true;
7410
+ item.endTime = performance.now();
7411
+ item.duration = item.endTime - (item.startTime || item.endTime);
7412
+ item.status = 0;
7413
+ item.statusText = "Aborted";
7414
+ item.readyState = 0;
7415
+ const msg = item.getMessage();
7416
+ if (msg)
7417
+ this.sendMessage(msg);
7418
+ };
7419
+ if (signal) {
7420
+ if (signal.aborted) {
7421
+ notifyAbort();
7422
+ }
7423
+ else {
7424
+ signal.addEventListener("abort", notifyAbort, { once: true });
7425
+ }
7426
+ }
7437
7427
  this.setSessionTokenHeader((name, value) => {
7438
7428
  if (this.tokenUrlMatcher !== undefined) {
7439
7429
  if (!this.tokenUrlMatcher(item.url)) {
@@ -7462,11 +7452,22 @@ class FetchProxyHandler {
7462
7452
  }
7463
7453
  });
7464
7454
  return target.apply(window, argsList)
7465
- .then(this.afterFetch(item))
7455
+ .then(this.afterFetch(item, () => {
7456
+ abortedNotified = true;
7457
+ }))
7466
7458
  .catch((e) => {
7467
- // mock finally
7468
7459
  item.endTime = performance.now();
7469
7460
  item.duration = item.endTime - (item.startTime || item.endTime);
7461
+ if (e && e.name === "AbortError") {
7462
+ item.status = 0;
7463
+ item.statusText = "Aborted";
7464
+ item.readyState = 0;
7465
+ if (!abortedNotified) {
7466
+ const msg = item.getMessage();
7467
+ if (msg)
7468
+ this.sendMessage(msg);
7469
+ }
7470
+ }
7470
7471
  throw e;
7471
7472
  });
7472
7473
  }
@@ -7518,8 +7519,10 @@ class FetchProxyHandler {
7518
7519
  item.requestData = genStringBody(init.body);
7519
7520
  }
7520
7521
  }
7521
- afterFetch(item) {
7522
+ afterFetch(item, onResolved) {
7522
7523
  return (resp) => {
7524
+ if (onResolved)
7525
+ onResolved === null || onResolved === void 0 ? void 0 : onResolved();
7523
7526
  item.endTime = performance.now();
7524
7527
  item.duration = item.endTime - (item.startTime || item.endTime);
7525
7528
  item.status = resp.status;
@@ -7555,7 +7558,15 @@ class FetchProxyHandler {
7555
7558
  }
7556
7559
  })
7557
7560
  .catch((e) => {
7558
- if (e.name !== "AbortError") {
7561
+ if (e.name === "AbortError") {
7562
+ item.status = 0;
7563
+ item.statusText = "Aborted";
7564
+ item.readyState = 0;
7565
+ const msg = item.getMessage();
7566
+ if (msg)
7567
+ this.sendMessage(msg);
7568
+ }
7569
+ else {
7559
7570
  throw e;
7560
7571
  }
7561
7572
  });
@@ -8245,6 +8256,8 @@ function webAnimations(app, options = {}) {
8245
8256
  const lastKF = anim.effect.getKeyframes().at(-1);
8246
8257
  if (!lastKF)
8247
8258
  return;
8259
+ if (!el || !(el instanceof Element) || !el.isConnected)
8260
+ return;
8248
8261
  const computedStyle = getComputedStyle(el);
8249
8262
  const keys = Object.keys(lastKF).filter((p) => !toIgnore.includes(p));
8250
8263
  // @ts-ignore
@@ -8656,7 +8669,7 @@ class ConstantProperties {
8656
8669
  user_id: this.user_id,
8657
8670
  distinct_id: this.deviceId,
8658
8671
  sdk_edition: 'web',
8659
- sdk_version: '17.2.4',
8672
+ sdk_version: '17.2.5',
8660
8673
  timezone: getUTCOffsetString(),
8661
8674
  search_engine: this.searchEngine,
8662
8675
  };
@@ -9358,7 +9371,7 @@ class API {
9358
9371
  this.signalStartIssue = (reason, missingApi) => {
9359
9372
  const doNotTrack = this.checkDoNotTrack();
9360
9373
  console.log("Tracker couldn't start due to:", JSON.stringify({
9361
- trackerVersion: '17.2.4',
9374
+ trackerVersion: '17.2.5',
9362
9375
  projectKey: this.options.projectKey,
9363
9376
  doNotTrack,
9364
9377
  reason: missingApi.length ? `missing api: ${missingApi.join(',')}` : reason,