@shware/analytics 2.17.3 → 2.18.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/hooks/{use-screen-view-analytics.cjs → use-app-analytics.cjs} +30 -31
- package/dist/hooks/use-app-analytics.cjs.map +1 -0
- package/dist/hooks/use-app-analytics.d.cts +3 -0
- package/dist/hooks/use-app-analytics.d.ts +3 -0
- package/dist/hooks/use-app-analytics.mjs +50 -0
- package/dist/hooks/use-app-analytics.mjs.map +1 -0
- package/dist/hooks/use-web-analytics.cjs +128 -0
- package/dist/hooks/use-web-analytics.cjs.map +1 -0
- package/dist/hooks/{use-web-session-analytics.d.cts → use-web-analytics.d.cts} +2 -2
- package/dist/hooks/{use-web-session-analytics.d.ts → use-web-analytics.d.ts} +2 -2
- package/dist/hooks/use-web-analytics.mjs +103 -0
- package/dist/hooks/use-web-analytics.mjs.map +1 -0
- package/dist/native/index.cjs +3 -6
- package/dist/native/index.cjs.map +1 -1
- package/dist/native/index.d.cts +1 -2
- package/dist/native/index.d.ts +1 -2
- package/dist/native/index.mjs +2 -4
- package/dist/native/index.mjs.map +1 -1
- package/dist/next/index.cjs +2 -4
- package/dist/next/index.cjs.map +1 -1
- package/dist/next/index.mjs +2 -4
- package/dist/next/index.mjs.map +1 -1
- package/dist/react-router/index.cjs +2 -4
- package/dist/react-router/index.cjs.map +1 -1
- package/dist/react-router/index.mjs +2 -4
- package/dist/react-router/index.mjs.map +1 -1
- package/dist/setup/session.cjs +77 -22
- package/dist/setup/session.cjs.map +1 -1
- package/dist/setup/session.d.cts +27 -9
- package/dist/setup/session.d.ts +27 -9
- package/dist/setup/session.mjs +76 -18
- package/dist/setup/session.mjs.map +1 -1
- package/dist/track/gtag.cjs.map +1 -1
- package/dist/track/gtag.d.cts +0 -2
- package/dist/track/gtag.d.ts +0 -2
- package/dist/track/gtag.mjs.map +1 -1
- package/dist/track/index.cjs +6 -8
- package/dist/track/index.cjs.map +1 -1
- package/dist/track/index.mjs +7 -14
- package/dist/track/index.mjs.map +1 -1
- package/package.json +3 -3
- package/dist/hooks/use-app-session-analytics.cjs +0 -68
- package/dist/hooks/use-app-session-analytics.cjs.map +0 -1
- package/dist/hooks/use-app-session-analytics.d.cts +0 -3
- package/dist/hooks/use-app-session-analytics.d.ts +0 -3
- package/dist/hooks/use-app-session-analytics.mjs +0 -43
- package/dist/hooks/use-app-session-analytics.mjs.map +0 -1
- package/dist/hooks/use-page-view-analytics.cjs +0 -82
- package/dist/hooks/use-page-view-analytics.cjs.map +0 -1
- package/dist/hooks/use-page-view-analytics.d.cts +0 -3
- package/dist/hooks/use-page-view-analytics.d.ts +0 -3
- package/dist/hooks/use-page-view-analytics.mjs +0 -57
- package/dist/hooks/use-page-view-analytics.mjs.map +0 -1
- package/dist/hooks/use-screen-view-analytics.cjs.map +0 -1
- package/dist/hooks/use-screen-view-analytics.d.cts +0 -3
- package/dist/hooks/use-screen-view-analytics.d.ts +0 -3
- package/dist/hooks/use-screen-view-analytics.mjs +0 -51
- package/dist/hooks/use-screen-view-analytics.mjs.map +0 -1
- package/dist/hooks/use-web-session-analytics.cjs +0 -137
- package/dist/hooks/use-web-session-analytics.cjs.map +0 -1
- package/dist/hooks/use-web-session-analytics.mjs +0 -112
- package/dist/hooks/use-web-session-analytics.mjs.map +0 -1
|
@@ -17,60 +17,59 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
|
|
20
|
-
// src/hooks/use-
|
|
21
|
-
var
|
|
22
|
-
__export(
|
|
23
|
-
|
|
20
|
+
// src/hooks/use-app-analytics.ts
|
|
21
|
+
var use_app_analytics_exports = {};
|
|
22
|
+
__export(use_app_analytics_exports, {
|
|
23
|
+
useAppAnalytics: () => useAppAnalytics
|
|
24
24
|
});
|
|
25
|
-
module.exports = __toCommonJS(
|
|
25
|
+
module.exports = __toCommonJS(use_app_analytics_exports);
|
|
26
26
|
var import_expo_router = require("expo-router");
|
|
27
27
|
var import_react = require("react");
|
|
28
28
|
var import_react_native = require("react-native");
|
|
29
29
|
var import_setup = require("../setup/index.cjs");
|
|
30
|
+
var import_session = require("../setup/session.cjs");
|
|
30
31
|
var import_track = require("../track/index.cjs");
|
|
31
32
|
var import_use_previous = require("./use-previous.cjs");
|
|
32
|
-
function
|
|
33
|
+
function sendFirstOpen(pathname) {
|
|
34
|
+
const key = "first_open_time";
|
|
35
|
+
if (import_setup.config.storage.getItem(key)) return;
|
|
36
|
+
const properties = { screen_name: pathname, screen_class: pathname };
|
|
37
|
+
(0, import_track.track)("first_open", properties, { enableThirdPartyTracking: false });
|
|
38
|
+
import_setup.config.storage.setItem(key, (/* @__PURE__ */ new Date()).toISOString());
|
|
39
|
+
}
|
|
40
|
+
function sendUserEngagement() {
|
|
41
|
+
const engagement_time_msec = import_session.session.flush();
|
|
42
|
+
if (engagement_time_msec <= 0) return;
|
|
43
|
+
(0, import_track.track)("user_engagement", { engagement_time_msec }, { enableThirdPartyTracking: false });
|
|
44
|
+
}
|
|
45
|
+
function useAppAnalytics() {
|
|
33
46
|
const pathname = (0, import_expo_router.usePathname)();
|
|
34
47
|
const prevPathname = (0, import_use_previous.usePrevious)(pathname);
|
|
35
|
-
const session = (0, import_react.useRef)({ start: performance.now(), total: 0, isActive: true });
|
|
36
48
|
(0, import_react.useEffect)(() => {
|
|
49
|
+
sendFirstOpen(pathname);
|
|
50
|
+
(0, import_track.track)("session_start", void 0, { enableThirdPartyTracking: false });
|
|
37
51
|
const subscription = import_react_native.AppState.addEventListener("change", (state) => {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
session.
|
|
41
|
-
} else if (state !== "active" && session.
|
|
42
|
-
session.
|
|
43
|
-
|
|
52
|
+
import_session.session.updateAccumulator();
|
|
53
|
+
if (state === "active" && !import_session.session.isActive()) {
|
|
54
|
+
import_session.session.updateActive(true);
|
|
55
|
+
} else if (state !== "active" && import_session.session.isActive()) {
|
|
56
|
+
import_session.session.updateActive(false);
|
|
57
|
+
sendUserEngagement();
|
|
44
58
|
}
|
|
45
59
|
});
|
|
46
60
|
return () => subscription.remove();
|
|
47
61
|
}, []);
|
|
48
62
|
(0, import_react.useEffect)(() => {
|
|
49
|
-
const key = "first_open_time";
|
|
50
|
-
if (import_setup.config.storage.getItem(key)) return;
|
|
51
|
-
const properties = { screen_name: pathname, screen_class: pathname };
|
|
52
|
-
(0, import_track.track)("first_open", properties, { enableThirdPartyTracking: false });
|
|
53
|
-
import_setup.config.storage.setItem(key, (/* @__PURE__ */ new Date()).toISOString());
|
|
54
|
-
}, []);
|
|
55
|
-
(0, import_react.useEffect)(() => {
|
|
56
|
-
if (!prevPathname) {
|
|
57
|
-
session.current = { start: performance.now(), total: 0, isActive: true };
|
|
58
|
-
}
|
|
59
|
-
let duration = session.current.total;
|
|
60
|
-
if (session.current.isActive) {
|
|
61
|
-
duration += (performance.now() - session.current.start) / 1e3;
|
|
62
|
-
}
|
|
63
63
|
(0, import_track.track)("screen_view", {
|
|
64
64
|
screen_name: pathname,
|
|
65
65
|
screen_class: pathname,
|
|
66
66
|
previous_screen_class: prevPathname ?? void 0,
|
|
67
|
-
|
|
67
|
+
engagement_time_msec: prevPathname ? import_session.session.flush() : void 0
|
|
68
68
|
});
|
|
69
|
-
session.current = { start: performance.now(), total: 0, isActive: true };
|
|
70
69
|
}, [pathname]);
|
|
71
70
|
}
|
|
72
71
|
// Annotate the CommonJS export names for ESM import in node:
|
|
73
72
|
0 && (module.exports = {
|
|
74
|
-
|
|
73
|
+
useAppAnalytics
|
|
75
74
|
});
|
|
76
|
-
//# sourceMappingURL=use-
|
|
75
|
+
//# sourceMappingURL=use-app-analytics.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/use-app-analytics.ts"],"sourcesContent":["import { usePathname } from 'expo-router';\nimport { useEffect } from 'react';\nimport { AppState } from 'react-native';\nimport { config } from '../setup/index';\nimport { session } from '../setup/session';\nimport { track } from '../track/index';\nimport { usePrevious } from './use-previous';\n\nfunction sendFirstOpen(pathname: string) {\n const key = 'first_open_time';\n if (config.storage.getItem(key)) return;\n const properties = { screen_name: pathname, screen_class: pathname };\n track('first_open', properties, { enableThirdPartyTracking: false });\n config.storage.setItem(key, new Date().toISOString());\n}\n\nfunction sendUserEngagement() {\n const engagement_time_msec = session.flush();\n if (engagement_time_msec <= 0) return;\n track('user_engagement', { engagement_time_msec }, { enableThirdPartyTracking: false });\n}\n\nexport function useAppAnalytics() {\n const pathname = usePathname();\n const prevPathname = usePrevious(pathname);\n\n useEffect(() => {\n sendFirstOpen(pathname);\n track('session_start', undefined, { enableThirdPartyTracking: false });\n\n const subscription = AppState.addEventListener('change', (state) => {\n session.updateAccumulator();\n // when returning to the foreground from the background\n if (state === 'active' && !session.isActive()) {\n session.updateActive(true);\n }\n // when entering the background\n else if (state !== 'active' && session.isActive()) {\n session.updateActive(false);\n sendUserEngagement();\n }\n });\n\n return () => subscription.remove();\n }, []);\n\n // when the screen is switched, the engagement time of the previous screen is recorded\n useEffect(() => {\n track('screen_view', {\n screen_name: pathname,\n screen_class: pathname,\n previous_screen_class: prevPathname ?? undefined,\n engagement_time_msec: prevPathname ? session.flush() : undefined,\n });\n }, [pathname]);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAA4B;AAC5B,mBAA0B;AAC1B,0BAAyB;AACzB,mBAAuB;AACvB,qBAAwB;AACxB,mBAAsB;AACtB,0BAA4B;AAE5B,SAAS,cAAc,UAAkB;AACvC,QAAM,MAAM;AACZ,MAAI,oBAAO,QAAQ,QAAQ,GAAG,EAAG;AACjC,QAAM,aAAa,EAAE,aAAa,UAAU,cAAc,SAAS;AACnE,0BAAM,cAAc,YAAY,EAAE,0BAA0B,MAAM,CAAC;AACnE,sBAAO,QAAQ,QAAQ,MAAK,oBAAI,KAAK,GAAE,YAAY,CAAC;AACtD;AAEA,SAAS,qBAAqB;AAC5B,QAAM,uBAAuB,uBAAQ,MAAM;AAC3C,MAAI,wBAAwB,EAAG;AAC/B,0BAAM,mBAAmB,EAAE,qBAAqB,GAAG,EAAE,0BAA0B,MAAM,CAAC;AACxF;AAEO,SAAS,kBAAkB;AAChC,QAAM,eAAW,gCAAY;AAC7B,QAAM,mBAAe,iCAAY,QAAQ;AAEzC,8BAAU,MAAM;AACd,kBAAc,QAAQ;AACtB,4BAAM,iBAAiB,QAAW,EAAE,0BAA0B,MAAM,CAAC;AAErE,UAAM,eAAe,6BAAS,iBAAiB,UAAU,CAAC,UAAU;AAClE,6BAAQ,kBAAkB;AAE1B,UAAI,UAAU,YAAY,CAAC,uBAAQ,SAAS,GAAG;AAC7C,+BAAQ,aAAa,IAAI;AAAA,MAC3B,WAES,UAAU,YAAY,uBAAQ,SAAS,GAAG;AACjD,+BAAQ,aAAa,KAAK;AAC1B,2BAAmB;AAAA,MACrB;AAAA,IACF,CAAC;AAED,WAAO,MAAM,aAAa,OAAO;AAAA,EACnC,GAAG,CAAC,CAAC;AAGL,8BAAU,MAAM;AACd,4BAAM,eAAe;AAAA,MACnB,aAAa;AAAA,MACb,cAAc;AAAA,MACd,uBAAuB,gBAAgB;AAAA,MACvC,sBAAsB,eAAe,uBAAQ,MAAM,IAAI;AAAA,IACzD,CAAC;AAAA,EACH,GAAG,CAAC,QAAQ,CAAC;AACf;","names":[]}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// src/hooks/use-app-analytics.ts
|
|
2
|
+
import { usePathname } from "expo-router";
|
|
3
|
+
import { useEffect } from "react";
|
|
4
|
+
import { AppState } from "react-native";
|
|
5
|
+
import { config } from "../setup/index.mjs";
|
|
6
|
+
import { session } from "../setup/session.mjs";
|
|
7
|
+
import { track } from "../track/index.mjs";
|
|
8
|
+
import { usePrevious } from "./use-previous.mjs";
|
|
9
|
+
function sendFirstOpen(pathname) {
|
|
10
|
+
const key = "first_open_time";
|
|
11
|
+
if (config.storage.getItem(key)) return;
|
|
12
|
+
const properties = { screen_name: pathname, screen_class: pathname };
|
|
13
|
+
track("first_open", properties, { enableThirdPartyTracking: false });
|
|
14
|
+
config.storage.setItem(key, (/* @__PURE__ */ new Date()).toISOString());
|
|
15
|
+
}
|
|
16
|
+
function sendUserEngagement() {
|
|
17
|
+
const engagement_time_msec = session.flush();
|
|
18
|
+
if (engagement_time_msec <= 0) return;
|
|
19
|
+
track("user_engagement", { engagement_time_msec }, { enableThirdPartyTracking: false });
|
|
20
|
+
}
|
|
21
|
+
function useAppAnalytics() {
|
|
22
|
+
const pathname = usePathname();
|
|
23
|
+
const prevPathname = usePrevious(pathname);
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
sendFirstOpen(pathname);
|
|
26
|
+
track("session_start", void 0, { enableThirdPartyTracking: false });
|
|
27
|
+
const subscription = AppState.addEventListener("change", (state) => {
|
|
28
|
+
session.updateAccumulator();
|
|
29
|
+
if (state === "active" && !session.isActive()) {
|
|
30
|
+
session.updateActive(true);
|
|
31
|
+
} else if (state !== "active" && session.isActive()) {
|
|
32
|
+
session.updateActive(false);
|
|
33
|
+
sendUserEngagement();
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
return () => subscription.remove();
|
|
37
|
+
}, []);
|
|
38
|
+
useEffect(() => {
|
|
39
|
+
track("screen_view", {
|
|
40
|
+
screen_name: pathname,
|
|
41
|
+
screen_class: pathname,
|
|
42
|
+
previous_screen_class: prevPathname ?? void 0,
|
|
43
|
+
engagement_time_msec: prevPathname ? session.flush() : void 0
|
|
44
|
+
});
|
|
45
|
+
}, [pathname]);
|
|
46
|
+
}
|
|
47
|
+
export {
|
|
48
|
+
useAppAnalytics
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=use-app-analytics.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/use-app-analytics.ts"],"sourcesContent":["import { usePathname } from 'expo-router';\nimport { useEffect } from 'react';\nimport { AppState } from 'react-native';\nimport { config } from '../setup/index';\nimport { session } from '../setup/session';\nimport { track } from '../track/index';\nimport { usePrevious } from './use-previous';\n\nfunction sendFirstOpen(pathname: string) {\n const key = 'first_open_time';\n if (config.storage.getItem(key)) return;\n const properties = { screen_name: pathname, screen_class: pathname };\n track('first_open', properties, { enableThirdPartyTracking: false });\n config.storage.setItem(key, new Date().toISOString());\n}\n\nfunction sendUserEngagement() {\n const engagement_time_msec = session.flush();\n if (engagement_time_msec <= 0) return;\n track('user_engagement', { engagement_time_msec }, { enableThirdPartyTracking: false });\n}\n\nexport function useAppAnalytics() {\n const pathname = usePathname();\n const prevPathname = usePrevious(pathname);\n\n useEffect(() => {\n sendFirstOpen(pathname);\n track('session_start', undefined, { enableThirdPartyTracking: false });\n\n const subscription = AppState.addEventListener('change', (state) => {\n session.updateAccumulator();\n // when returning to the foreground from the background\n if (state === 'active' && !session.isActive()) {\n session.updateActive(true);\n }\n // when entering the background\n else if (state !== 'active' && session.isActive()) {\n session.updateActive(false);\n sendUserEngagement();\n }\n });\n\n return () => subscription.remove();\n }, []);\n\n // when the screen is switched, the engagement time of the previous screen is recorded\n useEffect(() => {\n track('screen_view', {\n screen_name: pathname,\n screen_class: pathname,\n previous_screen_class: prevPathname ?? undefined,\n engagement_time_msec: prevPathname ? session.flush() : undefined,\n });\n }, [pathname]);\n}\n"],"mappings":";AAAA,SAAS,mBAAmB;AAC5B,SAAS,iBAAiB;AAC1B,SAAS,gBAAgB;AACzB,SAAS,cAAc;AACvB,SAAS,eAAe;AACxB,SAAS,aAAa;AACtB,SAAS,mBAAmB;AAE5B,SAAS,cAAc,UAAkB;AACvC,QAAM,MAAM;AACZ,MAAI,OAAO,QAAQ,QAAQ,GAAG,EAAG;AACjC,QAAM,aAAa,EAAE,aAAa,UAAU,cAAc,SAAS;AACnE,QAAM,cAAc,YAAY,EAAE,0BAA0B,MAAM,CAAC;AACnE,SAAO,QAAQ,QAAQ,MAAK,oBAAI,KAAK,GAAE,YAAY,CAAC;AACtD;AAEA,SAAS,qBAAqB;AAC5B,QAAM,uBAAuB,QAAQ,MAAM;AAC3C,MAAI,wBAAwB,EAAG;AAC/B,QAAM,mBAAmB,EAAE,qBAAqB,GAAG,EAAE,0BAA0B,MAAM,CAAC;AACxF;AAEO,SAAS,kBAAkB;AAChC,QAAM,WAAW,YAAY;AAC7B,QAAM,eAAe,YAAY,QAAQ;AAEzC,YAAU,MAAM;AACd,kBAAc,QAAQ;AACtB,UAAM,iBAAiB,QAAW,EAAE,0BAA0B,MAAM,CAAC;AAErE,UAAM,eAAe,SAAS,iBAAiB,UAAU,CAAC,UAAU;AAClE,cAAQ,kBAAkB;AAE1B,UAAI,UAAU,YAAY,CAAC,QAAQ,SAAS,GAAG;AAC7C,gBAAQ,aAAa,IAAI;AAAA,MAC3B,WAES,UAAU,YAAY,QAAQ,SAAS,GAAG;AACjD,gBAAQ,aAAa,KAAK;AAC1B,2BAAmB;AAAA,MACrB;AAAA,IACF,CAAC;AAED,WAAO,MAAM,aAAa,OAAO;AAAA,EACnC,GAAG,CAAC,CAAC;AAGL,YAAU,MAAM;AACd,UAAM,eAAe;AAAA,MACnB,aAAa;AAAA,MACb,cAAc;AAAA,MACd,uBAAuB,gBAAgB;AAAA,MACvC,sBAAsB,eAAe,QAAQ,MAAM,IAAI;AAAA,IACzD,CAAC;AAAA,EACH,GAAG,CAAC,QAAQ,CAAC;AACf;","names":[]}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/hooks/use-web-analytics.ts
|
|
21
|
+
var use_web_analytics_exports = {};
|
|
22
|
+
__export(use_web_analytics_exports, {
|
|
23
|
+
useWebAnalytics: () => useWebAnalytics
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(use_web_analytics_exports);
|
|
26
|
+
var import_utils = require("@shware/utils");
|
|
27
|
+
var import_react = require("react");
|
|
28
|
+
var import_setup = require("../setup/index.cjs");
|
|
29
|
+
var import_session = require("../setup/session.cjs");
|
|
30
|
+
var import_track = require("../track/index.cjs");
|
|
31
|
+
var import_use_previous = require("./use-previous.cjs");
|
|
32
|
+
function sendFirstVisit(pathname) {
|
|
33
|
+
const key = "first_visit_time";
|
|
34
|
+
if (import_setup.config.storage.getItem(key)) return;
|
|
35
|
+
const properties = {
|
|
36
|
+
page_path: pathname,
|
|
37
|
+
page_title: document.title,
|
|
38
|
+
page_referrer: document.referrer,
|
|
39
|
+
page_location: window.location.href
|
|
40
|
+
};
|
|
41
|
+
(0, import_track.track)("first_visit", properties, { enableThirdPartyTracking: false });
|
|
42
|
+
import_setup.config.storage.setItem(key, (/* @__PURE__ */ new Date()).toISOString());
|
|
43
|
+
}
|
|
44
|
+
function sendUserEngagement() {
|
|
45
|
+
const engagement_time_msec = import_session.session.flush();
|
|
46
|
+
if (engagement_time_msec <= 0) return;
|
|
47
|
+
(0, import_track.sendBeacon)("user_engagement", { engagement_time_msec });
|
|
48
|
+
}
|
|
49
|
+
function sendScroll() {
|
|
50
|
+
const engagement_time_msec = import_session.session.flush();
|
|
51
|
+
if (engagement_time_msec <= 0) return;
|
|
52
|
+
(0, import_track.track)("scroll", { engagement_time_msec }, { enableThirdPartyTracking: false });
|
|
53
|
+
}
|
|
54
|
+
function getScrollPercent() {
|
|
55
|
+
const scrollTop = window.scrollY || document.documentElement.scrollTop;
|
|
56
|
+
const windowHeight = window.innerHeight;
|
|
57
|
+
const docHeight = document.documentElement.scrollHeight;
|
|
58
|
+
if (docHeight === 0) return 0;
|
|
59
|
+
return (scrollTop + windowHeight) * 100 / docHeight;
|
|
60
|
+
}
|
|
61
|
+
function onPageHide() {
|
|
62
|
+
import_session.session.pagehide();
|
|
63
|
+
sendUserEngagement();
|
|
64
|
+
}
|
|
65
|
+
function onVisibilityChange() {
|
|
66
|
+
import_session.session.visibilitychange(document.visibilityState);
|
|
67
|
+
if (document.visibilityState === "hidden") {
|
|
68
|
+
sendUserEngagement();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function useWebAnalytics(pathname) {
|
|
72
|
+
const prevPathname = (0, import_use_previous.usePrevious)(pathname);
|
|
73
|
+
const hasSendScroll = (0, import_react.useRef)(false);
|
|
74
|
+
(0, import_react.useEffect)(() => {
|
|
75
|
+
hasSendScroll.current = false;
|
|
76
|
+
}, [pathname]);
|
|
77
|
+
(0, import_react.useEffect)(() => {
|
|
78
|
+
sendFirstVisit(pathname);
|
|
79
|
+
(0, import_track.track)("session_start", void 0, { enableThirdPartyTracking: false });
|
|
80
|
+
const onScroll = (0, import_utils.throttle)(() => {
|
|
81
|
+
import_session.session.updateAccumulator();
|
|
82
|
+
if (hasSendScroll.current) return;
|
|
83
|
+
if (getScrollPercent() < 90) return;
|
|
84
|
+
hasSendScroll.current = true;
|
|
85
|
+
sendScroll();
|
|
86
|
+
}, 500);
|
|
87
|
+
const checkpointEvents = ["mousedown", "keydown", "touchstart"];
|
|
88
|
+
const checkpoint = (0, import_utils.throttle)(import_session.session.updateAccumulator, 1e3);
|
|
89
|
+
window.addEventListener("focus", import_session.session.focus, { passive: true });
|
|
90
|
+
window.addEventListener("blur", import_session.session.blur, { passive: true });
|
|
91
|
+
window.addEventListener("pageshow", import_session.session.pageshow, { passive: true });
|
|
92
|
+
window.addEventListener("pagehide", onPageHide, { passive: true });
|
|
93
|
+
window.addEventListener("scroll", onScroll, { passive: true });
|
|
94
|
+
document.addEventListener("visibilitychange", onVisibilityChange, { passive: true });
|
|
95
|
+
checkpointEvents.forEach((event) => {
|
|
96
|
+
window.addEventListener(event, checkpoint, { passive: true, capture: true });
|
|
97
|
+
});
|
|
98
|
+
return () => {
|
|
99
|
+
window.removeEventListener("focus", import_session.session.focus);
|
|
100
|
+
window.removeEventListener("blur", import_session.session.blur);
|
|
101
|
+
window.removeEventListener("pageshow", import_session.session.pageshow);
|
|
102
|
+
window.removeEventListener("pagehide", onPageHide);
|
|
103
|
+
window.removeEventListener("scroll", onScroll);
|
|
104
|
+
document.removeEventListener("visibilitychange", onVisibilityChange);
|
|
105
|
+
checkpointEvents.forEach((event) => {
|
|
106
|
+
window.removeEventListener(event, checkpoint);
|
|
107
|
+
});
|
|
108
|
+
onScroll.cancel();
|
|
109
|
+
checkpoint.cancel();
|
|
110
|
+
};
|
|
111
|
+
}, []);
|
|
112
|
+
(0, import_react.useEffect)(() => {
|
|
113
|
+
const properties = {
|
|
114
|
+
page_path: pathname,
|
|
115
|
+
page_title: document.title,
|
|
116
|
+
page_referrer: document.referrer,
|
|
117
|
+
page_location: window.location.href,
|
|
118
|
+
previous_page_path: prevPathname ?? void 0,
|
|
119
|
+
engagement_time_msec: prevPathname ? import_session.session.flush() : void 0
|
|
120
|
+
};
|
|
121
|
+
(0, import_track.track)("page_view", properties, { enableThirdPartyTracking: false });
|
|
122
|
+
}, [pathname]);
|
|
123
|
+
}
|
|
124
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
125
|
+
0 && (module.exports = {
|
|
126
|
+
useWebAnalytics
|
|
127
|
+
});
|
|
128
|
+
//# sourceMappingURL=use-web-analytics.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/use-web-analytics.ts"],"sourcesContent":["import { throttle } from '@shware/utils';\nimport { useEffect, useRef } from 'react';\nimport { config } from '../setup/index';\nimport { session } from '../setup/session';\nimport { sendBeacon, track } from '../track/index';\nimport { usePrevious } from './use-previous';\n\nfunction sendFirstVisit(pathname: string) {\n const key = 'first_visit_time';\n if (config.storage.getItem(key)) return;\n const properties = {\n page_path: pathname,\n page_title: document.title,\n page_referrer: document.referrer,\n page_location: window.location.href,\n };\n track('first_visit', properties, { enableThirdPartyTracking: false });\n config.storage.setItem(key, new Date().toISOString());\n}\n\nfunction sendUserEngagement() {\n const engagement_time_msec = session.flush();\n if (engagement_time_msec <= 0) return;\n sendBeacon('user_engagement', { engagement_time_msec });\n}\n\nfunction sendScroll() {\n const engagement_time_msec = session.flush();\n if (engagement_time_msec <= 0) return;\n track('scroll', { engagement_time_msec }, { enableThirdPartyTracking: false });\n}\n\nfunction getScrollPercent() {\n const scrollTop = window.scrollY || document.documentElement.scrollTop;\n const windowHeight = window.innerHeight;\n const docHeight = document.documentElement.scrollHeight;\n if (docHeight === 0) return 0;\n return ((scrollTop + windowHeight) * 100) / docHeight;\n}\n\nfunction onPageHide() {\n session.pagehide();\n sendUserEngagement();\n}\n\nfunction onVisibilityChange() {\n session.visibilitychange(document.visibilityState);\n if (document.visibilityState === 'hidden') {\n sendUserEngagement();\n }\n}\n\n/**\n * 1. send session_start event when the page is loaded\n * 2. send scroll event when the user scrolls more than 90% of the page\n * 3. send user_engagement event when the page is hidden or the user is not focused\n */\nexport function useWebAnalytics(pathname: string) {\n const prevPathname = usePrevious(pathname);\n\n // reset state when the pathname changes and send scroll when the user navigates to a new page\n const hasSendScroll = useRef(false);\n useEffect(() => {\n hasSendScroll.current = false;\n }, [pathname]);\n\n useEffect(() => {\n sendFirstVisit(pathname);\n track('session_start', undefined, { enableThirdPartyTracking: false });\n\n const onScroll = throttle(() => {\n session.updateAccumulator();\n if (hasSendScroll.current) return;\n // only send scroll when the user has scrolled more than 90% of the page\n if (getScrollPercent() < 90) return;\n hasSendScroll.current = true;\n sendScroll();\n }, 500);\n\n const checkpointEvents = ['mousedown', 'keydown', 'touchstart'];\n const checkpoint = throttle(session.updateAccumulator, 1000);\n\n window.addEventListener('focus', session.focus, { passive: true });\n window.addEventListener('blur', session.blur, { passive: true });\n window.addEventListener('pageshow', session.pageshow, { passive: true });\n window.addEventListener('pagehide', onPageHide, { passive: true });\n window.addEventListener('scroll', onScroll, { passive: true });\n document.addEventListener('visibilitychange', onVisibilityChange, { passive: true });\n\n // save checkpoint\n checkpointEvents.forEach((event) => {\n window.addEventListener(event, checkpoint, { passive: true, capture: true });\n });\n\n return () => {\n window.removeEventListener('focus', session.focus);\n window.removeEventListener('blur', session.blur);\n window.removeEventListener('pageshow', session.pageshow);\n window.removeEventListener('pagehide', onPageHide);\n window.removeEventListener('scroll', onScroll);\n document.removeEventListener('visibilitychange', onVisibilityChange);\n\n checkpointEvents.forEach((event) => {\n window.removeEventListener(event, checkpoint);\n });\n\n onScroll.cancel();\n checkpoint.cancel();\n };\n }, []);\n\n useEffect(() => {\n const properties = {\n page_path: pathname,\n page_title: document.title,\n page_referrer: document.referrer,\n page_location: window.location.href,\n previous_page_path: prevPathname ?? undefined,\n engagement_time_msec: prevPathname ? session.flush() : undefined,\n };\n\n track('page_view', properties, { enableThirdPartyTracking: false });\n }, [pathname]);\n}\n"],"mappings":"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","names":[]}
|
|
@@ -3,6 +3,6 @@
|
|
|
3
3
|
* 2. send scroll event when the user scrolls more than 90% of the page
|
|
4
4
|
* 3. send user_engagement event when the page is hidden or the user is not focused
|
|
5
5
|
*/
|
|
6
|
-
declare function
|
|
6
|
+
declare function useWebAnalytics(pathname: string): void;
|
|
7
7
|
|
|
8
|
-
export {
|
|
8
|
+
export { useWebAnalytics };
|
|
@@ -3,6 +3,6 @@
|
|
|
3
3
|
* 2. send scroll event when the user scrolls more than 90% of the page
|
|
4
4
|
* 3. send user_engagement event when the page is hidden or the user is not focused
|
|
5
5
|
*/
|
|
6
|
-
declare function
|
|
6
|
+
declare function useWebAnalytics(pathname: string): void;
|
|
7
7
|
|
|
8
|
-
export {
|
|
8
|
+
export { useWebAnalytics };
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
// src/hooks/use-web-analytics.ts
|
|
2
|
+
import { throttle } from "@shware/utils";
|
|
3
|
+
import { useEffect, useRef } from "react";
|
|
4
|
+
import { config } from "../setup/index.mjs";
|
|
5
|
+
import { session } from "../setup/session.mjs";
|
|
6
|
+
import { sendBeacon, track } from "../track/index.mjs";
|
|
7
|
+
import { usePrevious } from "./use-previous.mjs";
|
|
8
|
+
function sendFirstVisit(pathname) {
|
|
9
|
+
const key = "first_visit_time";
|
|
10
|
+
if (config.storage.getItem(key)) return;
|
|
11
|
+
const properties = {
|
|
12
|
+
page_path: pathname,
|
|
13
|
+
page_title: document.title,
|
|
14
|
+
page_referrer: document.referrer,
|
|
15
|
+
page_location: window.location.href
|
|
16
|
+
};
|
|
17
|
+
track("first_visit", properties, { enableThirdPartyTracking: false });
|
|
18
|
+
config.storage.setItem(key, (/* @__PURE__ */ new Date()).toISOString());
|
|
19
|
+
}
|
|
20
|
+
function sendUserEngagement() {
|
|
21
|
+
const engagement_time_msec = session.flush();
|
|
22
|
+
if (engagement_time_msec <= 0) return;
|
|
23
|
+
sendBeacon("user_engagement", { engagement_time_msec });
|
|
24
|
+
}
|
|
25
|
+
function sendScroll() {
|
|
26
|
+
const engagement_time_msec = session.flush();
|
|
27
|
+
if (engagement_time_msec <= 0) return;
|
|
28
|
+
track("scroll", { engagement_time_msec }, { enableThirdPartyTracking: false });
|
|
29
|
+
}
|
|
30
|
+
function getScrollPercent() {
|
|
31
|
+
const scrollTop = window.scrollY || document.documentElement.scrollTop;
|
|
32
|
+
const windowHeight = window.innerHeight;
|
|
33
|
+
const docHeight = document.documentElement.scrollHeight;
|
|
34
|
+
if (docHeight === 0) return 0;
|
|
35
|
+
return (scrollTop + windowHeight) * 100 / docHeight;
|
|
36
|
+
}
|
|
37
|
+
function onPageHide() {
|
|
38
|
+
session.pagehide();
|
|
39
|
+
sendUserEngagement();
|
|
40
|
+
}
|
|
41
|
+
function onVisibilityChange() {
|
|
42
|
+
session.visibilitychange(document.visibilityState);
|
|
43
|
+
if (document.visibilityState === "hidden") {
|
|
44
|
+
sendUserEngagement();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
function useWebAnalytics(pathname) {
|
|
48
|
+
const prevPathname = usePrevious(pathname);
|
|
49
|
+
const hasSendScroll = useRef(false);
|
|
50
|
+
useEffect(() => {
|
|
51
|
+
hasSendScroll.current = false;
|
|
52
|
+
}, [pathname]);
|
|
53
|
+
useEffect(() => {
|
|
54
|
+
sendFirstVisit(pathname);
|
|
55
|
+
track("session_start", void 0, { enableThirdPartyTracking: false });
|
|
56
|
+
const onScroll = throttle(() => {
|
|
57
|
+
session.updateAccumulator();
|
|
58
|
+
if (hasSendScroll.current) return;
|
|
59
|
+
if (getScrollPercent() < 90) return;
|
|
60
|
+
hasSendScroll.current = true;
|
|
61
|
+
sendScroll();
|
|
62
|
+
}, 500);
|
|
63
|
+
const checkpointEvents = ["mousedown", "keydown", "touchstart"];
|
|
64
|
+
const checkpoint = throttle(session.updateAccumulator, 1e3);
|
|
65
|
+
window.addEventListener("focus", session.focus, { passive: true });
|
|
66
|
+
window.addEventListener("blur", session.blur, { passive: true });
|
|
67
|
+
window.addEventListener("pageshow", session.pageshow, { passive: true });
|
|
68
|
+
window.addEventListener("pagehide", onPageHide, { passive: true });
|
|
69
|
+
window.addEventListener("scroll", onScroll, { passive: true });
|
|
70
|
+
document.addEventListener("visibilitychange", onVisibilityChange, { passive: true });
|
|
71
|
+
checkpointEvents.forEach((event) => {
|
|
72
|
+
window.addEventListener(event, checkpoint, { passive: true, capture: true });
|
|
73
|
+
});
|
|
74
|
+
return () => {
|
|
75
|
+
window.removeEventListener("focus", session.focus);
|
|
76
|
+
window.removeEventListener("blur", session.blur);
|
|
77
|
+
window.removeEventListener("pageshow", session.pageshow);
|
|
78
|
+
window.removeEventListener("pagehide", onPageHide);
|
|
79
|
+
window.removeEventListener("scroll", onScroll);
|
|
80
|
+
document.removeEventListener("visibilitychange", onVisibilityChange);
|
|
81
|
+
checkpointEvents.forEach((event) => {
|
|
82
|
+
window.removeEventListener(event, checkpoint);
|
|
83
|
+
});
|
|
84
|
+
onScroll.cancel();
|
|
85
|
+
checkpoint.cancel();
|
|
86
|
+
};
|
|
87
|
+
}, []);
|
|
88
|
+
useEffect(() => {
|
|
89
|
+
const properties = {
|
|
90
|
+
page_path: pathname,
|
|
91
|
+
page_title: document.title,
|
|
92
|
+
page_referrer: document.referrer,
|
|
93
|
+
page_location: window.location.href,
|
|
94
|
+
previous_page_path: prevPathname ?? void 0,
|
|
95
|
+
engagement_time_msec: prevPathname ? session.flush() : void 0
|
|
96
|
+
};
|
|
97
|
+
track("page_view", properties, { enableThirdPartyTracking: false });
|
|
98
|
+
}, [pathname]);
|
|
99
|
+
}
|
|
100
|
+
export {
|
|
101
|
+
useWebAnalytics
|
|
102
|
+
};
|
|
103
|
+
//# sourceMappingURL=use-web-analytics.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/use-web-analytics.ts"],"sourcesContent":["import { throttle } from '@shware/utils';\nimport { useEffect, useRef } from 'react';\nimport { config } from '../setup/index';\nimport { session } from '../setup/session';\nimport { sendBeacon, track } from '../track/index';\nimport { usePrevious } from './use-previous';\n\nfunction sendFirstVisit(pathname: string) {\n const key = 'first_visit_time';\n if (config.storage.getItem(key)) return;\n const properties = {\n page_path: pathname,\n page_title: document.title,\n page_referrer: document.referrer,\n page_location: window.location.href,\n };\n track('first_visit', properties, { enableThirdPartyTracking: false });\n config.storage.setItem(key, new Date().toISOString());\n}\n\nfunction sendUserEngagement() {\n const engagement_time_msec = session.flush();\n if (engagement_time_msec <= 0) return;\n sendBeacon('user_engagement', { engagement_time_msec });\n}\n\nfunction sendScroll() {\n const engagement_time_msec = session.flush();\n if (engagement_time_msec <= 0) return;\n track('scroll', { engagement_time_msec }, { enableThirdPartyTracking: false });\n}\n\nfunction getScrollPercent() {\n const scrollTop = window.scrollY || document.documentElement.scrollTop;\n const windowHeight = window.innerHeight;\n const docHeight = document.documentElement.scrollHeight;\n if (docHeight === 0) return 0;\n return ((scrollTop + windowHeight) * 100) / docHeight;\n}\n\nfunction onPageHide() {\n session.pagehide();\n sendUserEngagement();\n}\n\nfunction onVisibilityChange() {\n session.visibilitychange(document.visibilityState);\n if (document.visibilityState === 'hidden') {\n sendUserEngagement();\n }\n}\n\n/**\n * 1. send session_start event when the page is loaded\n * 2. send scroll event when the user scrolls more than 90% of the page\n * 3. send user_engagement event when the page is hidden or the user is not focused\n */\nexport function useWebAnalytics(pathname: string) {\n const prevPathname = usePrevious(pathname);\n\n // reset state when the pathname changes and send scroll when the user navigates to a new page\n const hasSendScroll = useRef(false);\n useEffect(() => {\n hasSendScroll.current = false;\n }, [pathname]);\n\n useEffect(() => {\n sendFirstVisit(pathname);\n track('session_start', undefined, { enableThirdPartyTracking: false });\n\n const onScroll = throttle(() => {\n session.updateAccumulator();\n if (hasSendScroll.current) return;\n // only send scroll when the user has scrolled more than 90% of the page\n if (getScrollPercent() < 90) return;\n hasSendScroll.current = true;\n sendScroll();\n }, 500);\n\n const checkpointEvents = ['mousedown', 'keydown', 'touchstart'];\n const checkpoint = throttle(session.updateAccumulator, 1000);\n\n window.addEventListener('focus', session.focus, { passive: true });\n window.addEventListener('blur', session.blur, { passive: true });\n window.addEventListener('pageshow', session.pageshow, { passive: true });\n window.addEventListener('pagehide', onPageHide, { passive: true });\n window.addEventListener('scroll', onScroll, { passive: true });\n document.addEventListener('visibilitychange', onVisibilityChange, { passive: true });\n\n // save checkpoint\n checkpointEvents.forEach((event) => {\n window.addEventListener(event, checkpoint, { passive: true, capture: true });\n });\n\n return () => {\n window.removeEventListener('focus', session.focus);\n window.removeEventListener('blur', session.blur);\n window.removeEventListener('pageshow', session.pageshow);\n window.removeEventListener('pagehide', onPageHide);\n window.removeEventListener('scroll', onScroll);\n document.removeEventListener('visibilitychange', onVisibilityChange);\n\n checkpointEvents.forEach((event) => {\n window.removeEventListener(event, checkpoint);\n });\n\n onScroll.cancel();\n checkpoint.cancel();\n };\n }, []);\n\n useEffect(() => {\n const properties = {\n page_path: pathname,\n page_title: document.title,\n page_referrer: document.referrer,\n page_location: window.location.href,\n previous_page_path: prevPathname ?? undefined,\n engagement_time_msec: prevPathname ? session.flush() : undefined,\n };\n\n track('page_view', properties, { enableThirdPartyTracking: false });\n }, [pathname]);\n}\n"],"mappings":"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","names":[]}
|
package/dist/native/index.cjs
CHANGED
|
@@ -26,13 +26,11 @@ __export(native_exports, {
|
|
|
26
26
|
getProbabilisticFingerprint: () => import_fingerprint.getProbabilisticFingerprint,
|
|
27
27
|
getTags: () => import_setup.getTags,
|
|
28
28
|
storage: () => import_setup.storage,
|
|
29
|
-
|
|
30
|
-
useScreenViewAnalytics: () => import_use_screen_view_analytics.useScreenViewAnalytics
|
|
29
|
+
useAppAnalytics: () => import_use_app_analytics.useAppAnalytics
|
|
31
30
|
});
|
|
32
31
|
module.exports = __toCommonJS(native_exports);
|
|
33
32
|
var import_setup = require("./setup.cjs");
|
|
34
|
-
var
|
|
35
|
-
var import_use_app_session_analytics = require("../hooks/use-app-session-analytics.cjs");
|
|
33
|
+
var import_use_app_analytics = require("../hooks/use-app-analytics.cjs");
|
|
36
34
|
var import_fingerprint = require("./fingerprint.cjs");
|
|
37
35
|
// Annotate the CommonJS export names for ESM import in node:
|
|
38
36
|
0 && (module.exports = {
|
|
@@ -42,7 +40,6 @@ var import_fingerprint = require("./fingerprint.cjs");
|
|
|
42
40
|
getProbabilisticFingerprint,
|
|
43
41
|
getTags,
|
|
44
42
|
storage,
|
|
45
|
-
|
|
46
|
-
useScreenViewAnalytics
|
|
43
|
+
useAppAnalytics
|
|
47
44
|
});
|
|
48
45
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/native/index.ts"],"sourcesContent":["export { getDeviceId, getDeviceType, getTags, storage } from './setup';\nexport {
|
|
1
|
+
{"version":3,"sources":["../../src/native/index.ts"],"sourcesContent":["export { getDeviceId, getDeviceType, getTags, storage } from './setup';\nexport { useAppAnalytics } from '../hooks/use-app-analytics';\nexport { getDeterministicFingerprint, getProbabilisticFingerprint } from './fingerprint';\n\nexport type { DeterministicFingerprint, ProbabilisticFingerprint } from './fingerprint';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA6D;AAC7D,+BAAgC;AAChC,yBAAyE;","names":[]}
|
package/dist/native/index.d.cts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export { getDeviceId, getDeviceType, getTags, storage } from './setup.cjs';
|
|
2
|
-
export {
|
|
3
|
-
export { useAppSessionAnalytics } from '../hooks/use-app-session-analytics.cjs';
|
|
2
|
+
export { useAppAnalytics } from '../hooks/use-app-analytics.cjs';
|
|
4
3
|
export { DeterministicFingerprint, ProbabilisticFingerprint, getDeterministicFingerprint, getProbabilisticFingerprint } from './fingerprint.cjs';
|
|
5
4
|
import '../setup/index.cjs';
|
|
6
5
|
import '../track/types.cjs';
|
package/dist/native/index.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export { getDeviceId, getDeviceType, getTags, storage } from './setup.js';
|
|
2
|
-
export {
|
|
3
|
-
export { useAppSessionAnalytics } from '../hooks/use-app-session-analytics.js';
|
|
2
|
+
export { useAppAnalytics } from '../hooks/use-app-analytics.js';
|
|
4
3
|
export { DeterministicFingerprint, ProbabilisticFingerprint, getDeterministicFingerprint, getProbabilisticFingerprint } from './fingerprint.js';
|
|
5
4
|
import '../setup/index.js';
|
|
6
5
|
import '../track/types.js';
|
package/dist/native/index.mjs
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
// src/native/index.ts
|
|
2
2
|
import { getDeviceId, getDeviceType, getTags, storage } from "./setup.mjs";
|
|
3
|
-
import {
|
|
4
|
-
import { useAppSessionAnalytics } from "../hooks/use-app-session-analytics.mjs";
|
|
3
|
+
import { useAppAnalytics } from "../hooks/use-app-analytics.mjs";
|
|
5
4
|
import { getDeterministicFingerprint, getProbabilisticFingerprint } from "./fingerprint.mjs";
|
|
6
5
|
export {
|
|
7
6
|
getDeterministicFingerprint,
|
|
@@ -10,7 +9,6 @@ export {
|
|
|
10
9
|
getProbabilisticFingerprint,
|
|
11
10
|
getTags,
|
|
12
11
|
storage,
|
|
13
|
-
|
|
14
|
-
useScreenViewAnalytics
|
|
12
|
+
useAppAnalytics
|
|
15
13
|
};
|
|
16
14
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/native/index.ts"],"sourcesContent":["export { getDeviceId, getDeviceType, getTags, storage } from './setup';\nexport {
|
|
1
|
+
{"version":3,"sources":["../../src/native/index.ts"],"sourcesContent":["export { getDeviceId, getDeviceType, getTags, storage } from './setup';\nexport { useAppAnalytics } from '../hooks/use-app-analytics';\nexport { getDeterministicFingerprint, getProbabilisticFingerprint } from './fingerprint';\n\nexport type { DeterministicFingerprint, ProbabilisticFingerprint } from './fingerprint';\n"],"mappings":";AAAA,SAAS,aAAa,eAAe,SAAS,eAAe;AAC7D,SAAS,uBAAuB;AAChC,SAAS,6BAA6B,mCAAmC;","names":[]}
|
package/dist/next/index.cjs
CHANGED
|
@@ -39,8 +39,7 @@ var import_script = __toESM(require("next/script"), 1);
|
|
|
39
39
|
var import_web_vitals = require("next/web-vitals");
|
|
40
40
|
var import_use_click_id_persistence = require("../hooks/use-click-id-persistence.cjs");
|
|
41
41
|
var import_use_outbound_click_analytics = require("../hooks/use-outbound-click-analytics.cjs");
|
|
42
|
-
var
|
|
43
|
-
var import_use_web_session_analytics = require("../hooks/use-web-session-analytics.cjs");
|
|
42
|
+
var import_use_web_analytics = require("../hooks/use-web-analytics.cjs");
|
|
44
43
|
var import_track = require("../track/index.cjs");
|
|
45
44
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
46
45
|
function Analytics({
|
|
@@ -56,8 +55,7 @@ function Analytics({
|
|
|
56
55
|
}) {
|
|
57
56
|
(0, import_use_click_id_persistence.useClickIdPersistence)();
|
|
58
57
|
const pathname = (0, import_navigation.usePathname)();
|
|
59
|
-
(0,
|
|
60
|
-
(0, import_use_web_session_analytics.useWebSessionAnalytics)(pathname);
|
|
58
|
+
(0, import_use_web_analytics.useWebAnalytics)(pathname);
|
|
61
59
|
(0, import_use_outbound_click_analytics.useOutboundClickAnalytics)();
|
|
62
60
|
(0, import_web_vitals.useReportWebVitals)((metric) => {
|
|
63
61
|
if (!reportWebVitals) return;
|
package/dist/next/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/next/index.tsx"],"sourcesContent":["'use client';\n\nimport { usePathname } from 'next/navigation';\nimport Script from 'next/script';\nimport { useReportWebVitals } from 'next/web-vitals';\nimport { useClickIdPersistence } from '../hooks/use-click-id-persistence';\nimport { useOutboundClickAnalytics } from '../hooks/use-outbound-click-analytics';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../src/next/index.tsx"],"sourcesContent":["'use client';\n\nimport { usePathname } from 'next/navigation';\nimport Script from 'next/script';\nimport { useReportWebVitals } from 'next/web-vitals';\nimport { useClickIdPersistence } from '../hooks/use-click-id-persistence';\nimport { useOutboundClickAnalytics } from '../hooks/use-outbound-click-analytics';\nimport { useWebAnalytics } from '../hooks/use-web-analytics';\nimport { track } from '../track/index';\nimport type { PixelId as MetaPixelId } from '../track/fbq';\nimport type { GaId, GtmId } from '../track/gtag';\nimport type { PixelId as RedditPixelId } from '../track/rdt';\n\ntype HotjarId = `${number}`;\n\ninterface Props {\n gaId?: GaId;\n gtmId?: GtmId;\n hotjarId?: HotjarId;\n metaPixelId?: MetaPixelId;\n redditPixelId?: RedditPixelId;\n linkedInPartnerId?: `${number}`;\n facebookAppId?: string;\n nonce?: string;\n debugMode?: boolean;\n reportWebVitals?: boolean;\n}\n\nexport function Analytics({\n gaId,\n nonce,\n debugMode,\n metaPixelId,\n hotjarId,\n redditPixelId,\n linkedInPartnerId,\n facebookAppId,\n reportWebVitals = true,\n}: Props) {\n useClickIdPersistence();\n\n const pathname = usePathname();\n useWebAnalytics(pathname);\n useOutboundClickAnalytics();\n\n useReportWebVitals((metric) => {\n if (!reportWebVitals) return;\n const properties = {\n id: metric.id,\n rating: metric.rating,\n value: metric.value,\n delta: metric.delta,\n navigation_type: metric.navigationType,\n non_interaction: true, // avoids affecting bounce rate.\n };\n track(metric.name, properties);\n });\n\n return (\n <>\n {facebookAppId && <meta property=\"fb:app_id\" content={facebookAppId} />}\n {gaId && (\n <>\n <Script\n id=\"gtag\"\n nonce={nonce}\n src={`https://www.googletagmanager.com/gtag/js?id=${gaId}`}\n />\n <Script\n nonce={nonce}\n id=\"gtag-init\"\n dangerouslySetInnerHTML={{\n __html: `\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n gtag('config', '${gaId}'${debugMode ? \" ,{ 'debug_mode': true }\" : ''});\n `,\n }}\n />\n </>\n )}\n {metaPixelId && (\n <Script\n id=\"meta-pixel\"\n strategy=\"afterInteractive\"\n dangerouslySetInnerHTML={{\n __html: `\n !(function (f, b, e, v, n, t, s) {\n if (f.fbq) return;\n n = f.fbq = function () {\n n.callMethod ? n.callMethod.apply(n, arguments) : n.queue.push(arguments);\n };\n if (!f._fbq) f._fbq = n;\n n.push = n;\n n.loaded = !0;\n n.version = '2.0';\n n.queue = [];\n t = b.createElement(e);\n t.async = !0;\n t.src = v;\n s = b.getElementsByTagName(e)[0];\n s.parentNode.insertBefore(t, s);\n })(window, document, 'script', 'https://connect.facebook.net/en_US/fbevents.js');\n fbq('init', '${metaPixelId}');\n fbq('track', 'PageView');`,\n }}\n />\n )}\n {redditPixelId && (\n <Script\n id=\"reddit-pixel\"\n strategy=\"afterInteractive\"\n dangerouslySetInnerHTML={{\n __html: `\n !function(w,d) {\n if(!w.rdt) {\n var p = w.rdt = function() {\n p.sendEvent ? p.sendEvent.apply(p,arguments) : p.callQueue.push(arguments)\n };\n p.callQueue = [];\n var t = d.createElement(\"script\");\n t.src = \"https://www.redditstatic.com/ads/pixel.js\";\n t.async = !0;\n var s = d.getElementsByTagName(\"script\")[0];\n s.parentNode.insertBefore(t,s)\n }\n }(window, document);\n rdt('init', '${redditPixelId}');\n rdt('track', 'PageVisit');`,\n }}\n />\n )}\n {linkedInPartnerId && (\n <Script\n id=\"linkedin-insight-tag\"\n strategy=\"afterInteractive\"\n dangerouslySetInnerHTML={{\n __html: `\n _linkedin_partner_id = \"${linkedInPartnerId}\";\n window._linkedin_data_partner_ids = window._linkedin_data_partner_ids || [];\n window._linkedin_data_partner_ids.push(_linkedin_partner_id);\n\n (function(l) {\n if (!l){\n window.lintrk = function(a,b){ \n window.lintrk.q.push([a,b])\n };\n window.lintrk.q=[]\n }\n var s = document.getElementsByTagName(\"script\")[0];\n var b = document.createElement(\"script\");\n b.type = \"text/javascript\";b.async = true;\n b.src = \"https://snap.licdn.com/li.lms-analytics/insight.min.js\";\n s.parentNode.insertBefore(b, s);\n })(window.lintrk);\n `,\n }}\n />\n )}\n {hotjarId && (\n <Script\n id=\"hotjar\"\n strategy=\"afterInteractive\"\n dangerouslySetInnerHTML={{\n __html: `\n (function(h,o,t,j,a,r){\n h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)};\n h._hjSettings={hjid:${hotjarId},hjsv:6};\n a=o.getElementsByTagName('head')[0];\n r=o.createElement('script');r.async=1;\n r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv;\n a.appendChild(r);\n })(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv=');\n `,\n }}\n />\n )}\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,wBAA4B;AAC5B,oBAAmB;AACnB,wBAAmC;AACnC,sCAAsC;AACtC,0CAA0C;AAC1C,+BAAgC;AAChC,mBAAsB;AAoDE;AAhCjB,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAkB;AACpB,GAAU;AACR,6DAAsB;AAEtB,QAAM,eAAW,+BAAY;AAC7B,gDAAgB,QAAQ;AACxB,qEAA0B;AAE1B,4CAAmB,CAAC,WAAW;AAC7B,QAAI,CAAC,gBAAiB;AACtB,UAAM,aAAa;AAAA,MACjB,IAAI,OAAO;AAAA,MACX,QAAQ,OAAO;AAAA,MACf,OAAO,OAAO;AAAA,MACd,OAAO,OAAO;AAAA,MACd,iBAAiB,OAAO;AAAA,MACxB,iBAAiB;AAAA;AAAA,IACnB;AACA,4BAAM,OAAO,MAAM,UAAU;AAAA,EAC/B,CAAC;AAED,SACE,4EACG;AAAA,qBAAiB,4CAAC,UAAK,UAAS,aAAY,SAAS,eAAe;AAAA,IACpE,QACC,4EACE;AAAA;AAAA,QAAC,cAAAA;AAAA,QAAA;AAAA,UACC,IAAG;AAAA,UACH;AAAA,UACA,KAAK,+CAA+C,IAAI;AAAA;AAAA,MAC1D;AAAA,MACA;AAAA,QAAC,cAAAA;AAAA,QAAA;AAAA,UACC;AAAA,UACA,IAAG;AAAA,UACH,yBAAyB;AAAA,YACvB,QAAQ;AAAA;AAAA;AAAA;AAAA,gCAIU,IAAI,IAAI,YAAY,6BAA6B,EAAE;AAAA;AAAA,UAEvE;AAAA;AAAA,MACF;AAAA,OACF;AAAA,IAED,eACC;AAAA,MAAC,cAAAA;AAAA,MAAA;AAAA,QACC,IAAG;AAAA,QACH,UAAS;AAAA,QACT,yBAAyB;AAAA,UACvB,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAiBO,WAAW;AAAA;AAAA,QAE5B;AAAA;AAAA,IACF;AAAA,IAED,iBACC;AAAA,MAAC,cAAAA;AAAA,MAAA;AAAA,QACC,IAAG;AAAA,QACH,UAAS;AAAA,QACT,yBAAyB;AAAA,UACvB,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAcO,aAAa;AAAA;AAAA,QAE9B;AAAA;AAAA,IACF;AAAA,IAED,qBACC;AAAA,MAAC,cAAAA;AAAA,MAAA;AAAA,QACC,IAAG;AAAA,QACH,UAAS;AAAA,QACT,yBAAyB;AAAA,UACvB,QAAQ;AAAA,wCACoB,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAkB/C;AAAA;AAAA,IACF;AAAA,IAED,YACC;AAAA,MAAC,cAAAA;AAAA,MAAA;AAAA,QACC,IAAG;AAAA,QACH,UAAS;AAAA,QACT,yBAAyB;AAAA,UACvB,QAAQ;AAAA;AAAA;AAAA,oCAGgB,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOlC;AAAA;AAAA,IACF;AAAA,KAEJ;AAEJ;","names":["Script"]}
|
package/dist/next/index.mjs
CHANGED
|
@@ -6,8 +6,7 @@ import Script from "next/script";
|
|
|
6
6
|
import { useReportWebVitals } from "next/web-vitals";
|
|
7
7
|
import { useClickIdPersistence } from "../hooks/use-click-id-persistence.mjs";
|
|
8
8
|
import { useOutboundClickAnalytics } from "../hooks/use-outbound-click-analytics.mjs";
|
|
9
|
-
import {
|
|
10
|
-
import { useWebSessionAnalytics } from "../hooks/use-web-session-analytics.mjs";
|
|
9
|
+
import { useWebAnalytics } from "../hooks/use-web-analytics.mjs";
|
|
11
10
|
import { track } from "../track/index.mjs";
|
|
12
11
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
13
12
|
function Analytics({
|
|
@@ -23,8 +22,7 @@ function Analytics({
|
|
|
23
22
|
}) {
|
|
24
23
|
useClickIdPersistence();
|
|
25
24
|
const pathname = usePathname();
|
|
26
|
-
|
|
27
|
-
useWebSessionAnalytics(pathname);
|
|
25
|
+
useWebAnalytics(pathname);
|
|
28
26
|
useOutboundClickAnalytics();
|
|
29
27
|
useReportWebVitals((metric) => {
|
|
30
28
|
if (!reportWebVitals) return;
|