flowgrid-sdk 1.2.1 → 1.4.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 (312) hide show
  1. package/README.md +221 -250
  2. package/dist/237.flowgrid.min.js +2 -0
  3. package/dist/237.flowgrid.min.js.map +1 -0
  4. package/dist/546.flowgrid.min.js +3 -0
  5. package/dist/546.flowgrid.min.js.LICENSE.txt +14 -0
  6. package/dist/546.flowgrid.min.js.map +1 -0
  7. package/dist/EXAMPLE.d.ts +1 -0
  8. package/dist/EXAMPLE.js +55 -0
  9. package/dist/EXAMPLE.js.map +1 -0
  10. package/dist/browser.d.ts +46 -103
  11. package/dist/browser.js +102 -0
  12. package/dist/browser.js.map +1 -0
  13. package/dist/flowgrid.min.js +1 -1
  14. package/dist/flowgrid.min.js.map +1 -1
  15. package/dist/index.d.ts +7 -8
  16. package/dist/index.js +64 -1
  17. package/dist/index.js.map +1 -1
  18. package/dist/lib/client/transport.d.ts +14 -4
  19. package/dist/lib/client/transport.js +432 -0
  20. package/dist/lib/client/transport.js.map +1 -0
  21. package/dist/lib/consent/index.d.ts +0 -5
  22. package/dist/lib/consent/index.js +32 -0
  23. package/dist/lib/consent/index.js.map +1 -0
  24. package/dist/lib/consent/manager.js +336 -0
  25. package/dist/lib/consent/manager.js.map +1 -0
  26. package/dist/lib/consent/types.d.ts +3 -20
  27. package/dist/lib/consent/types.js +10 -0
  28. package/dist/lib/consent/types.js.map +1 -0
  29. package/dist/lib/features/analytics/attribution.d.ts +6 -47
  30. package/dist/lib/features/analytics/attribution.js +181 -0
  31. package/dist/lib/features/analytics/attribution.js.map +1 -0
  32. package/dist/lib/features/analytics/events.d.ts +1 -28
  33. package/dist/lib/features/analytics/events.js +256 -0
  34. package/dist/lib/features/analytics/events.js.map +1 -0
  35. package/dist/lib/features/analytics/funnels.js +260 -0
  36. package/dist/lib/features/analytics/funnels.js.map +1 -0
  37. package/dist/lib/features/analytics/heatmaps.d.ts +12 -19
  38. package/dist/lib/features/analytics/heatmaps.js +258 -0
  39. package/dist/lib/features/analytics/heatmaps.js.map +1 -0
  40. package/dist/lib/features/analytics/identify.d.ts +1 -21
  41. package/dist/lib/features/analytics/identify.js +213 -0
  42. package/dist/lib/features/analytics/identify.js.map +1 -0
  43. package/dist/lib/features/analytics/index.d.ts +2 -0
  44. package/dist/lib/features/analytics/index.js +15 -0
  45. package/dist/lib/features/analytics/index.js.map +1 -0
  46. package/dist/lib/features/analytics/page-views.d.ts +13 -30
  47. package/dist/lib/features/analytics/page-views.js +268 -0
  48. package/dist/lib/features/analytics/page-views.js.map +1 -0
  49. package/dist/lib/features/analytics/performance.d.ts +18 -24
  50. package/dist/lib/features/analytics/performance.js +232 -0
  51. package/dist/lib/features/analytics/performance.js.map +1 -0
  52. package/dist/lib/features/analytics/replay.d.ts +170 -0
  53. package/dist/lib/features/analytics/replay.js +381 -0
  54. package/dist/lib/features/analytics/replay.js.map +1 -0
  55. package/dist/lib/features/analytics/retention.d.ts +1 -76
  56. package/dist/lib/features/analytics/retention.js +135 -0
  57. package/dist/lib/features/analytics/retention.js.map +1 -0
  58. package/dist/lib/features/analytics/sessions.d.ts +12 -37
  59. package/dist/lib/features/analytics/sessions.js +213 -0
  60. package/dist/lib/features/analytics/sessions.js.map +1 -0
  61. package/dist/lib/features/core/activation.d.ts +1 -24
  62. package/dist/lib/features/core/activation.js +175 -0
  63. package/dist/lib/features/core/activation.js.map +1 -0
  64. package/dist/lib/features/core/experiment.d.ts +53 -21
  65. package/dist/lib/features/core/experiment.js +554 -0
  66. package/dist/lib/features/core/experiment.js.map +1 -0
  67. package/dist/lib/features/core/index.js +9 -0
  68. package/dist/lib/features/core/index.js.map +1 -0
  69. package/dist/lib/features/core/track-feature.d.ts +1 -8
  70. package/dist/lib/features/core/track-feature.js +119 -0
  71. package/dist/lib/features/core/track-feature.js.map +1 -0
  72. package/dist/lib/features/core/track-prompt.d.ts +5 -8
  73. package/dist/lib/features/core/track-prompt.js +181 -0
  74. package/dist/lib/features/core/track-prompt.js.map +1 -0
  75. package/dist/lib/features/ecommerce/cart.d.ts +1 -24
  76. package/dist/lib/features/ecommerce/cart.js +244 -0
  77. package/dist/lib/features/ecommerce/cart.js.map +1 -0
  78. package/dist/lib/features/ecommerce/checkout.d.ts +1 -28
  79. package/dist/lib/features/ecommerce/checkout.js +254 -0
  80. package/dist/lib/features/ecommerce/checkout.js.map +1 -0
  81. package/dist/lib/features/ecommerce/index.d.ts +0 -2
  82. package/dist/lib/features/ecommerce/index.js +15 -0
  83. package/dist/lib/features/ecommerce/index.js.map +1 -0
  84. package/dist/lib/features/ecommerce/ltv.d.ts +1 -69
  85. package/dist/lib/features/ecommerce/ltv.js +114 -0
  86. package/dist/lib/features/ecommerce/ltv.js.map +1 -0
  87. package/dist/lib/features/ecommerce/products.d.ts +1 -33
  88. package/dist/lib/features/ecommerce/products.js +223 -0
  89. package/dist/lib/features/ecommerce/products.js.map +1 -0
  90. package/dist/lib/features/ecommerce/promotions.d.ts +1 -30
  91. package/dist/lib/features/ecommerce/promotions.js +197 -0
  92. package/dist/lib/features/ecommerce/promotions.js.map +1 -0
  93. package/dist/lib/features/ecommerce/purchases.d.ts +1 -48
  94. package/dist/lib/features/ecommerce/purchases.js +193 -0
  95. package/dist/lib/features/ecommerce/purchases.js.map +1 -0
  96. package/dist/lib/features/ecommerce/refunds.d.ts +1 -27
  97. package/dist/lib/features/ecommerce/refunds.js +195 -0
  98. package/dist/lib/features/ecommerce/refunds.js.map +1 -0
  99. package/dist/lib/features/ecommerce/search.d.ts +1 -24
  100. package/dist/lib/features/ecommerce/search.js +156 -0
  101. package/dist/lib/features/ecommerce/search.js.map +1 -0
  102. package/dist/lib/features/ecommerce/subscriptions.d.ts +1 -28
  103. package/dist/lib/features/ecommerce/subscriptions.js +207 -0
  104. package/dist/lib/features/ecommerce/subscriptions.js.map +1 -0
  105. package/dist/lib/features/ecommerce/wishlist.d.ts +1 -28
  106. package/dist/lib/features/ecommerce/wishlist.js +186 -0
  107. package/dist/lib/features/ecommerce/wishlist.js.map +1 -0
  108. package/dist/lib/features/enterprise/acquisition.d.ts +2 -57
  109. package/dist/lib/features/enterprise/acquisition.js +166 -0
  110. package/dist/lib/features/enterprise/acquisition.js.map +1 -0
  111. package/dist/lib/features/enterprise/alerts.d.ts +1 -37
  112. package/dist/lib/features/enterprise/alerts.js +246 -0
  113. package/dist/lib/features/enterprise/alerts.js.map +1 -0
  114. package/dist/lib/features/enterprise/churn.d.ts +1 -42
  115. package/dist/lib/features/enterprise/churn.js +175 -0
  116. package/dist/lib/features/enterprise/churn.js.map +1 -0
  117. package/dist/lib/features/enterprise/cohorts.d.ts +1 -37
  118. package/dist/lib/features/enterprise/cohorts.js +201 -0
  119. package/dist/lib/features/enterprise/cohorts.js.map +1 -0
  120. package/dist/lib/features/enterprise/engagement.d.ts +40 -46
  121. package/dist/lib/features/enterprise/engagement.js +335 -0
  122. package/dist/lib/features/enterprise/engagement.js.map +1 -0
  123. package/dist/lib/features/enterprise/forecasting.d.ts +0 -50
  124. package/dist/lib/features/enterprise/forecasting.js +232 -0
  125. package/dist/lib/features/enterprise/forecasting.js.map +1 -0
  126. package/dist/lib/features/enterprise/index.d.ts +1 -1
  127. package/dist/lib/features/enterprise/index.js +76 -0
  128. package/dist/lib/features/enterprise/index.js.map +1 -0
  129. package/dist/lib/features/enterprise/monetization.d.ts +1 -60
  130. package/dist/lib/features/enterprise/monetization.js +146 -0
  131. package/dist/lib/features/enterprise/monetization.js.map +1 -0
  132. package/dist/lib/features/enterprise/multi-path-funnels.d.ts +1 -17
  133. package/dist/lib/features/enterprise/multi-path-funnels.js +205 -0
  134. package/dist/lib/features/enterprise/multi-path-funnels.js.map +1 -0
  135. package/dist/lib/features/enterprise/paths.d.ts +1 -56
  136. package/dist/lib/features/enterprise/paths.js +149 -0
  137. package/dist/lib/features/enterprise/paths.js.map +1 -0
  138. package/dist/lib/features/enterprise/security.d.ts +8 -57
  139. package/dist/lib/features/enterprise/security.js +202 -0
  140. package/dist/lib/features/enterprise/security.js.map +1 -0
  141. package/dist/lib/features/enterprise/support.d.ts +3 -42
  142. package/dist/lib/features/enterprise/support.js +162 -0
  143. package/dist/lib/features/enterprise/support.js.map +1 -0
  144. package/dist/lib/flowgrid.d.ts +278 -0
  145. package/dist/lib/flowgrid.js +323 -0
  146. package/dist/lib/flowgrid.js.map +1 -0
  147. package/dist/lib/frameworks/index.d.ts +13 -6
  148. package/dist/lib/frameworks/index.js +18 -0
  149. package/dist/lib/frameworks/index.js.map +1 -0
  150. package/dist/lib/frameworks/nextjs/client.js +355 -0
  151. package/dist/lib/frameworks/nextjs/client.js.map +1 -0
  152. package/dist/lib/frameworks/nextjs/index.js +31 -0
  153. package/dist/lib/frameworks/nextjs/index.js.map +1 -0
  154. package/dist/lib/frameworks/nextjs/server.js +259 -0
  155. package/dist/lib/frameworks/nextjs/server.js.map +1 -0
  156. package/dist/lib/frameworks/node/index.js +391 -0
  157. package/dist/lib/frameworks/node/index.js.map +1 -0
  158. package/dist/lib/frameworks/nuxt/index.js +288 -0
  159. package/dist/lib/frameworks/nuxt/index.js.map +1 -0
  160. package/dist/lib/frameworks/react/CookieBanner.js +166 -0
  161. package/dist/lib/frameworks/react/CookieBanner.js.map +1 -0
  162. package/dist/lib/frameworks/react/index.js +271 -0
  163. package/dist/lib/frameworks/react/index.js.map +1 -0
  164. package/dist/lib/frameworks/vue/CookieBanner.js +165 -0
  165. package/dist/lib/frameworks/vue/CookieBanner.js.map +1 -0
  166. package/dist/lib/frameworks/vue/index.js +390 -0
  167. package/dist/lib/frameworks/vue/index.js.map +1 -0
  168. package/dist/lib/tracking/analytics/attribution.d.ts +14 -0
  169. package/dist/lib/tracking/analytics/attribution.js +18 -0
  170. package/dist/lib/tracking/analytics/attribution.js.map +1 -0
  171. package/dist/lib/tracking/analytics/events.d.ts +26 -0
  172. package/dist/lib/tracking/analytics/events.js +30 -0
  173. package/dist/lib/tracking/analytics/events.js.map +1 -0
  174. package/dist/lib/tracking/analytics/funnels.d.ts +16 -0
  175. package/dist/lib/tracking/analytics/funnels.js +22 -0
  176. package/dist/lib/tracking/analytics/funnels.js.map +1 -0
  177. package/dist/lib/tracking/analytics/heatmaps.d.ts +27 -0
  178. package/dist/lib/tracking/analytics/heatmaps.js +22 -0
  179. package/dist/lib/tracking/analytics/heatmaps.js.map +1 -0
  180. package/dist/lib/tracking/analytics/identify.d.ts +16 -0
  181. package/dist/lib/tracking/analytics/identify.js +22 -0
  182. package/dist/lib/tracking/analytics/identify.js.map +1 -0
  183. package/dist/lib/tracking/analytics/index.d.ts +10 -0
  184. package/dist/lib/tracking/analytics/index.js +11 -0
  185. package/dist/lib/tracking/analytics/index.js.map +1 -0
  186. package/dist/lib/tracking/analytics/page-views.d.ts +29 -0
  187. package/dist/lib/tracking/analytics/page-views.js +50 -0
  188. package/dist/lib/tracking/analytics/page-views.js.map +1 -0
  189. package/dist/lib/tracking/analytics/performance.d.ts +22 -0
  190. package/dist/lib/tracking/analytics/performance.js +22 -0
  191. package/dist/lib/tracking/analytics/performance.js.map +1 -0
  192. package/dist/lib/tracking/analytics/replay.d.ts +34 -0
  193. package/dist/lib/tracking/analytics/replay.js +46 -0
  194. package/dist/lib/tracking/analytics/replay.js.map +1 -0
  195. package/dist/lib/tracking/analytics/retention.d.ts +10 -0
  196. package/dist/lib/tracking/analytics/retention.js +10 -0
  197. package/dist/lib/tracking/analytics/retention.js.map +1 -0
  198. package/dist/lib/tracking/analytics/sessions.d.ts +20 -0
  199. package/dist/lib/tracking/analytics/sessions.js +26 -0
  200. package/dist/lib/tracking/analytics/sessions.js.map +1 -0
  201. package/dist/lib/tracking/core/activation.d.ts +23 -0
  202. package/dist/lib/tracking/core/activation.js +33 -0
  203. package/dist/lib/tracking/core/activation.js.map +1 -0
  204. package/dist/lib/tracking/core/experiment.d.ts +122 -0
  205. package/dist/lib/tracking/core/experiment.js +150 -0
  206. package/dist/lib/tracking/core/experiment.js.map +1 -0
  207. package/dist/lib/tracking/core/feature.d.ts +13 -0
  208. package/dist/lib/tracking/core/feature.js +14 -0
  209. package/dist/lib/tracking/core/feature.js.map +1 -0
  210. package/dist/lib/tracking/core/index.d.ts +4 -0
  211. package/dist/lib/tracking/core/index.js +5 -0
  212. package/dist/lib/tracking/core/index.js.map +1 -0
  213. package/dist/lib/tracking/core/prompt.d.ts +18 -0
  214. package/dist/lib/tracking/core/prompt.js +26 -0
  215. package/dist/lib/tracking/core/prompt.js.map +1 -0
  216. package/dist/lib/tracking/ecommerce/cart.d.ts +17 -0
  217. package/dist/lib/tracking/ecommerce/cart.js +22 -0
  218. package/dist/lib/tracking/ecommerce/cart.js.map +1 -0
  219. package/dist/lib/tracking/ecommerce/checkout.d.ts +17 -0
  220. package/dist/lib/tracking/ecommerce/checkout.js +22 -0
  221. package/dist/lib/tracking/ecommerce/checkout.js.map +1 -0
  222. package/dist/lib/tracking/ecommerce/index.d.ts +10 -0
  223. package/dist/lib/tracking/ecommerce/index.js +11 -0
  224. package/dist/lib/tracking/ecommerce/index.js.map +1 -0
  225. package/dist/lib/tracking/ecommerce/ltv.d.ts +15 -0
  226. package/dist/lib/tracking/ecommerce/ltv.js +14 -0
  227. package/dist/lib/tracking/ecommerce/ltv.js.map +1 -0
  228. package/dist/lib/tracking/ecommerce/products.d.ts +15 -0
  229. package/dist/lib/tracking/ecommerce/products.js +18 -0
  230. package/dist/lib/tracking/ecommerce/products.js.map +1 -0
  231. package/dist/lib/tracking/ecommerce/promotions.d.ts +14 -0
  232. package/dist/lib/tracking/ecommerce/promotions.js +25 -0
  233. package/dist/lib/tracking/ecommerce/promotions.js.map +1 -0
  234. package/dist/lib/tracking/ecommerce/purchases.d.ts +11 -0
  235. package/dist/lib/tracking/ecommerce/purchases.js +10 -0
  236. package/dist/lib/tracking/ecommerce/purchases.js.map +1 -0
  237. package/dist/lib/tracking/ecommerce/refunds.d.ts +17 -0
  238. package/dist/lib/tracking/ecommerce/refunds.js +22 -0
  239. package/dist/lib/tracking/ecommerce/refunds.js.map +1 -0
  240. package/dist/lib/tracking/ecommerce/search.d.ts +24 -0
  241. package/dist/lib/tracking/ecommerce/search.js +22 -0
  242. package/dist/lib/tracking/ecommerce/search.js.map +1 -0
  243. package/dist/lib/tracking/ecommerce/subscriptions.d.ts +21 -0
  244. package/dist/lib/tracking/ecommerce/subscriptions.js +38 -0
  245. package/dist/lib/tracking/ecommerce/subscriptions.js.map +1 -0
  246. package/dist/lib/tracking/ecommerce/wishlist.d.ts +19 -0
  247. package/dist/lib/tracking/ecommerce/wishlist.js +26 -0
  248. package/dist/lib/tracking/ecommerce/wishlist.js.map +1 -0
  249. package/dist/lib/tracking/enterprise/acquisition.d.ts +25 -0
  250. package/dist/lib/tracking/enterprise/acquisition.js +22 -0
  251. package/dist/lib/tracking/enterprise/acquisition.js.map +1 -0
  252. package/dist/lib/tracking/enterprise/alerts.d.ts +32 -0
  253. package/dist/lib/tracking/enterprise/alerts.js +30 -0
  254. package/dist/lib/tracking/enterprise/alerts.js.map +1 -0
  255. package/dist/lib/tracking/enterprise/churn.d.ts +23 -0
  256. package/dist/lib/tracking/enterprise/churn.js +22 -0
  257. package/dist/lib/tracking/enterprise/churn.js.map +1 -0
  258. package/dist/lib/tracking/enterprise/cohorts.d.ts +18 -0
  259. package/dist/lib/tracking/enterprise/cohorts.js +18 -0
  260. package/dist/lib/tracking/enterprise/cohorts.js.map +1 -0
  261. package/dist/lib/tracking/enterprise/engagement.d.ts +31 -0
  262. package/dist/lib/tracking/enterprise/engagement.js +44 -0
  263. package/dist/lib/tracking/enterprise/engagement.js.map +1 -0
  264. package/dist/lib/tracking/enterprise/forecasting.d.ts +18 -0
  265. package/dist/lib/tracking/enterprise/forecasting.js +22 -0
  266. package/dist/lib/tracking/enterprise/forecasting.js.map +1 -0
  267. package/dist/lib/tracking/enterprise/index.d.ts +11 -0
  268. package/dist/lib/tracking/enterprise/index.js +12 -0
  269. package/dist/lib/tracking/enterprise/index.js.map +1 -0
  270. package/dist/lib/tracking/enterprise/monetization.d.ts +14 -0
  271. package/dist/lib/tracking/enterprise/monetization.js +10 -0
  272. package/dist/lib/tracking/enterprise/monetization.js.map +1 -0
  273. package/dist/lib/tracking/enterprise/multi-path-funnels.d.ts +20 -0
  274. package/dist/lib/tracking/enterprise/multi-path-funnels.js +18 -0
  275. package/dist/lib/tracking/enterprise/multi-path-funnels.js.map +1 -0
  276. package/dist/lib/tracking/enterprise/paths.d.ts +20 -0
  277. package/dist/lib/tracking/enterprise/paths.js +18 -0
  278. package/dist/lib/tracking/enterprise/paths.js.map +1 -0
  279. package/dist/lib/tracking/enterprise/security.d.ts +28 -0
  280. package/dist/lib/tracking/enterprise/security.js +26 -0
  281. package/dist/lib/tracking/enterprise/security.js.map +1 -0
  282. package/dist/lib/tracking/enterprise/support.d.ts +25 -0
  283. package/dist/lib/tracking/enterprise/support.js +22 -0
  284. package/dist/lib/tracking/enterprise/support.js.map +1 -0
  285. package/dist/lib/tracking/index.d.ts +4 -0
  286. package/dist/lib/tracking/index.js +5 -0
  287. package/dist/lib/tracking/index.js.map +1 -0
  288. package/dist/lib/types/analytics.d.ts +10 -2
  289. package/dist/lib/types/analytics.js +6 -0
  290. package/dist/lib/types/analytics.js.map +1 -0
  291. package/dist/lib/types/common.js +6 -0
  292. package/dist/lib/types/common.js.map +1 -0
  293. package/dist/lib/types/ecommerce.js +6 -0
  294. package/dist/lib/types/ecommerce.js.map +1 -0
  295. package/dist/lib/types/index.js +8 -0
  296. package/dist/lib/types/index.js.map +1 -0
  297. package/dist/lib/utils/browser.d.ts +16 -0
  298. package/dist/lib/utils/browser.js +32 -0
  299. package/dist/lib/utils/browser.js.map +1 -0
  300. package/dist/lib/utils/identity.js +346 -0
  301. package/dist/lib/utils/identity.js.map +1 -0
  302. package/dist/lib/utils/storage.js +105 -0
  303. package/dist/lib/utils/storage.js.map +1 -0
  304. package/dist/umd/237.index.js +2 -0
  305. package/dist/umd/237.index.js.map +1 -0
  306. package/dist/umd/546.index.js +3 -0
  307. package/dist/umd/546.index.js.LICENSE.txt +14 -0
  308. package/dist/umd/546.index.js.map +1 -0
  309. package/dist/umd/index.js +2 -0
  310. package/dist/umd/index.js.map +1 -0
  311. package/package.json +27 -80
  312. package/dist/lib/features/ecommerce/inventory.d.ts +0 -219
