flowgrid-sdk 1.2.0 → 1.3.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.
Files changed (314) hide show
  1. package/README.md +224 -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.d.ts +2 -2
  163. package/dist/lib/frameworks/react/index.js +271 -0
  164. package/dist/lib/frameworks/react/index.js.map +1 -0
  165. package/dist/lib/frameworks/vue/CookieBanner.js +165 -0
  166. package/dist/lib/frameworks/vue/CookieBanner.js.map +1 -0
  167. package/dist/lib/frameworks/vue/index.d.ts +2 -2
  168. package/dist/lib/frameworks/vue/index.js +390 -0
  169. package/dist/lib/frameworks/vue/index.js.map +1 -0
  170. package/dist/lib/tracking/analytics/attribution.d.ts +14 -0
  171. package/dist/lib/tracking/analytics/attribution.js +18 -0
  172. package/dist/lib/tracking/analytics/attribution.js.map +1 -0
  173. package/dist/lib/tracking/analytics/events.d.ts +26 -0
  174. package/dist/lib/tracking/analytics/events.js +30 -0
  175. package/dist/lib/tracking/analytics/events.js.map +1 -0
  176. package/dist/lib/tracking/analytics/funnels.d.ts +16 -0
  177. package/dist/lib/tracking/analytics/funnels.js +22 -0
  178. package/dist/lib/tracking/analytics/funnels.js.map +1 -0
  179. package/dist/lib/tracking/analytics/heatmaps.d.ts +27 -0
  180. package/dist/lib/tracking/analytics/heatmaps.js +22 -0
  181. package/dist/lib/tracking/analytics/heatmaps.js.map +1 -0
  182. package/dist/lib/tracking/analytics/identify.d.ts +16 -0
  183. package/dist/lib/tracking/analytics/identify.js +22 -0
  184. package/dist/lib/tracking/analytics/identify.js.map +1 -0
  185. package/dist/lib/tracking/analytics/index.d.ts +10 -0
  186. package/dist/lib/tracking/analytics/index.js +11 -0
  187. package/dist/lib/tracking/analytics/index.js.map +1 -0
  188. package/dist/lib/tracking/analytics/page-views.d.ts +29 -0
  189. package/dist/lib/tracking/analytics/page-views.js +50 -0
  190. package/dist/lib/tracking/analytics/page-views.js.map +1 -0
  191. package/dist/lib/tracking/analytics/performance.d.ts +22 -0
  192. package/dist/lib/tracking/analytics/performance.js +22 -0
  193. package/dist/lib/tracking/analytics/performance.js.map +1 -0
  194. package/dist/lib/tracking/analytics/replay.d.ts +34 -0
  195. package/dist/lib/tracking/analytics/replay.js +46 -0
  196. package/dist/lib/tracking/analytics/replay.js.map +1 -0
  197. package/dist/lib/tracking/analytics/retention.d.ts +10 -0
  198. package/dist/lib/tracking/analytics/retention.js +10 -0
  199. package/dist/lib/tracking/analytics/retention.js.map +1 -0
  200. package/dist/lib/tracking/analytics/sessions.d.ts +20 -0
  201. package/dist/lib/tracking/analytics/sessions.js +26 -0
  202. package/dist/lib/tracking/analytics/sessions.js.map +1 -0
  203. package/dist/lib/tracking/core/activation.d.ts +23 -0
  204. package/dist/lib/tracking/core/activation.js +33 -0
  205. package/dist/lib/tracking/core/activation.js.map +1 -0
  206. package/dist/lib/tracking/core/experiment.d.ts +122 -0
  207. package/dist/lib/tracking/core/experiment.js +150 -0
  208. package/dist/lib/tracking/core/experiment.js.map +1 -0
  209. package/dist/lib/tracking/core/feature.d.ts +13 -0
  210. package/dist/lib/tracking/core/feature.js +14 -0
  211. package/dist/lib/tracking/core/feature.js.map +1 -0
  212. package/dist/lib/tracking/core/index.d.ts +4 -0
  213. package/dist/lib/tracking/core/index.js +5 -0
  214. package/dist/lib/tracking/core/index.js.map +1 -0
  215. package/dist/lib/tracking/core/prompt.d.ts +18 -0
  216. package/dist/lib/tracking/core/prompt.js +26 -0
  217. package/dist/lib/tracking/core/prompt.js.map +1 -0
  218. package/dist/lib/tracking/ecommerce/cart.d.ts +17 -0
  219. package/dist/lib/tracking/ecommerce/cart.js +22 -0
  220. package/dist/lib/tracking/ecommerce/cart.js.map +1 -0
  221. package/dist/lib/tracking/ecommerce/checkout.d.ts +17 -0
  222. package/dist/lib/tracking/ecommerce/checkout.js +22 -0
  223. package/dist/lib/tracking/ecommerce/checkout.js.map +1 -0
  224. package/dist/lib/tracking/ecommerce/index.d.ts +10 -0
  225. package/dist/lib/tracking/ecommerce/index.js +11 -0
  226. package/dist/lib/tracking/ecommerce/index.js.map +1 -0
  227. package/dist/lib/tracking/ecommerce/ltv.d.ts +15 -0
  228. package/dist/lib/tracking/ecommerce/ltv.js +14 -0
  229. package/dist/lib/tracking/ecommerce/ltv.js.map +1 -0
  230. package/dist/lib/tracking/ecommerce/products.d.ts +15 -0
  231. package/dist/lib/tracking/ecommerce/products.js +18 -0
  232. package/dist/lib/tracking/ecommerce/products.js.map +1 -0
  233. package/dist/lib/tracking/ecommerce/promotions.d.ts +14 -0
  234. package/dist/lib/tracking/ecommerce/promotions.js +25 -0
  235. package/dist/lib/tracking/ecommerce/promotions.js.map +1 -0
  236. package/dist/lib/tracking/ecommerce/purchases.d.ts +11 -0
  237. package/dist/lib/tracking/ecommerce/purchases.js +10 -0
  238. package/dist/lib/tracking/ecommerce/purchases.js.map +1 -0
  239. package/dist/lib/tracking/ecommerce/refunds.d.ts +17 -0
  240. package/dist/lib/tracking/ecommerce/refunds.js +22 -0
  241. package/dist/lib/tracking/ecommerce/refunds.js.map +1 -0
  242. package/dist/lib/tracking/ecommerce/search.d.ts +24 -0
  243. package/dist/lib/tracking/ecommerce/search.js +22 -0
  244. package/dist/lib/tracking/ecommerce/search.js.map +1 -0
  245. package/dist/lib/tracking/ecommerce/subscriptions.d.ts +21 -0
  246. package/dist/lib/tracking/ecommerce/subscriptions.js +38 -0
  247. package/dist/lib/tracking/ecommerce/subscriptions.js.map +1 -0
  248. package/dist/lib/tracking/ecommerce/wishlist.d.ts +19 -0
  249. package/dist/lib/tracking/ecommerce/wishlist.js +26 -0
  250. package/dist/lib/tracking/ecommerce/wishlist.js.map +1 -0
  251. package/dist/lib/tracking/enterprise/acquisition.d.ts +25 -0
  252. package/dist/lib/tracking/enterprise/acquisition.js +22 -0
  253. package/dist/lib/tracking/enterprise/acquisition.js.map +1 -0
  254. package/dist/lib/tracking/enterprise/alerts.d.ts +32 -0
  255. package/dist/lib/tracking/enterprise/alerts.js +30 -0
  256. package/dist/lib/tracking/enterprise/alerts.js.map +1 -0
  257. package/dist/lib/tracking/enterprise/churn.d.ts +23 -0
  258. package/dist/lib/tracking/enterprise/churn.js +22 -0
  259. package/dist/lib/tracking/enterprise/churn.js.map +1 -0
  260. package/dist/lib/tracking/enterprise/cohorts.d.ts +18 -0
  261. package/dist/lib/tracking/enterprise/cohorts.js +18 -0
  262. package/dist/lib/tracking/enterprise/cohorts.js.map +1 -0
  263. package/dist/lib/tracking/enterprise/engagement.d.ts +31 -0
  264. package/dist/lib/tracking/enterprise/engagement.js +44 -0
  265. package/dist/lib/tracking/enterprise/engagement.js.map +1 -0
  266. package/dist/lib/tracking/enterprise/forecasting.d.ts +18 -0
  267. package/dist/lib/tracking/enterprise/forecasting.js +22 -0
  268. package/dist/lib/tracking/enterprise/forecasting.js.map +1 -0
  269. package/dist/lib/tracking/enterprise/index.d.ts +11 -0
  270. package/dist/lib/tracking/enterprise/index.js +12 -0
  271. package/dist/lib/tracking/enterprise/index.js.map +1 -0
  272. package/dist/lib/tracking/enterprise/monetization.d.ts +14 -0
  273. package/dist/lib/tracking/enterprise/monetization.js +10 -0
  274. package/dist/lib/tracking/enterprise/monetization.js.map +1 -0
  275. package/dist/lib/tracking/enterprise/multi-path-funnels.d.ts +20 -0
  276. package/dist/lib/tracking/enterprise/multi-path-funnels.js +18 -0
  277. package/dist/lib/tracking/enterprise/multi-path-funnels.js.map +1 -0
  278. package/dist/lib/tracking/enterprise/paths.d.ts +20 -0
  279. package/dist/lib/tracking/enterprise/paths.js +18 -0
  280. package/dist/lib/tracking/enterprise/paths.js.map +1 -0
  281. package/dist/lib/tracking/enterprise/security.d.ts +28 -0
  282. package/dist/lib/tracking/enterprise/security.js +26 -0
  283. package/dist/lib/tracking/enterprise/security.js.map +1 -0
  284. package/dist/lib/tracking/enterprise/support.d.ts +25 -0
  285. package/dist/lib/tracking/enterprise/support.js +22 -0
  286. package/dist/lib/tracking/enterprise/support.js.map +1 -0
  287. package/dist/lib/tracking/index.d.ts +4 -0
  288. package/dist/lib/tracking/index.js +5 -0
  289. package/dist/lib/tracking/index.js.map +1 -0
  290. package/dist/lib/types/analytics.d.ts +10 -2
  291. package/dist/lib/types/analytics.js +6 -0
  292. package/dist/lib/types/analytics.js.map +1 -0
  293. package/dist/lib/types/common.js +6 -0
  294. package/dist/lib/types/common.js.map +1 -0
  295. package/dist/lib/types/ecommerce.js +6 -0
  296. package/dist/lib/types/ecommerce.js.map +1 -0
  297. package/dist/lib/types/index.js +8 -0
  298. package/dist/lib/types/index.js.map +1 -0
  299. package/dist/lib/utils/browser.d.ts +16 -0
  300. package/dist/lib/utils/browser.js +32 -0
  301. package/dist/lib/utils/browser.js.map +1 -0
  302. package/dist/lib/utils/identity.js +346 -0
  303. package/dist/lib/utils/identity.js.map +1 -0
  304. package/dist/lib/utils/storage.js +105 -0
  305. package/dist/lib/utils/storage.js.map +1 -0
  306. package/dist/umd/237.index.js +2 -0
  307. package/dist/umd/237.index.js.map +1 -0
  308. package/dist/umd/546.index.js +3 -0
  309. package/dist/umd/546.index.js.LICENSE.txt +14 -0
  310. package/dist/umd/546.index.js.map +1 -0
  311. package/dist/umd/index.js +2 -0
  312. package/dist/umd/index.js.map +1 -0
  313. package/package.json +27 -80
  314. package/dist/lib/features/ecommerce/inventory.d.ts +0 -219
