flowgrid-sdk 1.4.1 → 1.5.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 +17 -29
- package/dist/browser.js +12 -9
- package/dist/browser.js.map +1 -1
- package/dist/flowgrid-enterprise.flowgrid.chunk.js +2 -0
- package/dist/flowgrid-enterprise.flowgrid.chunk.js.map +1 -0
- package/dist/flowgrid-replay.flowgrid.chunk.js +3 -0
- package/dist/flowgrid-replay.flowgrid.chunk.js.LICENSE.txt +14 -0
- package/dist/flowgrid-replay.flowgrid.chunk.js.map +1 -0
- package/dist/flowgrid-vitals.flowgrid.chunk.js +2 -0
- package/dist/flowgrid-vitals.flowgrid.chunk.js.map +1 -0
- package/dist/flowgrid.min.js +1 -1
- package/dist/flowgrid.min.js.LICENSE.txt +14 -0
- package/dist/flowgrid.min.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +63 -10
- package/dist/index.js.map +1 -1
- package/dist/lib/client/transport.js +5 -1
- package/dist/lib/client/transport.js.map +1 -1
- package/dist/lib/consent/index.js +5 -1
- package/dist/lib/consent/index.js.map +1 -1
- package/dist/lib/consent/manager.js +5 -1
- package/dist/lib/consent/manager.js.map +1 -1
- package/dist/lib/consent/types.js +2 -1
- package/dist/lib/consent/types.js.map +1 -1
- package/dist/lib/features/analytics/attribution.js +11 -7
- package/dist/lib/features/analytics/attribution.js.map +1 -1
- package/dist/lib/features/analytics/events.js +7 -3
- package/dist/lib/features/analytics/events.js.map +1 -1
- package/dist/lib/features/analytics/funnels.js +7 -3
- package/dist/lib/features/analytics/funnels.js.map +1 -1
- package/dist/lib/features/analytics/heatmaps.js +12 -8
- package/dist/lib/features/analytics/heatmaps.js.map +1 -1
- package/dist/lib/features/analytics/identify.js +7 -3
- package/dist/lib/features/analytics/identify.js.map +1 -1
- package/dist/lib/features/analytics/index.js +24 -10
- package/dist/lib/features/analytics/index.js.map +1 -1
- package/dist/lib/features/analytics/page-views.js +12 -8
- package/dist/lib/features/analytics/page-views.js.map +1 -1
- package/dist/lib/features/analytics/performance.js +46 -9
- package/dist/lib/features/analytics/performance.js.map +1 -1
- package/dist/lib/features/analytics/replay.js +46 -9
- package/dist/lib/features/analytics/replay.js.map +1 -1
- package/dist/lib/features/analytics/retention.js +7 -3
- package/dist/lib/features/analytics/retention.js.map +1 -1
- package/dist/lib/features/analytics/sessions.js +12 -8
- package/dist/lib/features/analytics/sessions.js.map +1 -1
- package/dist/lib/features/core/activation.js +7 -3
- package/dist/lib/features/core/activation.js.map +1 -1
- package/dist/lib/features/core/experiment.js +9 -5
- package/dist/lib/features/core/experiment.js.map +1 -1
- package/dist/lib/features/core/index.js +11 -4
- package/dist/lib/features/core/index.js.map +1 -1
- package/dist/lib/features/core/track-feature.js +7 -3
- package/dist/lib/features/core/track-feature.js.map +1 -1
- package/dist/lib/features/core/track-prompt.js +7 -3
- package/dist/lib/features/core/track-prompt.js.map +1 -1
- package/dist/lib/features/ecommerce/cart.js +7 -3
- package/dist/lib/features/ecommerce/cart.js.map +1 -1
- package/dist/lib/features/ecommerce/checkout.js +7 -3
- package/dist/lib/features/ecommerce/checkout.js.map +1 -1
- package/dist/lib/features/ecommerce/index.js +23 -10
- package/dist/lib/features/ecommerce/index.js.map +1 -1
- package/dist/lib/features/ecommerce/ltv.js +7 -3
- package/dist/lib/features/ecommerce/ltv.js.map +1 -1
- package/dist/lib/features/ecommerce/products.js +7 -3
- package/dist/lib/features/ecommerce/products.js.map +1 -1
- package/dist/lib/features/ecommerce/promotions.js +7 -3
- package/dist/lib/features/ecommerce/promotions.js.map +1 -1
- package/dist/lib/features/ecommerce/purchases.js +7 -3
- package/dist/lib/features/ecommerce/purchases.js.map +1 -1
- package/dist/lib/features/ecommerce/refunds.js +7 -3
- package/dist/lib/features/ecommerce/refunds.js.map +1 -1
- package/dist/lib/features/ecommerce/search.js +7 -3
- package/dist/lib/features/ecommerce/search.js.map +1 -1
- package/dist/lib/features/ecommerce/subscriptions.js +7 -3
- package/dist/lib/features/ecommerce/subscriptions.js.map +1 -1
- package/dist/lib/features/ecommerce/wishlist.js +7 -3
- package/dist/lib/features/ecommerce/wishlist.js.map +1 -1
- package/dist/lib/features/enterprise/acquisition.js +16 -7
- package/dist/lib/features/enterprise/acquisition.js.map +1 -1
- package/dist/lib/features/enterprise/alerts.js +18 -8
- package/dist/lib/features/enterprise/alerts.js.map +1 -1
- package/dist/lib/features/enterprise/churn.js +12 -5
- package/dist/lib/features/enterprise/churn.js.map +1 -1
- package/dist/lib/features/enterprise/cohorts.js +10 -4
- package/dist/lib/features/enterprise/cohorts.js.map +1 -1
- package/dist/lib/features/enterprise/engagement.js +19 -12
- package/dist/lib/features/enterprise/engagement.js.map +1 -1
- package/dist/lib/features/enterprise/forecasting.js +18 -8
- package/dist/lib/features/enterprise/forecasting.js.map +1 -1
- package/dist/lib/features/enterprise/index.js +75 -22
- package/dist/lib/features/enterprise/index.js.map +1 -1
- package/dist/lib/features/enterprise/monetization.js +16 -7
- package/dist/lib/features/enterprise/monetization.js.map +1 -1
- package/dist/lib/features/enterprise/multi-path-funnels.js +16 -7
- package/dist/lib/features/enterprise/multi-path-funnels.js.map +1 -1
- package/dist/lib/features/enterprise/paths.js +18 -8
- package/dist/lib/features/enterprise/paths.js.map +1 -1
- package/dist/lib/features/enterprise/security.js +14 -6
- package/dist/lib/features/enterprise/security.js.map +1 -1
- package/dist/lib/features/enterprise/support.js +14 -6
- package/dist/lib/features/enterprise/support.js.map +1 -1
- package/dist/lib/flowgrid.d.ts +734 -10
- package/dist/lib/flowgrid.js +801 -60
- package/dist/lib/flowgrid.js.map +1 -1
- package/dist/lib/tracking/analytics/attribution.d.ts +3 -3
- package/dist/lib/tracking/analytics/attribution.js +5 -1
- package/dist/lib/tracking/analytics/attribution.js.map +1 -1
- package/dist/lib/tracking/analytics/events.d.ts +6 -6
- package/dist/lib/tracking/analytics/events.js +5 -1
- package/dist/lib/tracking/analytics/events.js.map +1 -1
- package/dist/lib/tracking/analytics/funnels.d.ts +4 -4
- package/dist/lib/tracking/analytics/funnels.js +5 -1
- package/dist/lib/tracking/analytics/funnels.js.map +1 -1
- package/dist/lib/tracking/analytics/heatmaps.d.ts +3 -3
- package/dist/lib/tracking/analytics/heatmaps.js +5 -1
- package/dist/lib/tracking/analytics/heatmaps.js.map +1 -1
- package/dist/lib/tracking/analytics/identify.d.ts +4 -4
- package/dist/lib/tracking/analytics/identify.js +5 -1
- package/dist/lib/tracking/analytics/identify.js.map +1 -1
- package/dist/lib/tracking/analytics/index.js +23 -10
- package/dist/lib/tracking/analytics/index.js.map +1 -1
- package/dist/lib/tracking/analytics/page-views.d.ts +4 -4
- package/dist/lib/tracking/analytics/page-views.js +5 -1
- package/dist/lib/tracking/analytics/page-views.js.map +1 -1
- package/dist/lib/tracking/analytics/performance.d.ts +3 -3
- package/dist/lib/tracking/analytics/performance.js +5 -1
- package/dist/lib/tracking/analytics/performance.js.map +1 -1
- package/dist/lib/tracking/analytics/replay.js +5 -1
- package/dist/lib/tracking/analytics/replay.js.map +1 -1
- package/dist/lib/tracking/analytics/retention.d.ts +1 -1
- package/dist/lib/tracking/analytics/retention.js +5 -1
- package/dist/lib/tracking/analytics/retention.js.map +1 -1
- package/dist/lib/tracking/analytics/sessions.d.ts +4 -4
- package/dist/lib/tracking/analytics/sessions.js +5 -1
- package/dist/lib/tracking/analytics/sessions.js.map +1 -1
- package/dist/lib/tracking/core/activation.d.ts +5 -5
- package/dist/lib/tracking/core/activation.js +5 -1
- package/dist/lib/tracking/core/activation.js.map +1 -1
- package/dist/lib/tracking/core/experiment.d.ts +4 -4
- package/dist/lib/tracking/core/experiment.js +5 -1
- package/dist/lib/tracking/core/experiment.js.map +1 -1
- package/dist/lib/tracking/core/feature.d.ts +2 -2
- package/dist/lib/tracking/core/feature.js +5 -1
- package/dist/lib/tracking/core/feature.js.map +1 -1
- package/dist/lib/tracking/core/index.js +11 -4
- package/dist/lib/tracking/core/index.js.map +1 -1
- package/dist/lib/tracking/core/prompt.d.ts +5 -5
- package/dist/lib/tracking/core/prompt.js +5 -1
- package/dist/lib/tracking/core/prompt.js.map +1 -1
- package/dist/lib/tracking/ecommerce/cart.d.ts +4 -4
- package/dist/lib/tracking/ecommerce/cart.js +5 -1
- package/dist/lib/tracking/ecommerce/cart.js.map +1 -1
- package/dist/lib/tracking/ecommerce/checkout.d.ts +4 -4
- package/dist/lib/tracking/ecommerce/checkout.js +5 -1
- package/dist/lib/tracking/ecommerce/checkout.js.map +1 -1
- package/dist/lib/tracking/ecommerce/index.js +23 -10
- package/dist/lib/tracking/ecommerce/index.js.map +1 -1
- package/dist/lib/tracking/ecommerce/ltv.d.ts +2 -2
- package/dist/lib/tracking/ecommerce/ltv.js +5 -1
- package/dist/lib/tracking/ecommerce/ltv.js.map +1 -1
- package/dist/lib/tracking/ecommerce/products.d.ts +3 -3
- package/dist/lib/tracking/ecommerce/products.js +5 -1
- package/dist/lib/tracking/ecommerce/products.js.map +1 -1
- package/dist/lib/tracking/ecommerce/promotions.d.ts +3 -3
- package/dist/lib/tracking/ecommerce/promotions.js +5 -1
- package/dist/lib/tracking/ecommerce/promotions.js.map +1 -1
- package/dist/lib/tracking/ecommerce/purchases.d.ts +1 -1
- package/dist/lib/tracking/ecommerce/purchases.js +5 -1
- package/dist/lib/tracking/ecommerce/purchases.js.map +1 -1
- package/dist/lib/tracking/ecommerce/refunds.d.ts +4 -4
- package/dist/lib/tracking/ecommerce/refunds.js +5 -1
- package/dist/lib/tracking/ecommerce/refunds.js.map +1 -1
- package/dist/lib/tracking/ecommerce/search.d.ts +4 -4
- package/dist/lib/tracking/ecommerce/search.js +5 -1
- package/dist/lib/tracking/ecommerce/search.js.map +1 -1
- package/dist/lib/tracking/ecommerce/subscriptions.d.ts +6 -6
- package/dist/lib/tracking/ecommerce/subscriptions.js +5 -1
- package/dist/lib/tracking/ecommerce/subscriptions.js.map +1 -1
- package/dist/lib/tracking/ecommerce/wishlist.d.ts +5 -5
- package/dist/lib/tracking/ecommerce/wishlist.js +5 -1
- package/dist/lib/tracking/ecommerce/wishlist.js.map +1 -1
- package/dist/lib/tracking/enterprise/acquisition.js +5 -1
- package/dist/lib/tracking/enterprise/acquisition.js.map +1 -1
- package/dist/lib/tracking/enterprise/alerts.js +5 -1
- package/dist/lib/tracking/enterprise/alerts.js.map +1 -1
- package/dist/lib/tracking/enterprise/churn.d.ts +1 -1
- package/dist/lib/tracking/enterprise/churn.js +5 -1
- package/dist/lib/tracking/enterprise/churn.js.map +1 -1
- package/dist/lib/tracking/enterprise/cohorts.d.ts +1 -1
- package/dist/lib/tracking/enterprise/cohorts.js +5 -1
- package/dist/lib/tracking/enterprise/cohorts.js.map +1 -1
- package/dist/lib/tracking/enterprise/engagement.d.ts +4 -4
- package/dist/lib/tracking/enterprise/engagement.js +5 -1
- package/dist/lib/tracking/enterprise/engagement.js.map +1 -1
- package/dist/lib/tracking/enterprise/forecasting.d.ts +4 -4
- package/dist/lib/tracking/enterprise/forecasting.js +5 -1
- package/dist/lib/tracking/enterprise/forecasting.js.map +1 -1
- package/dist/lib/tracking/enterprise/index.js +25 -11
- package/dist/lib/tracking/enterprise/index.js.map +1 -1
- package/dist/lib/tracking/enterprise/monetization.js +5 -1
- package/dist/lib/tracking/enterprise/monetization.js.map +1 -1
- package/dist/lib/tracking/enterprise/multi-path-funnels.js +5 -1
- package/dist/lib/tracking/enterprise/multi-path-funnels.js.map +1 -1
- package/dist/lib/tracking/enterprise/paths.js +5 -1
- package/dist/lib/tracking/enterprise/paths.js.map +1 -1
- package/dist/lib/tracking/enterprise/security.js +5 -1
- package/dist/lib/tracking/enterprise/security.js.map +1 -1
- package/dist/lib/tracking/enterprise/support.js +5 -1
- package/dist/lib/tracking/enterprise/support.js.map +1 -1
- package/dist/lib/tracking/index.js +20 -4
- package/dist/lib/tracking/index.js.map +1 -1
- package/dist/lib/types/analytics.js +2 -1
- package/dist/lib/types/analytics.js.map +1 -1
- package/dist/lib/types/common.js +2 -1
- package/dist/lib/types/common.js.map +1 -1
- package/dist/lib/types/ecommerce.js +2 -1
- package/dist/lib/types/ecommerce.js.map +1 -1
- package/dist/lib/types/index.js +19 -3
- package/dist/lib/types/index.js.map +1 -1
- package/dist/lib/utils/browser.js +10 -4
- package/dist/lib/utils/browser.js.map +1 -1
- package/dist/lib/utils/identity.js +8 -4
- package/dist/lib/utils/identity.js.map +1 -1
- package/dist/lib/utils/storage.js +14 -6
- package/dist/lib/utils/storage.js.map +1 -1
- package/dist/umd/index.js +2 -1
- package/dist/umd/index.js.LICENSE.txt +14 -0
- package/dist/umd/index.js.map +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -14,19 +14,18 @@ import { FlowGrid } from "flowgrid-sdk";
|
|
|
14
14
|
|
|
15
15
|
// One line. Sane defaults. Auto-instruments sessions, page views,
|
|
16
16
|
// performance, heatmaps, and attribution out of the box.
|
|
17
|
-
const fg = FlowGrid.init({
|
|
18
|
-
|
|
19
|
-
// Opt in to session replay (rrweb) when you want it:
|
|
20
|
-
FlowGrid.init({
|
|
17
|
+
const fg = FlowGrid.init({
|
|
21
18
|
webId: "wx_123",
|
|
22
19
|
apiKey: "pk_xxx",
|
|
23
20
|
user: { userId: "u_1", traits: { plan: "pro" } },
|
|
21
|
+
// Opt in to session replay (rrweb) when you want it.
|
|
24
22
|
replay: { sampleRate: 0.25, maskAllInputs: true },
|
|
25
23
|
});
|
|
26
24
|
|
|
27
25
|
await fg.track("signup_completed", { plan: "pro" });
|
|
28
|
-
await fg.
|
|
29
|
-
await fg.
|
|
26
|
+
await fg.track("feature_used", { featureId: "export", featureName: "Data Export", userId: "u_1" });
|
|
27
|
+
await fg.track("experiment_exposure", { experimentId: "checkout_v2", variantId: "B", userId: "u_1" });
|
|
28
|
+
await fg.track("add_to_cart", { productId: "sku_1", name: "T-Shirt", price: 29, currency: "USD", quantity: 1 });
|
|
30
29
|
```
|
|
31
30
|
|
|
32
31
|
|
|
@@ -65,32 +64,21 @@ Requires Node `>= 18.12`. No peer dependencies.
|
|
|
65
64
|
```ts
|
|
66
65
|
import { FlowGrid } from "flowgrid-sdk";
|
|
67
66
|
|
|
68
|
-
const fg =
|
|
69
|
-
"web_123",
|
|
70
|
-
"
|
|
71
|
-
|
|
72
|
-
);
|
|
73
|
-
|
|
74
|
-
// Analytics
|
|
75
|
-
await fg.pageViews.track({ url: "/pricing", title: "Pricing" });
|
|
76
|
-
await fg.events.track({ eventName: "cta_click", properties: { id: "hero" } });
|
|
77
|
-
await fg.identify.identify({ userId: "u_1", traits: { plan: "pro" } });
|
|
78
|
-
|
|
79
|
-
// Ecommerce
|
|
80
|
-
await fg.cart.addItem({
|
|
81
|
-
product: { productId: "sku_1", name: "Widget", price: 29.99, currency: "USD" },
|
|
82
|
-
quantity: 1,
|
|
83
|
-
cartId: "cart_abc",
|
|
67
|
+
const fg = FlowGrid.init({
|
|
68
|
+
webId: "web_123",
|
|
69
|
+
apiKey: "key_xxx",
|
|
70
|
+
autoTrack: { heatmaps: { movement: true } },
|
|
84
71
|
});
|
|
85
72
|
|
|
86
|
-
//
|
|
87
|
-
|
|
88
|
-
experimentId: "checkout_v2",
|
|
89
|
-
userId: "u_1",
|
|
90
|
-
});
|
|
73
|
+
// Plain custom events still work.
|
|
74
|
+
await fg.track("cta_click", { id: "hero" }, { userId: "u_1" });
|
|
91
75
|
|
|
92
|
-
//
|
|
93
|
-
await fg.
|
|
76
|
+
// Recognized event names route to the matching feature module.
|
|
77
|
+
await fg.track("feature_used", { featureId: "export", featureName: "Data Export", userId: "u_1" });
|
|
78
|
+
await fg.track("prompt_submitted", { promptId: "p_1", promptType: "chat", userId: "u_1" });
|
|
79
|
+
await fg.track("experiment_conversion", { experimentId: "checkout_v2", variantId: "B", userId: "u_1", metricName: "purchase" });
|
|
80
|
+
await fg.track("purchase", { order });
|
|
81
|
+
await fg.track("support.ticket_created", { ticketId: "t_1", userId: "u_1", subject: "Help", category: "billing", priority: "medium", channel: "email" });
|
|
94
82
|
```
|
|
95
83
|
|
|
96
84
|
Available namespaces on `FlowGrid`:
|
package/dist/browser.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* @fileoverview FlowGrid SDK - Browser Bundle
|
|
3
4
|
* @module browser
|
|
@@ -18,9 +19,12 @@
|
|
|
18
19
|
* </script>
|
|
19
20
|
* ```
|
|
20
21
|
*/
|
|
21
|
-
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.FlowGrid = void 0;
|
|
24
|
+
const flowgrid_1 = require("./lib/flowgrid");
|
|
25
|
+
Object.defineProperty(exports, "FlowGrid", { enumerable: true, get: function () { return flowgrid_1.FlowGrid; } });
|
|
22
26
|
function getInstance() {
|
|
23
|
-
const instance = FlowGrid.instance();
|
|
27
|
+
const instance = flowgrid_1.FlowGrid.instance();
|
|
24
28
|
if (!instance) {
|
|
25
29
|
throw new Error("FlowGrid not initialized. Call FlowGrid.init() first.");
|
|
26
30
|
}
|
|
@@ -54,19 +58,19 @@ function normalizeOrder(order) {
|
|
|
54
58
|
}
|
|
55
59
|
const browserFlowGrid = {
|
|
56
60
|
init(config) {
|
|
57
|
-
return FlowGrid.init(config);
|
|
61
|
+
return flowgrid_1.FlowGrid.init(config);
|
|
58
62
|
},
|
|
59
63
|
instance() {
|
|
60
|
-
return FlowGrid.instance();
|
|
64
|
+
return flowgrid_1.FlowGrid.instance();
|
|
61
65
|
},
|
|
62
66
|
reset() {
|
|
63
|
-
FlowGrid.reset();
|
|
67
|
+
flowgrid_1.FlowGrid.reset();
|
|
64
68
|
},
|
|
65
69
|
setConsent(consent) {
|
|
66
|
-
FlowGrid.setConsent(consent);
|
|
70
|
+
flowgrid_1.FlowGrid.setConsent(consent);
|
|
67
71
|
},
|
|
68
72
|
hasConsent(category) {
|
|
69
|
-
return FlowGrid.hasConsent(category);
|
|
73
|
+
return flowgrid_1.FlowGrid.hasConsent(category);
|
|
70
74
|
},
|
|
71
75
|
autoTrack(options) {
|
|
72
76
|
return getInstance().autoTrack(options);
|
|
@@ -97,6 +101,5 @@ if (typeof window !== "undefined") {
|
|
|
97
101
|
window.FlowGrid = browserFlowGrid;
|
|
98
102
|
window.flowgrid = browserFlowGrid;
|
|
99
103
|
}
|
|
100
|
-
|
|
101
|
-
export default browserFlowGrid;
|
|
104
|
+
exports.default = browserFlowGrid;
|
|
102
105
|
//# sourceMappingURL=browser.js.map
|
package/dist/browser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(this.webpackChunkflowgrid=this.webpackChunkflowgrid||[]).push([[137],{78(t,e,n){n.r(e),n.d(e,{AcquisitionAnalytics:()=>z,AlertsAnalytics:()=>X,ChurnAnalytics:()=>g,Cohorts:()=>h,Engagement:()=>o,Forecasting:()=>pt,Monetization:()=>k,MultiPathFunnels:()=>C,PathAnalytics:()=>W,SecurityAnalytics:()=>it,SupportAnalytics:()=>L,applyConfidenceInterval:()=>lt,calculateARPU:()=>f,calculateAnomalyScore:()=>J,calculateAvgGrowthRate:()=>ut,calculateAvgResponseTime:()=>A,calculateCAC:()=>E,calculateChurnRiskScore:()=>d,calculateConversionRate:()=>_,calculateDropOffRate:()=>D,calculateEngagementScore:()=>a,calculateExitRate:()=>$,calculateFCRRate:()=>O,calculateFailedLoginRate:()=>et,calculateGRR:()=>S,calculateLTV:()=>v,calculateLTVCACRatio:()=>x,calculateMAPE:()=>at,calculateMicroConversionScore:()=>M,calculateNRR:()=>w,calculatePathSimilarity:()=>j,calculateR2:()=>ct,calculateRMSE:()=>st,calculateROAS:()=>P,calculateSessionDepthScore:()=>c,calculateStdDev:()=>Y,calculateZScore:()=>H,checkAlertCondition:()=>Q,classifyCSAT:()=>b,classifyEngagementLevel:()=>s,classifyRiskLevel:()=>m,classifySecurityRiskLevel:()=>tt,classifySeverity:()=>K,classifySource:()=>U,classifyTrend:()=>ot,determineEventSeverity:()=>rt,evaluateCohortRules:()=>u,findBestPath:()=>F,findCommonSubPaths:()=>G,formatDuration:()=>R,generateCohortId:()=>p,generatePathId:()=>T,generateRecommendations:()=>y,isAnomaly:()=>Z,isDeadEnd:()=>B,isSuspiciousLoginPattern:()=>nt,monthlyToAnnual:()=>I,parseUTMParams:()=>q,pathToString:()=>N,stringToPath:()=>V});var r=n(748),i=n(547);function a(t,e,n,r){return Math.round(100*(.25*t+.25*e+.3*n+.2*r))/100}function s(t){return t<25?"low":t<50?"medium":t<75?"high":"power"}function c(t,e,n){const r=30*Math.min(t/10,1),i=40*Math.min(e/5,1),a=30*Math.min(n/20,1);return Math.round(r+i+a)}class o extends r.o{async trackDwellTime(t){return await this.initFeature("engagement.dwell_time",{type:"engagement",featureId:t.featureId,userId:t.userId,sessionId:t.sessionId,dwellTimeMs:t.dwellTimeMs,wasActive:t.wasActive??!0,...t.properties,timestamp:(new Date).toISOString()})}async trackSessionDepth(t){const e=c(t.pagesVisited,t.featuresUsed,t.actionsTaken);return await this.initFeature("engagement.session_depth",{type:"engagement",sessionId:t.sessionId,userId:t.userId,pagesVisited:t.pagesVisited,featuresUsed:t.featuresUsed,actionsTaken:t.actionsTaken,durationMs:t.durationMs,depthScore:e,timestamp:(new Date).toISOString()})}async trackContentConsumption(t){return await this.initFeature("engagement.content_consumption",{type:"engagement",contentId:t.contentId,contentType:t.contentType,userId:t.userId,percentageConsumed:t.percentageConsumed,timeSpentMs:t.timeSpentMs,completed:t.completed??t.percentageConsumed>=90,...t.properties,timestamp:(new Date).toISOString()})}async trackUserActivity(t){return await this.initFeature("engagement.user_activity",{type:"engagement",userId:t.userId,activityType:t.activityType,durationMs:t.durationMs,sessionId:t.sessionId,timestamp:(new Date).toISOString()})}autoTrackDwell(t,e={}){if(!(0,i.Bd)())return()=>{};const n=(0,i.YE)();if(!n)return()=>{};let r=0,a="visible"===n.visibilityState?Date.now():0;const s=()=>{const t=Date.now();"visible"===n.visibilityState?a=t:a&&(r+=t-a,a=0)};n.addEventListener("visibilitychange",s);let c=!1;return()=>{c||(c=!0,n.removeEventListener("visibilitychange",s),a&&(r+=Date.now()-a,a=0),r>0&&this.trackDwellTime({featureId:t,dwellTimeMs:r,userId:e.userId,sessionId:e.sessionId,wasActive:!0}))}}autoTrack(t={}){if(!(0,i.Bd)())return()=>{};const e=(0,i.zk)(),n=(0,i.YE)();if(!e||!n)return()=>{};const r=t.idleAfterMs??3e4,a=t.pollMs??5e3;let s=t.sessionId;if(!s)try{s=e.sessionStorage.getItem("flowgrid:sessionId")||void 0}catch{}s||(s=`eng_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,8)}`);const c=Date.now();let o=1;const u=new Set;let l=0,p=Date.now(),h="visible"===n.visibilityState?"active":"idle",d=Date.now();const m=e.history.pushState,y=e.history.replaceState,g=()=>{o++};e.history.pushState=function(...t){const e=m.apply(this,t);return g(),e},e.history.replaceState=function(...t){const e=y.apply(this,t);return g(),e},e.addEventListener("popstate",g);const f=t=>{l++,p=Date.now();const e=t.target,n=e?.closest?.("[data-flowgrid-feature]")?.getAttribute("data-flowgrid-feature");n&&u.add(n)};n.addEventListener("click",f,{capture:!0}),n.addEventListener("keydown",f,{capture:!0}),n.addEventListener("scroll",f,{capture:!0,passive:!0});const w=e=>{if(e===h)return;const n=Date.now(),r=n-d,i=h;h=e,d=n,r>0&&t.userId&&this.trackUserActivity({userId:t.userId,activityType:i,durationMs:r,sessionId:s})},S=()=>{const t=Date.now();let e;e="visible"!==n.visibilityState?"idle":t-p<r?"active":"passive",w(e)},I=e.setInterval(S,a),v=()=>S();n.addEventListener("visibilitychange",v);let k=!1;const _=()=>{if(k)return;k=!0,w("visible"===n.visibilityState?h:"idle");const e=Date.now()-c;e<=0||this.trackSessionDepth({sessionId:s,userId:t.userId,pagesVisited:o,featuresUsed:u.size,actionsTaken:l,durationMs:e})};return e.addEventListener("pagehide",_),(0,i.vs)(()=>e.clearInterval(I),()=>n.removeEventListener("visibilitychange",v),()=>n.removeEventListener("click",f,!0),()=>n.removeEventListener("keydown",f,!0),()=>n.removeEventListener("scroll",f,!0),()=>e.removeEventListener("popstate",g),()=>e.removeEventListener("pagehide",_),()=>{e.history.pushState=m,e.history.replaceState=y},()=>_())}}function u(t,e){let n=!0,r="and";for(const i of e){const e=l(t[i.attribute],i.operator,i.value);n="and"===r?n&&e:n||e,r=i.logicalOperator??"and"}return n}function l(t,e,n){switch(e){case"equals":return t===n;case"not_equals":return t!==n;case"contains":return String(t).includes(String(n));case"not_contains":return!String(t).includes(String(n));case"gt":return Number(t)>Number(n);case"gte":return Number(t)>=Number(n);case"lt":return Number(t)<Number(n);case"lte":return Number(t)<=Number(n);case"in":return Array.isArray(n)&&n.includes(t);case"not_in":return Array.isArray(n)&&!n.includes(t);case"exists":return null!=t;case"not_exists":return null==t;case"between":if(Array.isArray(n)&&2===n.length){const e=Number(t);return e>=Number(n[0])&&e<=Number(n[1])}return!1;default:return!1}}function p(t){return t.toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_|_$/g,"")}class h extends r.o{async createCohort(t){const e=t.cohortId??p(t.name);return await this.initFeature("cohorts.create",{type:"cohorts",cohortId:e,name:t.name,description:t.description,cohortType:t.type,rules:t.rules,dynamic:t.dynamic??!0,timeWindow:t.timeWindow,timestamp:(new Date).toISOString()})}async updateCohort(t,e){const{type:n,...r}=e;return await this.initFeature("cohorts.update",{type:"cohorts",cohortId:t,cohortType:n,...r,timestamp:(new Date).toISOString()})}async deleteCohort(t){return await this.initFeature("cohorts.delete",{type:"cohorts",cohortId:t,timestamp:(new Date).toISOString()})}async listCohorts(t){return await this.initFeature("cohorts.list",{type:"cohorts",filter:t,timestamp:(new Date).toISOString()})}async isUserInCohort(t,e){return await this.initFeature("cohorts.check_membership",{type:"cohorts",userId:t,cohortId:e,timestamp:(new Date).toISOString()})}async createSegment(t){return await this.initFeature("cohorts.create_segment",{type:"cohorts",...t,timestamp:(new Date).toISOString()})}async compareCohorts(t){return await this.initFeature("cohorts.compare",{type:"cohorts",...t,timestamp:(new Date).toISOString()})}}function d(t){let e=0;return e+=100*Math.min(t.daysSinceLastActivity/30,1)*.25,e+=.2*Math.max(0,-t.usageTrend),e+=.15*Math.max(0,-t.sessionFrequencyChange),e+=.1*Math.max(0,-t.featureUsageChange),e+=.1*Math.min(10*t.supportTickets,100),void 0!==t.npsScore&&(e+=.1*(100-10*t.npsScore)),e+=.05*Math.min(25*t.paymentFailures,100),void 0!==t.daysUntilRenewal&&(e+=.05*Math.max(0,100-t.daysUntilRenewal)),Math.round(Math.min(e,100))}function m(t){return t<25?"low":t<50?"medium":t<75?"high":"critical"}function y(t){const e=[],n={daysSinceLastActivity:"Send a re-engagement email or push notification",usageTrend:"Schedule a product walkthrough or training session",sessionFrequencyChange:"Offer incentives to increase usage frequency",featureUsageChange:"Highlight underutilized features via in-app messaging",supportTickets:"Escalate to customer success for personalized support",npsScore:"Conduct a follow-up call to address concerns",paymentFailures:"Reach out to resolve payment issues proactively",daysUntilRenewal:"Start renewal conversation early with value recap"};for(const r of t.slice(0,3))n[r.factor]&&e.push(n[r.factor]);return e}class g extends r.o{async trackUsageDecay(t){return await this.initFeature("churn.usage_decay",{type:"churn",...t,timestamp:(new Date).toISOString()})}async trackNPS(t){return await this.initFeature("churn.nps",{type:"churn",...t,timestamp:(new Date).toISOString()})}async trackChurn(t){return await this.initFeature("churn.churn_event",{type:"churn",...t,timestamp:(new Date).toISOString()})}async trackPreventionAction(t){return await this.initFeature("churn.prevention_action",{type:"churn",...t,timestamp:(new Date).toISOString()})}async updatePreventionOutcome(t,e,n){return await this.initFeature("churn.update_prevention_outcome",{type:"churn",userId:t,actionType:e,outcome:n,timestamp:(new Date).toISOString()})}}function f(t,e,n){const r=e>0?t/e:0;return{amount:Math.round(100*r)/100,currency:n}}function w(t,e,n,r){return 0===t?0:Math.round((t+e-n-r)/t*1e4)/100}function S(t,e,n){return 0===t?0:Math.round((t-e-n)/t*1e4)/100}function I(t){return{amount:12*t.amount,currency:t.currency}}function v(t,e,n){if(e<=0)return{amount:60*t,currency:n};const r=t/e;return{amount:Math.round(100*r)/100,currency:n}}class k extends r.o{async trackRevenue(t){const{type:e,...n}=t;return await this.initFeature("monetization.revenue",{type:"monetization",revenueType:e,...n,timestamp:(new Date).toISOString()})}async trackExpansion(t,e,n,r){return await this.initFeature("monetization.expansion",{type:"monetization",userId:t,fromPlan:e,toPlan:n,additionalRevenue:r,revenueType:"expansion",timestamp:(new Date).toISOString()})}async trackContraction(t,e,n,r){return await this.initFeature("monetization.contraction",{type:"monetization",userId:t,fromPlan:e,toPlan:n,reducedRevenue:r,revenueType:"downgrade",timestamp:(new Date).toISOString()})}}function _(t,e){return 0===t?0:Math.round(e/t*1e4)/100}function D(t,e){return 0===t?0:Math.round((t-e)/t*1e4)/100}function F(t){return 0===t.length?null:t.reduce((t,e)=>e.completionRate>t.completionRate?e:t)}function M(t,e){let n=0,r=0;for(const i of e){const e=i.weight??1;n+=e;const a=t.find(t=>t.id===i.id);a&&(r+=e*a.completionRate)}return n>0?Math.round(r/n*100)/100:0}function T(t){return t.join("_").toLowerCase().replace(/[^a-z0-9_]/g,"")}class C extends r.o{async defineFunnel(t){const e=t.funnelId??t.name.toLowerCase().replace(/[^a-z0-9]+/g,"_"),n=t.paths.map(t=>({...t,pathId:t.pathId??T(t.steps)}));return await this.initFeature("multi_path_funnels.define",{type:"multi_path_funnels",funnelId:e,name:t.name,description:t.description,paths:n,microConversions:t.microConversions,goalEvent:t.goalEvent,timestamp:(new Date).toISOString()})}async updateFunnel(t,e){return await this.initFeature("multi_path_funnels.update",{type:"multi_path_funnels",funnelId:t,...e,timestamp:(new Date).toISOString()})}async deleteFunnel(t){return await this.initFeature("multi_path_funnels.delete",{type:"multi_path_funnels",funnelId:t,timestamp:(new Date).toISOString()})}async trackStep(t){return await this.initFeature("multi_path_funnels.track_step",{type:"multi_path_funnels",...t,timestamp:(new Date).toISOString()})}async trackMicroConversion(t){return await this.initFeature("multi_path_funnels.track_micro_conversion",{type:"multi_path_funnels",...t,timestamp:(new Date).toISOString()})}async trackGoal(t,e,n){return await this.initFeature("multi_path_funnels.track_goal",{type:"multi_path_funnels",funnelId:t,userId:e,...n,timestamp:(new Date).toISOString()})}async analyzeFunnel(t){return await this.initFeature("multi_path_funnels.analyze",{type:"multi_path_funnels",...t,timestamp:(new Date).toISOString()})}async comparePaths(t,e){return await this.initFeature("multi_path_funnels.compare_paths",{type:"multi_path_funnels",funnelId:t,filter:e,timestamp:(new Date).toISOString()})}async listFunnels(){return await this.initFeature("multi_path_funnels.list",{type:"multi_path_funnels",timestamp:(new Date).toISOString()})}}function O(t,e){return 0===e?0:Math.round(t/e*1e4)/100}function A(t){if(0===t.length)return 0;const e=t.reduce((t,e)=>t+e,0);return Math.round(e/t.length)}function b(t){return t<2?"poor":t<3?"fair":t<4?"good":"excellent"}function R(t){return t<6e4?`${Math.round(t/1e3)}s`:t<36e5?`${Math.round(t/6e4)}m`:t<864e5?`${Math.round(t/36e5)}h`:`${Math.round(t/864e5)}d`}class L extends r.o{async trackTicket(t){return await this.initFeature("support.ticket_created",{type:"support",...t,status:"open",createdAt:(new Date).toISOString(),timestamp:(new Date).toISOString()})}async updateTicket(t){return await this.initFeature("support.ticket_updated",{type:"support",...t,timestamp:(new Date).toISOString()})}async trackResponse(t,e,n){return await this.initFeature("support.ticket_response",{type:"support",ticketId:t,agentId:e,responseTimeMs:n,timestamp:(new Date).toISOString()})}async trackResolution(t,e,n){return await this.initFeature("support.ticket_resolved",{type:"support",ticketId:t,resolutionTimeMs:e,interactionCount:n,firstContactResolution:1===n,timestamp:(new Date).toISOString()})}async trackCSAT(t){return await this.initFeature("support.csat",{type:"support",...t,timestamp:(new Date).toISOString()})}async trackFeatureComplaint(t){return await this.initFeature("support.feature_complaint",{type:"support",...t,timestamp:(new Date).toISOString()})}}function E(t,e,n){return 0===e?{amount:0,currency:n}:{amount:Math.round(t/e*100)/100,currency:n}}function P(t,e){return 0===e?0:Math.round(t/e*100)/100}function x(t,e){return 0===e?0:Math.round(t/e*100)/100}function q(t){const e={};try{const n=new URL(t),r=["utm_source","utm_medium","utm_campaign","utm_term","utm_content"];for(const t of r){const r=n.searchParams.get(t);r&&(e[t.replace("utm_","")]=r)}}catch{}return e}function U(t,e){if(!t&&!e)return"direct";const n=t?.toLowerCase()??"",r=e?.toLowerCase()??"";return r.includes("cpc")||r.includes("paid")?n.includes("facebook")||n.includes("instagram")||n.includes("linkedin")?"paid_social":"paid_search":n.includes("facebook")||n.includes("twitter")||n.includes("linkedin")?"organic_social":"email"===r?"email":"referral"===r?"referral":"affiliate"===r?"affiliate":"organic"}class z extends r.o{async trackAcquisition(t){return await this.initFeature("acquisition.acquired",{type:"acquisition",...t,timestamp:(new Date).toISOString()})}async trackLifecycleTransition(t){return await this.initFeature("acquisition.lifecycle_transition",{type:"acquisition",...t,timestamp:(new Date).toISOString()})}async createCampaign(t){return await this.initFeature("acquisition.create_campaign",{type:"acquisition",...t,timestamp:(new Date).toISOString()})}async trackCampaignSpend(t){return await this.initFeature("acquisition.campaign_spend",{type:"acquisition",...t,timestamp:(new Date).toISOString()})}}function N(t){return t.join(" → ")}function V(t){return t.split(" → ").map(t=>t.trim())}function $(t,e){return 0===e?0:Math.round(t/e*1e4)/100}function B(t,e,n=50){return t>n&&!e}function j(t,e){const n=new Set(t),r=new Set(e),i=new Set([...n].filter(t=>r.has(t))),a=new Set([...n,...r]);return i.size/a.size}function G(t,e=2){const n=new Map;for(const r of t)for(let t=0;t<=r.length-e;t++)for(let i=t+e;i<=r.length;i++){const e=N(r.slice(t,i));n.set(e,(n.get(e)??0)+1)}return Array.from(n.entries()).filter(([,t])=>t>1).map(([t,e])=>({subPath:V(t),count:e})).sort((t,e)=>e.count-t.count)}class W extends r.o{async trackTransition(t){return await this.initFeature("paths.transition",{type:"paths",...t,timestamp:(new Date).toISOString()})}async trackFeatureSequence(t){return await this.initFeature("paths.feature_sequence",{type:"paths",...t,timestamp:(new Date).toISOString()})}async definePath(t){return await this.initFeature("paths.define_path",{type:"paths",...t,timestamp:(new Date).toISOString()})}async comparePaths(t,e){return await this.initFeature("paths.compare_paths",{type:"paths",paths:t,filter:e,timestamp:(new Date).toISOString()})}}function Y(t){if(0===t.length)return 0;const e=t.reduce((t,e)=>t+e,0)/t.length,n=t.map(t=>Math.pow(t-e,2)),r=n.reduce((t,e)=>t+e,0)/n.length;return Math.sqrt(r)}function H(t,e,n){return 0===n?0:(t-e)/n}function Z(t,e=.5){const n=4-2*e;return Math.abs(t)>n}function J(t){const e=Math.abs(t);return e<=2?e/10:e<=3?.2+.3*(e-2):e<=4?.5+.3*(e-3):Math.min(.8+.1*(e-4),1)}function K(t){return t<.25?"info":t<.5?"warning":t<.75?"high":"critical"}function Q(t,e,n,r,i){switch(e){case"exceeds":return t>n;case"drops_below":return t<n;case"changes_by":return void 0!==r&&void 0!==i&&100*Math.abs((t-r)/r)>=i;case"no_data":return 0===t||null===t;default:return!1}}class X extends r.o{async createAlert(t){return await this.initFeature("alerts.create",{type:"alerts",...t,alertId:t.alertId??t.name.toLowerCase().replace(/[^a-z0-9]+/g,"_"),enabled:t.enabled??!0,timestamp:(new Date).toISOString()})}async updateAlert(t,e){return await this.initFeature("alerts.update",{type:"alerts",alertId:t,...e,timestamp:(new Date).toISOString()})}async deleteAlert(t){return await this.initFeature("alerts.delete",{type:"alerts",alertId:t,timestamp:(new Date).toISOString()})}async toggleAlert(t,e){return await this.initFeature("alerts.toggle",{type:"alerts",alertId:t,enabled:e,timestamp:(new Date).toISOString()})}async listAlerts(t){return await this.initFeature("alerts.list",{type:"alerts",enabled:t,timestamp:(new Date).toISOString()})}async acknowledgeAlert(t,e){return await this.initFeature("alerts.acknowledge",{type:"alerts",instanceId:t,acknowledgedBy:e,timestamp:(new Date).toISOString()})}async resolveAlert(t,e){return await this.initFeature("alerts.resolve",{type:"alerts",instanceId:t,notes:e,timestamp:(new Date).toISOString()})}async muteAlert(t,e){return await this.initFeature("alerts.mute",{type:"alerts",alertId:t,durationMinutes:e,timestamp:(new Date).toISOString()})}async detectAnomalies(t){return await this.initFeature("alerts.detect_anomalies",{type:"alerts",...t,timestamp:(new Date).toISOString()})}async configureNotification(t){return await this.initFeature("alerts.configure_notification",{type:"alerts",...t,timestamp:(new Date).toISOString()})}async testNotification(t){return await this.initFeature("alerts.test_notification",{type:"alerts",channel:t,timestamp:(new Date).toISOString()})}}function tt(t){return t<25?"low":t<50?"medium":t<75?"high":"critical"}function et(t,e){return 0===e?0:Math.round(t/e*1e4)/100}function nt(t,e,n=5){return t>=n&&e<=15}function rt(t,e){return["suspicious_activity"].includes(t)?"critical":["role_change","permission_change","data_deletion","api_key_revoked"].includes(t)?"high":["login_failure","password_reset","data_export"].includes(t)?e?"medium":"high":"low"}class it extends r.o{async trackLoginAttempt(t){const e=t.success?"login_success":"login_failure",n=rt(e,t.success);return await this.initFeature("security.login_attempt",{type:"security",...t,eventType:e,severity:n,timestamp:(new Date).toISOString()})}async trackLogout(t,e){return await this.initFeature("security.logout",{type:"security",userId:t,sessionId:e,eventType:"logout",timestamp:(new Date).toISOString()})}async trackPasswordChange(t,e=!1){return await this.initFeature("security.password_change",{type:"security",userId:t,forced:e,eventType:"password_change",timestamp:(new Date).toISOString()})}async trackRoleChange(t){return await this.initFeature("security.role_change",{type:"security",...t,eventType:"role_change",timestamp:(new Date).toISOString()})}async trackPermissionChange(t){return await this.initFeature("security.permission_change",{type:"security",...t,eventType:"permission_change",timestamp:(new Date).toISOString()})}async trackDataAccess(t){return await this.initFeature("security.data_access",{type:"security",...t,eventType:"data_access",timestamp:(new Date).toISOString()})}async trackDataExport(t,e,n){return await this.initFeature("security.data_export",{type:"security",userId:t,resourceType:e,recordCount:n,eventType:"data_export",timestamp:(new Date).toISOString()})}async trackSuspiciousActivity(t,e,n){return await this.initFeature("security.suspicious_activity",{type:"security",userId:t,activityType:e,details:n,eventType:"suspicious_activity",severity:"critical",timestamp:(new Date).toISOString()})}async trackComplianceEvent(t){return await this.initFeature("security.compliance_event",{type:"security",...t,timestamp:(new Date).toISOString()})}}function at(t,e){if(t.length!==e.length||0===t.length)return 0;let n=0,r=0;for(let i=0;i<t.length;i++)0!==t[i]&&(n+=Math.abs((t[i]-e[i])/t[i]),r++);return r>0?Math.round(n/r*1e4)/100:0}function st(t,e){if(t.length!==e.length||0===t.length)return 0;let n=0;for(let r=0;r<t.length;r++)n+=Math.pow(t[r]-e[r],2);return Math.round(100*Math.sqrt(n/t.length))/100}function ct(t,e){if(t.length!==e.length||0===t.length)return 0;const n=t.reduce((t,e)=>t+e,0)/t.length;let r=0,i=0;for(let a=0;a<t.length;a++)r+=Math.pow(t[a]-e[a],2),i+=Math.pow(t[a]-n,2);return 0!==i?Math.round(1e4*(1-r/i))/1e4:0}function ot(t,e,n=5){if(0===t)return e>0?"growing":"stable";const r=(e-t)/t*100;return r>n?"growing":r<-n?"declining":"stable"}function ut(t){if(t.length<2)return 0;let e=0,n=0;for(let r=1;r<t.length;r++)0!==t[r-1]&&(e+=(t[r]-t[r-1])/t[r-1],n++);return n>0?Math.round(e/n*1e4)/100:0}function lt(t,e,n=.95){const r=({.9:1.645,.95:1.96,.99:2.576}[n]??1.96)*e;return{lower:Math.max(0,t-r),upper:t+r}}class pt extends r.o{async forecastActiveUsers(t){return await this.initFeature("forecasting.active_users",{type:"forecasting",...t,model:t.model??"ensemble",includeConfidence:t.includeConfidence??!0,timestamp:(new Date).toISOString()})}async forecastRevenue(t){return await this.initFeature("forecasting.revenue",{type:"forecasting",...t,metric:"revenue",currency:t.currency??"USD",timestamp:(new Date).toISOString()})}async forecastMRR(t){return await this.initFeature("forecasting.mrr",{type:"forecasting",...t,metric:"mrr",timestamp:(new Date).toISOString()})}async forecastFeatureAdoption(t){return await this.initFeature("forecasting.feature_adoption",{type:"forecasting",...t,metric:"feature_usage",timestamp:(new Date).toISOString()})}async forecastChurn(t){return await this.initFeature("forecasting.churn",{type:"forecasting",...t,metric:"churn_rate",timestamp:(new Date).toISOString()})}async forecastSignups(t){return await this.initFeature("forecasting.signups",{type:"forecasting",...t,metric:"signups",timestamp:(new Date).toISOString()})}async compareScenarios(t){return await this.initFeature("forecasting.scenarios",{type:"forecasting",...t,timestamp:(new Date).toISOString()})}async forecastCustomMetric(t,e){return await this.initFeature("forecasting.custom",{type:"forecasting",...e,metric:"custom",customMetricName:t,timestamp:(new Date).toISOString()})}}},544(t,e,n){n.r(e),n.d(e,{AcquisitionTracker:()=>u,AlertTracker:()=>p,ChurnTracker:()=>a,CohortTracker:()=>i,EngagementTracker:()=>r,ForecastingTracker:()=>d,MonetizationTracker:()=>s,MultiPathFunnelTracker:()=>c,PathTracker:()=>l,SecurityTracker:()=>h,SupportTracker:()=>o});class r{constructor(t){this.client=t}dwell(t,e,n){return this.client.trackDwellTime({featureId:t,dwellTimeMs:e,properties:n})}sessionDepth(t,e,n,r,i){return this.client.trackSessionDepth({sessionId:t,pagesVisited:e,featuresUsed:n,actionsTaken:r,durationMs:i})}contentConsumption(t,e,n,r){return this.client.trackContentConsumption({contentId:t,contentType:e,percentageConsumed:n,timeSpentMs:r})}activity(t,e,n){return this.client.trackUserActivity({userId:t,activityType:e,durationMs:n})}autoTrackDwell(t,e){return this.client.autoTrackDwell(t,e)}autoTrack(t){return this.client.autoTrack(t)}}class i{constructor(t){this.client=t}create(t){return this.client.createCohort(t)}segment(t){return this.client.createSegment(t)}isMember(t,e){return this.client.isUserInCohort(t,e)}}class a{constructor(t){this.client=t}decay(t,e,n){return this.client.trackUsageDecay({userId:t,metric:e,periods:n})}nps(t,e,n){return this.client.trackNPS({userId:t,score:e,feedback:n})}churned(t,e,n){return this.client.trackChurn({userId:t,churnType:e,reason:n})}prevention(t,e,n){return this.client.trackPreventionAction({userId:t,actionType:e,details:n})}}class s{constructor(t){this.client=t}revenue(t,e,n,r,i){return this.client.trackRevenue({userId:t,amount:e,currency:n,type:r,properties:i})}}class c{constructor(t){this.client=t}define(t){return this.client.defineFunnel(t)}step(t,e,n,r){return this.client.trackStep({funnelId:t,step:e,userId:n,properties:r})}microConversion(t,e,n){return this.client.trackMicroConversion({conversionId:t,userId:e,properties:n})}}class o{constructor(t){this.client=t}ticket(t,e,n,r,i,a){return this.client.trackTicket({ticketId:t,userId:e,subject:n,category:r,priority:i,channel:a})}update(t,e,n){return this.client.updateTicket({ticketId:t,status:e,properties:n})}csat(t,e,n,r){return this.client.trackCSAT({ticketId:t,userId:e,score:n,feedback:r})}featureComplaint(t,e,n,r){return this.client.trackFeatureComplaint({userId:t,featureId:e,complaintType:n,severity:r})}}class u{constructor(t){this.client=t}acquired(t,e,n){return this.client.trackAcquisition({userId:t,source:e,properties:n})}campaign(t){return this.client.createCampaign(t)}spend(t,e,n){return this.client.trackCampaignSpend({campaignId:t,amount:e,date:n})}lifecycle(t,e,n){return this.client.trackLifecycleTransition({userId:t,fromStage:e,toStage:n})}}class l{constructor(t){this.client=t}transition(t,e,n,r){return this.client.trackTransition({userId:t,fromScreen:e,toScreen:n,properties:r})}sequence(t,e,n){return this.client.trackFeatureSequence({userId:t,feature:e,order:n})}define(t){return this.client.definePath(t)}}class p{constructor(t){this.client=t}create(t){return this.client.createAlert(t)}update(t,e){return this.client.updateAlert(t,e)}delete(t){return this.client.deleteAlert(t)}acknowledge(t,e){return this.client.acknowledgeAlert(t,e)}resolve(t,e){return this.client.resolveAlert(t,e)}mute(t,e){return this.client.muteAlert(t,e)}}class h{constructor(t){this.client=t}login(t,e,n){return this.client.trackLoginAttempt({userId:t,success:e,properties:n})}roleChange(t,e,n,r){return this.client.trackRoleChange({userId:t,changedBy:e,previousRole:n,newRole:r})}permissionChange(t,e,n,r){return this.client.trackPermissionChange({userId:t,changedBy:e,permission:n,action:r})}dataAccess(t,e,n,r){return this.client.trackDataAccess({userId:t,resourceType:e,accessType:n,properties:r})}compliance(t,e,n){return this.client.trackComplianceEvent({userId:t,eventType:e,properties:n})}}class d{constructor(t){this.client=t}activeUsers(t,e,n){return this.client.forecastActiveUsers({metric:t,periods:e,granularity:n})}revenue(t,e){return this.client.forecastRevenue({periods:t,granularity:e})}featureAdoption(t,e,n){return this.client.forecastFeatureAdoption({featureId:t,periods:e,granularity:n})}churn(t,e){return this.client.forecastChurn({periods:t,granularity:e})}}}}]);
|
|
2
|
+
//# sourceMappingURL=flowgrid-enterprise.flowgrid.chunk.js.map
|