@@ -0,0 +1,258 @@
1
+ /**
2
+ * @fileoverview Product Analytics - Heatmaps & Click Tracking
3
+ * @module features/analytics/heatmaps
4
+ *
5
+ * @description
6
+ * Track user interactions for heatmap visualization including
7
+ * clicks, mouse movements, and scroll behavior.
8
+ *
9
+ * @useCases
10
+ * - Visualize click patterns on pages
11
+ * - Identify dead zones and ignored elements
12
+ * - Analyze scroll depth and attention
13
+ * - Optimize CTA placement
14
+ * - Improve page layout based on behavior
15
+ *
16
+ * @metrics
17
+ * - Click coordinates and density
18
+ * - Scroll depth distribution
19
+ * - Attention time by viewport
20
+ * - Element interaction rates
21
+ * - Rage clicks detection
22
+ *
23
+ * @chartData
24
+ * - Heatmap: Click density overlay
25
+ * - Scroll map: Attention by page section
26
+ * - Element report: Interaction by element
27
+ * - Rage click detection
28
+ *
29
+ * @example
30
+ * ```typescript
31
+ * const heatmaps = new Heatmaps(webId, endpoint, apiKey);
32
+ *
33
+ * // Track click
34
+ * await heatmaps.trackClick({
35
+ * pageUrl: '/pricing',
36
+ * x: 450,
37
+ * y: 320,
38
+ * viewportWidth: 1920,
39
+ * viewportHeight: 1080
40
+ * });
41
+ * ```
42
+ */
43
+ import { FlowGridTransport } from "../../client/transport";
44
+ import { getWindow, getDocument, isBrowser, combineTeardowns } from "../../utils/browser";
45
+ // ============================================================================
46
+ // HEATMAPS CLASS
47
+ // ============================================================================
48
+ /**
49
+ * Heatmaps - Track user interactions for heatmap visualization.
50
+ *
51
+ * @extends FlowGridTransport
52
+ *
53
+ * @description
54
+ * Provides heatmap data collection including:
55
+ * - Click tracking with coordinates
56
+ * - Mouse movement tracking
57
+ * - Scroll depth tracking
58
+ * - Element interaction tracking
59
+ * - Rage click detection
60
+ *
61
+ * @example
62
+ * ```typescript
63
+ * const heatmaps = new Heatmaps(webId, endpoint, apiKey);
64
+ *
65
+ * // Track clicks
66
+ * document.addEventListener('click', (e) => {
67
+ * heatmaps.trackClick({
68
+ * pageUrl: window.location.pathname,
69
+ * x: e.clientX,
70
+ * y: e.clientY + window.scrollY,
71
+ * viewportWidth: window.innerWidth,
72
+ * viewportHeight: window.innerHeight,
73
+ * elementSelector: getSelector(e.target)
74
+ * });
75
+ * });
76
+ *
77
+ * // Get heatmap data for visualization
78
+ * const data = await heatmaps.getData('/pricing', { range: 'last7days' });
79
+ * ```
80
+ */
81
+ export class Heatmaps extends FlowGridTransport {
82
+ constructor() {
83
+ super(...arguments);
84
+ /** Throttle timestamps */
85
+ this.lastMovementTime = 0;
86
+ this.lastScrollTime = 0;
87
+ }
88
+ /**
89
+ * Tracks a click interaction.
90
+ *
91
+ * @param data - Click data
92
+ * @returns Promise resolving to heatmap response
93
+ */
94
+ async trackClick(data) {
95
+ return await this.init("heatmap_click", {
96
+ type: "heatmap_click",
97
+ pageUrl: data.pageUrl,
98
+ x: data.x,
99
+ y: data.y,
100
+ normalizedX: data.x / data.viewportWidth,
101
+ normalizedY: data.y / data.viewportHeight,
102
+ viewportWidth: data.viewportWidth,
103
+ viewportHeight: data.viewportHeight,
104
+ elementSelector: data.elementSelector,
105
+ elementText: data.elementText?.substring(0, 50),
106
+ userId: data.userId,
107
+ sessionId: data.sessionId,
108
+ timestamp: new Date().toISOString()
109
+ });
110
+ }
111
+ /**
112
+ * Tracks mouse movement path.
113
+ *
114
+ * @param data - Movement data
115
+ * @returns Promise resolving to heatmap response
116
+ */
117
+ async trackMovement(data) {
118
+ const now = Date.now();
119
+ if (now - this.lastMovementTime < Heatmaps.MOVEMENT_THROTTLE_MS) {
120
+ return { eventName: 'heatmap_movement', properties: {}, response: { recorded: false, interactionId: '' }, timestamp: new Date().toISOString() };
121
+ }
122
+ this.lastMovementTime = now;
123
+ return await this.init("heatmap_movement", {
124
+ type: "heatmap_movement",
125
+ pageUrl: data.pageUrl,
126
+ path: data.path,
127
+ viewport: data.viewport,
128
+ sessionId: data.sessionId,
129
+ timestamp: new Date().toISOString()
130
+ });
131
+ }
132
+ /**
133
+ * Tracks scroll behavior.
134
+ *
135
+ * @param data - Scroll data
136
+ * @returns Promise resolving to heatmap response
137
+ */
138
+ async trackScroll(data) {
139
+ const now = Date.now();
140
+ if (now - this.lastScrollTime < Heatmaps.SCROLL_THROTTLE_MS) {
141
+ return { eventName: 'heatmap_scroll', properties: {}, response: { recorded: false, interactionId: '' }, timestamp: new Date().toISOString() };
142
+ }
143
+ this.lastScrollTime = now;
144
+ return await this.init("heatmap_scroll", {
145
+ type: "heatmap_scroll",
146
+ pageUrl: data.pageUrl,
147
+ maxScrollDepth: data.maxScrollDepth,
148
+ pageHeight: data.pageHeight,
149
+ viewportHeight: data.viewportHeight,
150
+ timeAtDepths: data.timeAtDepths,
151
+ sessionId: data.sessionId,
152
+ timestamp: new Date().toISOString()
153
+ });
154
+ }
155
+ /**
156
+ * Tracks rage clicks (repeated clicks in frustration).
157
+ *
158
+ * @param pageUrl - Page URL
159
+ * @param x - X coordinate
160
+ * @param y - Y coordinate
161
+ * @param clickCount - Number of rapid clicks
162
+ * @returns Promise resolving to heatmap response
163
+ */
164
+ async trackRageClick(pageUrl, x, y, clickCount) {
165
+ return await this.init("heatmap_rage_click", {
166
+ type: "heatmap_rage_click",
167
+ pageUrl,
168
+ x,
169
+ y,
170
+ clickCount,
171
+ timestamp: new Date().toISOString()
172
+ });
173
+ }
174
+ /**
175
+ * Auto-collect heatmap interactions: clicks (with element selector + text)
176
+ * and scroll depth on the current page. Mouse-move tracking is opt-in
177
+ * because the volume can be very high.
178
+ *
179
+ * @param options.movement Subscribe to throttled mousemove sampling.
180
+ * @param options.userId Attached to every event.
181
+ * @returns Teardown function detaching all listeners.
182
+ */
183
+ autoTrack(options = {}) {
184
+ if (!isBrowser())
185
+ return () => { };
186
+ const win = getWindow();
187
+ const doc = getDocument();
188
+ const selectorOf = (el) => {
189
+ if (!el)
190
+ return "";
191
+ if (el.id)
192
+ return `#${el.id}`;
193
+ const tag = el.tagName.toLowerCase();
194
+ const cls = (el.className && typeof el.className === "string")
195
+ ? "." + el.className.trim().split(/\s+/).slice(0, 2).join(".")
196
+ : "";
197
+ return `${tag}${cls}`;
198
+ };
199
+ const onClick = (e) => {
200
+ const target = e.target;
201
+ void this.trackClick({
202
+ pageUrl: win.location.pathname,
203
+ x: e.clientX,
204
+ y: e.clientY + win.scrollY,
205
+ viewportWidth: win.innerWidth,
206
+ viewportHeight: win.innerHeight,
207
+ elementSelector: selectorOf(target),
208
+ elementText: (target?.textContent || "").trim().slice(0, 50),
209
+ userId: options.userId,
210
+ sessionId: options.sessionId,
211
+ });
212
+ };
213
+ doc.addEventListener("click", onClick, { capture: true, passive: true });
214
+ let maxDepth = 0;
215
+ const onScroll = () => {
216
+ const docEl = doc.documentElement;
217
+ const top = win.scrollY || docEl.scrollTop;
218
+ const height = Math.max(1, docEl.scrollHeight - win.innerHeight);
219
+ const depth = Math.min(100, Math.round((top / height) * 100));
220
+ if (depth > maxDepth)
221
+ maxDepth = depth;
222
+ void this.trackScroll({
223
+ pageUrl: win.location.pathname,
224
+ maxScrollDepth: maxDepth,
225
+ pageHeight: docEl.scrollHeight,
226
+ viewportHeight: win.innerHeight,
227
+ sessionId: options.sessionId,
228
+ });
229
+ };
230
+ win.addEventListener("scroll", onScroll, { passive: true });
231
+ let moveTeardown;
232
+ if (options.movement) {
233
+ let buffer = [];
234
+ const start = Date.now();
235
+ const onMove = (e) => {
236
+ buffer.push({ x: e.clientX, y: e.clientY, t: Date.now() - start });
237
+ if (buffer.length >= 50) {
238
+ const path = buffer;
239
+ buffer = [];
240
+ void this.trackMovement({
241
+ pageUrl: win.location.pathname,
242
+ path,
243
+ viewport: { width: win.innerWidth, height: win.innerHeight },
244
+ sessionId: options.sessionId,
245
+ });
246
+ }
247
+ };
248
+ doc.addEventListener("mousemove", onMove, { passive: true });
249
+ moveTeardown = () => doc.removeEventListener("mousemove", onMove);
250
+ }
251
+ return combineTeardowns(() => doc.removeEventListener("click", onClick, { capture: true }), () => win.removeEventListener("scroll", onScroll), moveTeardown);
252
+ }
253
+ }
254
+ /** Throttle intervals (ms) */
255
+ Heatmaps.MOVEMENT_THROTTLE_MS = 100;
256
+ Heatmaps.SCROLL_THROTTLE_MS = 500;
257
+ export default Heatmaps;
258
+ //# sourceMappingURL=heatmaps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heatmaps.js","sourceRoot":"","sources":["../../../../src/lib/features/analytics/heatmaps.ts"],"names":[],"mappings":"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"}
@@ -43,7 +43,7 @@
43
43
  * ```
44
44
  */
45
45
  import { FlowGridTransport } from "../../client/transport";
46
- import { UserTraits, MoneyValue, DateRangeFilter, TimeSeriesData } from "../../types";
46
+ import { UserTraits, MoneyValue, TimeSeriesData } from "../../types";
47
47
  /**
48
48
  * Configuration for identifying a user.
49
49
  */
@@ -249,25 +249,5 @@ export declare class Identify extends FlowGridTransport {
249
249
  * @returns Promise resolving to reset response
250
250
  */
251
251
  reset(userId: string): Promise<IdentifyResponse>;
252
- /**
253
- * Retrieves user analytics data for dashboards and charts.
254
- *
255
- * @param filter - Date range filter
256
- * @returns Promise resolving to user analytics
257
- *
258
- * @example
259
- * ```typescript
260
- * const analytics = await identify.getAnalytics({
261
- * range: 'last30days'
262
- * });
263
- *
264
- * // Pie chart - users by plan
265
- * const planData = analytics.byPlan.map(p => ({
266
- * name: p.plan,
267
- * value: p.count
268
- * }));
269
- * ```
270
- */
271
- getAnalytics(filter?: DateRangeFilter): Promise<UserAnalyticsData>;
272
252
  }
273
253
  export default Identify;
@@ -0,0 +1,213 @@
1
+ /**
2
+ * @fileoverview Product Analytics - User Identification & Traits
3
+ * @module features/analytics/identify
4
+ *
5
+ * @description
6
+ * Identify users and track their traits for personalization,
7
+ * segmentation, and cohort analysis.
8
+ *
9
+ * @useCases
10
+ * - Link anonymous sessions to authenticated users
11
+ * - Store user profile data for segmentation
12
+ * - Track user lifecycle changes (signup, upgrade, churn)
13
+ * - Enable personalized experiences
14
+ * - Build user cohorts for analysis
15
+ *
16
+ * @metrics
17
+ * - Total identified users
18
+ * - Anonymous to identified conversion rate
19
+ * - Users by plan/segment
20
+ * - User lifetime value distribution
21
+ * - Trait distribution
22
+ *
23
+ * @chartData
24
+ * - Pie chart: Users by plan
25
+ * - Bar chart: Users by trait value
26
+ * - Line chart: New identifications over time
27
+ * - Table: User segments
28
+ *
29
+ * @example
30
+ * ```typescript
31
+ * const identify = new Identify(webId, endpoint, apiKey);
32
+ *
33
+ * // Identify user on login
34
+ * await identify.user({
35
+ * userId: 'user_123',
36
+ * traits: {
37
+ * email: 'user@example.com',
38
+ * name: 'John Doe',
39
+ * plan: 'premium',
40
+ * createdAt: '2025-01-15'
41
+ * }
42
+ * });
43
+ * ```
44
+ */
45
+ import { FlowGridTransport } from "../../client/transport";
46
+ // ============================================================================
47
+ // IDENTIFY CLASS
48
+ // ============================================================================
49
+ /**
50
+ * Identify - User identification and trait management.
51
+ *
52
+ * @extends FlowGridTransport
53
+ *
54
+ * @description
55
+ * Provides user identification capabilities including:
56
+ * - User identification on login/signup
57
+ * - Anonymous to identified user linking
58
+ * - User trait/property storage
59
+ * - User aliasing for ID changes
60
+ * - Group/company association
61
+ *
62
+ * @example
63
+ * ```typescript
64
+ * const identify = new Identify(webId, endpoint, apiKey);
65
+ *
66
+ * // On user signup
67
+ * await identify.user({
68
+ * userId: 'user_123',
69
+ * anonymousId: getAnonymousId(),
70
+ * traits: {
71
+ * email: 'user@example.com',
72
+ * name: 'Jane Smith',
73
+ * plan: 'starter',
74
+ * createdAt: new Date().toISOString()
75
+ * }
76
+ * });
77
+ *
78
+ * // Associate user with company
79
+ * await identify.group({
80
+ * userId: 'user_123',
81
+ * groupId: 'company_456',
82
+ * traits: { name: 'Acme Inc', employees: 50 }
83
+ * });
84
+ * ```
85
+ */
86
+ export class Identify extends FlowGridTransport {
87
+ /**
88
+ * Identifies a user with traits.
89
+ *
90
+ * @param config - Identification configuration
91
+ * @returns Promise resolving to identify response
92
+ *
93
+ * @example
94
+ * ```typescript
95
+ * // Basic identification
96
+ * await identify.user({
97
+ * userId: 'user_123',
98
+ * traits: { email: 'user@example.com' }
99
+ * });
100
+ *
101
+ * // With anonymous ID linking
102
+ * await identify.user({
103
+ * userId: 'user_123',
104
+ * anonymousId: localStorage.getItem('anonId'),
105
+ * traits: {
106
+ * name: 'John Doe',
107
+ * plan: 'premium',
108
+ * ltv: { amount: 29900, currency: 'USD' }
109
+ * }
110
+ * });
111
+ * ```
112
+ */
113
+ async user(config) {
114
+ return await this.init("identify_user", {
115
+ type: "identify",
116
+ userId: config.userId,
117
+ anonymousId: config.anonymousId,
118
+ traits: config.traits || {},
119
+ timestamp: new Date().toISOString()
120
+ });
121
+ }
122
+ /**
123
+ * Updates traits for an existing user.
124
+ *
125
+ * @param userId - User identifier
126
+ * @param traits - Traits to update/add
127
+ * @returns Promise resolving to identify response
128
+ *
129
+ * @example
130
+ * ```typescript
131
+ * // Update user plan after upgrade
132
+ * await identify.updateTraits('user_123', {
133
+ * plan: 'enterprise',
134
+ * ltv: { amount: 99900, currency: 'USD' }
135
+ * });
136
+ * ```
137
+ */
138
+ async updateTraits(userId, traits) {
139
+ return await this.init("update_traits", {
140
+ type: "update_traits",
141
+ userId,
142
+ traits,
143
+ timestamp: new Date().toISOString()
144
+ });
145
+ }
146
+ /**
147
+ * Creates an alias between two user IDs.
148
+ *
149
+ * @param config - Alias configuration
150
+ * @returns Promise resolving to alias response
151
+ *
152
+ * @example
153
+ * ```typescript
154
+ * // When user ID changes (e.g., after migration)
155
+ * await identify.alias({
156
+ * previousId: 'old_user_id',
157
+ * userId: 'new_user_id'
158
+ * });
159
+ * ```
160
+ */
161
+ async alias(config) {
162
+ return await this.init("alias_user", {
163
+ type: "alias",
164
+ previousId: config.previousId,
165
+ userId: config.userId,
166
+ timestamp: new Date().toISOString()
167
+ });
168
+ }
169
+ /**
170
+ * Associates a user with a group/company.
171
+ *
172
+ * @param config - Group configuration
173
+ * @returns Promise resolving to group response
174
+ *
175
+ * @example
176
+ * ```typescript
177
+ * await identify.group({
178
+ * userId: 'user_123',
179
+ * groupId: 'company_456',
180
+ * traits: {
181
+ * name: 'Acme Corporation',
182
+ * industry: 'Technology',
183
+ * employees: 500,
184
+ * plan: 'enterprise'
185
+ * }
186
+ * });
187
+ * ```
188
+ */
189
+ async group(config) {
190
+ return await this.init("group_user", {
191
+ type: "group",
192
+ userId: config.userId,
193
+ groupId: config.groupId,
194
+ traits: config.traits || {},
195
+ timestamp: new Date().toISOString()
196
+ });
197
+ }
198
+ /**
199
+ * Resets user identity (logout).
200
+ *
201
+ * @param userId - User ID to reset
202
+ * @returns Promise resolving to reset response
203
+ */
204
+ async reset(userId) {
205
+ return await this.init("reset_identity", {
206
+ type: "reset",
207
+ userId,
208
+ timestamp: new Date().toISOString()
209
+ });
210
+ }
211
+ }
212
+ export default Identify;
213
+ //# sourceMappingURL=identify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identify.js","sourceRoot":"","sources":["../../../../src/lib/features/analytics/identify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAkG3D,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,OAAO,QAAS,SAAQ,iBAAiB;IAC7C;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,KAAK,CAAC,IAAI,CAAC,MAAsB;QAC/B,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACtC,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;YAC3B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,YAAY,CAAC,MAAc,EAAE,MAAkB;QACnD,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACtC,IAAI,EAAE,eAAe;YACrB,MAAM;YACN,MAAM;YACN,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,KAAK,CAAC,MAAmB;QAC7B,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACnC,IAAI,EAAE,OAAO;YACb,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,KAAK,CAAC,KAAK,CAAC,MAAmB;QAC7B,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACnC,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;YAC3B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,KAAK,CAAC,MAAc;QACxB,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACvC,IAAI,EAAE,OAAO;YACb,MAAM;YACN,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;CAEF;AAED,eAAe,QAAQ,CAAC"}
@@ -11,6 +11,8 @@ export { Retention } from './retention';
11
11
  export { Attribution } from './attribution';
12
12
  export { Heatmaps } from './heatmaps';
13
13
  export { PerformanceTracking, PerformanceTracking as Performance } from './performance';
14
+ export { SessionReplay } from './replay';
15
+ export type { ReplayPrivacyMetadata, SessionReplayDropMetadata, SessionReplayErrorContext, SessionReplayFlushMetadata, SessionReplayFlushReason, SessionReplayOptions, SessionReplaySendChunkOptions, SessionReplayState, SessionReplayStatus, } from './replay';
14
16
  export type { PageViewConfig, ScrollDepthConfig, TimeOnPageConfig, PageViewResponse, PageAnalyticsData } from './page-views';
15
17
  export type { SessionStartConfig, SessionResponse, SessionEndResponse, SessionAnalyticsData, RealTimeSessionData } from './sessions';
16
18
  export type { EventTrackConfig, BatchEventConfig, EventResponse, BatchEventResponse, EventAnalyticsData } from './events';
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @fileoverview Analytics features barrel export
3
+ * @module features/analytics
4
+ */
5
+ export { PageViews } from './page-views';
6
+ export { Sessions } from './sessions';
7
+ export { Events } from './events';
8
+ export { Identify } from './identify';
9
+ export { Funnels } from './funnels';
10
+ export { Retention } from './retention';
11
+ export { Attribution } from './attribution';
12
+ export { Heatmaps } from './heatmaps';
13
+ export { PerformanceTracking, PerformanceTracking as Performance } from './performance';
14
+ export { SessionReplay } from './replay';
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/features/analytics/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACxF,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC"}
@@ -47,7 +47,8 @@
47
47
  * ```