@@ -0,0 +1,346 @@
1
+ /**
2
+ * @fileoverview FlowGrid Identity Manager.
3
+ * @module utils/identity
4
+ *
5
+ * @description
6
+ * Owns the visitor/session identity lifecycle.
7
+ * Writes its own cookies/storage so the SDK can self-bootstrap
8
+ * without depending on an external tracking script (track.js).
9
+ *
10
+ * Backward-compatible: checks for existing track.js `visitor_id`
11
+ * before falling back to its own `fg_visitor_id` key.
12
+ */
13
+ import { getCookie, getVisitorId as getTrackJsVisitorId } from './storage';
14
+ // ============================================================================
15
+ // CONSTANTS
16
+ // ============================================================================
17
+ const LEGACY_VISITOR_COOKIE = 'fg_visitor_id';
18
+ const COMPAT_VISITOR_COOKIE = 'visitor_id';
19
+ const SESSION_KEY = 'fg_session_id';
20
+ const SESSION_TOUCH_KEY = 'fg_session_touch';
21
+ // ============================================================================
22
+ // IDENTITY MANAGER
23
+ // ============================================================================
24
+ export class IdentityManager {
25
+ constructor(config) {
26
+ this.visitorId = '';
27
+ this.sessionId = '';
28
+ /** In-memory store for SSR / Node environments */
29
+ this.memoryStore = {};
30
+ this.config = {
31
+ visitorId: config?.visitorId ?? '',
32
+ cookieDomain: config?.cookieDomain ?? '',
33
+ visitorMaxAgeDays: config?.visitorMaxAgeDays ?? 365,
34
+ sessionTimeoutMinutes: config?.sessionTimeoutMinutes ?? 30,
35
+ storage: config?.storage ?? (this.detectBrowser() ? 'cookie' : 'memory'),
36
+ serverCookies: config?.serverCookies,
37
+ compat: config?.compat ?? true,
38
+ };
39
+ this.visitorId = this.resolveVisitorId();
40
+ this.sessionId = '';
41
+ }
42
+ // ---------------------------------------------------------------------------
43
+ // PUBLIC API
44
+ // ---------------------------------------------------------------------------
45
+ /**
46
+ * Get or create a persistent visitor ID.
47
+ *
48
+ * Resolution order:
49
+ * 1. Explicit config.visitorId
50
+ * 2. track.js `visitor_id` cookie/localStorage (backward compat)
51
+ * 3. `fg_visitor_id` cookie
52
+ * 4. `fg_visitor_id` localStorage
53
+ * 5. Server cookie reader (if provided)
54
+ * 6. Generate new UUID v4, persist to cookie + localStorage
55
+ */
56
+ getVisitorId() {
57
+ if (this.visitorId)
58
+ return this.visitorId;
59
+ this.visitorId = this.resolveVisitorId();
60
+ return this.visitorId;
61
+ }
62
+ /**
63
+ * Get or create a session ID.
64
+ *
65
+ * - Reads from sessionStorage `fg_session_id`
66
+ * - If absent or expired (>sessionTimeoutMinutes since last activity), creates new
67
+ * - Persists to sessionStorage
68
+ * - Touches timestamp on every call
69
+ */
70
+ getSessionId() {
71
+ if (this.config.storage === 'memory') {
72
+ return this.getMemorySessionId();
73
+ }
74
+ if (!this.detectBrowser()) {
75
+ return this.getMemorySessionId();
76
+ }
77
+ try {
78
+ const existing = sessionStorage.getItem(SESSION_KEY);
79
+ const lastTouch = sessionStorage.getItem(SESSION_TOUCH_KEY);
80
+ if (existing && lastTouch) {
81
+ const elapsed = Date.now() - parseInt(lastTouch, 10);
82
+ const timeoutMs = this.config.sessionTimeoutMinutes * 60 * 1000;
83
+ if (elapsed < timeoutMs) {
84
+ sessionStorage.setItem(SESSION_TOUCH_KEY, String(Date.now()));
85
+ this.sessionId = existing;
86
+ return existing;
87
+ }
88
+ }
89
+ // Create new session
90
+ const newSession = this.generateSessionId();
91
+ sessionStorage.setItem(SESSION_KEY, newSession);
92
+ sessionStorage.setItem(SESSION_TOUCH_KEY, String(Date.now()));
93
+ this.sessionId = newSession;
94
+ return newSession;
95
+ }
96
+ catch {
97
+ return this.getMemorySessionId();
98
+ }
99
+ }
100
+ /**
101
+ * Update the visitor ID (e.g. after identify() links anonymous → known user).
102
+ * Persists to cookie + localStorage.
103
+ */
104
+ setVisitorId(id) {
105
+ this.visitorId = id;
106
+ this.persistVisitorId(id);
107
+ }
108
+ /** Clear session (e.g. on logout). */
109
+ clearSession() {
110
+ this.sessionId = '';
111
+ delete this.memoryStore[SESSION_KEY];
112
+ delete this.memoryStore[SESSION_TOUCH_KEY];
113
+ if (this.detectBrowser()) {
114
+ try {
115
+ sessionStorage.removeItem(SESSION_KEY);
116
+ sessionStorage.removeItem(SESSION_TOUCH_KEY);
117
+ }
118
+ catch { /* SSR / privacy mode */ }
119
+ }
120
+ }
121
+ /** Clear all identity (GDPR). Removes visitor + session + experiment assignments. */
122
+ clearAll() {
123
+ this.visitorId = '';
124
+ this.sessionId = '';
125
+ this.memoryStore = {};
126
+ if (!this.detectBrowser())
127
+ return;
128
+ try {
129
+ // Cookies
130
+ this.deleteCookie(this.visitorCookieName);
131
+ this.deleteCookie(LEGACY_VISITOR_COOKIE);
132
+ // localStorage
133
+ localStorage.removeItem(this.visitorCookieName);
134
+ localStorage.removeItem(LEGACY_VISITOR_COOKIE);
135
+ localStorage.removeItem('fg_exp_assignments');
136
+ // sessionStorage
137
+ sessionStorage.removeItem(SESSION_KEY);
138
+ sessionStorage.removeItem(SESSION_TOUCH_KEY);
139
+ }
140
+ catch { /* SSR / privacy mode */ }
141
+ }
142
+ /** Check if running in a browser environment. */
143
+ isBrowser() {
144
+ return this.detectBrowser();
145
+ }
146
+ // ---------------------------------------------------------------------------
147
+ // PRIVATE — VISITOR RESOLUTION
148
+ // ---------------------------------------------------------------------------
149
+ /** Returns the primary cookie name based on compat mode */
150
+ get visitorCookieName() {
151
+ return this.config.compat ? COMPAT_VISITOR_COOKIE : LEGACY_VISITOR_COOKIE;
152
+ }
153
+ resolveVisitorId() {
154
+ // 1. Explicit config
155
+ if (this.config.visitorId)
156
+ return this.config.visitorId;
157
+ // 2. track.js backward compat (cookie/localStorage `visitor_id`)
158
+ if (this.detectBrowser()) {
159
+ const trackJsId = getTrackJsVisitorId();
160
+ if (trackJsId) {
161
+ // Migration: if fg_visitor_id exists with a different value, prefer visitor_id (track.js was first)
162
+ const legacyId = this.readCookie(LEGACY_VISITOR_COOKIE) || this.readLocalStorage(LEGACY_VISITOR_COOKIE);
163
+ if (legacyId && legacyId !== trackJsId) {
164
+ // Merge identities by keeping track.js id as canonical
165
+ this.removeLegacyCookie();
166
+ }
167
+ this.persistVisitorId(trackJsId);
168
+ return trackJsId;
169
+ }
170
+ }
171
+ // 3. Migration: fg_visitor_id → visitor_id
172
+ if (this.config.compat) {
173
+ const legacyId = this.readCookie(LEGACY_VISITOR_COOKIE) || this.readLocalStorage(LEGACY_VISITOR_COOKIE);
174
+ if (legacyId) {
175
+ this.persistVisitorId(legacyId);
176
+ this.removeLegacyCookie();
177
+ return legacyId;
178
+ }
179
+ }
180
+ // 4. Own cookie
181
+ const cookieId = this.readCookie(this.visitorCookieName);
182
+ if (cookieId)
183
+ return cookieId;
184
+ // 5. localStorage
185
+ if (this.detectBrowser()) {
186
+ try {
187
+ const lsId = localStorage.getItem(this.visitorCookieName);
188
+ if (lsId)
189
+ return lsId;
190
+ }
191
+ catch { /* unavailable */ }
192
+ }
193
+ // 6. Server cookie reader
194
+ if (this.config.serverCookies) {
195
+ const serverVal = this.readServerCookie(this.visitorCookieName);
196
+ if (serverVal)
197
+ return serverVal;
198
+ }
199
+ // 7. Memory store
200
+ if (this.memoryStore[this.visitorCookieName]) {
201
+ return this.memoryStore[this.visitorCookieName];
202
+ }
203
+ // 8. Generate new ID
204
+ const newId = this.generateVisitorId();
205
+ this.persistVisitorId(newId);
206
+ return newId;
207
+ }
208
+ readLocalStorage(key) {
209
+ if (!this.detectBrowser())
210
+ return null;
211
+ try {
212
+ return localStorage.getItem(key);
213
+ }
214
+ catch {
215
+ return null;
216
+ }
217
+ }
218
+ removeLegacyCookie() {
219
+ this.deleteCookie(LEGACY_VISITOR_COOKIE);
220
+ if (this.detectBrowser()) {
221
+ try {
222
+ localStorage.removeItem(LEGACY_VISITOR_COOKIE);
223
+ }
224
+ catch { /* */ }
225
+ }
226
+ }
227
+ persistVisitorId(id) {
228
+ const cookieName = this.visitorCookieName;
229
+ if (this.config.storage === 'memory') {
230
+ this.memoryStore[cookieName] = id;
231
+ return;
232
+ }
233
+ if (!this.detectBrowser()) {
234
+ this.memoryStore[cookieName] = id;
235
+ return;
236
+ }
237
+ // Cookie
238
+ this.writeCookie(cookieName, id, this.config.visitorMaxAgeDays);
239
+ // localStorage as fallback
240
+ try {
241
+ localStorage.setItem(cookieName, id);
242
+ }
243
+ catch { /* unavailable */ }
244
+ }
245
+ // ---------------------------------------------------------------------------
246
+ // PRIVATE — SESSION HELPERS
247
+ // ---------------------------------------------------------------------------
248
+ getMemorySessionId() {
249
+ const existing = this.memoryStore[SESSION_KEY];
250
+ const lastTouch = this.memoryStore[SESSION_TOUCH_KEY];
251
+ if (existing && lastTouch) {
252
+ const elapsed = Date.now() - parseInt(lastTouch, 10);
253
+ const timeoutMs = this.config.sessionTimeoutMinutes * 60 * 1000;
254
+ if (elapsed < timeoutMs) {
255
+ this.memoryStore[SESSION_TOUCH_KEY] = String(Date.now());
256
+ this.sessionId = existing;
257
+ return existing;
258
+ }
259
+ }
260
+ const newSession = this.generateSessionId();
261
+ this.memoryStore[SESSION_KEY] = newSession;
262
+ this.memoryStore[SESSION_TOUCH_KEY] = String(Date.now());
263
+ this.sessionId = newSession;
264
+ return newSession;
265
+ }
266
+ // ---------------------------------------------------------------------------
267
+ // PRIVATE — COOKIE OPERATIONS
268
+ // ---------------------------------------------------------------------------
269
+ readCookie(name) {
270
+ // Server-side reader first
271
+ if (this.config.serverCookies) {
272
+ return this.readServerCookie(name);
273
+ }
274
+ // Browser cookie
275
+ if (this.detectBrowser()) {
276
+ return getCookie(name);
277
+ }
278
+ return null;
279
+ }
280
+ readServerCookie(name) {
281
+ if (!this.config.serverCookies)
282
+ return null;
283
+ const result = this.config.serverCookies.get(name);
284
+ if (!result)
285
+ return null;
286
+ // Next.js cookies().get() returns { value: string }
287
+ if (typeof result === 'object' && 'value' in result)
288
+ return result.value || null;
289
+ // Nuxt useCookie() returns string directly
290
+ if (typeof result === 'string')
291
+ return result || null;
292
+ return null;
293
+ }
294
+ writeCookie(name, value, maxAgeDays) {
295
+ if (!this.detectBrowser())
296
+ return;
297
+ const maxAge = maxAgeDays * 24 * 60 * 60;
298
+ const domain = this.config.cookieDomain ? `; Domain=${this.config.cookieDomain}` : '';
299
+ const secure = location.protocol === 'https:' ? '; Secure' : '';
300
+ document.cookie = `${name}=${encodeURIComponent(value)}; Path=/; Max-Age=${maxAge}; SameSite=Lax${secure}${domain}`;
301
+ }
302
+ deleteCookie(name) {
303
+ if (!this.detectBrowser())
304
+ return;
305
+ const domain = this.config.cookieDomain ? `; Domain=${this.config.cookieDomain}` : '';
306
+ document.cookie = `${name}=; Path=/; Max-Age=0${domain}`;
307
+ }
308
+ // ---------------------------------------------------------------------------
309
+ // PRIVATE — ID GENERATION
310
+ // ---------------------------------------------------------------------------
311
+ generateVisitorId() {
312
+ return `fg_${this.uuidV4()}`;
313
+ }
314
+ generateSessionId() {
315
+ return `fgs_${Date.now()}_${this.randomHex(8)}`;
316
+ }
317
+ uuidV4() {
318
+ if (typeof crypto !== 'undefined' && crypto.randomUUID) {
319
+ return crypto.randomUUID();
320
+ }
321
+ // Fallback for environments without crypto.randomUUID
322
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
323
+ const r = (Math.random() * 16) | 0;
324
+ const v = c === 'x' ? r : (r & 0x3) | 0x8;
325
+ return v.toString(16);
326
+ });
327
+ }
328
+ randomHex(length) {
329
+ const bytes = new Uint8Array(length);
330
+ if (typeof crypto !== 'undefined' && crypto.getRandomValues) {
331
+ crypto.getRandomValues(bytes);
332
+ }
333
+ else {
334
+ for (let i = 0; i < length; i++)
335
+ bytes[i] = Math.floor(Math.random() * 256);
336
+ }
337
+ return Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');
338
+ }
339
+ // ---------------------------------------------------------------------------
340
+ // PRIVATE — ENVIRONMENT DETECTION
341
+ // ---------------------------------------------------------------------------
342
+ detectBrowser() {
343
+ return typeof window !== 'undefined' && typeof document !== 'undefined';
344
+ }
345
+ }
346
+ //# sourceMappingURL=identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../../src/lib/utils/identity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * @fileoverview FlowGrid storage utilities.
3
+ * @module utils/storage
4
+ *
5
+ * @description
6
+ * Reads visitor identity and UTM attribution data from the same
7
+ * cookie / localStorage / sessionStorage keys used by the FlowGrid
8
+ * tracking scripts (track.js & flowgrid_oss_client_sdk.js).
9
+ *
10
+ * These functions are **read-only** — the tracking scripts remain the
11
+ * single writer. The SDK only consumes these values.
12
+ */
13
+ // ============================================================================
14
+ // COOKIE HELPERS
15
+ // ============================================================================
16
+ /**
17
+ * Read a cookie value by name.
18
+ * Returns `null` when the cookie is absent or document.cookie is unavailable.
19
+ */
20
+ export function getCookie(name) {
21
+ if (typeof document === 'undefined')
22
+ return null;
23
+ const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
24
+ return match ? match[2] : null;
25
+ }
26
+ // ============================================================================
27
+ // VISITOR IDENTITY
28
+ // ============================================================================
29
+ /**
30
+ * Resolve the visitor ID written by track.js / flowgrid_oss_client_sdk.js.
31
+ *
32
+ * Storage locations (checked in order):
33
+ * 1. cookie `visitor_id`
34
+ * 2. localStorage `visitor_id`
35
+ *
36
+ * Returns `null` when neither source contains a value (e.g. tracking
37
+ * script hasn't run yet, or running server-side).
38
+ */
39
+ export function getVisitorId() {
40
+ try {
41
+ return getCookie('visitor_id') || localStorage.getItem('visitor_id');
42
+ }
43
+ catch {
44
+ // localStorage unavailable (SSR, privacy mode, etc.)
45
+ return getCookie('visitor_id');
46
+ }
47
+ }
48
+ /**
49
+ * Resolve the session ID written by track.js.
50
+ *
51
+ * Storage: `sessionStorage("session_id")`
52
+ */
53
+ export function getSessionId() {
54
+ try {
55
+ return sessionStorage.getItem('session_id');
56
+ }
57
+ catch {
58
+ return null;
59
+ }
60
+ }
61
+ /**
62
+ * Resolve the web_id written by track.js.
63
+ *
64
+ * Storage: `localStorage("web_id")`
65
+ */
66
+ export function getWebId() {
67
+ try {
68
+ return localStorage.getItem('web_id');
69
+ }
70
+ catch {
71
+ return null;
72
+ }
73
+ }
74
+ /**
75
+ * Read UTM & attribution parameters persisted by
76
+ * flowgrid_oss_client_sdk.js as `__flowgrid_*` cookies.
77
+ */
78
+ export function getUTM() {
79
+ return {
80
+ utmSource: getCookie('__flowgrid_utm_source') || undefined,
81
+ utmMedium: getCookie('__flowgrid_utm_medium') || undefined,
82
+ utmCampaign: getCookie('__flowgrid_utm_campaign') || undefined,
83
+ utmTerm: getCookie('__flowgrid_utm_term') || undefined,
84
+ utmContent: getCookie('__flowgrid_utm_content') || undefined,
85
+ ref: getCookie('__flowgrid_ref') || undefined,
86
+ source: getCookie('__flowgrid_source') || undefined,
87
+ via: getCookie('__flowgrid_via') || undefined,
88
+ };
89
+ }
90
+ /**
91
+ * Read the full UTM history array persisted by flowgrid_oss_client_sdk.js.
92
+ *
93
+ * Checks localStorage first, then the `utm_history` cookie.
94
+ */
95
+ export function getUTMHistory() {
96
+ try {
97
+ const raw = localStorage.getItem('utm_history') ||
98
+ getCookie('utm_history');
99
+ return raw ? JSON.parse(raw) : [];
100
+ }
101
+ catch {
102
+ return [];
103
+ }
104
+ }
105
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/lib/utils/storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IACjD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,GAAG,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC;IAC7E,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjC,CAAC;AAED,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY;IAC1B,IAAI,CAAC;QACH,OAAO,SAAS,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACvE,CAAC;IAAC,MAAM,CAAC;QACP,qDAAqD;QACrD,OAAO,SAAS,CAAC,YAAY,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY;IAC1B,IAAI,CAAC;QACH,OAAO,cAAc,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,QAAQ;IACtB,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAiBD;;;GAGG;AACH,MAAM,UAAU,MAAM;IACpB,OAAO;QACL,SAAS,EAAE,SAAS,CAAC,uBAAuB,CAAC,IAAI,SAAS;QAC1D,SAAS,EAAE,SAAS,CAAC,uBAAuB,CAAC,IAAI,SAAS;QAC1D,WAAW,EAAE,SAAS,CAAC,yBAAyB,CAAC,IAAI,SAAS;QAC9D,OAAO,EAAE,SAAS,CAAC,qBAAqB,CAAC,IAAI,SAAS;QACtD,UAAU,EAAE,SAAS,CAAC,wBAAwB,CAAC,IAAI,SAAS;QAC5D,GAAG,EAAE,SAAS,CAAC,gBAAgB,CAAC,IAAI,SAAS;QAC7C,MAAM,EAAE,SAAS,CAAC,mBAAmB,CAAC,IAAI,SAAS;QACnD,GAAG,EAAE,SAAS,CAAC,gBAAgB,CAAC,IAAI,SAAS;KAC9C,CAAC;AACJ,CAAC;AAWD;;;;GAIG;AACH,MAAM,UAAU,aAAa;IAC3B,IAAI,CAAC;QACH,MAAM,GAAG,GACP,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC;YACnC,SAAS,CAAC,aAAa,CAAC,CAAC;QAC3B,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ "use strict";(this.webpackChunkFlowGridSDK=this.webpackChunkFlowGridSDK||[]).push([[237],{237(e,t,n){n.d(t,{onCLS:()=>w,onFCP:()=>L,onINP:()=>x,onLCP:()=>N,onTTFB:()=>O});let i=-1;const r=e=>{addEventListener("pageshow",t=>{t.persisted&&(i=t.timeStamp,e(t))},!0)},s=(e,t,n,i)=>{let r,s;return o=>{t.value>=0&&(o||i)&&(s=t.value-(r??0),(s||void 0===r)&&(r=t.value,t.delta=s,t.rating=((e,t)=>e>t[1]?"poor":e>t[0]?"needs-improvement":"good")(t.value,n),e(t)))}},o=e=>{requestAnimationFrame(()=>requestAnimationFrame(e))},a=()=>{const e=performance.getEntriesByType("navigation")[0];if(e&&e.responseStart>0&&e.responseStart<performance.now())return e},c=()=>a()?.activationStart??0,l=(e,t=-1)=>{const n=a();let r="navigate";return i>=0?r="back-forward-cache":n&&(document.prerendering||c()>0?r="prerender":document.wasDiscarded?r="restore":n.type&&(r=n.type.replace(/_/g,"-"))),{name:e,value:t,rating:"good",delta:0,entries:[],id:`v5-${Date.now()}-${Math.floor(8999999999999*Math.random())+1e12}`,navigationType:r}},d=new WeakMap;function h(e,t){return d.get(e)||d.set(e,new t),d.get(e)}class u{t;i=0;o=[];h(e){if(e.hadRecentInput)return;const t=this.o[0],n=this.o.at(-1);this.i&&t&&n&&e.startTime-n.startTime<1e3&&e.startTime-t.startTime<5e3?(this.i+=e.value,this.o.push(e)):(this.i=e.value,this.o=[e]),this.t?.(e)}}const p=(e,t,n={})=>{try{if(PerformanceObserver.supportedEntryTypes.includes(e)){const i=new PerformanceObserver(e=>{queueMicrotask(()=>{t(e.getEntries())})});return i.observe({type:e,buffered:!0,...n}),i}}catch{}},m=e=>{let t=!1;return()=>{t||(e(),t=!0)}};let f=-1;const v=new Set,g=()=>"hidden"!==document.visibilityState||document.prerendering?1/0:0,T=e=>{if("hidden"===document.visibilityState){if("visibilitychange"===e.type)for(const e of v)e();isFinite(f)||(f="visibilitychange"===e.type?e.timeStamp:0,removeEventListener("prerenderingchange",T,!0))}},y=()=>{if(f<0){const e=c(),t=document.prerendering?void 0:globalThis.performance.getEntriesByType("visibility-state").find(t=>"hidden"===t.name&&t.startTime>=e)?.startTime;f=t??g(),addEventListener("visibilitychange",T,!0),addEventListener("prerenderingchange",T,!0),r(()=>{setTimeout(()=>{f=g()})})}return{get firstHiddenTime(){return f},onHidden(e){v.add(e)}}},C=e=>{document.prerendering?addEventListener("prerenderingchange",e,!0):e()},b=[1800,3e3],L=(e,t={})=>{C(()=>{const n=y();let i,a=l("FCP");const d=p("paint",e=>{for(const t of e)"first-contentful-paint"===t.name&&(d.disconnect(),t.startTime<n.firstHiddenTime&&(a.value=Math.max(t.startTime-c(),0),a.entries.push(t),i(!0)))});d&&(i=s(e,a,b,t.reportAllChanges),r(n=>{a=l("FCP"),i=s(e,a,b,t.reportAllChanges),o(()=>{a.value=performance.now()-n.timeStamp,i(!0)})}))})},S=[.1,.25],w=(e,t={})=>{const n=y();L(m(()=>{let i,a=l("CLS",0);const c=h(t,u),d=e=>{for(const t of e)c.h(t);c.i>a.value&&(a.value=c.i,a.entries=c.o,i())},m=p("layout-shift",d);m&&(i=s(e,a,S,t.reportAllChanges),n.onHidden(()=>{d(m.takeRecords()),i(!0)}),r(()=>{c.i=0,a=l("CLS",0),i=s(e,a,S,t.reportAllChanges),o(i)}),setTimeout(i))}))};let E=0,k=1/0,A=0;const I=e=>{for(const t of e)t.interactionId&&(k=Math.min(k,t.interactionId),A=Math.max(A,t.interactionId),E=A?(A-k)/7+1:0)};let P;const M=()=>P?E:performance.interactionCount??0;let F=0;class H{l=[];u=new Map;m;p;v(){F=M(),this.l.length=0,this.u.clear()}T(){const e=Math.min(this.l.length-1,Math.floor((M()-F)/50));return this.l[e]}h(e){if(this.m?.(e),!e.interactionId&&"first-input"!==e.entryType)return;const t=this.l.at(-1);let n=this.u.get(e.interactionId);if(n||this.l.length<10||e.duration>t.L){if(n?e.duration>n.L?(n.entries=[e],n.L=e.duration):e.duration===n.L&&e.startTime===n.entries[0].startTime&&n.entries.push(e):(n={id:e.interactionId,entries:[e],L:e.duration},this.u.set(n.id,n),this.l.push(n)),this.l.sort((e,t)=>t.L-e.L),this.l.length>10){const e=this.l.splice(10);for(const t of e)this.u.delete(t.id)}this.p?.(n)}}}const B=e=>{const t=globalThis.requestIdleCallback||setTimeout,n=globalThis.cancelIdleCallback||clearTimeout;if("hidden"===document.visibilityState)e();else{const i=m(e);let r=-1;const s=()=>{n(r),i()};addEventListener("visibilitychange",s,{once:!0,capture:!0}),r=t(()=>{removeEventListener("visibilitychange",s,{capture:!0}),i()})}},q=[200,500],x=(e,t={})=>{if(!globalThis.PerformanceEventTiming||!("interactionId"in PerformanceEventTiming.prototype))return;const n=y();C(()=>{"interactionCount"in performance||P||(P=p("event",I,{durationThreshold:0}));let i,o=l("INP");const a=h(t,H),c=e=>{B(()=>{for(const t of e)a.h(t);const t=a.T();t&&t.L!==o.value&&(o.value=t.L,o.entries=t.entries,i())})},d=p("event",c,{durationThreshold:t.durationThreshold??40});i=s(e,o,q,t.reportAllChanges),d&&(d.observe({type:"first-input",buffered:!0}),n.onHidden(()=>{c(d.takeRecords()),i(!0)}),r(()=>{a.v(),o=l("INP"),i=s(e,o,q,t.reportAllChanges)}))})};class D{m;h(e){this.m?.(e)}}const R=[2500,4e3],N=(e,t={})=>{C(()=>{const n=y();let i,a=l("LCP");const d=h(t,D),u=e=>{t.reportAllChanges||(e=e.slice(-1));for(const t of e)d.h(t),t.startTime<n.firstHiddenTime&&(a.value=Math.max(t.startTime-c(),0),a.entries=[t],i())},f=p("largest-contentful-paint",u);if(f){i=s(e,a,R,t.reportAllChanges);const n=m(()=>{u(f.takeRecords()),f.disconnect(),i(!0)}),c=e=>{e.isTrusted&&(B(n),removeEventListener(e.type,c,{capture:!0}))};for(const e of["keydown","click","visibilitychange"])addEventListener(e,c,{capture:!0});r(n=>{a=l("LCP"),i=s(e,a,R,t.reportAllChanges),o(()=>{a.value=performance.now()-n.timeStamp,i(!0)})})}})},G=[800,1800],K=e=>{document.prerendering?C(()=>K(e)):"complete"!==document.readyState?addEventListener("load",()=>K(e),!0):setTimeout(e)},O=(e,t={})=>{let n=l("TTFB"),i=s(e,n,G,t.reportAllChanges);K(()=>{const o=a();o&&(n.value=Math.max(o.responseStart-c(),0),n.entries=[o],i(!0),r(()=>{n=l("TTFB",0),i=s(e,n,G,t.reportAllChanges),i(!0)}))})}}}]);
2
+ //# sourceMappingURL=237.index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"237.index.js","mappings":"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","sources":["webpack://FlowGridSDK/./node_modules/web-vitals/dist/web-vitals.js"],"sourcesContent":["let e=-1;const t=t=>{addEventListener(\"pageshow\",n=>{n.persisted&&(e=n.timeStamp,t(n))},!0)},n=(e,t,n,i)=>{let s,o;return r=>{t.value>=0&&(r||i)&&(o=t.value-(s??0),(o||void 0===s)&&(s=t.value,t.delta=o,t.rating=((e,t)=>e>t[1]?\"poor\":e>t[0]?\"needs-improvement\":\"good\")(t.value,n),e(t)))}},i=e=>{requestAnimationFrame(()=>requestAnimationFrame(e))},s=()=>{const e=performance.getEntriesByType(\"navigation\")[0];if(e&&e.responseStart>0&&e.responseStart<performance.now())return e},o=()=>s()?.activationStart??0,r=(t,n=-1)=>{const i=s();let r=\"navigate\";e>=0?r=\"back-forward-cache\":i&&(document.prerendering||o()>0?r=\"prerender\":document.wasDiscarded?r=\"restore\":i.type&&(r=i.type.replace(/_/g,\"-\")));return{name:t,value:n,rating:\"good\",delta:0,entries:[],id:`v5-${Date.now()}-${Math.floor(8999999999999*Math.random())+1e12}`,navigationType:r}},c=new WeakMap;function a(e,t){return c.get(e)||c.set(e,new t),c.get(e)}class d{t;i=0;o=[];h(e){if(e.hadRecentInput)return;const t=this.o[0],n=this.o.at(-1);this.i&&t&&n&&e.startTime-n.startTime<1e3&&e.startTime-t.startTime<5e3?(this.i+=e.value,this.o.push(e)):(this.i=e.value,this.o=[e]),this.t?.(e)}}const h=(e,t,n={})=>{try{if(PerformanceObserver.supportedEntryTypes.includes(e)){const i=new PerformanceObserver(e=>{queueMicrotask(()=>{t(e.getEntries())})});return i.observe({type:e,buffered:!0,...n}),i}}catch{}},f=e=>{let t=!1;return()=>{t||(e(),t=!0)}};let l=-1;const u=new Set,m=()=>\"hidden\"!==document.visibilityState||document.prerendering?1/0:0,g=e=>{if(\"hidden\"===document.visibilityState){if(\"visibilitychange\"===e.type)for(const e of u)e();isFinite(l)||(l=\"visibilitychange\"===e.type?e.timeStamp:0,removeEventListener(\"prerenderingchange\",g,!0))}},p=()=>{if(l<0){const e=o(),n=document.prerendering?void 0:globalThis.performance.getEntriesByType(\"visibility-state\").find(t=>\"hidden\"===t.name&&t.startTime>=e)?.startTime;l=n??m(),addEventListener(\"visibilitychange\",g,!0),addEventListener(\"prerenderingchange\",g,!0),t(()=>{setTimeout(()=>{l=m()})})}return{get firstHiddenTime(){return l},onHidden(e){u.add(e)}}},v=e=>{document.prerendering?addEventListener(\"prerenderingchange\",e,!0):e()},y=[1800,3e3],T=(e,s={})=>{v(()=>{const c=p();let a,d=r(\"FCP\");const f=h(\"paint\",e=>{for(const t of e)\"first-contentful-paint\"===t.name&&(f.disconnect(),t.startTime<c.firstHiddenTime&&(d.value=Math.max(t.startTime-o(),0),d.entries.push(t),a(!0)))});f&&(a=n(e,d,y,s.reportAllChanges),t(t=>{d=r(\"FCP\"),a=n(e,d,y,s.reportAllChanges),i(()=>{d.value=performance.now()-t.timeStamp,a(!0)})}))})},E=[.1,.25],b=(e,s={})=>{const o=p();T(f(()=>{let c,f=r(\"CLS\",0);const l=a(s,d),u=e=>{for(const t of e)l.h(t);l.i>f.value&&(f.value=l.i,f.entries=l.o,c())},m=h(\"layout-shift\",u);m&&(c=n(e,f,E,s.reportAllChanges),o.onHidden(()=>{u(m.takeRecords()),c(!0)}),t(()=>{l.i=0,f=r(\"CLS\",0),c=n(e,f,E,s.reportAllChanges),i(c)}),setTimeout(c))}))};let L=0,P=1/0,_=0;const M=e=>{for(const t of e)t.interactionId&&(P=Math.min(P,t.interactionId),_=Math.max(_,t.interactionId),L=_?(_-P)/7+1:0)};let w;const C=()=>w?L:performance.interactionCount??0,I=()=>{\"interactionCount\"in performance||w||(w=h(\"event\",M,{durationThreshold:0}))};let F=0;class k{l=[];u=new Map;m;p;v(){F=C(),this.l.length=0,this.u.clear()}T(){const e=Math.min(this.l.length-1,Math.floor((C()-F)/50));return this.l[e]}h(e){if(this.m?.(e),!e.interactionId&&\"first-input\"!==e.entryType)return;const t=this.l.at(-1);let n=this.u.get(e.interactionId);if(n||this.l.length<10||e.duration>t.L){if(n?e.duration>n.L?(n.entries=[e],n.L=e.duration):e.duration===n.L&&e.startTime===n.entries[0].startTime&&n.entries.push(e):(n={id:e.interactionId,entries:[e],L:e.duration},this.u.set(n.id,n),this.l.push(n)),this.l.sort((e,t)=>t.L-e.L),this.l.length>10){const e=this.l.splice(10);for(const t of e)this.u.delete(t.id)}this.p?.(n)}}}const A=e=>{const t=globalThis.requestIdleCallback||setTimeout,n=globalThis.cancelIdleCallback||clearTimeout;if(\"hidden\"===document.visibilityState)e();else{const i=f(e);let s=-1;const o=()=>{n(s),i()};addEventListener(\"visibilitychange\",o,{once:!0,capture:!0}),s=t(()=>{removeEventListener(\"visibilitychange\",o,{capture:!0}),i()})}},B=[200,500],S=(e,i={})=>{if(!globalThis.PerformanceEventTiming||!(\"interactionId\"in PerformanceEventTiming.prototype))return;const s=p();v(()=>{I();let o,c=r(\"INP\");const d=a(i,k),f=e=>{A(()=>{for(const t of e)d.h(t);const t=d.T();t&&t.L!==c.value&&(c.value=t.L,c.entries=t.entries,o())})},l=h(\"event\",f,{durationThreshold:i.durationThreshold??40});o=n(e,c,B,i.reportAllChanges),l&&(l.observe({type:\"first-input\",buffered:!0}),s.onHidden(()=>{f(l.takeRecords()),o(!0)}),t(()=>{d.v(),c=r(\"INP\"),o=n(e,c,B,i.reportAllChanges)}))})};class q{m;h(e){this.m?.(e)}}const N=[2500,4e3],x=(e,s={})=>{v(()=>{const c=p();let d,l=r(\"LCP\");const u=a(s,q),m=e=>{s.reportAllChanges||(e=e.slice(-1));for(const t of e)u.h(t),t.startTime<c.firstHiddenTime&&(l.value=Math.max(t.startTime-o(),0),l.entries=[t],d())},g=h(\"largest-contentful-paint\",m);if(g){d=n(e,l,N,s.reportAllChanges);const o=f(()=>{m(g.takeRecords()),g.disconnect(),d(!0)}),c=e=>{e.isTrusted&&(A(o),removeEventListener(e.type,c,{capture:!0}))};for(const e of[\"keydown\",\"click\",\"visibilitychange\"])addEventListener(e,c,{capture:!0});t(t=>{l=r(\"LCP\"),d=n(e,l,N,s.reportAllChanges),i(()=>{l.value=performance.now()-t.timeStamp,d(!0)})})}})},H=[800,1800],O=e=>{document.prerendering?v(()=>O(e)):\"complete\"!==document.readyState?addEventListener(\"load\",()=>O(e),!0):setTimeout(e)},$=(e,i={})=>{let c=r(\"TTFB\"),a=n(e,c,H,i.reportAllChanges);O(()=>{const d=s();d&&(c.value=Math.max(d.responseStart-o(),0),c.entries=[d],a(!0),t(()=>{c=r(\"TTFB\",0),a=n(e,c,H,i.reportAllChanges),a(!0)}))})};export{E as CLSThresholds,y as FCPThresholds,B as INPThresholds,N as LCPThresholds,H as TTFBThresholds,b as onCLS,T as onFCP,S as onINP,x as onLCP,$ as onTTFB};\n"],"names":["e","t","addEventListener","n","persisted","timeStamp","i","s","o","r","value","delta","rating","requestAnimationFrame","performance","getEntriesByType","responseStart","now","activationStart","document","prerendering","wasDiscarded","type","replace","name","entries","id","Date","Math","floor","random","navigationType","c","WeakMap","a","get","set","d","h","hadRecentInput","this","at","startTime","push","PerformanceObserver","supportedEntryTypes","includes","queueMicrotask","getEntries","observe","buffered","f","l","u","Set","m","visibilityState","g","isFinite","removeEventListener","p","globalThis","find","setTimeout","firstHiddenTime","onHidden","add","v","y","T","disconnect","max","reportAllChanges","E","b","takeRecords","L","P","_","M","interactionId","min","w","C","interactionCount","F","k","Map","length","clear","entryType","duration","sort","splice","delete","A","requestIdleCallback","cancelIdleCallback","clearTimeout","once","capture","B","S","PerformanceEventTiming","prototype","durationThreshold","q","N","x","slice","isTrusted","H","O","readyState","$"],"sourceRoot":""}