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,122 @@
1
+ /**
2
+ * Experiment tracker — A/B testing API.
3
+ *
4
+ * Covers the full A/B test lifecycle:
5
+ * 1. `define()` — register an experiment (one-time admin setup).
6
+ * 2. `init()` — initialise the client-side engine (browser only).
7
+ * 3. `assign()` / `variant()` — get a user's variant.
8
+ * 4. `exposure()` — log that the user saw the assigned variant.
9
+ * 5. `conversion()` — log a success metric.
10
+ *
11
+ * The browser flow is the simplest:
12
+ * ```ts
13
+ * await fg.experiments.init([{ experimentId, variants: [...] }]);
14
+ * const variant = fg.experiments.variant(experimentId);
15
+ * if (variant === "B") renderNewCheckout();
16
+ * await fg.experiments.exposure(experimentId, userId, variant);
17
+ * // …user converts…
18
+ * await fg.experiments.conversion(experimentId, userId, variant, "purchase", 1);
19
+ * ```
20
+ */
21
+ import { Experiment, ExperimentDefinition, ExperimentInitConfig } from "../../features/core/experiment";
22
+ import type { ServerCookieReader } from "../../utils/identity";
23
+ export declare class ExperimentTracker {
24
+ readonly client: Experiment;
25
+ constructor(client: Experiment);
26
+ /**
27
+ * Define an experiment. Run this once during admin setup.
28
+ *
29
+ * @example
30
+ * ```ts
31
+ * await fg.experiments.define({
32
+ * experimentId: "checkout_v2",
33
+ * name: "New checkout flow",
34
+ * variants: [
35
+ * { id: "control", weight: 50 },
36
+ * { id: "B", weight: 50 },
37
+ * ],
38
+ * });
39
+ * ```
40
+ */
41
+ define(definition: ExperimentDefinition): Promise<import("../../features/core/experiment").ExperimentResponse>;
42
+ /**
43
+ * Initialise the client-side engine (browser only).
44
+ *
45
+ * Verifies experiments, performs weighted-random assignment, and
46
+ * persists assignments in `localStorage` so the same visitor always
47
+ * sees the same variant.
48
+ */
49
+ init(experiments: ExperimentInitConfig[]): Promise<void>;
50
+ /**
51
+ * Synchronously read the locally-cached variant assignment.
52
+ * Returns `null` if no assignment exists. Browser-only.
53
+ */
54
+ variant(experimentId: string): string | null;
55
+ /**
56
+ * Explicitly assign (or override) a user's variant. Use this for
57
+ * targeted assignments or admin overrides.
58
+ */
59
+ assign(experimentId: string, userId: string, variantId: string, source?: "random" | "targeted" | "override"): Promise<import("../../features/core/experiment").ExperimentResponse>;
60
+ /**
61
+ * Record that a user was exposed to (saw / used) their variant.
62
+ * Call this when the variant is rendered.
63
+ */
64
+ exposure(experimentId: string, userId: string, variantId: string): Promise<import("../../features/core/experiment").ExperimentResponse>;
65
+ /**
66
+ * Record a conversion against a specific user's variant (server-side).
67
+ *
68
+ * @example
69
+ * ```ts
70
+ * await fg.experiments.conversion("checkout_v2", "u_1", "B", "purchase", 49.99);
71
+ * ```
72
+ */
73
+ conversion(experimentId: string, userId: string, variantId: string, metricName: string, value?: number): Promise<import("../../features/core/experiment").ExperimentResponse>;
74
+ /**
75
+ * Browser-side conversion using the locally-cached variant assignment.
76
+ * No-op if the visitor has no assignment for this experiment.
77
+ *
78
+ * @example
79
+ * ```ts
80
+ * await fg.experiments.localConversion("checkout_v2", "purchase", 49.99);
81
+ * ```
82
+ */
83
+ localConversion(experimentId: string, metricName?: string, value?: number): Promise<void>;
84
+ /**
85
+ * Hydrate assignments from a server cookie reader (Next.js `cookies()`,
86
+ * Nuxt `useCookie()`, etc.). Call this once per request before reading
87
+ * `variant()` server-side.
88
+ *
89
+ * @example
90
+ * ```ts
91
+ * import { cookies } from "next/headers";
92
+ * fg.experiments.hydrateFromCookies(cookies());
93
+ * const variant = fg.experiments.variant("checkout_v2");
94
+ * ```
95
+ */
96
+ hydrateFromCookies(reader: ServerCookieReader): void;
97
+ /**
98
+ * Hydrate assignments from a raw `Cookie` header (Workers, Bun, Hono, etc.).
99
+ */
100
+ hydrateFromCookieHeader(cookieHeader: string | null | undefined): void;
101
+ /**
102
+ * Inject assignments resolved server-side. Use when the assignment was
103
+ * computed without a cookie (e.g. logged-in user fetched from DB).
104
+ */
105
+ injectAssignments(assignments: Record<string, string>): void;
106
+ /**
107
+ * Snapshot of all known assignments. Useful for SSR payload hand-off.
108
+ */
109
+ getAssignments(): Record<string, string>;
110
+ /**
111
+ * Build a `Set-Cookie` header value seeding the visitor's browser with
112
+ * the current assignment map.
113
+ *
114
+ * @example
115
+ * ```ts
116
+ * res.headers.set("Set-Cookie", fg.experiments.serializeAssignmentCookie());
117
+ * ```
118
+ */
119
+ serializeAssignmentCookie(): string;
120
+ /** Wipe all locally-cached assignments (cookie + localStorage). */
121
+ clearAssignments(): void;
122
+ }
@@ -0,0 +1,150 @@
1
+ export class ExperimentTracker {
2
+ constructor(client) {
3
+ this.client = client;
4
+ }
5
+ // ---------------------------------------------------------------------------
6
+ // SETUP
7
+ // ---------------------------------------------------------------------------
8
+ /**
9
+ * Define an experiment. Run this once during admin setup.
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * await fg.experiments.define({
14
+ * experimentId: "checkout_v2",
15
+ * name: "New checkout flow",
16
+ * variants: [
17
+ * { id: "control", weight: 50 },
18
+ * { id: "B", weight: 50 },
19
+ * ],
20
+ * });
21
+ * ```
22
+ */
23
+ define(definition) {
24
+ return this.client.define(definition);
25
+ }
26
+ /**
27
+ * Initialise the client-side engine (browser only).
28
+ *
29
+ * Verifies experiments, performs weighted-random assignment, and
30
+ * persists assignments in `localStorage` so the same visitor always
31
+ * sees the same variant.
32
+ */
33
+ init(experiments) {
34
+ return this.client.initExperiments(experiments);
35
+ }
36
+ // ---------------------------------------------------------------------------
37
+ // ASSIGNMENT
38
+ // ---------------------------------------------------------------------------
39
+ /**
40
+ * Synchronously read the locally-cached variant assignment.
41
+ * Returns `null` if no assignment exists. Browser-only.
42
+ */
43
+ variant(experimentId) {
44
+ return this.client.getLocalVariant(experimentId);
45
+ }
46
+ /**
47
+ * Explicitly assign (or override) a user's variant. Use this for
48
+ * targeted assignments or admin overrides.
49
+ */
50
+ assign(experimentId, userId, variantId, source = "targeted") {
51
+ return this.client.assign({ experimentId, userId, variantId, source });
52
+ }
53
+ // ---------------------------------------------------------------------------
54
+ // EXPOSURE & CONVERSION
55
+ // ---------------------------------------------------------------------------
56
+ /**
57
+ * Record that a user was exposed to (saw / used) their variant.
58
+ * Call this when the variant is rendered.
59
+ */
60
+ exposure(experimentId, userId, variantId) {
61
+ return this.client.trackExposure(experimentId, userId, variantId);
62
+ }
63
+ /**
64
+ * Record a conversion against a specific user's variant (server-side).
65
+ *
66
+ * @example
67
+ * ```ts
68
+ * await fg.experiments.conversion("checkout_v2", "u_1", "B", "purchase", 49.99);
69
+ * ```
70
+ */
71
+ conversion(experimentId, userId, variantId, metricName, value = 1) {
72
+ return this.client.trackConversion({
73
+ experimentId,
74
+ userId,
75
+ variantId,
76
+ metricName,
77
+ value,
78
+ });
79
+ }
80
+ /**
81
+ * Browser-side conversion using the locally-cached variant assignment.
82
+ * No-op if the visitor has no assignment for this experiment.
83
+ *
84
+ * @example
85
+ * ```ts
86
+ * await fg.experiments.localConversion("checkout_v2", "purchase", 49.99);
87
+ * ```
88
+ */
89
+ localConversion(experimentId, metricName = "conversion", value = 1) {
90
+ return this.client.trackLocalConversion(experimentId, metricName, value);
91
+ }
92
+ // ---------------------------------------------------------------------------
93
+ // SSR / COOKIE HYDRATION
94
+ //
95
+ // The underlying engine mirrors assignments to a `fg_exp_assignments`
96
+ // cookie so that server-rendered HTML can pick the right variant before
97
+ // any JS executes. These helpers wire the cookie into common runtimes.
98
+ // ---------------------------------------------------------------------------
99
+ /**
100
+ * Hydrate assignments from a server cookie reader (Next.js `cookies()`,
101
+ * Nuxt `useCookie()`, etc.). Call this once per request before reading
102
+ * `variant()` server-side.
103
+ *
104
+ * @example
105
+ * ```ts
106
+ * import { cookies } from "next/headers";
107
+ * fg.experiments.hydrateFromCookies(cookies());
108
+ * const variant = fg.experiments.variant("checkout_v2");
109
+ * ```
110
+ */
111
+ hydrateFromCookies(reader) {
112
+ this.client.hydrateFromCookies(reader);
113
+ }
114
+ /**
115
+ * Hydrate assignments from a raw `Cookie` header (Workers, Bun, Hono, etc.).
116
+ */
117
+ hydrateFromCookieHeader(cookieHeader) {
118
+ this.client.hydrateFromCookieHeader(cookieHeader);
119
+ }
120
+ /**
121
+ * Inject assignments resolved server-side. Use when the assignment was
122
+ * computed without a cookie (e.g. logged-in user fetched from DB).
123
+ */
124
+ injectAssignments(assignments) {
125
+ this.client.injectAssignments(assignments);
126
+ }
127
+ /**
128
+ * Snapshot of all known assignments. Useful for SSR payload hand-off.
129
+ */
130
+ getAssignments() {
131
+ return this.client.getAssignments();
132
+ }
133
+ /**
134
+ * Build a `Set-Cookie` header value seeding the visitor's browser with
135
+ * the current assignment map.
136
+ *
137
+ * @example
138
+ * ```ts
139
+ * res.headers.set("Set-Cookie", fg.experiments.serializeAssignmentCookie());
140
+ * ```
141
+ */
142
+ serializeAssignmentCookie() {
143
+ return this.client.serializeAssignmentCookie();
144
+ }
145
+ /** Wipe all locally-cached assignments (cookie + localStorage). */
146
+ clearAssignments() {
147
+ this.client.clearAssignments();
148
+ }
149
+ }
150
+ //# sourceMappingURL=experiment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"experiment.js","sourceRoot":"","sources":["../../../../src/lib/tracking/core/experiment.ts"],"names":[],"mappings":"AA2BA,MAAM,OAAO,iBAAiB;IAC5B,YAA4B,MAAkB;QAAlB,WAAM,GAAN,MAAM,CAAY;IAAG,CAAC;IAElD,8EAA8E;IAC9E,QAAQ;IACR,8EAA8E;IAE9E;;;;;;;;;;;;;;OAcG;IACH,MAAM,CAAC,UAAgC;QACrC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC;IAED;;;;;;OAMG;IACH,IAAI,CAAC,WAAmC;QACtC,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC;IAED,8EAA8E;IAC9E,aAAa;IACb,8EAA8E;IAE9E;;;OAGG;IACH,OAAO,CAAC,YAAoB;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;IACnD,CAAC;IAED;;;OAGG;IACH,MAAM,CACJ,YAAoB,EACpB,MAAc,EACd,SAAiB,EACjB,SAA6C,UAAU;QAEvD,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,8EAA8E;IAC9E,wBAAwB;IACxB,8EAA8E;IAE9E;;;OAGG;IACH,QAAQ,CAAC,YAAoB,EAAE,MAAc,EAAE,SAAiB;QAC9D,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IACpE,CAAC;IAED;;;;;;;OAOG;IACH,UAAU,CACR,YAAoB,EACpB,MAAc,EACd,SAAiB,EACjB,UAAkB,EAClB,QAAgB,CAAC;QAEjB,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;YACjC,YAAY;YACZ,MAAM;YACN,SAAS;YACT,UAAU;YACV,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;OAQG;IACH,eAAe,CAAC,YAAoB,EAAE,aAAqB,YAAY,EAAE,QAAgB,CAAC;QACxF,OAAO,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,YAAY,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;IAC3E,CAAC;IAED,8EAA8E;IAC9E,yBAAyB;IACzB,EAAE;IACF,sEAAsE;IACtE,wEAAwE;IACxE,uEAAuE;IACvE,8EAA8E;IAE9E;;;;;;;;;;;OAWG;IACH,kBAAkB,CAAC,MAA0B;QAC3C,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,uBAAuB,CAAC,YAAuC;QAC7D,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAC;IACpD,CAAC;IAED;;;OAGG;IACH,iBAAiB,CAAC,WAAmC;QACnD,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;IACtC,CAAC;IAED;;;;;;;;OAQG;IACH,yBAAyB;QACvB,OAAO,IAAI,CAAC,MAAM,CAAC,yBAAyB,EAAE,CAAC;IACjD,CAAC;IAED,mEAAmE;IACnE,gBAAgB;QACd,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;IACjC,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Feature usage shortcuts.
3
+ */
4
+ import { TrackFeature } from "../../features/core/track-feature";
5
+ export type FeatureAction = "viewed" | "used" | "completed" | "abandoned";
6
+ export declare class FeatureTracker {
7
+ readonly client: TrackFeature;
8
+ constructor(client: TrackFeature);
9
+ /** Track that a user used a feature. */
10
+ used(featureId: string, featureName: string, action?: FeatureAction, properties?: Record<string, unknown>): Promise<import("../../features/core/track-feature").FeatureResponse>;
11
+ /** Create / register a feature event (advanced — see `client.create`). */
12
+ create(userId: string, action: string, featureName: string, properties?: Record<string, unknown>): Promise<import("../../features/core/track-feature").FeatureResponse>;
13
+ }
@@ -0,0 +1,14 @@
1
+ export class FeatureTracker {
2
+ constructor(client) {
3
+ this.client = client;
4
+ }
5
+ /** Track that a user used a feature. */
6
+ used(featureId, featureName, action = "used", properties) {
7
+ return this.client.trackUsage({ featureId, featureName, action, properties });
8
+ }
9
+ /** Create / register a feature event (advanced — see `client.create`). */
10
+ create(userId, action, featureName, properties) {
11
+ return this.client.create({ userId, action, properties: { featureName, ...properties } });
12
+ }
13
+ }
14
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature.js","sourceRoot":"","sources":["../../../../src/lib/tracking/core/feature.ts"],"names":[],"mappings":"AAOA,MAAM,OAAO,cAAc;IACzB,YAA4B,MAAoB;QAApB,WAAM,GAAN,MAAM,CAAc;IAAG,CAAC;IAEpD,wCAAwC;IACxC,IAAI,CAAC,SAAiB,EAAE,WAAmB,EAAE,SAAwB,MAAM,EAAE,UAAoC;QAC/G,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,0EAA0E;IAC1E,MAAM,CAAC,MAAc,EAAE,MAAc,EAAE,WAAmB,EAAE,UAAoC;QAC9F,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,WAAW,EAAE,GAAG,UAAU,EAAE,EAAE,CAAC,CAAC;IAC5F,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ export { ActivationTracker } from "./activation";
2
+ export { ExperimentTracker } from "./experiment";
3
+ export { FeatureTracker } from "./feature";
4
+ export { PromptTracker } from "./prompt";
@@ -0,0 +1,5 @@
1
+ export { ActivationTracker } from "./activation";
2
+ export { ExperimentTracker } from "./experiment";
3
+ export { FeatureTracker } from "./feature";
4
+ export { PromptTracker } from "./prompt";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/tracking/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * AI prompt tracking shortcuts.
3
+ */
4
+ import { TrackPrompt, PromptFeedbackConfig } from "../../features/core/track-prompt";
5
+ export declare class PromptTracker {
6
+ readonly client: TrackPrompt;
7
+ constructor(client: TrackPrompt);
8
+ /** A user submitted a prompt. */
9
+ submitted(promptId: string, promptType: string, properties?: Record<string, unknown>): Promise<import("../../features/core/track-prompt").PromptResponse>;
10
+ /** The model returned a response. */
11
+ responded(promptId: string, responseTime: number, completed: boolean, properties?: Record<string, unknown>): Promise<import("../../features/core/track-prompt").PromptResponse>;
12
+ /** User feedback on a prompt response (thumbs up/down etc.). */
13
+ feedback(promptId: string, feedbackType: PromptFeedbackConfig["feedbackType"], properties?: Record<string, unknown>): Promise<import("../../features/core/track-prompt").PromptResponse>;
14
+ /** Multi-turn conversation summary. */
15
+ conversation(conversationId: string, userId: string, turnCount: number, totalDuration: number): Promise<import("../../features/core/track-prompt").PromptResponse>;
16
+ /** Generic prompt event. */
17
+ event(eventName: string, properties?: Record<string, unknown>): Promise<import("../../features/core/track-prompt").PromptResponse>;
18
+ }
@@ -0,0 +1,26 @@
1
+ export class PromptTracker {
2
+ constructor(client) {
3
+ this.client = client;
4
+ }
5
+ /** A user submitted a prompt. */
6
+ submitted(promptId, promptType, properties) {
7
+ return this.client.trackSubmission({ promptId, promptType, properties });
8
+ }
9
+ /** The model returned a response. */
10
+ responded(promptId, responseTime, completed, properties) {
11
+ return this.client.trackResponse({ promptId, responseTime, completed, properties });
12
+ }
13
+ /** User feedback on a prompt response (thumbs up/down etc.). */
14
+ feedback(promptId, feedbackType, properties) {
15
+ return this.client.trackFeedback({ promptId, feedbackType, properties });
16
+ }
17
+ /** Multi-turn conversation summary. */
18
+ conversation(conversationId, userId, turnCount, totalDuration) {
19
+ return this.client.trackConversation(conversationId, userId, turnCount, totalDuration);
20
+ }
21
+ /** Generic prompt event. */
22
+ event(eventName, properties = {}) {
23
+ return this.client.create({ eventName, properties });
24
+ }
25
+ }
26
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../../../src/lib/tracking/core/prompt.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,aAAa;IACxB,YAA4B,MAAmB;QAAnB,WAAM,GAAN,MAAM,CAAa;IAAG,CAAC;IAEnD,iCAAiC;IACjC,SAAS,CAAC,QAAgB,EAAE,UAAkB,EAAE,UAAoC;QAClF,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,qCAAqC;IACrC,SAAS,CAAC,QAAgB,EAAE,YAAoB,EAAE,SAAkB,EAAE,UAAoC;QACxG,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,gEAAgE;IAChE,QAAQ,CAAC,QAAgB,EAAE,YAAkD,EAAE,UAAoC;QACjH,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,uCAAuC;IACvC,YAAY,CAAC,cAAsB,EAAE,MAAc,EAAE,SAAiB,EAAE,aAAqB;QAC3F,OAAO,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;IACzF,CAAC;IAED,4BAA4B;IAC5B,KAAK,CAAC,SAAiB,EAAE,aAAsC,EAAE;QAC/D,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;IACvD,CAAC;CACF"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Cart shortcuts.
3
+ */
4
+ import { CartTracking } from "../../features/ecommerce/cart";
5
+ import type { Product, Cart } from "../../types";
6
+ export declare class CartTracker {
7
+ readonly client: CartTracking;
8
+ constructor(client: CartTracking);
9
+ /** Add a product to cart. */
10
+ add(product: Product, quantity?: number, cartId?: string): Promise<import("../../features/ecommerce/cart").CartResponse>;
11
+ /** Remove a product from cart. */
12
+ remove(product: Product, quantity?: number, cartId?: string): Promise<import("../../features/ecommerce/cart").CartResponse>;
13
+ /** Change the quantity of a cart item. */
14
+ update(product: Product, previousQuantity: number, newQuantity: number, cartId?: string): Promise<import("../../features/ecommerce/cart").CartResponse>;
15
+ /** Track a cart view. */
16
+ view(cart: Cart): Promise<import("../../features/ecommerce/cart").CartResponse>;
17
+ }
@@ -0,0 +1,22 @@
1
+ export class CartTracker {
2
+ constructor(client) {
3
+ this.client = client;
4
+ }
5
+ /** Add a product to cart. */
6
+ add(product, quantity = 1, cartId) {
7
+ return this.client.addItem({ product, quantity, cartId });
8
+ }
9
+ /** Remove a product from cart. */
10
+ remove(product, quantity = 1, cartId) {
11
+ return this.client.removeItem({ product, quantity, cartId });
12
+ }
13
+ /** Change the quantity of a cart item. */
14
+ update(product, previousQuantity, newQuantity, cartId) {
15
+ return this.client.updateItem({ product, previousQuantity, newQuantity, cartId });
16
+ }
17
+ /** Track a cart view. */
18
+ view(cart) {
19
+ return this.client.view({ cart });
20
+ }
21
+ }
22
+ //# sourceMappingURL=cart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cart.js","sourceRoot":"","sources":["../../../../src/lib/tracking/ecommerce/cart.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,WAAW;IACtB,YAA4B,MAAoB;QAApB,WAAM,GAAN,MAAM,CAAc;IAAG,CAAC;IAEpD,6BAA6B;IAC7B,GAAG,CAAC,OAAgB,EAAE,QAAQ,GAAG,CAAC,EAAE,MAAe;QACjD,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,kCAAkC;IAClC,MAAM,CAAC,OAAgB,EAAE,QAAQ,GAAG,CAAC,EAAE,MAAe;QACpD,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,0CAA0C;IAC1C,MAAM,CAAC,OAAgB,EAAE,gBAAwB,EAAE,WAAmB,EAAE,MAAe;QACrF,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,yBAAyB;IACzB,IAAI,CAAC,IAAU;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,CAAC;CACF"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Checkout shortcuts.
3
+ */
4
+ import { Checkout } from "../../features/ecommerce/checkout";
5
+ import type { Cart, ShippingInfo, PaymentInfo, CheckoutStep } from "../../types";
6
+ export declare class CheckoutTracker {
7
+ readonly client: Checkout;
8
+ constructor(client: Checkout);
9
+ /** Begin checkout for the current cart. */
10
+ begin(cart: Cart): Promise<import("../../features/ecommerce/checkout").CheckoutResponse>;
11
+ /** Move to a checkout step. */
12
+ step(step: CheckoutStep, stepNumber: number, cart: Cart): Promise<import("../../features/ecommerce/checkout").CheckoutResponse>;
13
+ /** Add shipping info. */
14
+ shipping(cart: Cart, shipping: ShippingInfo): Promise<import("../../features/ecommerce/checkout").CheckoutResponse>;
15
+ /** Add payment info. */
16
+ payment(cart: Cart, payment: PaymentInfo): Promise<import("../../features/ecommerce/checkout").CheckoutResponse>;
17
+ }
@@ -0,0 +1,22 @@
1
+ export class CheckoutTracker {
2
+ constructor(client) {
3
+ this.client = client;
4
+ }
5
+ /** Begin checkout for the current cart. */
6
+ begin(cart) {
7
+ return this.client.begin({ cart });
8
+ }
9
+ /** Move to a checkout step. */
10
+ step(step, stepNumber, cart) {
11
+ return this.client.step({ step, stepNumber, cart });
12
+ }
13
+ /** Add shipping info. */
14
+ shipping(cart, shipping) {
15
+ return this.client.addShipping({ cart, shipping });
16
+ }
17
+ /** Add payment info. */
18
+ payment(cart, payment) {
19
+ return this.client.addPayment({ cart, payment });
20
+ }
21
+ }
22
+ //# sourceMappingURL=checkout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkout.js","sourceRoot":"","sources":["../../../../src/lib/tracking/ecommerce/checkout.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,eAAe;IAC1B,YAA4B,MAAgB;QAAhB,WAAM,GAAN,MAAM,CAAU;IAAG,CAAC;IAEhD,2CAA2C;IAC3C,KAAK,CAAC,IAAU;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,+BAA+B;IAC/B,IAAI,CAAC,IAAkB,EAAE,UAAkB,EAAE,IAAU;QACrD,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,yBAAyB;IACzB,QAAQ,CAAC,IAAU,EAAE,QAAsB;QACzC,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,wBAAwB;IACxB,OAAO,CAAC,IAAU,EAAE,OAAoB;QACtC,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACnD,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ export { ProductTracker } from "./products";
2
+ export { CartTracker } from "./cart";
3
+ export { CheckoutTracker } from "./checkout";
4
+ export { PurchaseTracker } from "./purchases";
5
+ export { RefundTracker } from "./refunds";
6
+ export { PromotionTracker } from "./promotions";
7
+ export { WishlistTracker } from "./wishlist";
8
+ export { SubscriptionTracker } from "./subscriptions";
9
+ export { LTVTracker } from "./ltv";
10
+ export { SearchTracker } from "./search";
@@ -0,0 +1,11 @@
1
+ export { ProductTracker } from "./products";
2
+ export { CartTracker } from "./cart";
3
+ export { CheckoutTracker } from "./checkout";
4
+ export { PurchaseTracker } from "./purchases";
5
+ export { RefundTracker } from "./refunds";
6
+ export { PromotionTracker } from "./promotions";
7
+ export { WishlistTracker } from "./wishlist";
8
+ export { SubscriptionTracker } from "./subscriptions";
9
+ export { LTVTracker } from "./ltv";
10
+ export { SearchTracker } from "./search";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/tracking/ecommerce/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Customer LTV shortcuts.
3
+ */
4
+ import { CustomerLTV } from "../../features/ecommerce/ltv";
5
+ import type { MoneyValue } from "../../types";
6
+ type LTVSegment = "low" | "medium" | "high" | "vip";
7
+ export declare class LTVTracker {
8
+ readonly client: CustomerLTV;
9
+ constructor(client: CustomerLTV);
10
+ /** Record a customer acquisition cost (CAC). */
11
+ acquisitionCost(userId: string, cost: MoneyValue, channel: string): Promise<import("../../features/ecommerce/ltv").LTVResponse>;
12
+ /** Move a user into a different LTV segment. */
13
+ segment(userId: string, newSegment: LTVSegment): Promise<import("../../features/ecommerce/ltv").LTVResponse>;
14
+ }
15
+ export {};
@@ -0,0 +1,14 @@
1
+ export class LTVTracker {
2
+ constructor(client) {
3
+ this.client = client;
4
+ }
5
+ /** Record a customer acquisition cost (CAC). */
6
+ acquisitionCost(userId, cost, channel) {
7
+ return this.client.recordAcquisitionCost({ userId, cost, channel });
8
+ }
9
+ /** Move a user into a different LTV segment. */
10
+ segment(userId, newSegment) {
11
+ return this.client.updateSegment(userId, newSegment);
12
+ }
13
+ }
14
+ //# sourceMappingURL=ltv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ltv.js","sourceRoot":"","sources":["../../../../src/lib/tracking/ecommerce/ltv.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,UAAU;IACrB,YAA4B,MAAmB;QAAnB,WAAM,GAAN,MAAM,CAAa;IAAG,CAAC;IAEnD,gDAAgD;IAChD,eAAe,CAAC,MAAc,EAAE,IAAgB,EAAE,OAAe;QAC/D,OAAO,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,gDAAgD;IAChD,OAAO,CAAC,MAAc,EAAE,UAAsB;QAC5C,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACvD,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Product shortcuts.
3
+ */
4
+ import { Products } from "../../features/ecommerce/products";
5
+ import type { Product } from "../../types";
6
+ export declare class ProductTracker {
7
+ readonly client: Products;
8
+ constructor(client: Products);
9
+ /** Track a product detail view. */
10
+ view(product: Pick<Product, "productId" | "name" | "price" | "currency"> & Partial<Product>, properties?: Record<string, unknown>): Promise<import("../../features/ecommerce/products").ProductResponse>;
11
+ /** Track a product list impression. */
12
+ impression(listId: string, listName: string, products: Product[]): Promise<import("../../features/ecommerce/products").ProductResponse>;
13
+ /** Track a click on a product in a list. */
14
+ click(product: Product, listId: string, position: number): Promise<import("../../features/ecommerce/products").ProductResponse>;
15
+ }
@@ -0,0 +1,18 @@
1
+ export class ProductTracker {
2
+ constructor(client) {
3
+ this.client = client;
4
+ }
5
+ /** Track a product detail view. */
6
+ view(product, properties) {
7
+ return this.client.view({ ...product, properties });
8
+ }
9
+ /** Track a product list impression. */
10
+ impression(listId, listName, products) {
11
+ return this.client.impression({ list: { listId, listName, products } });
12
+ }
13
+ /** Track a click on a product in a list. */
14
+ click(product, listId, position) {
15
+ return this.client.click({ product, listId, position });
16
+ }
17
+ }
18
+ //# sourceMappingURL=products.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"products.js","sourceRoot":"","sources":["../../../../src/lib/tracking/ecommerce/products.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,cAAc;IACzB,YAA4B,MAAgB;QAAhB,WAAM,GAAN,MAAM,CAAU;IAAG,CAAC;IAEhD,mCAAmC;IACnC,IAAI,CAAC,OAAsF,EAAE,UAAoC;QAC/H,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,uCAAuC;IACvC,UAAU,CAAC,MAAc,EAAE,QAAgB,EAAE,QAAmB;QAC9D,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,4CAA4C;IAC5C,KAAK,CAAC,OAAgB,EAAE,MAAc,EAAE,QAAgB;QACtD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1D,CAAC;CACF"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Promotion shortcuts.
3
+ */
4
+ import { Promotions } from "../../features/ecommerce/promotions";
5
+ export declare class PromotionTracker {
6
+ readonly client: Promotions;
7
+ constructor(client: Promotions);
8
+ /** A user saw a promotion. */
9
+ view(promotionId: string, name: string, creative: string, position: string): Promise<import("../../features/ecommerce/promotions").PromotionResponse>;
10
+ /** A user clicked a promotion. */
11
+ click(promotionId: string, name: string, creative: string, position: string): Promise<import("../../features/ecommerce/promotions").PromotionResponse>;
12
+ /** A coupon was applied. */
13
+ coupon(code: string, orderId: string, discountValue: number, discountType: "percentage" | "fixed", orderValueBefore: number, orderValueAfter: number): Promise<import("../../features/ecommerce/promotions").PromotionResponse>;
14
+ }
@@ -0,0 +1,25 @@
1
+ export class PromotionTracker {
2
+ constructor(client) {
3
+ this.client = client;
4
+ }
5
+ /** A user saw a promotion. */
6
+ view(promotionId, name, creative, position) {
7
+ return this.client.view({ promotionId, name, creative, position });
8
+ }
9
+ /** A user clicked a promotion. */
10
+ click(promotionId, name, creative, position) {
11
+ return this.client.click({ promotionId, name, creative, position });
12
+ }
13
+ /** A coupon was applied. */
14
+ coupon(code, orderId, discountValue, discountType, orderValueBefore, orderValueAfter) {
15
+ return this.client.couponUsed({
16
+ code,
17
+ orderId,
18
+ discountValue,
19
+ discountType,
20
+ orderValueBefore,
21
+ orderValueAfter,
22
+ });
23
+ }
24
+ }
25
+ //# sourceMappingURL=promotions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promotions.js","sourceRoot":"","sources":["../../../../src/lib/tracking/ecommerce/promotions.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,gBAAgB;IAC3B,YAA4B,MAAkB;QAAlB,WAAM,GAAN,MAAM,CAAY;IAAG,CAAC;IAElD,8BAA8B;IAC9B,IAAI,CAAC,WAAmB,EAAE,IAAY,EAAE,QAAgB,EAAE,QAAgB;QACxE,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,kCAAkC;IAClC,KAAK,CAAC,WAAmB,EAAE,IAAY,EAAE,QAAgB,EAAE,QAAgB;QACzE,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,4BAA4B;IAC5B,MAAM,CACJ,IAAY,EACZ,OAAe,EACf,aAAqB,EACrB,YAAoC,EACpC,gBAAwB,EACxB,eAAuB;QAEvB,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;YAC5B,IAAI;YACJ,OAAO;YACP,aAAa;YACb,YAAY;YACZ,gBAAgB;YAChB,eAAe;SAChB,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Purchase shortcuts.
3
+ */
4
+ import { Purchases } from "../../features/ecommerce/purchases";
5
+ import type { Order } from "../../types";
6
+ export declare class PurchaseTracker {
7
+ readonly client: Purchases;
8
+ constructor(client: Purchases);
9
+ /** Track a completed purchase. */
10
+ complete(order: Order): Promise<import("../../features/ecommerce/purchases").PurchaseResponse>;
11
+ }