@agentuity/frontend 0.0.111 → 0.1.0
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/analytics/beacon.d.ts +15 -0
- package/dist/analytics/beacon.d.ts.map +1 -0
- package/dist/analytics/beacon.js +177 -0
- package/dist/analytics/beacon.js.map +1 -0
- package/dist/analytics/collectors/clicks.d.ts +10 -0
- package/dist/analytics/collectors/clicks.d.ts.map +1 -0
- package/dist/analytics/collectors/clicks.js +84 -0
- package/dist/analytics/collectors/clicks.js.map +1 -0
- package/dist/analytics/collectors/errors.d.ts +5 -0
- package/dist/analytics/collectors/errors.d.ts.map +1 -0
- package/dist/analytics/collectors/errors.js +43 -0
- package/dist/analytics/collectors/errors.js.map +1 -0
- package/dist/analytics/collectors/forms.d.ts +5 -0
- package/dist/analytics/collectors/forms.d.ts.map +1 -0
- package/dist/analytics/collectors/forms.js +55 -0
- package/dist/analytics/collectors/forms.js.map +1 -0
- package/dist/analytics/collectors/pageview.d.ts +15 -0
- package/dist/analytics/collectors/pageview.d.ts.map +1 -0
- package/dist/analytics/collectors/pageview.js +64 -0
- package/dist/analytics/collectors/pageview.js.map +1 -0
- package/dist/analytics/collectors/scroll.d.ts +17 -0
- package/dist/analytics/collectors/scroll.d.ts.map +1 -0
- package/dist/analytics/collectors/scroll.js +93 -0
- package/dist/analytics/collectors/scroll.js.map +1 -0
- package/dist/analytics/collectors/spa.d.ts +10 -0
- package/dist/analytics/collectors/spa.d.ts.map +1 -0
- package/dist/analytics/collectors/spa.js +53 -0
- package/dist/analytics/collectors/spa.js.map +1 -0
- package/dist/analytics/collectors/visibility.d.ts +18 -0
- package/dist/analytics/collectors/visibility.d.ts.map +1 -0
- package/dist/analytics/collectors/visibility.js +81 -0
- package/dist/analytics/collectors/visibility.js.map +1 -0
- package/dist/analytics/collectors/webvitals.d.ts +6 -0
- package/dist/analytics/collectors/webvitals.d.ts.map +1 -0
- package/dist/analytics/collectors/webvitals.js +111 -0
- package/dist/analytics/collectors/webvitals.js.map +1 -0
- package/dist/analytics/events.d.ts +18 -0
- package/dist/analytics/events.d.ts.map +1 -0
- package/dist/analytics/events.js +126 -0
- package/dist/analytics/events.js.map +1 -0
- package/dist/analytics/index.d.ts +12 -0
- package/dist/analytics/index.d.ts.map +1 -0
- package/dist/analytics/index.js +12 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/analytics/offline.d.ts +19 -0
- package/dist/analytics/offline.d.ts.map +1 -0
- package/dist/analytics/offline.js +145 -0
- package/dist/analytics/offline.js.map +1 -0
- package/dist/analytics/types.d.ts +113 -0
- package/dist/analytics/types.d.ts.map +1 -0
- package/dist/analytics/types.js +2 -0
- package/dist/analytics/types.js.map +1 -0
- package/dist/analytics/utils/storage.d.ts +13 -0
- package/dist/analytics/utils/storage.d.ts.map +1 -0
- package/dist/analytics/utils/storage.js +63 -0
- package/dist/analytics/utils/storage.js.map +1 -0
- package/dist/analytics/utils/utm.d.ts +12 -0
- package/dist/analytics/utils/utm.d.ts.map +1 -0
- package/dist/analytics/utils/utm.js +27 -0
- package/dist/analytics/utils/utm.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
- package/src/analytics/beacon.ts +203 -0
- package/src/analytics/collectors/clicks.ts +100 -0
- package/src/analytics/collectors/errors.ts +49 -0
- package/src/analytics/collectors/forms.ts +64 -0
- package/src/analytics/collectors/pageview.ts +76 -0
- package/src/analytics/collectors/scroll.ts +112 -0
- package/src/analytics/collectors/spa.ts +60 -0
- package/src/analytics/collectors/visibility.ts +94 -0
- package/src/analytics/collectors/webvitals.ts +129 -0
- package/src/analytics/events.ts +144 -0
- package/src/analytics/index.ts +21 -0
- package/src/analytics/offline.ts +163 -0
- package/src/analytics/types.ts +139 -0
- package/src/analytics/utils/storage.ts +64 -0
- package/src/analytics/utils/utm.ts +36 -0
- package/src/index.ts +18 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Initialize SPA navigation tracking
|
|
3
|
+
* Hooks into history.pushState, history.replaceState, and popstate event
|
|
4
|
+
*/
|
|
5
|
+
export declare function initSPATracking(): void;
|
|
6
|
+
/**
|
|
7
|
+
* Cleanup SPA tracking (for testing)
|
|
8
|
+
*/
|
|
9
|
+
export declare function cleanupSPATracking(): void;
|
|
10
|
+
//# sourceMappingURL=spa.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spa.d.ts","sourceRoot":"","sources":["../../../src/analytics/collectors/spa.ts"],"names":[],"mappings":"AAiBA;;;GAGG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAuBtC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAUzC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { trackPageview } from './pageview';
|
|
2
|
+
let currentPath = '';
|
|
3
|
+
let originalPushState = null;
|
|
4
|
+
let originalReplaceState = null;
|
|
5
|
+
/**
|
|
6
|
+
* Handle URL change for SPA navigation
|
|
7
|
+
*/
|
|
8
|
+
function handleUrlChange() {
|
|
9
|
+
const newPath = window.location.pathname;
|
|
10
|
+
if (newPath !== currentPath) {
|
|
11
|
+
currentPath = newPath;
|
|
12
|
+
trackPageview(newPath);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Initialize SPA navigation tracking
|
|
17
|
+
* Hooks into history.pushState, history.replaceState, and popstate event
|
|
18
|
+
*/
|
|
19
|
+
export function initSPATracking() {
|
|
20
|
+
if (typeof window === 'undefined' || typeof history === 'undefined') {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
currentPath = window.location.pathname;
|
|
24
|
+
// Hook into history.pushState
|
|
25
|
+
originalPushState = history.pushState.bind(history);
|
|
26
|
+
history.pushState = function (...args) {
|
|
27
|
+
originalPushState?.apply(this, args);
|
|
28
|
+
handleUrlChange();
|
|
29
|
+
};
|
|
30
|
+
// Hook into history.replaceState
|
|
31
|
+
originalReplaceState = history.replaceState.bind(history);
|
|
32
|
+
history.replaceState = function (...args) {
|
|
33
|
+
originalReplaceState?.apply(this, args);
|
|
34
|
+
handleUrlChange();
|
|
35
|
+
};
|
|
36
|
+
// Listen for popstate (back/forward navigation)
|
|
37
|
+
window.addEventListener('popstate', handleUrlChange);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Cleanup SPA tracking (for testing)
|
|
41
|
+
*/
|
|
42
|
+
export function cleanupSPATracking() {
|
|
43
|
+
if (originalPushState) {
|
|
44
|
+
history.pushState = originalPushState;
|
|
45
|
+
originalPushState = null;
|
|
46
|
+
}
|
|
47
|
+
if (originalReplaceState) {
|
|
48
|
+
history.replaceState = originalReplaceState;
|
|
49
|
+
originalReplaceState = null;
|
|
50
|
+
}
|
|
51
|
+
window.removeEventListener('popstate', handleUrlChange);
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=spa.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spa.js","sourceRoot":"","sources":["../../../src/analytics/collectors/spa.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,IAAI,WAAW,GAAG,EAAE,CAAC;AACrB,IAAI,iBAAiB,GAAoC,IAAI,CAAC;AAC9D,IAAI,oBAAoB,GAAuC,IAAI,CAAC;AAEpE;;GAEG;AACH,SAAS,eAAe;IACvB,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACzC,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;QAC7B,WAAW,GAAG,OAAO,CAAC;QACtB,aAAa,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC9B,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE,CAAC;QACrE,OAAO;IACR,CAAC;IAED,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAEvC,8BAA8B;IAC9B,iBAAiB,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpD,OAAO,CAAC,SAAS,GAAG,UAAU,GAAG,IAAI;QACpC,iBAAiB,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACrC,eAAe,EAAE,CAAC;IACnB,CAAC,CAAC;IAEF,iCAAiC;IACjC,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1D,OAAO,CAAC,YAAY,GAAG,UAAU,GAAG,IAAI;QACvC,oBAAoB,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACxC,eAAe,EAAE,CAAC;IACnB,CAAC,CAAC;IAEF,gDAAgD;IAChD,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB;IACjC,IAAI,iBAAiB,EAAE,CAAC;QACvB,OAAO,CAAC,SAAS,GAAG,iBAAiB,CAAC;QACtC,iBAAiB,GAAG,IAAI,CAAC;IAC1B,CAAC;IACD,IAAI,oBAAoB,EAAE,CAAC;QAC1B,OAAO,CAAC,YAAY,GAAG,oBAAoB,CAAC;QAC5C,oBAAoB,GAAG,IAAI,CAAC;IAC7B,CAAC;IACD,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Initialize visibility tracking
|
|
3
|
+
* Tracks when user leaves/returns to the page
|
|
4
|
+
*/
|
|
5
|
+
export declare function initVisibilityTracking(): void;
|
|
6
|
+
/**
|
|
7
|
+
* Remove visibility tracking listener
|
|
8
|
+
*/
|
|
9
|
+
export declare function removeVisibilityTracking(): void;
|
|
10
|
+
/**
|
|
11
|
+
* Reset visibility tracking (for SPA navigation)
|
|
12
|
+
*/
|
|
13
|
+
export declare function resetVisibilityTracking(): void;
|
|
14
|
+
/**
|
|
15
|
+
* Get current time on page
|
|
16
|
+
*/
|
|
17
|
+
export declare function getCurrentTimeOnPage(): number;
|
|
18
|
+
//# sourceMappingURL=visibility.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visibility.d.ts","sourceRoot":"","sources":["../../../src/analytics/collectors/visibility.ts"],"names":[],"mappings":"AAsBA;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAwC7C;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAM/C;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAI9C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { createBaseEvent } from './pageview';
|
|
2
|
+
import { queueEvent } from '../events';
|
|
3
|
+
import { getMaxScrollDepth } from './scroll';
|
|
4
|
+
let pageEntryTime = 0;
|
|
5
|
+
let hiddenTime = 0;
|
|
6
|
+
let lastHiddenTimestamp = 0;
|
|
7
|
+
let visibilityTrackingInitialized = false;
|
|
8
|
+
let visibilityChangeHandler = null;
|
|
9
|
+
/**
|
|
10
|
+
* Get total time spent on page (excluding hidden time)
|
|
11
|
+
*/
|
|
12
|
+
function getTimeOnPage() {
|
|
13
|
+
if (pageEntryTime === 0) {
|
|
14
|
+
return 0;
|
|
15
|
+
}
|
|
16
|
+
const totalTime = Date.now() - pageEntryTime;
|
|
17
|
+
return Math.max(0, totalTime - hiddenTime);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Initialize visibility tracking
|
|
21
|
+
* Tracks when user leaves/returns to the page
|
|
22
|
+
*/
|
|
23
|
+
export function initVisibilityTracking() {
|
|
24
|
+
if (typeof document === 'undefined') {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
if (visibilityTrackingInitialized) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
visibilityTrackingInitialized = true;
|
|
31
|
+
pageEntryTime = Date.now();
|
|
32
|
+
hiddenTime = 0;
|
|
33
|
+
lastHiddenTimestamp = 0;
|
|
34
|
+
visibilityChangeHandler = () => {
|
|
35
|
+
if (document.visibilityState === 'hidden') {
|
|
36
|
+
lastHiddenTimestamp = Date.now();
|
|
37
|
+
// Track page leave with engagement metrics
|
|
38
|
+
const event = createBaseEvent('visibility');
|
|
39
|
+
event.event_name = 'page_hidden';
|
|
40
|
+
event.time_on_page = getTimeOnPage();
|
|
41
|
+
event.scroll_depth = getMaxScrollDepth();
|
|
42
|
+
queueEvent(event);
|
|
43
|
+
}
|
|
44
|
+
else if (document.visibilityState === 'visible') {
|
|
45
|
+
// Calculate hidden duration
|
|
46
|
+
if (lastHiddenTimestamp > 0) {
|
|
47
|
+
hiddenTime += Date.now() - lastHiddenTimestamp;
|
|
48
|
+
lastHiddenTimestamp = 0;
|
|
49
|
+
}
|
|
50
|
+
const event = createBaseEvent('visibility');
|
|
51
|
+
event.event_name = 'page_visible';
|
|
52
|
+
queueEvent(event);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
document.addEventListener('visibilitychange', visibilityChangeHandler);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Remove visibility tracking listener
|
|
59
|
+
*/
|
|
60
|
+
export function removeVisibilityTracking() {
|
|
61
|
+
if (visibilityChangeHandler) {
|
|
62
|
+
document.removeEventListener('visibilitychange', visibilityChangeHandler);
|
|
63
|
+
visibilityChangeHandler = null;
|
|
64
|
+
}
|
|
65
|
+
visibilityTrackingInitialized = false;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Reset visibility tracking (for SPA navigation)
|
|
69
|
+
*/
|
|
70
|
+
export function resetVisibilityTracking() {
|
|
71
|
+
pageEntryTime = Date.now();
|
|
72
|
+
hiddenTime = 0;
|
|
73
|
+
lastHiddenTimestamp = 0;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get current time on page
|
|
77
|
+
*/
|
|
78
|
+
export function getCurrentTimeOnPage() {
|
|
79
|
+
return getTimeOnPage();
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=visibility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visibility.js","sourceRoot":"","sources":["../../../src/analytics/collectors/visibility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,IAAI,aAAa,GAAG,CAAC,CAAC;AACtB,IAAI,UAAU,GAAG,CAAC,CAAC;AACnB,IAAI,mBAAmB,GAAG,CAAC,CAAC;AAC5B,IAAI,6BAA6B,GAAG,KAAK,CAAC;AAC1C,IAAI,uBAAuB,GAAwB,IAAI,CAAC;AAExD;;GAEG;AACH,SAAS,aAAa;IACrB,IAAI,aAAa,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,CAAC;IACV,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,CAAC;IAC7C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC,CAAC;AAC5C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB;IACrC,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;QACrC,OAAO;IACR,CAAC;IAED,IAAI,6BAA6B,EAAE,CAAC;QACnC,OAAO;IACR,CAAC;IACD,6BAA6B,GAAG,IAAI,CAAC;IAErC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC3B,UAAU,GAAG,CAAC,CAAC;IACf,mBAAmB,GAAG,CAAC,CAAC;IAExB,uBAAuB,GAAG,GAAG,EAAE;QAC9B,IAAI,QAAQ,CAAC,eAAe,KAAK,QAAQ,EAAE,CAAC;YAC3C,mBAAmB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAEjC,2CAA2C;YAC3C,MAAM,KAAK,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;YAC5C,KAAK,CAAC,UAAU,GAAG,aAAa,CAAC;YACjC,KAAK,CAAC,YAAY,GAAG,aAAa,EAAE,CAAC;YACrC,KAAK,CAAC,YAAY,GAAG,iBAAiB,EAAE,CAAC;YAEzC,UAAU,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;aAAM,IAAI,QAAQ,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YACnD,4BAA4B;YAC5B,IAAI,mBAAmB,GAAG,CAAC,EAAE,CAAC;gBAC7B,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,mBAAmB,CAAC;gBAC/C,mBAAmB,GAAG,CAAC,CAAC;YACzB,CAAC;YAED,MAAM,KAAK,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;YAC5C,KAAK,CAAC,UAAU,GAAG,cAAc,CAAC;YAElC,UAAU,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;IACF,CAAC,CAAC;IAEF,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,uBAAuB,CAAC,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB;IACvC,IAAI,uBAAuB,EAAE,CAAC;QAC7B,QAAQ,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,uBAAuB,CAAC,CAAC;QAC1E,uBAAuB,GAAG,IAAI,CAAC;IAChC,CAAC;IACD,6BAA6B,GAAG,KAAK,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACtC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC3B,UAAU,GAAG,CAAC,CAAC;IACf,mBAAmB,GAAG,CAAC,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IACnC,OAAO,aAAa,EAAE,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webvitals.d.ts","sourceRoot":"","sources":["../../../src/analytics/collectors/webvitals.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAyH5C"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { createBaseEvent } from './pageview';
|
|
2
|
+
import { queueEvent, flushEvents } from '../events';
|
|
3
|
+
/**
|
|
4
|
+
* Initialize Core Web Vitals tracking
|
|
5
|
+
* Uses PerformanceObserver to track LCP, FCP, CLS, INP
|
|
6
|
+
*/
|
|
7
|
+
export function initWebVitalsTracking() {
|
|
8
|
+
if (typeof window === 'undefined' || typeof PerformanceObserver === 'undefined') {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
// Track First Contentful Paint (FCP)
|
|
12
|
+
try {
|
|
13
|
+
const fcpObserver = new PerformanceObserver((list) => {
|
|
14
|
+
for (const entry of list.getEntries()) {
|
|
15
|
+
if (entry.name === 'first-contentful-paint') {
|
|
16
|
+
const event = createBaseEvent('web_vital');
|
|
17
|
+
event.event_name = 'fcp';
|
|
18
|
+
event.fcp = Math.round(entry.startTime);
|
|
19
|
+
queueEvent(event);
|
|
20
|
+
flushEvents();
|
|
21
|
+
fcpObserver.disconnect();
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
fcpObserver.observe({ type: 'paint', buffered: true });
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
// PerformanceObserver not supported for this entry type
|
|
29
|
+
}
|
|
30
|
+
// Track Largest Contentful Paint (LCP)
|
|
31
|
+
try {
|
|
32
|
+
let lcpValue = 0;
|
|
33
|
+
const lcpObserver = new PerformanceObserver((list) => {
|
|
34
|
+
const entries = list.getEntries();
|
|
35
|
+
const lastEntry = entries[entries.length - 1];
|
|
36
|
+
if (lastEntry) {
|
|
37
|
+
lcpValue = lastEntry.startTime;
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
lcpObserver.observe({ type: 'largest-contentful-paint', buffered: true });
|
|
41
|
+
// Report LCP when page becomes hidden
|
|
42
|
+
document.addEventListener('visibilitychange', () => {
|
|
43
|
+
if (document.visibilityState === 'hidden' && lcpValue > 0) {
|
|
44
|
+
const event = createBaseEvent('web_vital');
|
|
45
|
+
event.event_name = 'lcp';
|
|
46
|
+
event.lcp = Math.round(lcpValue);
|
|
47
|
+
queueEvent(event);
|
|
48
|
+
flushEvents();
|
|
49
|
+
lcpObserver.disconnect();
|
|
50
|
+
}
|
|
51
|
+
}, { once: true });
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// PerformanceObserver not supported for this entry type
|
|
55
|
+
}
|
|
56
|
+
// Track Cumulative Layout Shift (CLS)
|
|
57
|
+
try {
|
|
58
|
+
let clsValue = 0;
|
|
59
|
+
const clsObserver = new PerformanceObserver((list) => {
|
|
60
|
+
for (const entry of list.getEntries()) {
|
|
61
|
+
const layoutShift = entry;
|
|
62
|
+
if (!layoutShift.hadRecentInput && layoutShift.value) {
|
|
63
|
+
clsValue += layoutShift.value;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
clsObserver.observe({ type: 'layout-shift', buffered: true });
|
|
68
|
+
// Report CLS when page becomes hidden
|
|
69
|
+
document.addEventListener('visibilitychange', () => {
|
|
70
|
+
if (document.visibilityState === 'hidden') {
|
|
71
|
+
const event = createBaseEvent('web_vital');
|
|
72
|
+
event.event_name = 'cls';
|
|
73
|
+
event.cls = Math.round(clsValue * 1000) / 1000; // Round to 3 decimal places
|
|
74
|
+
queueEvent(event);
|
|
75
|
+
flushEvents();
|
|
76
|
+
clsObserver.disconnect();
|
|
77
|
+
}
|
|
78
|
+
}, { once: true });
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
// PerformanceObserver not supported for this entry type
|
|
82
|
+
}
|
|
83
|
+
// Track Interaction to Next Paint (INP)
|
|
84
|
+
try {
|
|
85
|
+
let inpValue = 0;
|
|
86
|
+
const inpObserver = new PerformanceObserver((list) => {
|
|
87
|
+
for (const entry of list.getEntries()) {
|
|
88
|
+
const eventEntry = entry;
|
|
89
|
+
if (eventEntry.duration && eventEntry.duration > inpValue) {
|
|
90
|
+
inpValue = eventEntry.duration;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
inpObserver.observe({ type: 'event', buffered: true });
|
|
95
|
+
// Report INP when page becomes hidden
|
|
96
|
+
document.addEventListener('visibilitychange', () => {
|
|
97
|
+
if (document.visibilityState === 'hidden' && inpValue > 0) {
|
|
98
|
+
const event = createBaseEvent('web_vital');
|
|
99
|
+
event.event_name = 'inp';
|
|
100
|
+
event.inp = Math.round(inpValue);
|
|
101
|
+
queueEvent(event);
|
|
102
|
+
flushEvents();
|
|
103
|
+
inpObserver.disconnect();
|
|
104
|
+
}
|
|
105
|
+
}, { once: true });
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
// PerformanceObserver not supported for this entry type
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=webvitals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webvitals.js","sourceRoot":"","sources":["../../../src/analytics/collectors/webvitals.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { AnalyticsEvent, AnalyticsPageConfig } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Initialize the event queue with config
|
|
4
|
+
*/
|
|
5
|
+
export declare function initEventQueue(pageConfig: AnalyticsPageConfig): void;
|
|
6
|
+
/**
|
|
7
|
+
* Queue an event for sending
|
|
8
|
+
*/
|
|
9
|
+
export declare function queueEvent(event: AnalyticsEvent): void;
|
|
10
|
+
/**
|
|
11
|
+
* Flush all queued events
|
|
12
|
+
*/
|
|
13
|
+
export declare function flushEvents(): void;
|
|
14
|
+
/**
|
|
15
|
+
* Get current queue length (for testing)
|
|
16
|
+
*/
|
|
17
|
+
export declare function getQueueLength(): number;
|
|
18
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/analytics/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAyB,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAW1F;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,mBAAmB,GAAG,IAAI,CAepE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CA6CtD;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAoDlC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { getVisitorId } from './utils/storage';
|
|
2
|
+
const BATCH_SIZE = 10;
|
|
3
|
+
const BATCH_TIMEOUT_MS = 5000;
|
|
4
|
+
const COLLECT_ENDPOINT = '/_agentuity/webanalytics/collect';
|
|
5
|
+
let eventQueue = [];
|
|
6
|
+
let batchTimeout = null;
|
|
7
|
+
let config = null;
|
|
8
|
+
/**
|
|
9
|
+
* Initialize the event queue with config
|
|
10
|
+
*/
|
|
11
|
+
export function initEventQueue(pageConfig) {
|
|
12
|
+
config = pageConfig;
|
|
13
|
+
// Flush on page unload
|
|
14
|
+
if (typeof window !== 'undefined') {
|
|
15
|
+
window.addEventListener('visibilitychange', () => {
|
|
16
|
+
if (document.visibilityState === 'hidden') {
|
|
17
|
+
flushEvents();
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
window.addEventListener('pagehide', () => {
|
|
21
|
+
flushEvents();
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Queue an event for sending
|
|
27
|
+
*/
|
|
28
|
+
export function queueEvent(event) {
|
|
29
|
+
if (!config) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
// Apply sample rate (default: 1 = 100%)
|
|
33
|
+
const sampleRate = config.sampleRate ?? 1;
|
|
34
|
+
if (sampleRate < 1 && Math.random() > sampleRate) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
// Check exclude patterns
|
|
38
|
+
const excludePatterns = config.excludePatterns ?? [];
|
|
39
|
+
if (excludePatterns.length > 0) {
|
|
40
|
+
const currentPath = window.location.pathname;
|
|
41
|
+
for (const pattern of excludePatterns) {
|
|
42
|
+
try {
|
|
43
|
+
if (new RegExp(pattern).test(currentPath)) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// Invalid regex, skip
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Add global properties to event data
|
|
53
|
+
if (config.globalProperties && Object.keys(config.globalProperties).length > 0) {
|
|
54
|
+
event.event_data = {
|
|
55
|
+
...config.globalProperties,
|
|
56
|
+
...event.event_data,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
eventQueue.push(event);
|
|
60
|
+
// Flush if batch size reached
|
|
61
|
+
if (eventQueue.length >= BATCH_SIZE) {
|
|
62
|
+
flushEvents();
|
|
63
|
+
}
|
|
64
|
+
else if (!batchTimeout) {
|
|
65
|
+
// Set timeout for batch flush
|
|
66
|
+
batchTimeout = setTimeout(() => {
|
|
67
|
+
flushEvents();
|
|
68
|
+
}, BATCH_TIMEOUT_MS);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Flush all queued events
|
|
73
|
+
*/
|
|
74
|
+
export function flushEvents() {
|
|
75
|
+
if (batchTimeout) {
|
|
76
|
+
clearTimeout(batchTimeout);
|
|
77
|
+
batchTimeout = null;
|
|
78
|
+
}
|
|
79
|
+
if (eventQueue.length === 0 || !config) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
const events = eventQueue;
|
|
83
|
+
eventQueue = [];
|
|
84
|
+
// In dev mode, log to console instead of sending
|
|
85
|
+
if (config.isDevmode) {
|
|
86
|
+
console.debug('[Agentuity Analytics] Events:', events);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const payload = {
|
|
90
|
+
org_id: config.orgId,
|
|
91
|
+
project_id: config.projectId,
|
|
92
|
+
session_id: config.sessionId,
|
|
93
|
+
thread_id: config.threadId,
|
|
94
|
+
visitor_id: getVisitorId(),
|
|
95
|
+
is_devmode: config.isDevmode,
|
|
96
|
+
events,
|
|
97
|
+
};
|
|
98
|
+
const body = JSON.stringify(payload);
|
|
99
|
+
// Use sendBeacon for reliable delivery
|
|
100
|
+
if (typeof navigator !== 'undefined' && navigator.sendBeacon) {
|
|
101
|
+
const sent = navigator.sendBeacon(COLLECT_ENDPOINT, body);
|
|
102
|
+
if (sent) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Fallback to fetch with keepalive
|
|
107
|
+
if (typeof fetch !== 'undefined') {
|
|
108
|
+
fetch(COLLECT_ENDPOINT, {
|
|
109
|
+
method: 'POST',
|
|
110
|
+
headers: {
|
|
111
|
+
'Content-Type': 'application/json',
|
|
112
|
+
},
|
|
113
|
+
body,
|
|
114
|
+
keepalive: true,
|
|
115
|
+
}).catch(() => {
|
|
116
|
+
// Silent failure - analytics is best effort
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Get current queue length (for testing)
|
|
122
|
+
*/
|
|
123
|
+
export function getQueueLength() {
|
|
124
|
+
return eventQueue.length;
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/analytics/events.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Web Analytics for Agentuity SDK applications
|
|
3
|
+
*
|
|
4
|
+
* This module provides client-side analytics tracking for web applications
|
|
5
|
+
* built with the Agentuity SDK.
|
|
6
|
+
*/
|
|
7
|
+
export { getAnalytics, track, initBeacon } from './beacon';
|
|
8
|
+
export type { AnalyticsClient, AnalyticsEvent, AnalyticsEventType, AnalyticsBatchPayload, AnalyticsPageConfig, } from './types';
|
|
9
|
+
export { trackPageview, createBaseEvent } from './collectors/pageview';
|
|
10
|
+
export { getVisitorId, isOptedOut, setOptOut } from './utils/storage';
|
|
11
|
+
export { getUTMParams } from './utils/utm';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analytics/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3D,YAAY,EACX,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,GACnB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Web Analytics for Agentuity SDK applications
|
|
3
|
+
*
|
|
4
|
+
* This module provides client-side analytics tracking for web applications
|
|
5
|
+
* built with the Agentuity SDK.
|
|
6
|
+
*/
|
|
7
|
+
export { getAnalytics, track, initBeacon } from './beacon';
|
|
8
|
+
// Re-export utilities for advanced usage
|
|
9
|
+
export { trackPageview, createBaseEvent } from './collectors/pageview';
|
|
10
|
+
export { getVisitorId, isOptedOut, setOptOut } from './utils/storage';
|
|
11
|
+
export { getUTMParams } from './utils/utm';
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analytics/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAU3D,yCAAyC;AACzC,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { AnalyticsEvent } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Store event in IndexedDB for offline persistence
|
|
4
|
+
*/
|
|
5
|
+
export declare function storeOfflineEvent(event: AnalyticsEvent): Promise<void>;
|
|
6
|
+
/**
|
|
7
|
+
* Get all offline events and clear them
|
|
8
|
+
*/
|
|
9
|
+
export declare function getAndClearOfflineEvents(): Promise<AnalyticsEvent[]>;
|
|
10
|
+
/**
|
|
11
|
+
* Check if we're online
|
|
12
|
+
*/
|
|
13
|
+
export declare function isOnline(): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Initialize offline support
|
|
16
|
+
* Listens for online event to flush queued events
|
|
17
|
+
*/
|
|
18
|
+
export declare function initOfflineSupport(flushCallback: () => void): void;
|
|
19
|
+
//# sourceMappingURL=offline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"offline.d.ts","sourceRoot":"","sources":["../../src/analytics/offline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AA0D9C;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAuC5E;AAED;;GAEG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAgC1E;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,OAAO,CAKlC;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,IAAI,GAAG,IAAI,CASlE"}
|