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,207 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Ecommerce - Subscription & Recurring Revenue
|
|
3
|
+
* @module features/ecommerce/subscriptions
|
|
4
|
+
*
|
|
5
|
+
* @description
|
|
6
|
+
* Track subscription lifecycle events for SaaS and subscription
|
|
7
|
+
* ecommerce businesses.
|
|
8
|
+
*
|
|
9
|
+
* @useCases
|
|
10
|
+
* - Track subscription signups
|
|
11
|
+
* - Monitor subscription changes (upgrades/downgrades)
|
|
12
|
+
* - Track cancellations and churn
|
|
13
|
+
* - Calculate MRR/ARR metrics
|
|
14
|
+
* - Analyze subscription cohorts
|
|
15
|
+
*
|
|
16
|
+
* @metrics
|
|
17
|
+
* - Monthly Recurring Revenue (MRR)
|
|
18
|
+
* - Annual Recurring Revenue (ARR)
|
|
19
|
+
* - Churn rate
|
|
20
|
+
* - Expansion revenue
|
|
21
|
+
* - Net revenue retention
|
|
22
|
+
*
|
|
23
|
+
* @chartData
|
|
24
|
+
* - Line chart: MRR over time
|
|
25
|
+
* - Waterfall: MRR movement
|
|
26
|
+
* - Bar chart: Revenue by plan
|
|
27
|
+
* - Cohort: Subscription retention
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const subscriptions = new Subscriptions(webId, endpoint, apiKey);
|
|
32
|
+
*
|
|
33
|
+
* // Track subscription start
|
|
34
|
+
* await subscriptions.start({
|
|
35
|
+
* subscriptionId: 'sub_123',
|
|
36
|
+
* userId: 'user_456',
|
|
37
|
+
* plan: 'pro',
|
|
38
|
+
* mrr: { amount: 4900, currency: 'USD' },
|
|
39
|
+
* billingCycle: 'monthly'
|
|
40
|
+
* });
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
import { FlowGridTransport } from "../../client/transport";
|
|
44
|
+
// ============================================================================
|
|
45
|
+
// SUBSCRIPTIONS CLASS
|
|
46
|
+
// ============================================================================
|
|
47
|
+
/**
|
|
48
|
+
* Subscriptions - Track subscription lifecycle events.
|
|
49
|
+
*
|
|
50
|
+
* @extends FlowGridTransport
|
|
51
|
+
*
|
|
52
|
+
* @description
|
|
53
|
+
* Provides subscription tracking including:
|
|
54
|
+
* - Subscription starts (new MRR)
|
|
55
|
+
* - Plan changes (expansion/contraction)
|
|
56
|
+
* - Cancellations (churned MRR)
|
|
57
|
+
* - Renewals
|
|
58
|
+
* - Trial conversions
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* ```typescript
|
|
62
|
+
* const subscriptions = new Subscriptions(webId, endpoint, apiKey);
|
|
63
|
+
*
|
|
64
|
+
* // New subscription
|
|
65
|
+
* await subscriptions.start({
|
|
66
|
+
* subscriptionId: 'sub_abc123',
|
|
67
|
+
* userId: 'user_456',
|
|
68
|
+
* plan: 'professional',
|
|
69
|
+
* mrr: { amount: 9900, currency: 'USD' },
|
|
70
|
+
* billingCycle: 'monthly',
|
|
71
|
+
* trialDays: 14
|
|
72
|
+
* });
|
|
73
|
+
*
|
|
74
|
+
* // Upgrade
|
|
75
|
+
* await subscriptions.change({
|
|
76
|
+
* subscriptionId: 'sub_abc123',
|
|
77
|
+
* userId: 'user_456',
|
|
78
|
+
* previousPlan: 'professional',
|
|
79
|
+
* newPlan: 'enterprise',
|
|
80
|
+
* previousMrr: { amount: 9900, currency: 'USD' },
|
|
81
|
+
* newMrr: { amount: 29900, currency: 'USD' },
|
|
82
|
+
* changeType: 'upgrade'
|
|
83
|
+
* });
|
|
84
|
+
* ```
|
|
85
|
+
*/
|
|
86
|
+
export class Subscriptions extends FlowGridTransport {
|
|
87
|
+
/**
|
|
88
|
+
* Tracks subscription start.
|
|
89
|
+
*
|
|
90
|
+
* @param config - Subscription start configuration
|
|
91
|
+
* @returns Promise resolving to subscription response
|
|
92
|
+
*/
|
|
93
|
+
async start(config) {
|
|
94
|
+
return await this.init("subscription_start", {
|
|
95
|
+
type: "ecommerce",
|
|
96
|
+
subtype: "subscription_start",
|
|
97
|
+
subscriptionId: config.subscriptionId,
|
|
98
|
+
userId: config.userId,
|
|
99
|
+
plan: config.plan,
|
|
100
|
+
mrr: config.mrr,
|
|
101
|
+
billingCycle: config.billingCycle,
|
|
102
|
+
trialDays: config.trialDays,
|
|
103
|
+
coupon: config.coupon,
|
|
104
|
+
isTrialing: (config.trialDays || 0) > 0,
|
|
105
|
+
...config.properties,
|
|
106
|
+
timestamp: new Date().toISOString()
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Tracks subscription plan change.
|
|
111
|
+
*
|
|
112
|
+
* @param config - Subscription change configuration
|
|
113
|
+
* @returns Promise resolving to subscription response
|
|
114
|
+
*/
|
|
115
|
+
async change(config) {
|
|
116
|
+
const mrrDiff = config.newMrr.amount - config.previousMrr.amount;
|
|
117
|
+
return await this.init("subscription_change", {
|
|
118
|
+
type: "ecommerce",
|
|
119
|
+
subtype: "subscription_change",
|
|
120
|
+
subscriptionId: config.subscriptionId,
|
|
121
|
+
userId: config.userId,
|
|
122
|
+
previousPlan: config.previousPlan,
|
|
123
|
+
newPlan: config.newPlan,
|
|
124
|
+
previousMrr: config.previousMrr,
|
|
125
|
+
newMrr: config.newMrr,
|
|
126
|
+
mrrChange: mrrDiff,
|
|
127
|
+
changeType: config.changeType,
|
|
128
|
+
timestamp: new Date().toISOString()
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Tracks subscription cancellation.
|
|
133
|
+
*
|
|
134
|
+
* @param config - Cancellation configuration
|
|
135
|
+
* @returns Promise resolving to subscription response
|
|
136
|
+
*/
|
|
137
|
+
async cancel(config) {
|
|
138
|
+
return await this.init("subscription_cancel", {
|
|
139
|
+
type: "ecommerce",
|
|
140
|
+
subtype: "subscription_cancel",
|
|
141
|
+
subscriptionId: config.subscriptionId,
|
|
142
|
+
userId: config.userId,
|
|
143
|
+
plan: config.plan,
|
|
144
|
+
lostMrr: config.lostMrr,
|
|
145
|
+
reason: config.reason,
|
|
146
|
+
feedback: config.feedback,
|
|
147
|
+
immediate: config.immediate,
|
|
148
|
+
timestamp: new Date().toISOString()
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Tracks subscription renewal.
|
|
153
|
+
*
|
|
154
|
+
* @param subscriptionId - Subscription ID
|
|
155
|
+
* @param userId - User ID
|
|
156
|
+
* @param mrr - Renewed MRR
|
|
157
|
+
* @returns Promise resolving to subscription response
|
|
158
|
+
*/
|
|
159
|
+
async renew(subscriptionId, userId, mrr) {
|
|
160
|
+
return await this.init("subscription_renew", {
|
|
161
|
+
type: "ecommerce",
|
|
162
|
+
subtype: "subscription_renew",
|
|
163
|
+
subscriptionId,
|
|
164
|
+
userId,
|
|
165
|
+
mrr,
|
|
166
|
+
timestamp: new Date().toISOString()
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Tracks trial conversion to paid.
|
|
171
|
+
*
|
|
172
|
+
* @param subscriptionId - Subscription ID
|
|
173
|
+
* @param userId - User ID
|
|
174
|
+
* @param plan - Converted to plan
|
|
175
|
+
* @param mrr - New MRR
|
|
176
|
+
* @returns Promise resolving to subscription response
|
|
177
|
+
*/
|
|
178
|
+
async trialConverted(subscriptionId, userId, plan, mrr) {
|
|
179
|
+
return await this.init("trial_converted", {
|
|
180
|
+
type: "ecommerce",
|
|
181
|
+
subtype: "trial_converted",
|
|
182
|
+
subscriptionId,
|
|
183
|
+
userId,
|
|
184
|
+
plan,
|
|
185
|
+
mrr,
|
|
186
|
+
timestamp: new Date().toISOString()
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Tracks trial expiration without conversion.
|
|
191
|
+
*
|
|
192
|
+
* @param subscriptionId - Subscription ID
|
|
193
|
+
* @param userId - User ID
|
|
194
|
+
* @returns Promise resolving to subscription response
|
|
195
|
+
*/
|
|
196
|
+
async trialExpired(subscriptionId, userId) {
|
|
197
|
+
return await this.init("trial_expired", {
|
|
198
|
+
type: "ecommerce",
|
|
199
|
+
subtype: "trial_expired",
|
|
200
|
+
subscriptionId,
|
|
201
|
+
userId,
|
|
202
|
+
timestamp: new Date().toISOString()
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
export default Subscriptions;
|
|
207
|
+
//# sourceMappingURL=subscriptions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscriptions.js","sourceRoot":"","sources":["../../../../src/lib/features/ecommerce/subscriptions.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
* ```
|
|
39
39
|
*/
|
|
40
40
|
import { FlowGridTransport } from "../../client/transport";
|
|
41
|
-
import { Product, Wishlist,
|
|
41
|
+
import { Product, Wishlist, TimeSeriesData } from "../../types";
|
|
42
42
|
/**
|
|
43
43
|
* Configuration for adding to wishlist.
|
|
44
44
|
*/
|
|
@@ -205,32 +205,5 @@ export declare class WishlistTracking extends FlowGridTransport {
|
|
|
205
205
|
* @returns Promise resolving to wishlist response
|
|
206
206
|
*/
|
|
207
207
|
share(wishlistId: string, method: 'email' | 'link' | 'social'): Promise<WishlistResponse>;
|
|
208
|
-
/**
|
|
209
|
-
* Retrieves wishlist analytics for dashboards and charts.
|
|
210
|
-
*
|
|
211
|
-
* @param filter - Date range filter
|
|
212
|
-
* @returns Promise resolving to wishlist analytics
|
|
213
|
-
*
|
|
214
|
-
* @example
|
|
215
|
-
* ```typescript
|
|
216
|
-
* const analytics = await wishlist.getAnalytics({
|
|
217
|
-
* range: 'last30days'
|
|
218
|
-
* });
|
|
219
|
-
*
|
|
220
|
-
* // Bar chart - top wishlisted products
|
|
221
|
-
* const topProducts = analytics.topProducts.map(p => ({
|
|
222
|
-
* name: p.product.name,
|
|
223
|
-
* value: p.wishlistCount
|
|
224
|
-
* }));
|
|
225
|
-
*
|
|
226
|
-
* // Funnel - wishlist to purchase
|
|
227
|
-
* const funnel = [
|
|
228
|
-
* { name: 'Wishlisted', value: analytics.conversionFunnel.wishlisted },
|
|
229
|
-
* { name: 'Added to Cart', value: analytics.conversionFunnel.addedToCart },
|
|
230
|
-
* { name: 'Purchased', value: analytics.conversionFunnel.purchased }
|
|
231
|
-
* ];
|
|
232
|
-
* ```
|
|
233
|
-
*/
|
|
234
|
-
getAnalytics(filter?: DateRangeFilter): Promise<WishlistAnalyticsData>;
|
|
235
208
|
}
|
|
236
209
|
export default WishlistTracking;
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Ecommerce - Wishlist Tracking
|
|
3
|
+
* @module features/ecommerce/wishlist
|
|
4
|
+
*
|
|
5
|
+
* @description
|
|
6
|
+
* Track wishlist interactions to understand purchase intent
|
|
7
|
+
* and drive conversions from saved items.
|
|
8
|
+
*
|
|
9
|
+
* @useCases
|
|
10
|
+
* - Track wishlist additions
|
|
11
|
+
* - Monitor wishlist to cart conversions
|
|
12
|
+
* - Identify popular wishlist items
|
|
13
|
+
* - Trigger price drop notifications
|
|
14
|
+
* - Analyze wishlist behavior patterns
|
|
15
|
+
*
|
|
16
|
+
* @metrics
|
|
17
|
+
* - Wishlist additions
|
|
18
|
+
* - Wishlist to cart rate
|
|
19
|
+
* - Wishlist to purchase rate
|
|
20
|
+
* - Average items per wishlist
|
|
21
|
+
* - Top wishlisted products
|
|
22
|
+
*
|
|
23
|
+
* @chartData
|
|
24
|
+
* - Bar chart: Top wishlisted products
|
|
25
|
+
* - Line chart: Wishlist activity over time
|
|
26
|
+
* - Funnel: Wishlist to purchase conversion
|
|
27
|
+
* - Table: Wishlist conversion rates by product
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const wishlist = new WishlistTracking(webId, endpoint, apiKey);
|
|
32
|
+
*
|
|
33
|
+
* // Add to wishlist
|
|
34
|
+
* await wishlist.add({
|
|
35
|
+
* product: { productId: 'PROD-123', name: 'Widget', price: 49.99, currency: 'USD' },
|
|
36
|
+
* wishlistId: 'wl_user123'
|
|
37
|
+
* });
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
import { FlowGridTransport } from "../../client/transport";
|
|
41
|
+
// ============================================================================
|
|
42
|
+
// WISHLIST TRACKING CLASS
|
|
43
|
+
// ============================================================================
|
|
44
|
+
/**
|
|
45
|
+
* WishlistTracking - Track wishlist interactions.
|
|
46
|
+
*
|
|
47
|
+
* @extends FlowGridTransport
|
|
48
|
+
*
|
|
49
|
+
* @description
|
|
50
|
+
* Provides wishlist tracking capabilities including:
|
|
51
|
+
* - Add to wishlist events
|
|
52
|
+
* - Remove from wishlist events
|
|
53
|
+
* - Wishlist views
|
|
54
|
+
* - Move to cart tracking
|
|
55
|
+
* - Wishlist sharing
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* ```typescript
|
|
59
|
+
* const wishlist = new WishlistTracking(webId, endpoint, apiKey);
|
|
60
|
+
*
|
|
61
|
+
* // Add product to wishlist
|
|
62
|
+
* await wishlist.add({
|
|
63
|
+
* product: {
|
|
64
|
+
* productId: 'PROD-001',
|
|
65
|
+
* name: 'Designer Bag',
|
|
66
|
+
* price: 299.99,
|
|
67
|
+
* currency: 'USD'
|
|
68
|
+
* },
|
|
69
|
+
* source: 'product_page'
|
|
70
|
+
* });
|
|
71
|
+
*
|
|
72
|
+
* // Track wishlist view
|
|
73
|
+
* await wishlist.view({
|
|
74
|
+
* wishlistId: 'wl_user123',
|
|
75
|
+
* items: wishlistItems
|
|
76
|
+
* });
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
export class WishlistTracking extends FlowGridTransport {
|
|
80
|
+
/**
|
|
81
|
+
* Tracks adding product to wishlist.
|
|
82
|
+
*
|
|
83
|
+
* @param config - Add to wishlist configuration
|
|
84
|
+
* @returns Promise resolving to wishlist response
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* ```typescript
|
|
88
|
+
* await wishlist.add({
|
|
89
|
+
* product: {
|
|
90
|
+
* productId: 'SKU-789',
|
|
91
|
+
* name: 'Premium Sneakers',
|
|
92
|
+
* price: 159.99,
|
|
93
|
+
* currency: 'USD',
|
|
94
|
+
* category: 'Footwear'
|
|
95
|
+
* },
|
|
96
|
+
* source: 'product_page'
|
|
97
|
+
* });
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
100
|
+
async add(config) {
|
|
101
|
+
return await this.init("add_to_wishlist", {
|
|
102
|
+
type: "ecommerce",
|
|
103
|
+
subtype: "add_to_wishlist",
|
|
104
|
+
product: config.product,
|
|
105
|
+
wishlistId: config.wishlistId,
|
|
106
|
+
userId: config.userId,
|
|
107
|
+
source: config.source,
|
|
108
|
+
timestamp: new Date().toISOString()
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Tracks removing product from wishlist.
|
|
113
|
+
*
|
|
114
|
+
* @param config - Remove from wishlist configuration
|
|
115
|
+
* @returns Promise resolving to wishlist response
|
|
116
|
+
*
|
|
117
|
+
* @example
|
|
118
|
+
* ```typescript
|
|
119
|
+
* await wishlist.remove({
|
|
120
|
+
* product: productToRemove,
|
|
121
|
+
* wishlistId: 'wl_user123',
|
|
122
|
+
* reason: 'moved_to_cart'
|
|
123
|
+
* });
|
|
124
|
+
* ```
|
|
125
|
+
*/
|
|
126
|
+
async remove(config) {
|
|
127
|
+
return await this.init("remove_from_wishlist", {
|
|
128
|
+
type: "ecommerce",
|
|
129
|
+
subtype: "remove_from_wishlist",
|
|
130
|
+
product: config.product,
|
|
131
|
+
wishlistId: config.wishlistId,
|
|
132
|
+
userId: config.userId,
|
|
133
|
+
reason: config.reason || "user_action",
|
|
134
|
+
timestamp: new Date().toISOString()
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Tracks wishlist view.
|
|
139
|
+
*
|
|
140
|
+
* @param wishlist - Wishlist being viewed
|
|
141
|
+
* @returns Promise resolving to wishlist response
|
|
142
|
+
*/
|
|
143
|
+
async view(wishlist) {
|
|
144
|
+
return await this.init("view_wishlist", {
|
|
145
|
+
type: "ecommerce",
|
|
146
|
+
subtype: "view_wishlist",
|
|
147
|
+
wishlistId: wishlist.wishlistId,
|
|
148
|
+
itemCount: wishlist.items.length,
|
|
149
|
+
timestamp: new Date().toISOString()
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Tracks moving item from wishlist to cart.
|
|
154
|
+
*
|
|
155
|
+
* @param product - Product being moved
|
|
156
|
+
* @param wishlistId - Source wishlist
|
|
157
|
+
* @returns Promise resolving to wishlist response
|
|
158
|
+
*/
|
|
159
|
+
async moveToCart(product, wishlistId) {
|
|
160
|
+
return await this.init("wishlist_to_cart", {
|
|
161
|
+
type: "ecommerce",
|
|
162
|
+
subtype: "wishlist_to_cart",
|
|
163
|
+
product,
|
|
164
|
+
wishlistId,
|
|
165
|
+
timestamp: new Date().toISOString()
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Tracks wishlist sharing.
|
|
170
|
+
*
|
|
171
|
+
* @param wishlistId - Wishlist being shared
|
|
172
|
+
* @param method - Share method
|
|
173
|
+
* @returns Promise resolving to wishlist response
|
|
174
|
+
*/
|
|
175
|
+
async share(wishlistId, method) {
|
|
176
|
+
return await this.init("share_wishlist", {
|
|
177
|
+
type: "ecommerce",
|
|
178
|
+
subtype: "share_wishlist",
|
|
179
|
+
wishlistId,
|
|
180
|
+
method,
|
|
181
|
+
timestamp: new Date().toISOString()
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
export default WishlistTracking;
|
|
186
|
+
//# sourceMappingURL=wishlist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wishlist.js","sourceRoot":"","sources":["../../../../src/lib/features/ecommerce/wishlist.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAuF3D,+EAA+E;AAC/E,0BAA0B;AAC1B,+EAA+E;AAE/E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,OAAO,gBAAiB,SAAQ,iBAAiB;IACrD;;;;;;;;;;;;;;;;;;;OAmBG;IACH,KAAK,CAAC,GAAG,CAAC,MAA2B;QACnC,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YACxC,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,iBAAiB;YAC1B,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,MAAM,CAAC,MAAgC;QAC3C,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;YAC7C,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,sBAAsB;YAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,aAAa;YACtC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,IAAI,CAAC,QAAkB;QAC3B,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACtC,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,eAAe;YACxB,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM;YAChC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,UAAU,CAAC,OAAgB,EAAE,UAAmB;QACpD,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YACzC,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,kBAAkB;YAC3B,OAAO;YACP,UAAU;YACV,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,KAAK,CACT,UAAkB,EAClB,MAAmC;QAEnC,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACvC,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,gBAAgB;YACzB,UAAU;YACV,MAAM;YACN,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;CAEF;AAED,eAAe,gBAAgB,CAAC"}
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
* ```
|
|
40
40
|
*/
|
|
41
41
|
import { FlowGridTransport } from "../../client/transport";
|
|
42
|
-
import { DateRangeFilter, TimeSeriesData,
|
|
42
|
+
import { DateRangeFilter, TimeSeriesData, MoneyValue, CurrencyCode } from "../../types";
|
|
43
43
|
/**
|
|
44
44
|
* Acquisition source types.
|
|
45
45
|
*/
|
|
@@ -252,7 +252,7 @@ export interface AttributionResult {
|
|
|
252
252
|
/**
|
|
253
253
|
* Acquisition analytics result.
|
|
254
254
|
*/
|
|
255
|
-
export interface
|
|
255
|
+
export interface AcquisitionAnalyticType {
|
|
256
256
|
totalAcquisitions: number;
|
|
257
257
|
cac: MoneyValue;
|
|
258
258
|
ltv: MoneyValue;
|
|
@@ -315,59 +315,4 @@ export declare class AcquisitionAnalytics extends FlowGridTransport {
|
|
|
315
315
|
trackCampaignSpend(config: CampaignSpendConfig): Promise<{
|
|
316
316
|
tracked: boolean;
|
|
317
317
|
}>;
|
|
318
|
-
/**
|
|
319
|
-
* Get CAC.
|
|
320
|
-
*/
|
|
321
|
-
getCAC(config?: CACConfig): Promise<CACResult>;
|
|
322
|
-
/**
|
|
323
|
-
* Get trial funnel.
|
|
324
|
-
*/
|
|
325
|
-
getTrialFunnel(config?: TrialFunnelConfig): Promise<TrialFunnelResult>;
|
|
326
|
-
/**
|
|
327
|
-
* Get campaign performance.
|
|
328
|
-
*/
|
|
329
|
-
getCampaignPerformance(campaignId?: string, filter?: DateRangeFilter): Promise<CampaignPerformance[]>;
|
|
330
|
-
/**
|
|
331
|
-
* Get attribution analysis.
|
|
332
|
-
*/
|
|
333
|
-
getAttribution(config: AttributionAnalysisConfig): Promise<AttributionResult>;
|
|
334
|
-
/**
|
|
335
|
-
* Get LTV:CAC ratio.
|
|
336
|
-
*/
|
|
337
|
-
getLTVCACRatio(filter?: DateRangeFilter): Promise<{
|
|
338
|
-
ltv: MoneyValue;
|
|
339
|
-
cac: MoneyValue;
|
|
340
|
-
ratio: number;
|
|
341
|
-
healthy: boolean;
|
|
342
|
-
}>;
|
|
343
|
-
/**
|
|
344
|
-
* Get acquisition analytics.
|
|
345
|
-
*/
|
|
346
|
-
getAnalytics(filter?: DateRangeFilter): Promise<AcquisitionAnalytics>;
|
|
347
|
-
/**
|
|
348
|
-
* Get acquisition trend.
|
|
349
|
-
*/
|
|
350
|
-
getAcquisitionTrend(filter?: DateRangeFilter, granularity?: TimeGranularity): Promise<TimeSeriesData>;
|
|
351
|
-
/**
|
|
352
|
-
* Get channel effectiveness.
|
|
353
|
-
*/
|
|
354
|
-
getChannelEffectiveness(filter?: DateRangeFilter): Promise<Array<{
|
|
355
|
-
channel: AcquisitionSource;
|
|
356
|
-
acquisitions: number;
|
|
357
|
-
cac: MoneyValue;
|
|
358
|
-
ltv: MoneyValue;
|
|
359
|
-
paybackMonths: number;
|
|
360
|
-
score: number;
|
|
361
|
-
}>>;
|
|
362
|
-
/**
|
|
363
|
-
* Get cohort-based campaign analysis.
|
|
364
|
-
*/
|
|
365
|
-
getCohortCampaignAnalysis(campaignId: string, periods: number): Promise<{
|
|
366
|
-
cohorts: Array<{
|
|
367
|
-
cohortDate: string;
|
|
368
|
-
acquisitions: number;
|
|
369
|
-
retention: number[];
|
|
370
|
-
ltv: MoneyValue;
|
|
371
|
-
}>;
|
|
372
|
-
}>;
|
|
373
318
|
}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Enterprise - Marketing & Acquisition Analytics
|
|
3
|
+
* @module features/enterprise/acquisition
|
|
4
|
+
*
|
|
5
|
+
* @description
|
|
6
|
+
* Deep attribution and acquisition insights including CAC breakdown,
|
|
7
|
+
* trial-to-paid funnel tracking, and campaign performance by cohort.
|
|
8
|
+
*
|
|
9
|
+
* @useCases
|
|
10
|
+
* - Track customer acquisition cost by channel
|
|
11
|
+
* - Monitor trial → paid → upgrade funnel
|
|
12
|
+
* - Analyze campaign performance
|
|
13
|
+
* - Multi-touch attribution
|
|
14
|
+
* - Marketing ROI calculation
|
|
15
|
+
*
|
|
16
|
+
* @metrics
|
|
17
|
+
* - Customer Acquisition Cost (CAC)
|
|
18
|
+
* - Trial conversion rate
|
|
19
|
+
* - Paid conversion rate
|
|
20
|
+
* - Campaign ROI
|
|
21
|
+
* - Channel effectiveness
|
|
22
|
+
*
|
|
23
|
+
* @chartData
|
|
24
|
+
* - Bar chart: CAC by channel
|
|
25
|
+
* - Funnel: Trial to paid conversion
|
|
26
|
+
* - Line chart: Campaign performance
|
|
27
|
+
* - Pie chart: Acquisition source mix
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const acquisition = new AcquisitionAnalytics(webId, endpoint, apiKey);
|
|
32
|
+
*
|
|
33
|
+
* // Track acquisition
|
|
34
|
+
* await acquisition.trackAcquisition({
|
|
35
|
+
* userId: 'user_123',
|
|
36
|
+
* source: 'google_ads',
|
|
37
|
+
* campaign: 'summer_2026'
|
|
38
|
+
* });
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
import { FlowGridTransport } from "../../client/transport";
|
|
42
|
+
// ============================================================================
|
|
43
|
+
// HELPER FUNCTIONS
|
|
44
|
+
// ============================================================================
|
|
45
|
+
/**
|
|
46
|
+
* Calculate CAC.
|
|
47
|
+
*/
|
|
48
|
+
export function calculateCAC(totalSpend, totalAcquisitions, currency) {
|
|
49
|
+
if (totalAcquisitions === 0) {
|
|
50
|
+
return { amount: 0, currency };
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
amount: Math.round((totalSpend / totalAcquisitions) * 100) / 100,
|
|
54
|
+
currency
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Calculate ROAS (Return on Ad Spend).
|
|
59
|
+
*/
|
|
60
|
+
export function calculateROAS(revenue, spend) {
|
|
61
|
+
if (spend === 0)
|
|
62
|
+
return 0;
|
|
63
|
+
return Math.round((revenue / spend) * 100) / 100;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Calculate LTV:CAC ratio.
|
|
67
|
+
*/
|
|
68
|
+
export function calculateLTVCACRatio(ltv, cac) {
|
|
69
|
+
if (cac === 0)
|
|
70
|
+
return 0;
|
|
71
|
+
return Math.round((ltv / cac) * 100) / 100;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Parse UTM parameters from URL.
|
|
75
|
+
*/
|
|
76
|
+
export function parseUTMParams(url) {
|
|
77
|
+
const params = {};
|
|
78
|
+
try {
|
|
79
|
+
const urlObj = new URL(url);
|
|
80
|
+
const utmKeys = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content'];
|
|
81
|
+
for (const key of utmKeys) {
|
|
82
|
+
const value = urlObj.searchParams.get(key);
|
|
83
|
+
if (value) {
|
|
84
|
+
params[key.replace('utm_', '')] = value;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
// Invalid URL, return empty object
|
|
90
|
+
}
|
|
91
|
+
return params;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Classify acquisition source from UTM parameters.
|
|
95
|
+
*/
|
|
96
|
+
export function classifySource(utmSource, utmMedium) {
|
|
97
|
+
if (!utmSource && !utmMedium)
|
|
98
|
+
return 'direct';
|
|
99
|
+
const source = utmSource?.toLowerCase() ?? '';
|
|
100
|
+
const medium = utmMedium?.toLowerCase() ?? '';
|
|
101
|
+
if (medium.includes('cpc') || medium.includes('paid')) {
|
|
102
|
+
if (source.includes('facebook') || source.includes('instagram') || source.includes('linkedin')) {
|
|
103
|
+
return 'paid_social';
|
|
104
|
+
}
|
|
105
|
+
return 'paid_search';
|
|
106
|
+
}
|
|
107
|
+
if (source.includes('facebook') || source.includes('twitter') || source.includes('linkedin')) {
|
|
108
|
+
return 'organic_social';
|
|
109
|
+
}
|
|
110
|
+
if (medium === 'email')
|
|
111
|
+
return 'email';
|
|
112
|
+
if (medium === 'referral')
|
|
113
|
+
return 'referral';
|
|
114
|
+
if (medium === 'affiliate')
|
|
115
|
+
return 'affiliate';
|
|
116
|
+
return 'organic';
|
|
117
|
+
}
|
|
118
|
+
// ============================================================================
|
|
119
|
+
// MAIN CLASS
|
|
120
|
+
// ============================================================================
|
|
121
|
+
/**
|
|
122
|
+
* Marketing and acquisition analytics class.
|
|
123
|
+
*/
|
|
124
|
+
export class AcquisitionAnalytics extends FlowGridTransport {
|
|
125
|
+
/**
|
|
126
|
+
* Track user acquisition.
|
|
127
|
+
*/
|
|
128
|
+
async trackAcquisition(config) {
|
|
129
|
+
return await this.initFeature("acquisition.acquired", {
|
|
130
|
+
type: "acquisition",
|
|
131
|
+
...config,
|
|
132
|
+
timestamp: new Date().toISOString()
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Track lifecycle transition.
|
|
137
|
+
*/
|
|
138
|
+
async trackLifecycleTransition(config) {
|
|
139
|
+
return await this.initFeature("acquisition.lifecycle_transition", {
|
|
140
|
+
type: "acquisition",
|
|
141
|
+
...config,
|
|
142
|
+
timestamp: new Date().toISOString()
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Create campaign.
|
|
147
|
+
*/
|
|
148
|
+
async createCampaign(definition) {
|
|
149
|
+
return await this.initFeature("acquisition.create_campaign", {
|
|
150
|
+
type: "acquisition",
|
|
151
|
+
...definition,
|
|
152
|
+
timestamp: new Date().toISOString()
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Track campaign spend.
|
|
157
|
+
*/
|
|
158
|
+
async trackCampaignSpend(config) {
|
|
159
|
+
return await this.initFeature("acquisition.campaign_spend", {
|
|
160
|
+
type: "acquisition",
|
|
161
|
+
...config,
|
|
162
|
+
timestamp: new Date().toISOString()
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=acquisition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acquisition.js","sourceRoot":"","sources":["../../../../src/lib/features/enterprise/acquisition.ts"],"names":[],"mappings":"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"}
|