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.
- package/README.md +224 -250
- package/dist/237.flowgrid.min.js +2 -0
- package/dist/237.flowgrid.min.js.map +1 -0
- package/dist/546.flowgrid.min.js +3 -0
- package/dist/546.flowgrid.min.js.LICENSE.txt +14 -0
- package/dist/546.flowgrid.min.js.map +1 -0
- package/dist/EXAMPLE.d.ts +1 -0
- package/dist/EXAMPLE.js +55 -0
- package/dist/EXAMPLE.js.map +1 -0
- package/dist/browser.d.ts +46 -103
- package/dist/browser.js +102 -0
- package/dist/browser.js.map +1 -0
- package/dist/flowgrid.min.js +1 -1
- package/dist/flowgrid.min.js.map +1 -1
- package/dist/index.d.ts +7 -8
- package/dist/index.js +64 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/client/transport.d.ts +14 -4
- package/dist/lib/client/transport.js +432 -0
- package/dist/lib/client/transport.js.map +1 -0
- package/dist/lib/consent/index.d.ts +0 -5
- package/dist/lib/consent/index.js +32 -0
- package/dist/lib/consent/index.js.map +1 -0
- package/dist/lib/consent/manager.js +336 -0
- package/dist/lib/consent/manager.js.map +1 -0
- package/dist/lib/consent/types.d.ts +3 -20
- package/dist/lib/consent/types.js +10 -0
- package/dist/lib/consent/types.js.map +1 -0
- package/dist/lib/features/analytics/attribution.d.ts +6 -47
- package/dist/lib/features/analytics/attribution.js +181 -0
- package/dist/lib/features/analytics/attribution.js.map +1 -0
- package/dist/lib/features/analytics/events.d.ts +1 -28
- package/dist/lib/features/analytics/events.js +256 -0
- package/dist/lib/features/analytics/events.js.map +1 -0
- package/dist/lib/features/analytics/funnels.js +260 -0
- package/dist/lib/features/analytics/funnels.js.map +1 -0
- package/dist/lib/features/analytics/heatmaps.d.ts +12 -19
- package/dist/lib/features/analytics/heatmaps.js +258 -0
- package/dist/lib/features/analytics/heatmaps.js.map +1 -0
- package/dist/lib/features/analytics/identify.d.ts +1 -21
- package/dist/lib/features/analytics/identify.js +213 -0
- package/dist/lib/features/analytics/identify.js.map +1 -0
- package/dist/lib/features/analytics/index.d.ts +2 -0
- package/dist/lib/features/analytics/index.js +15 -0
- package/dist/lib/features/analytics/index.js.map +1 -0
- package/dist/lib/features/analytics/page-views.d.ts +13 -30
- package/dist/lib/features/analytics/page-views.js +268 -0
- package/dist/lib/features/analytics/page-views.js.map +1 -0
- package/dist/lib/features/analytics/performance.d.ts +18 -24
- package/dist/lib/features/analytics/performance.js +232 -0
- package/dist/lib/features/analytics/performance.js.map +1 -0
- package/dist/lib/features/analytics/replay.d.ts +170 -0
- package/dist/lib/features/analytics/replay.js +381 -0
- package/dist/lib/features/analytics/replay.js.map +1 -0
- package/dist/lib/features/analytics/retention.d.ts +1 -76
- package/dist/lib/features/analytics/retention.js +135 -0
- package/dist/lib/features/analytics/retention.js.map +1 -0
- package/dist/lib/features/analytics/sessions.d.ts +12 -37
- package/dist/lib/features/analytics/sessions.js +213 -0
- package/dist/lib/features/analytics/sessions.js.map +1 -0
- package/dist/lib/features/core/activation.d.ts +1 -24
- package/dist/lib/features/core/activation.js +175 -0
- package/dist/lib/features/core/activation.js.map +1 -0
- package/dist/lib/features/core/experiment.d.ts +53 -21
- package/dist/lib/features/core/experiment.js +554 -0
- package/dist/lib/features/core/experiment.js.map +1 -0
- package/dist/lib/features/core/index.js +9 -0
- package/dist/lib/features/core/index.js.map +1 -0
- package/dist/lib/features/core/track-feature.d.ts +1 -8
- package/dist/lib/features/core/track-feature.js +119 -0
- package/dist/lib/features/core/track-feature.js.map +1 -0
- package/dist/lib/features/core/track-prompt.d.ts +5 -8
- package/dist/lib/features/core/track-prompt.js +181 -0
- package/dist/lib/features/core/track-prompt.js.map +1 -0
- package/dist/lib/features/ecommerce/cart.d.ts +1 -24
- package/dist/lib/features/ecommerce/cart.js +244 -0
- package/dist/lib/features/ecommerce/cart.js.map +1 -0
- package/dist/lib/features/ecommerce/checkout.d.ts +1 -28
- package/dist/lib/features/ecommerce/checkout.js +254 -0
- package/dist/lib/features/ecommerce/checkout.js.map +1 -0
- package/dist/lib/features/ecommerce/index.d.ts +0 -2
- package/dist/lib/features/ecommerce/index.js +15 -0
- package/dist/lib/features/ecommerce/index.js.map +1 -0
- package/dist/lib/features/ecommerce/ltv.d.ts +1 -69
- package/dist/lib/features/ecommerce/ltv.js +114 -0
- package/dist/lib/features/ecommerce/ltv.js.map +1 -0
- package/dist/lib/features/ecommerce/products.d.ts +1 -33
- package/dist/lib/features/ecommerce/products.js +223 -0
- package/dist/lib/features/ecommerce/products.js.map +1 -0
- package/dist/lib/features/ecommerce/promotions.d.ts +1 -30
- package/dist/lib/features/ecommerce/promotions.js +197 -0
- package/dist/lib/features/ecommerce/promotions.js.map +1 -0
- package/dist/lib/features/ecommerce/purchases.d.ts +1 -48
- package/dist/lib/features/ecommerce/purchases.js +193 -0
- package/dist/lib/features/ecommerce/purchases.js.map +1 -0
- package/dist/lib/features/ecommerce/refunds.d.ts +1 -27
- package/dist/lib/features/ecommerce/refunds.js +195 -0
- package/dist/lib/features/ecommerce/refunds.js.map +1 -0
- package/dist/lib/features/ecommerce/search.d.ts +1 -24
- package/dist/lib/features/ecommerce/search.js +156 -0
- package/dist/lib/features/ecommerce/search.js.map +1 -0
- package/dist/lib/features/ecommerce/subscriptions.d.ts +1 -28
- package/dist/lib/features/ecommerce/subscriptions.js +207 -0
- package/dist/lib/features/ecommerce/subscriptions.js.map +1 -0
- package/dist/lib/features/ecommerce/wishlist.d.ts +1 -28
- package/dist/lib/features/ecommerce/wishlist.js +186 -0
- package/dist/lib/features/ecommerce/wishlist.js.map +1 -0
- package/dist/lib/features/enterprise/acquisition.d.ts +2 -57
- package/dist/lib/features/enterprise/acquisition.js +166 -0
- package/dist/lib/features/enterprise/acquisition.js.map +1 -0
- package/dist/lib/features/enterprise/alerts.d.ts +1 -37
- package/dist/lib/features/enterprise/alerts.js +246 -0
- package/dist/lib/features/enterprise/alerts.js.map +1 -0
- package/dist/lib/features/enterprise/churn.d.ts +1 -42
- package/dist/lib/features/enterprise/churn.js +175 -0
- package/dist/lib/features/enterprise/churn.js.map +1 -0
- package/dist/lib/features/enterprise/cohorts.d.ts +1 -37
- package/dist/lib/features/enterprise/cohorts.js +201 -0
- package/dist/lib/features/enterprise/cohorts.js.map +1 -0
- package/dist/lib/features/enterprise/engagement.d.ts +40 -46
- package/dist/lib/features/enterprise/engagement.js +335 -0
- package/dist/lib/features/enterprise/engagement.js.map +1 -0
- package/dist/lib/features/enterprise/forecasting.d.ts +0 -50
- package/dist/lib/features/enterprise/forecasting.js +232 -0
- package/dist/lib/features/enterprise/forecasting.js.map +1 -0
- package/dist/lib/features/enterprise/index.d.ts +1 -1
- package/dist/lib/features/enterprise/index.js +76 -0
- package/dist/lib/features/enterprise/index.js.map +1 -0
- package/dist/lib/features/enterprise/monetization.d.ts +1 -60
- package/dist/lib/features/enterprise/monetization.js +146 -0
- package/dist/lib/features/enterprise/monetization.js.map +1 -0
- package/dist/lib/features/enterprise/multi-path-funnels.d.ts +1 -17
- package/dist/lib/features/enterprise/multi-path-funnels.js +205 -0
- package/dist/lib/features/enterprise/multi-path-funnels.js.map +1 -0
- package/dist/lib/features/enterprise/paths.d.ts +1 -56
- package/dist/lib/features/enterprise/paths.js +149 -0
- package/dist/lib/features/enterprise/paths.js.map +1 -0
- package/dist/lib/features/enterprise/security.d.ts +8 -57
- package/dist/lib/features/enterprise/security.js +202 -0
- package/dist/lib/features/enterprise/security.js.map +1 -0
- package/dist/lib/features/enterprise/support.d.ts +3 -42
- package/dist/lib/features/enterprise/support.js +162 -0
- package/dist/lib/features/enterprise/support.js.map +1 -0
- package/dist/lib/flowgrid.d.ts +278 -0
- package/dist/lib/flowgrid.js +323 -0
- package/dist/lib/flowgrid.js.map +1 -0
- package/dist/lib/frameworks/index.d.ts +13 -6
- package/dist/lib/frameworks/index.js +18 -0
- package/dist/lib/frameworks/index.js.map +1 -0
- package/dist/lib/frameworks/nextjs/client.js +355 -0
- package/dist/lib/frameworks/nextjs/client.js.map +1 -0
- package/dist/lib/frameworks/nextjs/index.js +31 -0
- package/dist/lib/frameworks/nextjs/index.js.map +1 -0
- package/dist/lib/frameworks/nextjs/server.js +259 -0
- package/dist/lib/frameworks/nextjs/server.js.map +1 -0
- package/dist/lib/frameworks/node/index.js +391 -0
- package/dist/lib/frameworks/node/index.js.map +1 -0
- package/dist/lib/frameworks/nuxt/index.js +288 -0
- package/dist/lib/frameworks/nuxt/index.js.map +1 -0
- package/dist/lib/frameworks/react/CookieBanner.js +166 -0
- package/dist/lib/frameworks/react/CookieBanner.js.map +1 -0
- package/dist/lib/frameworks/react/index.d.ts +2 -2
- package/dist/lib/frameworks/react/index.js +271 -0
- package/dist/lib/frameworks/react/index.js.map +1 -0
- package/dist/lib/frameworks/vue/CookieBanner.js +165 -0
- package/dist/lib/frameworks/vue/CookieBanner.js.map +1 -0
- package/dist/lib/frameworks/vue/index.d.ts +2 -2
- package/dist/lib/frameworks/vue/index.js +390 -0
- package/dist/lib/frameworks/vue/index.js.map +1 -0
- package/dist/lib/tracking/analytics/attribution.d.ts +14 -0
- package/dist/lib/tracking/analytics/attribution.js +18 -0
- package/dist/lib/tracking/analytics/attribution.js.map +1 -0
- package/dist/lib/tracking/analytics/events.d.ts +26 -0
- package/dist/lib/tracking/analytics/events.js +30 -0
- package/dist/lib/tracking/analytics/events.js.map +1 -0
- package/dist/lib/tracking/analytics/funnels.d.ts +16 -0
- package/dist/lib/tracking/analytics/funnels.js +22 -0
- package/dist/lib/tracking/analytics/funnels.js.map +1 -0
- package/dist/lib/tracking/analytics/heatmaps.d.ts +27 -0
- package/dist/lib/tracking/analytics/heatmaps.js +22 -0
- package/dist/lib/tracking/analytics/heatmaps.js.map +1 -0
- package/dist/lib/tracking/analytics/identify.d.ts +16 -0
- package/dist/lib/tracking/analytics/identify.js +22 -0
- package/dist/lib/tracking/analytics/identify.js.map +1 -0
- package/dist/lib/tracking/analytics/index.d.ts +10 -0
- package/dist/lib/tracking/analytics/index.js +11 -0
- package/dist/lib/tracking/analytics/index.js.map +1 -0
- package/dist/lib/tracking/analytics/page-views.d.ts +29 -0
- package/dist/lib/tracking/analytics/page-views.js +50 -0
- package/dist/lib/tracking/analytics/page-views.js.map +1 -0
- package/dist/lib/tracking/analytics/performance.d.ts +22 -0
- package/dist/lib/tracking/analytics/performance.js +22 -0
- package/dist/lib/tracking/analytics/performance.js.map +1 -0
- package/dist/lib/tracking/analytics/replay.d.ts +34 -0
- package/dist/lib/tracking/analytics/replay.js +46 -0
- package/dist/lib/tracking/analytics/replay.js.map +1 -0
- package/dist/lib/tracking/analytics/retention.d.ts +10 -0
- package/dist/lib/tracking/analytics/retention.js +10 -0
- package/dist/lib/tracking/analytics/retention.js.map +1 -0
- package/dist/lib/tracking/analytics/sessions.d.ts +20 -0
- package/dist/lib/tracking/analytics/sessions.js +26 -0
- package/dist/lib/tracking/analytics/sessions.js.map +1 -0
- package/dist/lib/tracking/core/activation.d.ts +23 -0
- package/dist/lib/tracking/core/activation.js +33 -0
- package/dist/lib/tracking/core/activation.js.map +1 -0
- package/dist/lib/tracking/core/experiment.d.ts +122 -0
- package/dist/lib/tracking/core/experiment.js +150 -0
- package/dist/lib/tracking/core/experiment.js.map +1 -0
- package/dist/lib/tracking/core/feature.d.ts +13 -0
- package/dist/lib/tracking/core/feature.js +14 -0
- package/dist/lib/tracking/core/feature.js.map +1 -0
- package/dist/lib/tracking/core/index.d.ts +4 -0
- package/dist/lib/tracking/core/index.js +5 -0
- package/dist/lib/tracking/core/index.js.map +1 -0
- package/dist/lib/tracking/core/prompt.d.ts +18 -0
- package/dist/lib/tracking/core/prompt.js +26 -0
- package/dist/lib/tracking/core/prompt.js.map +1 -0
- package/dist/lib/tracking/ecommerce/cart.d.ts +17 -0
- package/dist/lib/tracking/ecommerce/cart.js +22 -0
- package/dist/lib/tracking/ecommerce/cart.js.map +1 -0
- package/dist/lib/tracking/ecommerce/checkout.d.ts +17 -0
- package/dist/lib/tracking/ecommerce/checkout.js +22 -0
- package/dist/lib/tracking/ecommerce/checkout.js.map +1 -0
- package/dist/lib/tracking/ecommerce/index.d.ts +10 -0
- package/dist/lib/tracking/ecommerce/index.js +11 -0
- package/dist/lib/tracking/ecommerce/index.js.map +1 -0
- package/dist/lib/tracking/ecommerce/ltv.d.ts +15 -0
- package/dist/lib/tracking/ecommerce/ltv.js +14 -0
- package/dist/lib/tracking/ecommerce/ltv.js.map +1 -0
- package/dist/lib/tracking/ecommerce/products.d.ts +15 -0
- package/dist/lib/tracking/ecommerce/products.js +18 -0
- package/dist/lib/tracking/ecommerce/products.js.map +1 -0
- package/dist/lib/tracking/ecommerce/promotions.d.ts +14 -0
- package/dist/lib/tracking/ecommerce/promotions.js +25 -0
- package/dist/lib/tracking/ecommerce/promotions.js.map +1 -0
- package/dist/lib/tracking/ecommerce/purchases.d.ts +11 -0
- package/dist/lib/tracking/ecommerce/purchases.js +10 -0
- package/dist/lib/tracking/ecommerce/purchases.js.map +1 -0
- package/dist/lib/tracking/ecommerce/refunds.d.ts +17 -0
- package/dist/lib/tracking/ecommerce/refunds.js +22 -0
- package/dist/lib/tracking/ecommerce/refunds.js.map +1 -0
- package/dist/lib/tracking/ecommerce/search.d.ts +24 -0
- package/dist/lib/tracking/ecommerce/search.js +22 -0
- package/dist/lib/tracking/ecommerce/search.js.map +1 -0
- package/dist/lib/tracking/ecommerce/subscriptions.d.ts +21 -0
- package/dist/lib/tracking/ecommerce/subscriptions.js +38 -0
- package/dist/lib/tracking/ecommerce/subscriptions.js.map +1 -0
- package/dist/lib/tracking/ecommerce/wishlist.d.ts +19 -0
- package/dist/lib/tracking/ecommerce/wishlist.js +26 -0
- package/dist/lib/tracking/ecommerce/wishlist.js.map +1 -0
- package/dist/lib/tracking/enterprise/acquisition.d.ts +25 -0
- package/dist/lib/tracking/enterprise/acquisition.js +22 -0
- package/dist/lib/tracking/enterprise/acquisition.js.map +1 -0
- package/dist/lib/tracking/enterprise/alerts.d.ts +32 -0
- package/dist/lib/tracking/enterprise/alerts.js +30 -0
- package/dist/lib/tracking/enterprise/alerts.js.map +1 -0
- package/dist/lib/tracking/enterprise/churn.d.ts +23 -0
- package/dist/lib/tracking/enterprise/churn.js +22 -0
- package/dist/lib/tracking/enterprise/churn.js.map +1 -0
- package/dist/lib/tracking/enterprise/cohorts.d.ts +18 -0
- package/dist/lib/tracking/enterprise/cohorts.js +18 -0
- package/dist/lib/tracking/enterprise/cohorts.js.map +1 -0
- package/dist/lib/tracking/enterprise/engagement.d.ts +31 -0
- package/dist/lib/tracking/enterprise/engagement.js +44 -0
- package/dist/lib/tracking/enterprise/engagement.js.map +1 -0
- package/dist/lib/tracking/enterprise/forecasting.d.ts +18 -0
- package/dist/lib/tracking/enterprise/forecasting.js +22 -0
- package/dist/lib/tracking/enterprise/forecasting.js.map +1 -0
- package/dist/lib/tracking/enterprise/index.d.ts +11 -0
- package/dist/lib/tracking/enterprise/index.js +12 -0
- package/dist/lib/tracking/enterprise/index.js.map +1 -0
- package/dist/lib/tracking/enterprise/monetization.d.ts +14 -0
- package/dist/lib/tracking/enterprise/monetization.js +10 -0
- package/dist/lib/tracking/enterprise/monetization.js.map +1 -0
- package/dist/lib/tracking/enterprise/multi-path-funnels.d.ts +20 -0
- package/dist/lib/tracking/enterprise/multi-path-funnels.js +18 -0
- package/dist/lib/tracking/enterprise/multi-path-funnels.js.map +1 -0
- package/dist/lib/tracking/enterprise/paths.d.ts +20 -0
- package/dist/lib/tracking/enterprise/paths.js +18 -0
- package/dist/lib/tracking/enterprise/paths.js.map +1 -0
- package/dist/lib/tracking/enterprise/security.d.ts +28 -0
- package/dist/lib/tracking/enterprise/security.js +26 -0
- package/dist/lib/tracking/enterprise/security.js.map +1 -0
- package/dist/lib/tracking/enterprise/support.d.ts +25 -0
- package/dist/lib/tracking/enterprise/support.js +22 -0
- package/dist/lib/tracking/enterprise/support.js.map +1 -0
- package/dist/lib/tracking/index.d.ts +4 -0
- package/dist/lib/tracking/index.js +5 -0
- package/dist/lib/tracking/index.js.map +1 -0
- package/dist/lib/types/analytics.d.ts +10 -2
- package/dist/lib/types/analytics.js +6 -0
- package/dist/lib/types/analytics.js.map +1 -0
- package/dist/lib/types/common.js +6 -0
- package/dist/lib/types/common.js.map +1 -0
- package/dist/lib/types/ecommerce.js +6 -0
- package/dist/lib/types/ecommerce.js.map +1 -0
- package/dist/lib/types/index.js +8 -0
- package/dist/lib/types/index.js.map +1 -0
- package/dist/lib/utils/browser.d.ts +16 -0
- package/dist/lib/utils/browser.js +32 -0
- package/dist/lib/utils/browser.js.map +1 -0
- package/dist/lib/utils/identity.js +346 -0
- package/dist/lib/utils/identity.js.map +1 -0
- package/dist/lib/utils/storage.js +105 -0
- package/dist/lib/utils/storage.js.map +1 -0
- package/dist/umd/237.index.js +2 -0
- package/dist/umd/237.index.js.map +1 -0
- package/dist/umd/546.index.js +3 -0
- package/dist/umd/546.index.js.LICENSE.txt +14 -0
- package/dist/umd/546.index.js.map +1 -0
- package/dist/umd/index.js +2 -0
- package/dist/umd/index.js.map +1 -0
- package/package.json +27 -80
- 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 @@
|
|
|
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
|
+
}
|