@shware/analytics 2.14.4 → 2.15.1

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.
Files changed (68) hide show
  1. package/dist/hooks/use-app-session-analytics.cjs +68 -0
  2. package/dist/hooks/use-app-session-analytics.cjs.map +1 -0
  3. package/dist/hooks/use-app-session-analytics.d.cts +3 -0
  4. package/dist/hooks/use-app-session-analytics.d.ts +3 -0
  5. package/dist/hooks/use-app-session-analytics.mjs +43 -0
  6. package/dist/hooks/use-app-session-analytics.mjs.map +1 -0
  7. package/dist/{native/analytics.cjs → hooks/use-screen-view-analytics.cjs} +6 -7
  8. package/dist/hooks/use-screen-view-analytics.cjs.map +1 -0
  9. package/dist/{native/analytics.mjs → hooks/use-screen-view-analytics.mjs} +3 -4
  10. package/dist/hooks/use-screen-view-analytics.mjs.map +1 -0
  11. package/dist/hooks/use-web-session-analytics.cjs +130 -0
  12. package/dist/hooks/use-web-session-analytics.cjs.map +1 -0
  13. package/dist/hooks/use-web-session-analytics.d.cts +8 -0
  14. package/dist/hooks/use-web-session-analytics.d.ts +8 -0
  15. package/dist/hooks/use-web-session-analytics.mjs +105 -0
  16. package/dist/hooks/use-web-session-analytics.mjs.map +1 -0
  17. package/dist/native/index.cjs +5 -2
  18. package/dist/native/index.cjs.map +1 -1
  19. package/dist/native/index.d.cts +2 -1
  20. package/dist/native/index.d.ts +2 -1
  21. package/dist/native/index.mjs +3 -1
  22. package/dist/native/index.mjs.map +1 -1
  23. package/dist/next/index.cjs +2 -2
  24. package/dist/next/index.cjs.map +1 -1
  25. package/dist/next/index.mjs +2 -2
  26. package/dist/next/index.mjs.map +1 -1
  27. package/dist/react-router/index.cjs +2 -2
  28. package/dist/react-router/index.cjs.map +1 -1
  29. package/dist/react-router/index.mjs +2 -2
  30. package/dist/react-router/index.mjs.map +1 -1
  31. package/dist/schema/index.cjs +2 -0
  32. package/dist/schema/index.cjs.map +1 -1
  33. package/dist/schema/index.d.cts +2 -0
  34. package/dist/schema/index.d.ts +2 -0
  35. package/dist/schema/index.mjs +2 -0
  36. package/dist/schema/index.mjs.map +1 -1
  37. package/dist/server/ignore-events.cjs +17 -2
  38. package/dist/server/ignore-events.cjs.map +1 -1
  39. package/dist/server/ignore-events.mjs +17 -2
  40. package/dist/server/ignore-events.mjs.map +1 -1
  41. package/dist/setup/index.cjs +14 -2
  42. package/dist/setup/index.cjs.map +1 -1
  43. package/dist/setup/index.d.cts +7 -5
  44. package/dist/setup/index.d.ts +7 -5
  45. package/dist/setup/index.mjs +13 -3
  46. package/dist/setup/index.mjs.map +1 -1
  47. package/dist/track/gtag.cjs.map +1 -1
  48. package/dist/track/gtag.d.cts +7 -8
  49. package/dist/track/gtag.d.ts +7 -8
  50. package/dist/track/gtag.mjs.map +1 -1
  51. package/dist/track/index.cjs +4 -0
  52. package/dist/track/index.cjs.map +1 -1
  53. package/dist/track/index.mjs +5 -1
  54. package/dist/track/index.mjs.map +1 -1
  55. package/dist/track/types.cjs.map +1 -1
  56. package/dist/track/types.d.cts +2 -0
  57. package/dist/track/types.d.ts +2 -0
  58. package/package.json +3 -3
  59. package/dist/hooks/use-session-analytics.cjs +0 -53
  60. package/dist/hooks/use-session-analytics.cjs.map +0 -1
  61. package/dist/hooks/use-session-analytics.d.cts +0 -3
  62. package/dist/hooks/use-session-analytics.d.ts +0 -3
  63. package/dist/hooks/use-session-analytics.mjs +0 -28
  64. package/dist/hooks/use-session-analytics.mjs.map +0 -1
  65. package/dist/native/analytics.cjs.map +0 -1
  66. package/dist/native/analytics.mjs.map +0 -1
  67. /package/dist/{native/analytics.d.cts → hooks/use-screen-view-analytics.d.cts} +0 -0
  68. /package/dist/{native/analytics.d.ts → hooks/use-screen-view-analytics.d.ts} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/hooks/use-session-analytics.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport { cache } from '../setup/index';\nimport { sendBeacon, track } from '../track/index';\n\nexport function useSessionAnalytics() {\n const launched = useRef(false);\n\n useEffect(() => {\n if (launched.current) return;\n launched.current = true;\n const properties = { session_id: cache.session.id };\n track('session_start', properties, { enableThirdPartyTracking: false });\n }, []);\n\n useEffect(() => {\n const onBeforeUnload = () => {\n const started_at = cache.session.startedAt;\n const ended_at = new Date().toISOString();\n const ms = new Date(ended_at).getTime() - new Date(started_at).getTime();\n const duration = Number((ms / 1000).toFixed(2));\n sendBeacon('session_end', { duration, session_id: cache.session.id, started_at, ended_at });\n };\n\n window.addEventListener('beforeunload', onBeforeUnload);\n return () => window.removeEventListener('beforeunload', onBeforeUnload);\n }, []);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkC;AAClC,mBAAsB;AACtB,mBAAkC;AAE3B,SAAS,sBAAsB;AACpC,QAAM,eAAW,qBAAO,KAAK;AAE7B,8BAAU,MAAM;AACd,QAAI,SAAS,QAAS;AACtB,aAAS,UAAU;AACnB,UAAM,aAAa,EAAE,YAAY,mBAAM,QAAQ,GAAG;AAClD,4BAAM,iBAAiB,YAAY,EAAE,0BAA0B,MAAM,CAAC;AAAA,EACxE,GAAG,CAAC,CAAC;AAEL,8BAAU,MAAM;AACd,UAAM,iBAAiB,MAAM;AAC3B,YAAM,aAAa,mBAAM,QAAQ;AACjC,YAAM,YAAW,oBAAI,KAAK,GAAE,YAAY;AACxC,YAAM,KAAK,IAAI,KAAK,QAAQ,EAAE,QAAQ,IAAI,IAAI,KAAK,UAAU,EAAE,QAAQ;AACvE,YAAM,WAAW,QAAQ,KAAK,KAAM,QAAQ,CAAC,CAAC;AAC9C,mCAAW,eAAe,EAAE,UAAU,YAAY,mBAAM,QAAQ,IAAI,YAAY,SAAS,CAAC;AAAA,IAC5F;AAEA,WAAO,iBAAiB,gBAAgB,cAAc;AACtD,WAAO,MAAM,OAAO,oBAAoB,gBAAgB,cAAc;AAAA,EACxE,GAAG,CAAC,CAAC;AACP;","names":[]}
@@ -1,3 +0,0 @@
1
- declare function useSessionAnalytics(): void;
2
-
3
- export { useSessionAnalytics };
@@ -1,3 +0,0 @@
1
- declare function useSessionAnalytics(): void;
2
-
3
- export { useSessionAnalytics };
@@ -1,28 +0,0 @@
1
- // src/hooks/use-session-analytics.ts
2
- import { useEffect, useRef } from "react";
3
- import { cache } from "../setup/index.mjs";
4
- import { sendBeacon, track } from "../track/index.mjs";
5
- function useSessionAnalytics() {
6
- const launched = useRef(false);
7
- useEffect(() => {
8
- if (launched.current) return;
9
- launched.current = true;
10
- const properties = { session_id: cache.session.id };
11
- track("session_start", properties, { enableThirdPartyTracking: false });
12
- }, []);
13
- useEffect(() => {
14
- const onBeforeUnload = () => {
15
- const started_at = cache.session.startedAt;
16
- const ended_at = (/* @__PURE__ */ new Date()).toISOString();
17
- const ms = new Date(ended_at).getTime() - new Date(started_at).getTime();
18
- const duration = Number((ms / 1e3).toFixed(2));
19
- sendBeacon("session_end", { duration, session_id: cache.session.id, started_at, ended_at });
20
- };
21
- window.addEventListener("beforeunload", onBeforeUnload);
22
- return () => window.removeEventListener("beforeunload", onBeforeUnload);
23
- }, []);
24
- }
25
- export {
26
- useSessionAnalytics
27
- };
28
- //# sourceMappingURL=use-session-analytics.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/hooks/use-session-analytics.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport { cache } from '../setup/index';\nimport { sendBeacon, track } from '../track/index';\n\nexport function useSessionAnalytics() {\n const launched = useRef(false);\n\n useEffect(() => {\n if (launched.current) return;\n launched.current = true;\n const properties = { session_id: cache.session.id };\n track('session_start', properties, { enableThirdPartyTracking: false });\n }, []);\n\n useEffect(() => {\n const onBeforeUnload = () => {\n const started_at = cache.session.startedAt;\n const ended_at = new Date().toISOString();\n const ms = new Date(ended_at).getTime() - new Date(started_at).getTime();\n const duration = Number((ms / 1000).toFixed(2));\n sendBeacon('session_end', { duration, session_id: cache.session.id, started_at, ended_at });\n };\n\n window.addEventListener('beforeunload', onBeforeUnload);\n return () => window.removeEventListener('beforeunload', onBeforeUnload);\n }, []);\n}\n"],"mappings":";AAAA,SAAS,WAAW,cAAc;AAClC,SAAS,aAAa;AACtB,SAAS,YAAY,aAAa;AAE3B,SAAS,sBAAsB;AACpC,QAAM,WAAW,OAAO,KAAK;AAE7B,YAAU,MAAM;AACd,QAAI,SAAS,QAAS;AACtB,aAAS,UAAU;AACnB,UAAM,aAAa,EAAE,YAAY,MAAM,QAAQ,GAAG;AAClD,UAAM,iBAAiB,YAAY,EAAE,0BAA0B,MAAM,CAAC;AAAA,EACxE,GAAG,CAAC,CAAC;AAEL,YAAU,MAAM;AACd,UAAM,iBAAiB,MAAM;AAC3B,YAAM,aAAa,MAAM,QAAQ;AACjC,YAAM,YAAW,oBAAI,KAAK,GAAE,YAAY;AACxC,YAAM,KAAK,IAAI,KAAK,QAAQ,EAAE,QAAQ,IAAI,IAAI,KAAK,UAAU,EAAE,QAAQ;AACvE,YAAM,WAAW,QAAQ,KAAK,KAAM,QAAQ,CAAC,CAAC;AAC9C,iBAAW,eAAe,EAAE,UAAU,YAAY,MAAM,QAAQ,IAAI,YAAY,SAAS,CAAC;AAAA,IAC5F;AAEA,WAAO,iBAAiB,gBAAgB,cAAc;AACtD,WAAO,MAAM,OAAO,oBAAoB,gBAAgB,cAAc;AAAA,EACxE,GAAG,CAAC,CAAC;AACP;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/native/analytics.ts"],"sourcesContent":["import { usePathname } from 'expo-router';\nimport { useEffect, useRef } from 'react';\nimport { AppState } from 'react-native';\nimport { usePrevious } from '../hooks/use-previous';\nimport { track } from '../track/index';\n\nexport function useScreenViewAnalytics() {\n const pathname = usePathname();\n const prevPathname = usePrevious(pathname);\n const session = useRef({ start: performance.now(), total: 0, isActive: true });\n\n useEffect(() => {\n const subscription = AppState.addEventListener('change', (state) => {\n // when returning to the foreground from the background\n if (state === 'active' && !session.current.isActive) {\n session.current.start = performance.now();\n session.current.isActive = true;\n }\n // when entering the background\n else if (state !== 'active' && session.current.isActive) {\n session.current.total += (performance.now() - session.current.start) / 1000;\n session.current.isActive = false;\n }\n });\n\n return () => subscription.remove();\n }, []);\n\n // when the screen is switched, the duration of the previous screen is recorded\n useEffect(() => {\n if (!prevPathname) {\n session.current = { start: performance.now(), total: 0, isActive: true };\n }\n\n let duration = session.current.total;\n if (session.current.isActive) {\n duration += (performance.now() - session.current.start) / 1000;\n }\n\n track('screen_view', {\n screen_name: pathname,\n screen_class: pathname,\n previous_screen_class: prevPathname ?? undefined,\n previous_screen_class_duration: prevPathname ? Number(duration.toFixed(2)) : undefined,\n });\n\n // reset session\n session.current = { start: performance.now(), total: 0, isActive: true };\n }, [pathname]);\n\n useEffect(() => track('app_launch', { pathname }, { enableThirdPartyTracking: false }), []);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAA4B;AAC5B,mBAAkC;AAClC,0BAAyB;AACzB,0BAA4B;AAC5B,mBAAsB;AAEf,SAAS,yBAAyB;AACvC,QAAM,eAAW,gCAAY;AAC7B,QAAM,mBAAe,iCAAY,QAAQ;AACzC,QAAM,cAAU,qBAAO,EAAE,OAAO,YAAY,IAAI,GAAG,OAAO,GAAG,UAAU,KAAK,CAAC;AAE7E,8BAAU,MAAM;AACd,UAAM,eAAe,6BAAS,iBAAiB,UAAU,CAAC,UAAU;AAElE,UAAI,UAAU,YAAY,CAAC,QAAQ,QAAQ,UAAU;AACnD,gBAAQ,QAAQ,QAAQ,YAAY,IAAI;AACxC,gBAAQ,QAAQ,WAAW;AAAA,MAC7B,WAES,UAAU,YAAY,QAAQ,QAAQ,UAAU;AACvD,gBAAQ,QAAQ,UAAU,YAAY,IAAI,IAAI,QAAQ,QAAQ,SAAS;AACvE,gBAAQ,QAAQ,WAAW;AAAA,MAC7B;AAAA,IACF,CAAC;AAED,WAAO,MAAM,aAAa,OAAO;AAAA,EACnC,GAAG,CAAC,CAAC;AAGL,8BAAU,MAAM;AACd,QAAI,CAAC,cAAc;AACjB,cAAQ,UAAU,EAAE,OAAO,YAAY,IAAI,GAAG,OAAO,GAAG,UAAU,KAAK;AAAA,IACzE;AAEA,QAAI,WAAW,QAAQ,QAAQ;AAC/B,QAAI,QAAQ,QAAQ,UAAU;AAC5B,mBAAa,YAAY,IAAI,IAAI,QAAQ,QAAQ,SAAS;AAAA,IAC5D;AAEA,4BAAM,eAAe;AAAA,MACnB,aAAa;AAAA,MACb,cAAc;AAAA,MACd,uBAAuB,gBAAgB;AAAA,MACvC,gCAAgC,eAAe,OAAO,SAAS,QAAQ,CAAC,CAAC,IAAI;AAAA,IAC/E,CAAC;AAGD,YAAQ,UAAU,EAAE,OAAO,YAAY,IAAI,GAAG,OAAO,GAAG,UAAU,KAAK;AAAA,EACzE,GAAG,CAAC,QAAQ,CAAC;AAEb,8BAAU,UAAM,oBAAM,cAAc,EAAE,SAAS,GAAG,EAAE,0BAA0B,MAAM,CAAC,GAAG,CAAC,CAAC;AAC5F;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/native/analytics.ts"],"sourcesContent":["import { usePathname } from 'expo-router';\nimport { useEffect, useRef } from 'react';\nimport { AppState } from 'react-native';\nimport { usePrevious } from '../hooks/use-previous';\nimport { track } from '../track/index';\n\nexport function useScreenViewAnalytics() {\n const pathname = usePathname();\n const prevPathname = usePrevious(pathname);\n const session = useRef({ start: performance.now(), total: 0, isActive: true });\n\n useEffect(() => {\n const subscription = AppState.addEventListener('change', (state) => {\n // when returning to the foreground from the background\n if (state === 'active' && !session.current.isActive) {\n session.current.start = performance.now();\n session.current.isActive = true;\n }\n // when entering the background\n else if (state !== 'active' && session.current.isActive) {\n session.current.total += (performance.now() - session.current.start) / 1000;\n session.current.isActive = false;\n }\n });\n\n return () => subscription.remove();\n }, []);\n\n // when the screen is switched, the duration of the previous screen is recorded\n useEffect(() => {\n if (!prevPathname) {\n session.current = { start: performance.now(), total: 0, isActive: true };\n }\n\n let duration = session.current.total;\n if (session.current.isActive) {\n duration += (performance.now() - session.current.start) / 1000;\n }\n\n track('screen_view', {\n screen_name: pathname,\n screen_class: pathname,\n previous_screen_class: prevPathname ?? undefined,\n previous_screen_class_duration: prevPathname ? Number(duration.toFixed(2)) : undefined,\n });\n\n // reset session\n session.current = { start: performance.now(), total: 0, isActive: true };\n }, [pathname]);\n\n useEffect(() => track('app_launch', { pathname }, { enableThirdPartyTracking: false }), []);\n}\n"],"mappings":";AAAA,SAAS,mBAAmB;AAC5B,SAAS,WAAW,cAAc;AAClC,SAAS,gBAAgB;AACzB,SAAS,mBAAmB;AAC5B,SAAS,aAAa;AAEf,SAAS,yBAAyB;AACvC,QAAM,WAAW,YAAY;AAC7B,QAAM,eAAe,YAAY,QAAQ;AACzC,QAAM,UAAU,OAAO,EAAE,OAAO,YAAY,IAAI,GAAG,OAAO,GAAG,UAAU,KAAK,CAAC;AAE7E,YAAU,MAAM;AACd,UAAM,eAAe,SAAS,iBAAiB,UAAU,CAAC,UAAU;AAElE,UAAI,UAAU,YAAY,CAAC,QAAQ,QAAQ,UAAU;AACnD,gBAAQ,QAAQ,QAAQ,YAAY,IAAI;AACxC,gBAAQ,QAAQ,WAAW;AAAA,MAC7B,WAES,UAAU,YAAY,QAAQ,QAAQ,UAAU;AACvD,gBAAQ,QAAQ,UAAU,YAAY,IAAI,IAAI,QAAQ,QAAQ,SAAS;AACvE,gBAAQ,QAAQ,WAAW;AAAA,MAC7B;AAAA,IACF,CAAC;AAED,WAAO,MAAM,aAAa,OAAO;AAAA,EACnC,GAAG,CAAC,CAAC;AAGL,YAAU,MAAM;AACd,QAAI,CAAC,cAAc;AACjB,cAAQ,UAAU,EAAE,OAAO,YAAY,IAAI,GAAG,OAAO,GAAG,UAAU,KAAK;AAAA,IACzE;AAEA,QAAI,WAAW,QAAQ,QAAQ;AAC/B,QAAI,QAAQ,QAAQ,UAAU;AAC5B,mBAAa,YAAY,IAAI,IAAI,QAAQ,QAAQ,SAAS;AAAA,IAC5D;AAEA,UAAM,eAAe;AAAA,MACnB,aAAa;AAAA,MACb,cAAc;AAAA,MACd,uBAAuB,gBAAgB;AAAA,MACvC,gCAAgC,eAAe,OAAO,SAAS,QAAQ,CAAC,CAAC,IAAI;AAAA,IAC/E,CAAC;AAGD,YAAQ,UAAU,EAAE,OAAO,YAAY,IAAI,GAAG,OAAO,GAAG,UAAU,KAAK;AAAA,EACzE,GAAG,CAAC,QAAQ,CAAC;AAEb,YAAU,MAAM,MAAM,cAAc,EAAE,SAAS,GAAG,EAAE,0BAA0B,MAAM,CAAC,GAAG,CAAC,CAAC;AAC5F;","names":[]}