@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/lib/entry.js CHANGED
@@ -1742,7 +1742,7 @@ class CanvasRecorder {
1742
1742
  setTimeout(() => {
1743
1743
  this.app.nodes.scanTree(this.captureCanvas);
1744
1744
  this.app.nodes.attachNodeCallback(this.captureCanvas);
1745
- }, 250);
1745
+ }, 125);
1746
1746
  }
1747
1747
  sendSnaps(images, canvasId, createdAt) {
1748
1748
  if (Object.keys(this.snapshots).length === 0) {
@@ -1773,14 +1773,20 @@ class CanvasRecorder {
1773
1773
  }
1774
1774
  async uploadBatch(images, canvasId, createdAt) {
1775
1775
  if (this.options.isDebug) {
1776
- const fileEntries = [];
1777
- images.forEach((snapshot) => {
1778
- if (!snapshot.data)
1779
- return;
1780
- fileEntries.push({ data: snapshot.data, name: `${createdAt}_${canvasId}_${snapshot.id}.${this.fileExt}` });
1781
- });
1782
- void saveArchive(fileEntries, `canvas_${canvasId}_${createdAt}`);
1783
- return;
1776
+ const packed = await packFrames(images);
1777
+ if (packed) {
1778
+ const fileName = `${createdAt}_${canvasId}.${this.fileExt}.frames`;
1779
+ const url = URL.createObjectURL(new Blob([packed]));
1780
+ const link = document.createElement('a');
1781
+ link.href = url;
1782
+ link.download = fileName;
1783
+ link.style.display = 'none';
1784
+ document.body.appendChild(link);
1785
+ link.click();
1786
+ document.body.removeChild(link);
1787
+ URL.revokeObjectURL(url);
1788
+ }
1789
+ // fall through to also send to backend
1784
1790
  }
1785
1791
  let formData;
1786
1792
  if (this.options.framesSupport) {
@@ -1925,80 +1931,36 @@ function captureSnapshot(canvas, quality = 'medium', dummy, fixedScaling = false
1925
1931
  canvas.toBlob(onBlob, imageFormat, qualityInt[quality]);
1926
1932
  }
1927
1933
  }
1928
- async function saveArchive(files, archiveName) {
1929
- const zipBlob = await createZipBlob(files);
1930
- const url = URL.createObjectURL(zipBlob);
1931
- const link = document.createElement('a');
1932
- link.href = url;
1933
- link.download = `${archiveName}.zip`;
1934
- link.style.display = 'none';
1935
- document.body.appendChild(link);
1936
- link.click();
1937
- document.body.removeChild(link);
1938
- URL.revokeObjectURL(url);
1939
- }
1940
- async function createZipBlob(files) {
1941
- const parts = [];
1942
- const centralDir = [];
1934
+ async function packFrames(images) {
1935
+ const buffers = [];
1936
+ let totalSize = 0;
1937
+ for (const snapshot of images) {
1938
+ if (!snapshot.data)
1939
+ continue;
1940
+ const ab = await snapshot.data.arrayBuffer();
1941
+ buffers.push(ab);
1942
+ totalSize += 8 + 4 + ab.byteLength;
1943
+ }
1944
+ if (totalSize === 0)
1945
+ return null;
1946
+ const packed = new ArrayBuffer(totalSize);
1947
+ const view = new DataView(packed);
1948
+ const bytes = new Uint8Array(packed);
1943
1949
  let offset = 0;
1944
- for (const file of files) {
1945
- const nameBytes = new TextEncoder().encode(file.name);
1946
- const dataBytes = new Uint8Array(await file.data.arrayBuffer());
1947
- const crc = crc32(dataBytes);
1948
- // Local file header (30 bytes + filename)
1949
- const local = new Uint8Array(30 + nameBytes.length);
1950
- const lv = new DataView(local.buffer);
1951
- lv.setUint32(0, 0x04034b50, true);
1952
- lv.setUint16(4, 20, true);
1953
- lv.setUint16(8, 0, true);
1954
- lv.setUint32(14, crc, true);
1955
- lv.setUint32(18, dataBytes.length, true);
1956
- lv.setUint32(22, dataBytes.length, true);
1957
- lv.setUint16(26, nameBytes.length, true);
1958
- local.set(nameBytes, 30);
1959
- // Central directory entry (46 bytes + filename)
1960
- const cd = new Uint8Array(46 + nameBytes.length);
1961
- const cv = new DataView(cd.buffer);
1962
- cv.setUint32(0, 0x02014b50, true);
1963
- cv.setUint16(4, 20, true);
1964
- cv.setUint16(6, 20, true);
1965
- cv.setUint32(16, crc, true);
1966
- cv.setUint32(20, dataBytes.length, true);
1967
- cv.setUint32(24, dataBytes.length, true);
1968
- cv.setUint16(28, nameBytes.length, true);
1969
- cv.setUint32(42, offset, true);
1970
- cd.set(nameBytes, 46);
1971
- parts.push(local);
1972
- parts.push(dataBytes);
1973
- centralDir.push(cd);
1974
- offset += local.length + dataBytes.length;
1975
- }
1976
- const cdOffset = offset;
1977
- let cdSize = 0;
1978
- for (const entry of centralDir) {
1979
- parts.push(entry);
1980
- cdSize += entry.length;
1981
- }
1982
- // End of central directory (22 bytes)
1983
- const eocd = new Uint8Array(22);
1984
- const ev = new DataView(eocd.buffer);
1985
- ev.setUint32(0, 0x06054b50, true);
1986
- ev.setUint16(8, files.length, true);
1987
- ev.setUint16(10, files.length, true);
1988
- ev.setUint32(12, cdSize, true);
1989
- ev.setUint32(16, cdOffset, true);
1990
- parts.push(eocd);
1991
- return new Blob(parts, { type: 'application/zip' });
1992
- }
1993
- function crc32(data) {
1994
- let crc = 0xffffffff;
1995
- for (let i = 0; i < data.length; i++) {
1996
- crc ^= data[i];
1997
- for (let j = 0; j < 8; j++) {
1998
- crc = (crc >>> 1) ^ (crc & 1 ? 0xedb88320 : 0);
1999
- }
2000
- }
2001
- return (crc ^ 0xffffffff) >>> 0;
1950
+ for (let i = 0; i < images.length; i++) {
1951
+ if (!images[i].data)
1952
+ continue;
1953
+ const ab = buffers.shift();
1954
+ const ts = images[i].id;
1955
+ view.setUint32(offset, ts % 0x100000000, true);
1956
+ view.setUint32(offset + 4, Math.floor(ts / 0x100000000), true);
1957
+ offset += 8;
1958
+ view.setUint32(offset, ab.byteLength, true);
1959
+ offset += 4;
1960
+ bytes.set(new Uint8Array(ab), offset);
1961
+ offset += ab.byteLength;
1962
+ }
1963
+ return packed;
2002
1964
  }
2003
1965
 
2004
1966
  const LogLevel = {
@@ -3848,7 +3810,7 @@ class App {
3848
3810
  this.stopCallbacks = [];
3849
3811
  this.commitCallbacks = [];
3850
3812
  this.activityState = ActivityState.NotActive;
3851
- this.version = '17.2.4'; // TODO: version compatability check inside each plugin.
3813
+ this.version = '17.2.5'; // TODO: version compatability check inside each plugin.
3852
3814
  this.socketMode = false;
3853
3815
  this.compressionThreshold = 24 * 1000;
3854
3816
  this.bc = null;
@@ -5032,7 +4994,6 @@ class App {
5032
4994
  if (startOpts.startCallback) {
5033
4995
  startOpts.startCallback(SuccessfulStart(onStartInfo));
5034
4996
  }
5035
- await this.tagWatcher.fetchTags(this.options.ingestPoint, token);
5036
4997
  this.activityState = ActivityState.Active;
5037
4998
  if (this.options.crossdomain?.enabled) {
5038
4999
  void this.bootChildrenFrames();
@@ -5069,6 +5030,7 @@ class App {
5069
5030
  }
5070
5031
  this.ticker.start();
5071
5032
  this.canvasRecorder?.startTracking();
5033
+ void this.tagWatcher.fetchTags(this.options.ingestPoint, token);
5072
5034
  return SuccessfulStart(onStartInfo);
5073
5035
  }
5074
5036
  catch (reason) {
@@ -6172,7 +6134,7 @@ function getUniqueSiblingClass(el) {
6172
6134
  return null;
6173
6135
  }
6174
6136
 
6175
- 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);})));}));};
6137
+ 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);})));}));};
6176
6138
 