48
48
  */
49
49
  import { FlowGridTransport } from "../../client/transport";
50
- import { TimeSeriesData, DateRangeFilter, PaginationParams } from "../../types";
50
+ import { Teardown } from "../../utils/browser";
51
+ import { TimeSeriesData } from "../../types";
51
52
  /**
52
53
  * Configuration for tracking a page view.
53
54
  */
@@ -148,17 +149,6 @@ export interface PageAnalyticsData {
148
149
  * path: '/products',
149
150
  * title: 'Our Products'
150
151
  * });
151
- *
152
- * // Pull analytics data for charts
153
- * const analytics = await pageViews.getAnalytics({
154
- * range: 'last30days'
155
- * });
156
- *
157
- * // Data ready for charting
158
- * const chartData = analytics.timeSeries.data.map(d => ({
159
- * x: d.label,
160
- * y: d.value
161
- * }));
162
152
  * ```
163
153
  */
164
154
  export declare class PageViews extends FlowGridTransport {
@@ -223,28 +213,21 @@ export declare class PageViews extends FlowGridTransport {
223
213
  */
224
214
  trackExit(path: string, duration: number, scrollDepth: number): Promise<PageViewResponse>;
225
215
  /**
226
- * Retrieves page analytics data for dashboards and charts.
216
+ * Auto-track page views for both classic full-page navigations and SPA
217
+ * route changes (history.pushState / replaceState / popstate). Also wires
218
+ * scroll-depth thresholds (25/50/75/100%) and a final time-on-page event
219
+ * when the page is hidden or unloaded.
227
220
  *
228
- * @param filter - Date range filter
229
- * @param pagination - Pagination options
230
- * @returns Promise resolving to analytics data
221
+ * @returns A teardown function that detaches every listener.
231
222
  *
232
223
  * @example
233
- * ```typescript
234
- * const analytics = await pageViews.getAnalytics({
235
- * range: 'last7days'
236
- * });
237
- *
238
- * // Use for line chart
239
- * const lineData = analytics.timeSeries.data;
240
- *
241
- * // Use for bar chart
242
- * const barData = analytics.topPages.map(p => ({
243
- * label: p.path,
244
- * value: p.views
245
- * }));
224
+ * ```ts
225
+ * const stop = fg.pageViews.client.autoTrack({ userId: "u_1" });
246
226
  * ```
247
227
  */
248
- getAnalytics(filter?: DateRangeFilter, pagination?: PaginationParams): Promise<PageAnalyticsData>;
228
+ autoTrack(options?: {
229
+ userId?: string;
230
+ sessionId?: string;
231
+ }): Teardown;
249
232
  }
250
233
  export default PageViews;