@nexushub/client 1.1.7 → 1.1.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/index.cjs +21 -14
- package/dist/index.js +21 -14
- package/dist/react.cjs +21 -14
- package/dist/react.js +21 -14
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -903,7 +903,8 @@ var ContentEngine = class {
|
|
|
903
903
|
this.localCache = new LocalCacheProxy();
|
|
904
904
|
this.memoryCache = new MemoryCache({
|
|
905
905
|
maxSize: 500,
|
|
906
|
-
ttl:
|
|
906
|
+
ttl: 5 * 1e3
|
|
907
|
+
// 👈 5 seconds
|
|
907
908
|
});
|
|
908
909
|
if (!this.isServer) {
|
|
909
910
|
this.browserCache = new BrowserCache(config.projectId);
|
|
@@ -1627,7 +1628,6 @@ var VitalsCollector = class {
|
|
|
1627
1628
|
tcp_connect: navEntry.connectEnd - navEntry.connectStart,
|
|
1628
1629
|
request_time: navEntry.responseEnd - navEntry.requestStart,
|
|
1629
1630
|
dom_load: navEntry.domComplete - navEntry.domInteractive,
|
|
1630
|
-
// NEW: raw fields matching Rust NavigationTiming struct
|
|
1631
1631
|
domain_lookup_start: navEntry.domainLookupStart,
|
|
1632
1632
|
domain_lookup_end: navEntry.domainLookupEnd,
|
|
1633
1633
|
connect_start: navEntry.connectStart,
|
|
@@ -1640,8 +1640,10 @@ var VitalsCollector = class {
|
|
|
1640
1640
|
"resource"
|
|
1641
1641
|
);
|
|
1642
1642
|
if (resourceEntries.length > 0) {
|
|
1643
|
-
this.metrics.resources = resourceEntries.filter(
|
|
1644
|
-
name
|
|
1643
|
+
this.metrics.resources = resourceEntries.filter(
|
|
1644
|
+
(r) => !r.name.includes("/api/collect") && !r.name.includes("/analytics") && !r.name.includes("sentry.gnapex.com")
|
|
1645
|
+
).sort((a, b) => b.duration - a.duration).slice(0, 5).map((r) => ({
|
|
1646
|
+
name: r.name.length > 120 ? r.name.substring(0, 120) + "..." : r.name,
|
|
1645
1647
|
initiatorType: r.initiatorType,
|
|
1646
1648
|
duration: Math.round(r.duration),
|
|
1647
1649
|
transferSize: r.transferSize > 0 ? r.transferSize : void 0,
|
|
@@ -1673,7 +1675,7 @@ var VitalsCollector = class {
|
|
|
1673
1675
|
var vitalsCollector = new VitalsCollector();
|
|
1674
1676
|
var initVitals = (_tracker) => {
|
|
1675
1677
|
if (process.env.NODE_ENV === "development") {
|
|
1676
|
-
console.log("[
|
|
1678
|
+
console.log("[GN-Apex] Web Vitals monitoring active");
|
|
1677
1679
|
}
|
|
1678
1680
|
};
|
|
1679
1681
|
|
|
@@ -1826,7 +1828,8 @@ var Tracker = class {
|
|
|
1826
1828
|
this.anonymousId = "";
|
|
1827
1829
|
this.isFlushing = false;
|
|
1828
1830
|
this.flushPromise = null;
|
|
1829
|
-
|
|
1831
|
+
// 🛡️ Batch size set to 10 to keep payloads strictly under Actix 32KB limit
|
|
1832
|
+
this.batchSize = 10;
|
|
1830
1833
|
this.config = config;
|
|
1831
1834
|
this.endpoint = `${this.config.analyticsUrl}/api/collect`;
|
|
1832
1835
|
this.circuitBreaker = new CircuitBreaker();
|
|
@@ -1838,7 +1841,7 @@ var Tracker = class {
|
|
|
1838
1841
|
}
|
|
1839
1842
|
async initSession() {
|
|
1840
1843
|
this.visitorId = await getVisitorId(
|
|
1841
|
-
this.config.privacy?.fingerprinting ??
|
|
1844
|
+
this.config.privacy?.fingerprinting ?? true
|
|
1842
1845
|
);
|
|
1843
1846
|
let anonId = safeGetItem("nexus_anon_id");
|
|
1844
1847
|
if (!anonId) {
|
|
@@ -1864,10 +1867,11 @@ var Tracker = class {
|
|
|
1864
1867
|
if (typeof window === "undefined") return;
|
|
1865
1868
|
safeSetItem("nexus_last_active", Date.now().toString());
|
|
1866
1869
|
const entropy = await getDeviceEntropy(
|
|
1867
|
-
this.config.privacy?.fingerprinting ??
|
|
1870
|
+
this.config.privacy?.fingerprinting ?? true
|
|
1868
1871
|
);
|
|
1869
|
-
const
|
|
1870
|
-
const
|
|
1872
|
+
const isPageView = eventType === "page_view" || eventType === "performance";
|
|
1873
|
+
const perfMetrics = isPageView ? vitalsCollector.getMetricsSnapshot() : void 0;
|
|
1874
|
+
const utmParams = isPageView ? extractUtmParams(window.location.href) : void 0;
|
|
1871
1875
|
const payload = {
|
|
1872
1876
|
projectId: this.config.projectId,
|
|
1873
1877
|
sessionId: this.sessionId,
|
|
@@ -1876,10 +1880,9 @@ var Tracker = class {
|
|
|
1876
1880
|
messageId: generateUUID(),
|
|
1877
1881
|
sentAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
1878
1882
|
version: SDK_VERSION,
|
|
1879
|
-
// Dynamically synced to SDK 1.1.0
|
|
1880
1883
|
url: window.location.href,
|
|
1881
|
-
referrer: document.referrer,
|
|
1882
|
-
userAgent: window.navigator.userAgent,
|
|
1884
|
+
referrer: isPageView ? document.referrer : void 0,
|
|
1885
|
+
userAgent: isPageView ? window.navigator.userAgent : void 0,
|
|
1883
1886
|
screenWidth: window.screen.width,
|
|
1884
1887
|
screenHeight: window.screen.height,
|
|
1885
1888
|
language: window.navigator.language,
|
|
@@ -1942,6 +1945,10 @@ var Tracker = class {
|
|
|
1942
1945
|
} catch {
|
|
1943
1946
|
response = void 0;
|
|
1944
1947
|
}
|
|
1948
|
+
if (response && response.status === 413) {
|
|
1949
|
+
await eventStorage.remove(storedEvents.map((e) => e.id));
|
|
1950
|
+
return;
|
|
1951
|
+
}
|
|
1945
1952
|
if (!response || response.status === 404 || response.status === 405) {
|
|
1946
1953
|
const results = await Promise.allSettled(
|
|
1947
1954
|
payloads.map(
|
|
@@ -1954,7 +1961,7 @@ var Tracker = class {
|
|
|
1954
1961
|
)
|
|
1955
1962
|
);
|
|
1956
1963
|
const successIds = results.flatMap(
|
|
1957
|
-
(r, i) => r.status === "fulfilled" && r.value.ok ? [storedEvents[i].id] : []
|
|
1964
|
+
(r, i) => r.status === "fulfilled" && (r.value.ok || r.value.status === 413) ? [storedEvents[i].id] : []
|
|
1958
1965
|
);
|
|
1959
1966
|
if (successIds.length) await eventStorage.remove(successIds);
|
|
1960
1967
|
if (successIds.length === storedEvents.length) {
|
package/dist/index.js
CHANGED
|
@@ -847,7 +847,8 @@ var ContentEngine = class {
|
|
|
847
847
|
this.localCache = new LocalCacheProxy();
|
|
848
848
|
this.memoryCache = new MemoryCache({
|
|
849
849
|
maxSize: 500,
|
|
850
|
-
ttl:
|
|
850
|
+
ttl: 5 * 1e3
|
|
851
|
+
// 👈 5 seconds
|
|
851
852
|
});
|
|
852
853
|
if (!this.isServer) {
|
|
853
854
|
this.browserCache = new BrowserCache(config.projectId);
|
|
@@ -1571,7 +1572,6 @@ var VitalsCollector = class {
|
|
|
1571
1572
|
tcp_connect: navEntry.connectEnd - navEntry.connectStart,
|
|
1572
1573
|
request_time: navEntry.responseEnd - navEntry.requestStart,
|
|
1573
1574
|
dom_load: navEntry.domComplete - navEntry.domInteractive,
|
|
1574
|
-
// NEW: raw fields matching Rust NavigationTiming struct
|
|
1575
1575
|
domain_lookup_start: navEntry.domainLookupStart,
|
|
1576
1576
|
domain_lookup_end: navEntry.domainLookupEnd,
|
|
1577
1577
|
connect_start: navEntry.connectStart,
|
|
@@ -1584,8 +1584,10 @@ var VitalsCollector = class {
|
|
|
1584
1584
|
"resource"
|
|
1585
1585
|
);
|
|
1586
1586
|
if (resourceEntries.length > 0) {
|
|
1587
|
-
this.metrics.resources = resourceEntries.filter(
|
|
1588
|
-
name
|
|
1587
|
+
this.metrics.resources = resourceEntries.filter(
|
|
1588
|
+
(r) => !r.name.includes("/api/collect") && !r.name.includes("/analytics") && !r.name.includes("sentry.gnapex.com")
|
|
1589
|
+
).sort((a, b) => b.duration - a.duration).slice(0, 5).map((r) => ({
|
|
1590
|
+
name: r.name.length > 120 ? r.name.substring(0, 120) + "..." : r.name,
|
|
1589
1591
|
initiatorType: r.initiatorType,
|
|
1590
1592
|
duration: Math.round(r.duration),
|
|
1591
1593
|
transferSize: r.transferSize > 0 ? r.transferSize : void 0,
|
|
@@ -1617,7 +1619,7 @@ var VitalsCollector = class {
|
|
|
1617
1619
|
var vitalsCollector = new VitalsCollector();
|
|
1618
1620
|
var initVitals = (_tracker) => {
|
|
1619
1621
|
if (process.env.NODE_ENV === "development") {
|
|
1620
|
-
console.log("[
|
|
1622
|
+
console.log("[GN-Apex] Web Vitals monitoring active");
|
|
1621
1623
|
}
|
|
1622
1624
|
};
|
|
1623
1625
|
|
|
@@ -1770,7 +1772,8 @@ var Tracker = class {
|
|
|
1770
1772
|
this.anonymousId = "";
|
|
1771
1773
|
this.isFlushing = false;
|
|
1772
1774
|
this.flushPromise = null;
|
|
1773
|
-
|
|
1775
|
+
// 🛡️ Batch size set to 10 to keep payloads strictly under Actix 32KB limit
|
|
1776
|
+
this.batchSize = 10;
|
|
1774
1777
|
this.config = config;
|
|
1775
1778
|
this.endpoint = `${this.config.analyticsUrl}/api/collect`;
|
|
1776
1779
|
this.circuitBreaker = new CircuitBreaker();
|
|
@@ -1782,7 +1785,7 @@ var Tracker = class {
|
|
|
1782
1785
|
}
|
|
1783
1786
|
async initSession() {
|
|
1784
1787
|
this.visitorId = await getVisitorId(
|
|
1785
|
-
this.config.privacy?.fingerprinting ??
|
|
1788
|
+
this.config.privacy?.fingerprinting ?? true
|
|
1786
1789
|
);
|
|
1787
1790
|
let anonId = safeGetItem("nexus_anon_id");
|
|
1788
1791
|
if (!anonId) {
|
|
@@ -1808,10 +1811,11 @@ var Tracker = class {
|
|
|
1808
1811
|
if (typeof window === "undefined") return;
|
|
1809
1812
|
safeSetItem("nexus_last_active", Date.now().toString());
|
|
1810
1813
|
const entropy = await getDeviceEntropy(
|
|
1811
|
-
this.config.privacy?.fingerprinting ??
|
|
1814
|
+
this.config.privacy?.fingerprinting ?? true
|
|
1812
1815
|
);
|
|
1813
|
-
const
|
|
1814
|
-
const
|
|
1816
|
+
const isPageView = eventType === "page_view" || eventType === "performance";
|
|
1817
|
+
const perfMetrics = isPageView ? vitalsCollector.getMetricsSnapshot() : void 0;
|
|
1818
|
+
const utmParams = isPageView ? extractUtmParams(window.location.href) : void 0;
|
|
1815
1819
|
const payload = {
|
|
1816
1820
|
projectId: this.config.projectId,
|
|
1817
1821
|
sessionId: this.sessionId,
|
|
@@ -1820,10 +1824,9 @@ var Tracker = class {
|
|
|
1820
1824
|
messageId: generateUUID(),
|
|
1821
1825
|
sentAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
1822
1826
|
version: SDK_VERSION,
|
|
1823
|
-
// Dynamically synced to SDK 1.1.0
|
|
1824
1827
|
url: window.location.href,
|
|
1825
|
-
referrer: document.referrer,
|
|
1826
|
-
userAgent: window.navigator.userAgent,
|
|
1828
|
+
referrer: isPageView ? document.referrer : void 0,
|
|
1829
|
+
userAgent: isPageView ? window.navigator.userAgent : void 0,
|
|
1827
1830
|
screenWidth: window.screen.width,
|
|
1828
1831
|
screenHeight: window.screen.height,
|
|
1829
1832
|
language: window.navigator.language,
|
|
@@ -1886,6 +1889,10 @@ var Tracker = class {
|
|
|
1886
1889
|
} catch {
|
|
1887
1890
|
response = void 0;
|
|
1888
1891
|
}
|
|
1892
|
+
if (response && response.status === 413) {
|
|
1893
|
+
await eventStorage.remove(storedEvents.map((e) => e.id));
|
|
1894
|
+
return;
|
|
1895
|
+
}
|
|
1889
1896
|
if (!response || response.status === 404 || response.status === 405) {
|
|
1890
1897
|
const results = await Promise.allSettled(
|
|
1891
1898
|
payloads.map(
|
|
@@ -1898,7 +1905,7 @@ var Tracker = class {
|
|
|
1898
1905
|
)
|
|
1899
1906
|
);
|
|
1900
1907
|
const successIds = results.flatMap(
|
|
1901
|
-
(r, i) => r.status === "fulfilled" && r.value.ok ? [storedEvents[i].id] : []
|
|
1908
|
+
(r, i) => r.status === "fulfilled" && (r.value.ok || r.value.status === 413) ? [storedEvents[i].id] : []
|
|
1902
1909
|
);
|
|
1903
1910
|
if (successIds.length) await eventStorage.remove(successIds);
|
|
1904
1911
|
if (successIds.length === storedEvents.length) {
|
package/dist/react.cjs
CHANGED
|
@@ -829,7 +829,8 @@ var ContentEngine = class {
|
|
|
829
829
|
this.localCache = new LocalCacheProxy();
|
|
830
830
|
this.memoryCache = new MemoryCache({
|
|
831
831
|
maxSize: 500,
|
|
832
|
-
ttl:
|
|
832
|
+
ttl: 5 * 1e3
|
|
833
|
+
// 👈 5 seconds
|
|
833
834
|
});
|
|
834
835
|
if (!this.isServer) {
|
|
835
836
|
this.browserCache = new BrowserCache(config.projectId);
|
|
@@ -1550,7 +1551,6 @@ var VitalsCollector = class {
|
|
|
1550
1551
|
tcp_connect: navEntry.connectEnd - navEntry.connectStart,
|
|
1551
1552
|
request_time: navEntry.responseEnd - navEntry.requestStart,
|
|
1552
1553
|
dom_load: navEntry.domComplete - navEntry.domInteractive,
|
|
1553
|
-
// NEW: raw fields matching Rust NavigationTiming struct
|
|
1554
1554
|
domain_lookup_start: navEntry.domainLookupStart,
|
|
1555
1555
|
domain_lookup_end: navEntry.domainLookupEnd,
|
|
1556
1556
|
connect_start: navEntry.connectStart,
|
|
@@ -1563,8 +1563,10 @@ var VitalsCollector = class {
|
|
|
1563
1563
|
"resource"
|
|
1564
1564
|
);
|
|
1565
1565
|
if (resourceEntries.length > 0) {
|
|
1566
|
-
this.metrics.resources = resourceEntries.filter(
|
|
1567
|
-
name
|
|
1566
|
+
this.metrics.resources = resourceEntries.filter(
|
|
1567
|
+
(r) => !r.name.includes("/api/collect") && !r.name.includes("/analytics") && !r.name.includes("sentry.gnapex.com")
|
|
1568
|
+
).sort((a, b) => b.duration - a.duration).slice(0, 5).map((r) => ({
|
|
1569
|
+
name: r.name.length > 120 ? r.name.substring(0, 120) + "..." : r.name,
|
|
1568
1570
|
initiatorType: r.initiatorType,
|
|
1569
1571
|
duration: Math.round(r.duration),
|
|
1570
1572
|
transferSize: r.transferSize > 0 ? r.transferSize : void 0,
|
|
@@ -1596,7 +1598,7 @@ var VitalsCollector = class {
|
|
|
1596
1598
|
var vitalsCollector = new VitalsCollector();
|
|
1597
1599
|
var initVitals = (_tracker) => {
|
|
1598
1600
|
if (process.env.NODE_ENV === "development") {
|
|
1599
|
-
console.log("[
|
|
1601
|
+
console.log("[GN-Apex] Web Vitals monitoring active");
|
|
1600
1602
|
}
|
|
1601
1603
|
};
|
|
1602
1604
|
|
|
@@ -1749,7 +1751,8 @@ var Tracker = class {
|
|
|
1749
1751
|
this.anonymousId = "";
|
|
1750
1752
|
this.isFlushing = false;
|
|
1751
1753
|
this.flushPromise = null;
|
|
1752
|
-
|
|
1754
|
+
// 🛡️ Batch size set to 10 to keep payloads strictly under Actix 32KB limit
|
|
1755
|
+
this.batchSize = 10;
|
|
1753
1756
|
this.config = config;
|
|
1754
1757
|
this.endpoint = `${this.config.analyticsUrl}/api/collect`;
|
|
1755
1758
|
this.circuitBreaker = new CircuitBreaker();
|
|
@@ -1761,7 +1764,7 @@ var Tracker = class {
|
|
|
1761
1764
|
}
|
|
1762
1765
|
async initSession() {
|
|
1763
1766
|
this.visitorId = await getVisitorId(
|
|
1764
|
-
_nullishCoalesce(_optionalChain([this, 'access', _27 => _27.config, 'access', _28 => _28.privacy, 'optionalAccess', _29 => _29.fingerprinting]), () => (
|
|
1767
|
+
_nullishCoalesce(_optionalChain([this, 'access', _27 => _27.config, 'access', _28 => _28.privacy, 'optionalAccess', _29 => _29.fingerprinting]), () => ( true))
|
|
1765
1768
|
);
|
|
1766
1769
|
let anonId = safeGetItem("nexus_anon_id");
|
|
1767
1770
|
if (!anonId) {
|
|
@@ -1787,10 +1790,11 @@ var Tracker = class {
|
|
|
1787
1790
|
if (typeof window === "undefined") return;
|
|
1788
1791
|
safeSetItem("nexus_last_active", Date.now().toString());
|
|
1789
1792
|
const entropy = await getDeviceEntropy(
|
|
1790
|
-
_nullishCoalesce(_optionalChain([this, 'access', _30 => _30.config, 'access', _31 => _31.privacy, 'optionalAccess', _32 => _32.fingerprinting]), () => (
|
|
1793
|
+
_nullishCoalesce(_optionalChain([this, 'access', _30 => _30.config, 'access', _31 => _31.privacy, 'optionalAccess', _32 => _32.fingerprinting]), () => ( true))
|
|
1791
1794
|
);
|
|
1792
|
-
const
|
|
1793
|
-
const
|
|
1795
|
+
const isPageView = eventType === "page_view" || eventType === "performance";
|
|
1796
|
+
const perfMetrics = isPageView ? vitalsCollector.getMetricsSnapshot() : void 0;
|
|
1797
|
+
const utmParams = isPageView ? extractUtmParams(window.location.href) : void 0;
|
|
1794
1798
|
const payload = {
|
|
1795
1799
|
projectId: this.config.projectId,
|
|
1796
1800
|
sessionId: this.sessionId,
|
|
@@ -1799,10 +1803,9 @@ var Tracker = class {
|
|
|
1799
1803
|
messageId: generateUUID(),
|
|
1800
1804
|
sentAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
1801
1805
|
version: _chunkOP3LNZPCcjs.SDK_VERSION,
|
|
1802
|
-
// Dynamically synced to SDK 1.1.0
|
|
1803
1806
|
url: window.location.href,
|
|
1804
|
-
referrer: document.referrer,
|
|
1805
|
-
userAgent: window.navigator.userAgent,
|
|
1807
|
+
referrer: isPageView ? document.referrer : void 0,
|
|
1808
|
+
userAgent: isPageView ? window.navigator.userAgent : void 0,
|
|
1806
1809
|
screenWidth: window.screen.width,
|
|
1807
1810
|
screenHeight: window.screen.height,
|
|
1808
1811
|
language: window.navigator.language,
|
|
@@ -1865,6 +1868,10 @@ var Tracker = class {
|
|
|
1865
1868
|
} catch (e17) {
|
|
1866
1869
|
response = void 0;
|
|
1867
1870
|
}
|
|
1871
|
+
if (response && response.status === 413) {
|
|
1872
|
+
await eventStorage.remove(storedEvents.map((e) => e.id));
|
|
1873
|
+
return;
|
|
1874
|
+
}
|
|
1868
1875
|
if (!response || response.status === 404 || response.status === 405) {
|
|
1869
1876
|
const results = await Promise.allSettled(
|
|
1870
1877
|
payloads.map(
|
|
@@ -1877,7 +1884,7 @@ var Tracker = class {
|
|
|
1877
1884
|
)
|
|
1878
1885
|
);
|
|
1879
1886
|
const successIds = results.flatMap(
|
|
1880
|
-
(r, i) => r.status === "fulfilled" && r.value.ok ? [storedEvents[i].id] : []
|
|
1887
|
+
(r, i) => r.status === "fulfilled" && (r.value.ok || r.value.status === 413) ? [storedEvents[i].id] : []
|
|
1881
1888
|
);
|
|
1882
1889
|
if (successIds.length) await eventStorage.remove(successIds);
|
|
1883
1890
|
if (successIds.length === storedEvents.length) {
|
package/dist/react.js
CHANGED
|
@@ -829,7 +829,8 @@ var ContentEngine = class {
|
|
|
829
829
|
this.localCache = new LocalCacheProxy();
|
|
830
830
|
this.memoryCache = new MemoryCache({
|
|
831
831
|
maxSize: 500,
|
|
832
|
-
ttl:
|
|
832
|
+
ttl: 5 * 1e3
|
|
833
|
+
// 👈 5 seconds
|
|
833
834
|
});
|
|
834
835
|
if (!this.isServer) {
|
|
835
836
|
this.browserCache = new BrowserCache(config.projectId);
|
|
@@ -1550,7 +1551,6 @@ var VitalsCollector = class {
|
|
|
1550
1551
|
tcp_connect: navEntry.connectEnd - navEntry.connectStart,
|
|
1551
1552
|
request_time: navEntry.responseEnd - navEntry.requestStart,
|
|
1552
1553
|
dom_load: navEntry.domComplete - navEntry.domInteractive,
|
|
1553
|
-
// NEW: raw fields matching Rust NavigationTiming struct
|
|
1554
1554
|
domain_lookup_start: navEntry.domainLookupStart,
|
|
1555
1555
|
domain_lookup_end: navEntry.domainLookupEnd,
|
|
1556
1556
|
connect_start: navEntry.connectStart,
|
|
@@ -1563,8 +1563,10 @@ var VitalsCollector = class {
|
|
|
1563
1563
|
"resource"
|
|
1564
1564
|
);
|
|
1565
1565
|
if (resourceEntries.length > 0) {
|
|
1566
|
-
this.metrics.resources = resourceEntries.filter(
|
|
1567
|
-
name
|
|
1566
|
+
this.metrics.resources = resourceEntries.filter(
|
|
1567
|
+
(r) => !r.name.includes("/api/collect") && !r.name.includes("/analytics") && !r.name.includes("sentry.gnapex.com")
|
|
1568
|
+
).sort((a, b) => b.duration - a.duration).slice(0, 5).map((r) => ({
|
|
1569
|
+
name: r.name.length > 120 ? r.name.substring(0, 120) + "..." : r.name,
|
|
1568
1570
|
initiatorType: r.initiatorType,
|
|
1569
1571
|
duration: Math.round(r.duration),
|
|
1570
1572
|
transferSize: r.transferSize > 0 ? r.transferSize : void 0,
|
|
@@ -1596,7 +1598,7 @@ var VitalsCollector = class {
|
|
|
1596
1598
|
var vitalsCollector = new VitalsCollector();
|
|
1597
1599
|
var initVitals = (_tracker) => {
|
|
1598
1600
|
if (process.env.NODE_ENV === "development") {
|
|
1599
|
-
console.log("[
|
|
1601
|
+
console.log("[GN-Apex] Web Vitals monitoring active");
|
|
1600
1602
|
}
|
|
1601
1603
|
};
|
|
1602
1604
|
|
|
@@ -1749,7 +1751,8 @@ var Tracker = class {
|
|
|
1749
1751
|
this.anonymousId = "";
|
|
1750
1752
|
this.isFlushing = false;
|
|
1751
1753
|
this.flushPromise = null;
|
|
1752
|
-
|
|
1754
|
+
// 🛡️ Batch size set to 10 to keep payloads strictly under Actix 32KB limit
|
|
1755
|
+
this.batchSize = 10;
|
|
1753
1756
|
this.config = config;
|
|
1754
1757
|
this.endpoint = `${this.config.analyticsUrl}/api/collect`;
|
|
1755
1758
|
this.circuitBreaker = new CircuitBreaker();
|
|
@@ -1761,7 +1764,7 @@ var Tracker = class {
|
|
|
1761
1764
|
}
|
|
1762
1765
|
async initSession() {
|
|
1763
1766
|
this.visitorId = await getVisitorId(
|
|
1764
|
-
this.config.privacy?.fingerprinting ??
|
|
1767
|
+
this.config.privacy?.fingerprinting ?? true
|
|
1765
1768
|
);
|
|
1766
1769
|
let anonId = safeGetItem("nexus_anon_id");
|
|
1767
1770
|
if (!anonId) {
|
|
@@ -1787,10 +1790,11 @@ var Tracker = class {
|
|
|
1787
1790
|
if (typeof window === "undefined") return;
|
|
1788
1791
|
safeSetItem("nexus_last_active", Date.now().toString());
|
|
1789
1792
|
const entropy = await getDeviceEntropy(
|
|
1790
|
-
this.config.privacy?.fingerprinting ??
|
|
1793
|
+
this.config.privacy?.fingerprinting ?? true
|
|
1791
1794
|
);
|
|
1792
|
-
const
|
|
1793
|
-
const
|
|
1795
|
+
const isPageView = eventType === "page_view" || eventType === "performance";
|
|
1796
|
+
const perfMetrics = isPageView ? vitalsCollector.getMetricsSnapshot() : void 0;
|
|
1797
|
+
const utmParams = isPageView ? extractUtmParams(window.location.href) : void 0;
|
|
1794
1798
|
const payload = {
|
|
1795
1799
|
projectId: this.config.projectId,
|
|
1796
1800
|
sessionId: this.sessionId,
|
|
@@ -1799,10 +1803,9 @@ var Tracker = class {
|
|
|
1799
1803
|
messageId: generateUUID(),
|
|
1800
1804
|
sentAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
1801
1805
|
version: SDK_VERSION,
|
|
1802
|
-
// Dynamically synced to SDK 1.1.0
|
|
1803
1806
|
url: window.location.href,
|
|
1804
|
-
referrer: document.referrer,
|
|
1805
|
-
userAgent: window.navigator.userAgent,
|
|
1807
|
+
referrer: isPageView ? document.referrer : void 0,
|
|
1808
|
+
userAgent: isPageView ? window.navigator.userAgent : void 0,
|
|
1806
1809
|
screenWidth: window.screen.width,
|
|
1807
1810
|
screenHeight: window.screen.height,
|
|
1808
1811
|
language: window.navigator.language,
|
|
@@ -1865,6 +1868,10 @@ var Tracker = class {
|
|
|
1865
1868
|
} catch {
|
|
1866
1869
|
response = void 0;
|
|
1867
1870
|
}
|
|
1871
|
+
if (response && response.status === 413) {
|
|
1872
|
+
await eventStorage.remove(storedEvents.map((e) => e.id));
|
|
1873
|
+
return;
|
|
1874
|
+
}
|
|
1868
1875
|
if (!response || response.status === 404 || response.status === 405) {
|
|
1869
1876
|
const results = await Promise.allSettled(
|
|
1870
1877
|
payloads.map(
|
|
@@ -1877,7 +1884,7 @@ var Tracker = class {
|
|
|
1877
1884
|
)
|
|
1878
1885
|
);
|
|
1879
1886
|
const successIds = results.flatMap(
|
|
1880
|
-
(r, i) => r.status === "fulfilled" && r.value.ok ? [storedEvents[i].id] : []
|
|
1887
|
+
(r, i) => r.status === "fulfilled" && (r.value.ok || r.value.status === 413) ? [storedEvents[i].id] : []
|
|
1881
1888
|
);
|
|
1882
1889
|
if (successIds.length) await eventStorage.remove(successIds);
|
|
1883
1890
|
if (successIds.length === storedEvents.length) {
|