6177
6139
  function getPaintBlocks(resources) {
6178
6140
  const paintBlocks = [];
@@ -6305,10 +6267,10 @@ function Timing (app, opts) {
6305
6267
  // onINP(): Chromium
6306
6268
  // onLCP(): Chromium, Firefox
6307
6269
  // onTTFB(): Chromium, Firefox, Safari
6308
- w(onVitalsSignal);
6309
- j(onVitalsSignal);
6310
- G(onVitalsSignal);
6311
- Q(onVitalsSignal);
6270
+ L(onVitalsSignal);
6271
+ S(onVitalsSignal);
6272
+ x(onVitalsSignal);
6273
+ $(onVitalsSignal);
6312
6274
  });
6313
6275
  app.attachStopCallback(function () {
6314
6276
  observer.disconnect();
@@ -7109,7 +7071,9 @@ class NetworkMessage {
7109
7071
  });
7110
7072
  if (!messageInfo)
7111
7073
  return null;
7112
- const isGraphql = messageInfo.url.includes("/graphql");
7074
+ const gqlHeader = "application/graphql-response";
7075
+ const isGraphql = messageInfo.url.includes("/graphql")
7076
+ || Object.values(messageInfo.request.headers).some(v => v.includes(gqlHeader));
7113
7077
  if (isGraphql && messageInfo.response.body && typeof messageInfo.response.body === 'string') {
7114
7078
  const isError = messageInfo.response.body.includes("errors");
7115
7079
  messageInfo.status = isError ? 400 : 200;
@@ -7415,6 +7379,7 @@ class FetchProxyHandler {
7415
7379
  this.tokenUrlMatcher = tokenUrlMatcher;
7416
7380
  }
7417
7381
  apply(target, _, argsList) {
7382
+ var _a;
7418
7383
  const input = argsList[0];
7419
7384
  const init = argsList[1];
7420
7385
  if (!input ||
@@ -7430,6 +7395,31 @@ class FetchProxyHandler {
7430
7395
  }
7431
7396
  const item = new NetworkMessage(this.ignoredHeaders, this.setSessionTokenHeader, this.sanitize);
7432
7397
  this.beforeFetch(item, input, init);
7398
+ const signal = (argsList[0] instanceof Request ? argsList[0].signal : undefined) ||
7399
+ ((_a = argsList[1]) === null || _a === void 0 ? void 0 : _a.signal);
7400
+ // guard to avoid double-send
7401
+ let abortedNotified = false;
7402
+ const notifyAbort = () => {
7403
+ if (abortedNotified)
7404
+ return;
7405
+ abortedNotified = true;
7406
+ item.endTime = performance.now();
7407
+ item.duration = item.endTime - (item.startTime || item.endTime);
7408
+ item.status = 0;
7409
+ item.statusText = "Aborted";
7410
+ item.readyState = 0;
7411
+ const msg = item.getMessage();
7412
+ if (msg)
7413
+ this.sendMessage(msg);
7414
+ };
7415
+ if (signal) {
7416
+ if (signal.aborted) {
7417
+ notifyAbort();
7418
+ }
7419
+ else {
7420
+ signal.addEventListener("abort", notifyAbort, { once: true });
7421
+ }
7422
+ }
7433
7423
  this.setSessionTokenHeader((name, value) => {
7434
7424
  if (this.tokenUrlMatcher !== undefined) {
7435
7425
  if (!this.tokenUrlMatcher(item.url)) {
@@ -7458,11 +7448,22 @@ class FetchProxyHandler {
7458
7448
  }
7459
7449
  });
7460
7450
  return target.apply(window, argsList)
7461
- .then(this.afterFetch(item))
7451
+ .then(this.afterFetch(item, () => {
7452
+ abortedNotified = true;
7453
+ }))
7462
7454
  .catch((e) => {
7463
- // mock finally
7464
7455
  item.endTime = performance.now();
7465
7456
  item.duration = item.endTime - (item.startTime || item.endTime);
7457
+ if (e && e.name === "AbortError") {
7458
+ item.status = 0;
7459
+ item.statusText = "Aborted";
7460
+ item.readyState = 0;
7461
+ if (!abortedNotified) {
7462
+ const msg = item.getMessage();
7463
+ if (msg)
7464
+ this.sendMessage(msg);
7465
+ }
7466
+ }
7466
7467
  throw e;
7467
7468
  });
7468
7469
  }
@@ -7514,8 +7515,10 @@ class FetchProxyHandler {
7514
7515
  item.requestData = genStringBody(init.body);
7515
7516
  }
7516
7517
  }
7517
- afterFetch(item) {
7518
+ afterFetch(item, onResolved) {
7518
7519
  return (resp) => {
7520
+ if (onResolved)
7521
+ onResolved === null || onResolved === void 0 ? void 0 : onResolved();
7519
7522
  item.endTime = performance.now();
7520
7523
  item.duration = item.endTime - (item.startTime || item.endTime);
7521
7524
  item.status = resp.status;
@@ -7551,7 +7554,15 @@ class FetchProxyHandler {
7551
7554
  }
7552
7555
  })
7553
7556
  .catch((e) => {
7554
- if (e.name !== "AbortError") {
7557
+ if (e.name === "AbortError") {
7558
+ item.status = 0;
7559
+ item.statusText = "Aborted";
7560
+ item.readyState = 0;
7561
+ const msg = item.getMessage();
7562
+ if (msg)
7563
+ this.sendMessage(msg);
7564
+ }
7565
+ else {
7555
7566
  throw e;
7556
7567
  }
7557
7568
  });
@@ -8241,6 +8252,8 @@ function webAnimations(app, options = {}) {
8241
8252
  const lastKF = anim.effect.getKeyframes().at(-1);
8242
8253
  if (!lastKF)
8243
8254
  return;
8255
+ if (!el || !(el instanceof Element) || !el.isConnected)
8256
+ return;
8244
8257
  const computedStyle = getComputedStyle(el);
8245
8258
  const keys = Object.keys(lastKF).filter((p) => !toIgnore.includes(p));
8246
8259
  // @ts-ignore
@@ -8652,7 +8665,7 @@ class ConstantProperties {
8652
8665
  user_id: this.user_id,
8653
8666
  distinct_id: this.deviceId,
8654
8667
  sdk_edition: 'web',
8655
- sdk_version: '17.2.4',
8668
+ sdk_version: '17.2.5',
8656
8669
  timezone: getUTCOffsetString(),
8657
8670
  search_engine: this.searchEngine,
8658
8671
  };
@@ -9354,7 +9367,7 @@ class API {
9354
9367
  this.signalStartIssue = (reason, missingApi) => {
9355
9368
  const doNotTrack = this.checkDoNotTrack();
9356
9369
  console.log("Tracker couldn't start due to:", JSON.stringify({
9357
- trackerVersion: '17.2.4',
9370
+ trackerVersion: '17.2.5',
9358
9371
  projectKey: this.options.projectKey,
9359
9372
  doNotTrack,
9360
9373
  reason: missingApi.length ? `missing api: ${missingApi.join(',')}` : reason,