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,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Enterprise - Multi-Path Funnels & Micro-Conversions
|
|
3
|
+
* @module features/enterprise/multi-path-funnels
|
|
4
|
+
*
|
|
5
|
+
* @description
|
|
6
|
+
* Track complex user journeys and micro-conversions with support
|
|
7
|
+
* for non-linear funnel analysis and segment-based drop-off.
|
|
8
|
+
*
|
|
9
|
+
* @useCases
|
|
10
|
+
* - Define multi-path funnels
|
|
11
|
+
* - Track micro-conversions
|
|
12
|
+
* - Analyze drop-off by segment
|
|
13
|
+
* - Non-linear journey tracking
|
|
14
|
+
* - Onboarding step analysis
|
|
15
|
+
*
|
|
16
|
+
* @metrics
|
|
17
|
+
* - Path completion rates
|
|
18
|
+
* - Micro-conversion rates
|
|
19
|
+
* - Drop-off by segment
|
|
20
|
+
* - Time between steps
|
|
21
|
+
* - Alternative path analysis
|
|
22
|
+
*
|
|
23
|
+
* @chartData
|
|
24
|
+
* - Sankey diagram: User flow paths
|
|
25
|
+
* - Funnel chart: Multi-path visualization
|
|
26
|
+
* - Heatmap: Drop-off by segment
|
|
27
|
+
* - Timeline: Step progression
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const funnels = new MultiPathFunnels(webId, endpoint, apiKey);
|
|
32
|
+
*
|
|
33
|
+
* // Define a multi-path funnel
|
|
34
|
+
* await funnels.defineFunnel({
|
|
35
|
+
* name: 'Onboarding',
|
|
36
|
+
* paths: [
|
|
37
|
+
* { steps: ['signup', 'profile', 'first_action'] },
|
|
38
|
+
* { steps: ['signup', 'skip_profile', 'first_action'] }
|
|
39
|
+
* ]
|
|
40
|
+
* });
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
import { FlowGridTransport } from "../../client/transport";
|
|
44
|
+
// ============================================================================
|
|
45
|
+
// HELPER FUNCTIONS
|
|
46
|
+
// ============================================================================
|
|
47
|
+
/**
|
|
48
|
+
* Calculate funnel conversion rate.
|
|
49
|
+
*/
|
|
50
|
+
export function calculateConversionRate(entered, completed) {
|
|
51
|
+
if (entered === 0)
|
|
52
|
+
return 0;
|
|
53
|
+
return Math.round((completed / entered) * 10000) / 100;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Calculate drop-off rate between steps.
|
|
57
|
+
*/
|
|
58
|
+
export function calculateDropOffRate(previousStep, currentStep) {
|
|
59
|
+
if (previousStep === 0)
|
|
60
|
+
return 0;
|
|
61
|
+
return Math.round(((previousStep - currentStep) / previousStep) * 10000) / 100;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Find the best performing path.
|
|
65
|
+
*/
|
|
66
|
+
export function findBestPath(paths) {
|
|
67
|
+
if (paths.length === 0)
|
|
68
|
+
return null;
|
|
69
|
+
return paths.reduce((best, current) => current.completionRate > best.completionRate ? current : best);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Calculate weighted micro-conversion score.
|
|
73
|
+
*/
|
|
74
|
+
export function calculateMicroConversionScore(completedConversions, definitions) {
|
|
75
|
+
let totalWeight = 0;
|
|
76
|
+
let weightedScore = 0;
|
|
77
|
+
for (const def of definitions) {
|
|
78
|
+
const weight = def.weight ?? 1;
|
|
79
|
+
totalWeight += weight;
|
|
80
|
+
const completed = completedConversions.find(c => c.id === def.id);
|
|
81
|
+
if (completed) {
|
|
82
|
+
weightedScore += weight * completed.completionRate;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return totalWeight > 0 ? Math.round((weightedScore / totalWeight) * 100) / 100 : 0;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Generate path ID from steps.
|
|
89
|
+
*/
|
|
90
|
+
export function generatePathId(steps) {
|
|
91
|
+
return steps.join('_').toLowerCase().replace(/[^a-z0-9_]/g, '');
|
|
92
|
+
}
|
|
93
|
+
// ============================================================================
|
|
94
|
+
// MAIN CLASS
|
|
95
|
+
// ============================================================================
|
|
96
|
+
/**
|
|
97
|
+
* Multi-path funnels and micro-conversions class.
|
|
98
|
+
*/
|
|
99
|
+
export class MultiPathFunnels extends FlowGridTransport {
|
|
100
|
+
/**
|
|
101
|
+
* Define a multi-path funnel.
|
|
102
|
+
*/
|
|
103
|
+
async defineFunnel(definition) {
|
|
104
|
+
const funnelId = definition.funnelId ??
|
|
105
|
+
definition.name.toLowerCase().replace(/[^a-z0-9]+/g, '_');
|
|
106
|
+
const pathsWithIds = definition.paths.map(path => ({
|
|
107
|
+
...path,
|
|
108
|
+
pathId: path.pathId ?? generatePathId(path.steps)
|
|
109
|
+
}));
|
|
110
|
+
return await this.initFeature("multi_path_funnels.define", {
|
|
111
|
+
type: "multi_path_funnels",
|
|
112
|
+
funnelId,
|
|
113
|
+
name: definition.name,
|
|
114
|
+
description: definition.description,
|
|
115
|
+
paths: pathsWithIds,
|
|
116
|
+
microConversions: definition.microConversions,
|
|
117
|
+
goalEvent: definition.goalEvent,
|
|
118
|
+
timestamp: new Date().toISOString()
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Update funnel definition.
|
|
123
|
+
*/
|
|
124
|
+
async updateFunnel(funnelId, updates) {
|
|
125
|
+
return await this.initFeature("multi_path_funnels.update", {
|
|
126
|
+
type: "multi_path_funnels",
|
|
127
|
+
funnelId,
|
|
128
|
+
...updates,
|
|
129
|
+
timestamp: new Date().toISOString()
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Delete funnel.
|
|
134
|
+
*/
|
|
135
|
+
async deleteFunnel(funnelId) {
|
|
136
|
+
return await this.initFeature("multi_path_funnels.delete", {
|
|
137
|
+
type: "multi_path_funnels",
|
|
138
|
+
funnelId,
|
|
139
|
+
timestamp: new Date().toISOString()
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Track funnel step.
|
|
144
|
+
*/
|
|
145
|
+
async trackStep(config) {
|
|
146
|
+
return await this.initFeature("multi_path_funnels.track_step", {
|
|
147
|
+
type: "multi_path_funnels",
|
|
148
|
+
...config,
|
|
149
|
+
timestamp: new Date().toISOString()
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Track micro-conversion.
|
|
154
|
+
*/
|
|
155
|
+
async trackMicroConversion(config) {
|
|
156
|
+
return await this.initFeature("multi_path_funnels.track_micro_conversion", {
|
|
157
|
+
type: "multi_path_funnels",
|
|
158
|
+
...config,
|
|
159
|
+
timestamp: new Date().toISOString()
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Track goal completion.
|
|
164
|
+
*/
|
|
165
|
+
async trackGoal(funnelId, userId, properties) {
|
|
166
|
+
return await this.initFeature("multi_path_funnels.track_goal", {
|
|
167
|
+
type: "multi_path_funnels",
|
|
168
|
+
funnelId,
|
|
169
|
+
userId,
|
|
170
|
+
...properties,
|
|
171
|
+
timestamp: new Date().toISOString()
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Get funnel analysis.
|
|
176
|
+
*/
|
|
177
|
+
async analyzeFunnel(config) {
|
|
178
|
+
return await this.initFeature("multi_path_funnels.analyze", {
|
|
179
|
+
type: "multi_path_funnels",
|
|
180
|
+
...config,
|
|
181
|
+
timestamp: new Date().toISOString()
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Get path comparison.
|
|
186
|
+
*/
|
|
187
|
+
async comparePaths(funnelId, filter) {
|
|
188
|
+
return await this.initFeature("multi_path_funnels.compare_paths", {
|
|
189
|
+
type: "multi_path_funnels",
|
|
190
|
+
funnelId,
|
|
191
|
+
filter,
|
|
192
|
+
timestamp: new Date().toISOString()
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* List all funnels.
|
|
197
|
+
*/
|
|
198
|
+
async listFunnels() {
|
|
199
|
+
return await this.initFeature("multi_path_funnels.list", {
|
|
200
|
+
type: "multi_path_funnels",
|
|
201
|
+
timestamp: new Date().toISOString()
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=multi-path-funnels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-path-funnels.js","sourceRoot":"","sources":["../../../../src/lib/features/enterprise/multi-path-funnels.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
* ```
|
|
40
40
|
*/
|
|
41
41
|
import { FlowGridTransport } from "../../client/transport";
|
|
42
|
-
import { DateRangeFilter
|
|
42
|
+
import { DateRangeFilter } from "../../types";
|
|
43
43
|
/**
|
|
44
44
|
* Screen/page transition configuration.
|
|
45
45
|
*/
|
|
@@ -270,63 +270,8 @@ export declare class PathAnalytics extends FlowGridTransport {
|
|
|
270
270
|
definePath(definition: PathDefinition): Promise<{
|
|
271
271
|
pathId: string;
|
|
272
272
|
}>;
|
|
273
|
-
/**
|
|
274
|
-
* Get top paths.
|
|
275
|
-
*/
|
|
276
|
-
getTopPaths(config?: PathAnalysisConfig): Promise<PathResult[]>;
|
|
277
|
-
/**
|
|
278
|
-
* Get paths between screens.
|
|
279
|
-
*/
|
|
280
|
-
getPathsBetween(startScreen: string, endScreen: string, filter?: DateRangeFilter, limit?: number): Promise<PathResult[]>;
|
|
281
|
-
/**
|
|
282
|
-
* Get dead-end screens.
|
|
283
|
-
*/
|
|
284
|
-
getDeadEnds(filter?: DateRangeFilter, intendedEndPoints?: string[]): Promise<DeadEndScreen[]>;
|
|
285
|
-
/**
|
|
286
|
-
* Get transition matrix.
|
|
287
|
-
*/
|
|
288
|
-
getTransitionMatrix(filter?: DateRangeFilter): Promise<TransitionMatrix>;
|
|
289
|
-
/**
|
|
290
|
-
* Get user journey.
|
|
291
|
-
*/
|
|
292
|
-
getUserJourney(config: UserJourneyConfig): Promise<UserJourney>;
|
|
293
|
-
/**
|
|
294
|
-
* Get friction points.
|
|
295
|
-
*/
|
|
296
|
-
getFrictionPoints(filter?: DateRangeFilter): Promise<FrictionPoint[]>;
|
|
297
273
|
/**
|
|
298
274
|
* Compare paths.
|
|
299
275
|
*/
|
|
300
276
|
comparePaths(paths: string[][], filter?: DateRangeFilter): Promise<PathComparison>;
|
|
301
|
-
/**
|
|
302
|
-
* Get screen analytics.
|
|
303
|
-
*/
|
|
304
|
-
getScreenAnalytics(screen: string, filter?: DateRangeFilter): Promise<{
|
|
305
|
-
screen: string;
|
|
306
|
-
visits: number;
|
|
307
|
-
uniqueUsers: number;
|
|
308
|
-
avgTimeSpentMs: number;
|
|
309
|
-
exitRate: number;
|
|
310
|
-
entryRate: number;
|
|
311
|
-
topNextScreens: Array<{
|
|
312
|
-
screen: string;
|
|
313
|
-
count: number;
|
|
314
|
-
}>;
|
|
315
|
-
topPreviousScreens: Array<{
|
|
316
|
-
screen: string;
|
|
317
|
-
count: number;
|
|
318
|
-
}>;
|
|
319
|
-
}>;
|
|
320
|
-
/**
|
|
321
|
-
* Get path trend.
|
|
322
|
-
*/
|
|
323
|
-
getPathTrend(path: string[], filter?: DateRangeFilter, granularity?: TimeGranularity): Promise<TimeSeriesData>;
|
|
324
|
-
/**
|
|
325
|
-
* Get feature usage sequences.
|
|
326
|
-
*/
|
|
327
|
-
getFeatureSequences(filter?: DateRangeFilter, limit?: number): Promise<Array<{
|
|
328
|
-
sequence: string[];
|
|
329
|
-
userCount: number;
|
|
330
|
-
avgTimeMs: number;
|
|
331
|
-
}>>;
|
|
332
277
|
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Enterprise - Behavioral Analytics & Path Analysis
|
|
3
|
+
* @module features/enterprise/paths
|
|
4
|
+
*
|
|
5
|
+
* @description
|
|
6
|
+
* Track full user navigation and feature usage sequences.
|
|
7
|
+
* Identify common paths, dead-ends, and UX friction points.
|
|
8
|
+
*
|
|
9
|
+
* @useCases
|
|
10
|
+
* - Sequence analysis of feature usage
|
|
11
|
+
* - Dead-end screen detection
|
|
12
|
+
* - Most common path identification
|
|
13
|
+
* - User journey mapping
|
|
14
|
+
* - UX friction detection
|
|
15
|
+
*
|
|
16
|
+
* @metrics
|
|
17
|
+
* - Path frequency
|
|
18
|
+
* - Path completion rate
|
|
19
|
+
* - Dead-end rate
|
|
20
|
+
* - Average path length
|
|
21
|
+
* - Time per path
|
|
22
|
+
*
|
|
23
|
+
* @chartData
|
|
24
|
+
* - Sankey diagram: User flow
|
|
25
|
+
* - Tree map: Path distribution
|
|
26
|
+
* - Heatmap: Screen transitions
|
|
27
|
+
* - Timeline: User journeys
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const paths = new PathAnalytics(webId, endpoint, apiKey);
|
|
32
|
+
*
|
|
33
|
+
* // Track screen/page transition
|
|
34
|
+
* await paths.trackTransition({
|
|
35
|
+
* userId: 'user_123',
|
|
36
|
+
* fromScreen: 'dashboard',
|
|
37
|
+
* toScreen: 'settings'
|
|
38
|
+
* });
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
import { FlowGridTransport } from "../../client/transport";
|
|
42
|
+
// ============================================================================
|
|
43
|
+
// HELPER FUNCTIONS
|
|
44
|
+
// ============================================================================
|
|
45
|
+
/**
|
|
46
|
+
* Convert path array to string identifier.
|
|
47
|
+
*/
|
|
48
|
+
export function pathToString(path) {
|
|
49
|
+
return path.join(' → ');
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Convert string identifier to path array.
|
|
53
|
+
*/
|
|
54
|
+
export function stringToPath(pathString) {
|
|
55
|
+
return pathString.split(' → ').map(s => s.trim());
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Calculate exit rate.
|
|
59
|
+
*/
|
|
60
|
+
export function calculateExitRate(exits, entries) {
|
|
61
|
+
if (entries === 0)
|
|
62
|
+
return 0;
|
|
63
|
+
return Math.round((exits / entries) * 10000) / 100;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Identify if a screen is a dead-end.
|
|
67
|
+
*/
|
|
68
|
+
export function isDeadEnd(exitRate, isIntendedEndPoint, threshold = 50) {
|
|
69
|
+
return exitRate > threshold && !isIntendedEndPoint;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Calculate path similarity (Jaccard index).
|
|
73
|
+
*/
|
|
74
|
+
export function calculatePathSimilarity(path1, path2) {
|
|
75
|
+
const set1 = new Set(path1);
|
|
76
|
+
const set2 = new Set(path2);
|
|
77
|
+
const intersection = new Set([...set1].filter(x => set2.has(x)));
|
|
78
|
+
const union = new Set([...set1, ...set2]);
|
|
79
|
+
return intersection.size / union.size;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Find common sub-paths.
|
|
83
|
+
*/
|
|
84
|
+
export function findCommonSubPaths(paths, minLength = 2) {
|
|
85
|
+
const subPathCounts = new Map();
|
|
86
|
+
for (const path of paths) {
|
|
87
|
+
for (let i = 0; i <= path.length - minLength; i++) {
|
|
88
|
+
for (let j = i + minLength; j <= path.length; j++) {
|
|
89
|
+
const subPath = path.slice(i, j);
|
|
90
|
+
const key = pathToString(subPath);
|
|
91
|
+
subPathCounts.set(key, (subPathCounts.get(key) ?? 0) + 1);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return Array.from(subPathCounts.entries())
|
|
96
|
+
.filter(([, count]) => count > 1)
|
|
97
|
+
.map(([key, count]) => ({ subPath: stringToPath(key), count }))
|
|
98
|
+
.sort((a, b) => b.count - a.count);
|
|
99
|
+
}
|
|
100
|
+
// ============================================================================
|
|
101
|
+
// MAIN CLASS
|
|
102
|
+
// ============================================================================
|
|
103
|
+
/**
|
|
104
|
+
* Behavioral analytics and path analysis class.
|
|
105
|
+
*/
|
|
106
|
+
export class PathAnalytics extends FlowGridTransport {
|
|
107
|
+
/**
|
|
108
|
+
* Track screen/page transition.
|
|
109
|
+
*/
|
|
110
|
+
async trackTransition(config) {
|
|
111
|
+
return await this.initFeature("paths.transition", {
|
|
112
|
+
type: "paths",
|
|
113
|
+
...config,
|
|
114
|
+
timestamp: new Date().toISOString()
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Track feature sequence.
|
|
119
|
+
*/
|
|
120
|
+
async trackFeatureSequence(config) {
|
|
121
|
+
return await this.initFeature("paths.feature_sequence", {
|
|
122
|
+
type: "paths",
|
|
123
|
+
...config,
|
|
124
|
+
timestamp: new Date().toISOString()
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Define a path for tracking.
|
|
129
|
+
*/
|
|
130
|
+
async definePath(definition) {
|
|
131
|
+
return await this.initFeature("paths.define_path", {
|
|
132
|
+
type: "paths",
|
|
133
|
+
...definition,
|
|
134
|
+
timestamp: new Date().toISOString()
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Compare paths.
|
|
139
|
+
*/
|
|
140
|
+
async comparePaths(paths, filter) {
|
|
141
|
+
return await this.initFeature("paths.compare_paths", {
|
|
142
|
+
type: "paths",
|
|
143
|
+
paths,
|
|
144
|
+
filter,
|
|
145
|
+
timestamp: new Date().toISOString()
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../../src/lib/features/enterprise/paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
* ```
|
|
40
40
|
*/
|
|
41
41
|
import { FlowGridTransport } from "../../client/transport";
|
|
42
|
-
import { DateRangeFilter, TimeSeriesData
|
|
42
|
+
import { DateRangeFilter, TimeSeriesData } from "../../types";
|
|
43
43
|
/**
|
|
44
44
|
* Security event types.
|
|
45
45
|
*/
|
|
@@ -71,6 +71,8 @@ export interface LoginAttemptConfig {
|
|
|
71
71
|
};
|
|
72
72
|
/** MFA used */
|
|
73
73
|
mfaUsed?: boolean;
|
|
74
|
+
/** Custom properties */
|
|
75
|
+
properties?: Record<string, unknown>;
|
|
74
76
|
}
|
|
75
77
|
/**
|
|
76
78
|
* Role change configuration.
|
|
@@ -118,6 +120,8 @@ export interface DataAccessConfig {
|
|
|
118
120
|
ipAddress?: string;
|
|
119
121
|
/** Query/filter used */
|
|
120
122
|
query?: Record<string, unknown>;
|
|
123
|
+
/** Custom properties */
|
|
124
|
+
properties?: Record<string, unknown>;
|
|
121
125
|
}
|
|
122
126
|
/**
|
|
123
127
|
* Compliance event configuration.
|
|
@@ -135,6 +139,8 @@ export interface ComplianceEventConfig {
|
|
|
135
139
|
consentScope?: string[];
|
|
136
140
|
/** Request ID (for data requests) */
|
|
137
141
|
requestId?: string;
|
|
142
|
+
/** Custom properties */
|
|
143
|
+
properties?: Record<string, unknown>;
|
|
138
144
|
}
|
|
139
145
|
/**
|
|
140
146
|
* Audit log entry.
|
|
@@ -202,7 +208,7 @@ export interface SecurityRiskAssessment {
|
|
|
202
208
|
/**
|
|
203
209
|
* Security analytics result.
|
|
204
210
|
*/
|
|
205
|
-
export interface
|
|
211
|
+
export interface SecurityAnalyticsResult {
|
|
206
212
|
/** Total security events */
|
|
207
213
|
totalEvents: number;
|
|
208
214
|
/** Failed login count */
|
|
@@ -329,59 +335,4 @@ export declare class SecurityAnalytics extends FlowGridTransport {
|
|
|
329
335
|
trackComplianceEvent(config: ComplianceEventConfig): Promise<{
|
|
330
336
|
tracked: boolean;
|
|
331
337
|
}>;
|
|
332
|
-
/**
|
|
333
|
-
* Get audit log.
|
|
334
|
-
*/
|
|
335
|
-
getAuditLog(filter?: SecurityAnalyticsFilter, limit?: number): Promise<{
|
|
336
|
-
entries: AuditLogEntry[];
|
|
337
|
-
total: number;
|
|
338
|
-
}>;
|
|
339
|
-
/**
|
|
340
|
-
* Get user risk assessment.
|
|
341
|
-
*/
|
|
342
|
-
getUserRiskAssessment(userId: string): Promise<SecurityRiskAssessment>;
|
|
343
|
-
/**
|
|
344
|
-
* Get high risk users.
|
|
345
|
-
*/
|
|
346
|
-
getHighRiskUsers(minScore?: number, limit?: number): Promise<SecurityRiskAssessment[]>;
|
|
347
|
-
/**
|
|
348
|
-
* Get security analytics.
|
|
349
|
-
*/
|
|
350
|
-
getAnalytics(filter?: SecurityAnalyticsFilter): Promise<SecurityAnalytics>;
|
|
351
|
-
/**
|
|
352
|
-
* Get compliance report.
|
|
353
|
-
*/
|
|
354
|
-
getComplianceReport(regulation: 'GDPR' | 'CCPA' | 'HIPAA' | 'SOC2', filter?: DateRangeFilter): Promise<ComplianceReport>;
|
|
355
|
-
/**
|
|
356
|
-
* Get login analytics.
|
|
357
|
-
*/
|
|
358
|
-
getLoginAnalytics(filter?: DateRangeFilter): Promise<{
|
|
359
|
-
totalAttempts: number;
|
|
360
|
-
successful: number;
|
|
361
|
-
failed: number;
|
|
362
|
-
failedRate: number;
|
|
363
|
-
uniqueUsers: number;
|
|
364
|
-
byLocation: Array<{
|
|
365
|
-
location: string;
|
|
366
|
-
count: number;
|
|
367
|
-
}>;
|
|
368
|
-
byDevice: Array<{
|
|
369
|
-
device: string;
|
|
370
|
-
count: number;
|
|
371
|
-
}>;
|
|
372
|
-
trend: TimeSeriesData;
|
|
373
|
-
}>;
|
|
374
|
-
/**
|
|
375
|
-
* Get security trend.
|
|
376
|
-
*/
|
|
377
|
-
getSecurityTrend(filter?: SecurityAnalyticsFilter, granularity?: TimeGranularity): Promise<TimeSeriesData>;
|
|
378
|
-
/**
|
|
379
|
-
* Get data access patterns.
|
|
380
|
-
*/
|
|
381
|
-
getDataAccessPatterns(userId?: string, filter?: DateRangeFilter): Promise<Array<{
|
|
382
|
-
resourceType: string;
|
|
383
|
-
accessCount: number;
|
|
384
|
-
uniqueUsers: number;
|
|
385
|
-
lastAccess: string;
|
|
386
|
-
}>>;
|
|
387
338
|
}
|