flowgrid-sdk 1.2.1 → 1.4.1
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 +221 -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.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.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
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
* ```
|
|
42
42
|
*/
|
|
43
43
|
import { FlowGridTransport } from "../../client/transport";
|
|
44
|
-
import { DateRangeFilter, TimeSeriesData
|
|
44
|
+
import { DateRangeFilter, TimeSeriesData } from "../../types";
|
|
45
45
|
/**
|
|
46
46
|
* Alert condition types.
|
|
47
47
|
*/
|
|
@@ -269,22 +269,12 @@ export declare class AlertsAnalytics extends FlowGridTransport {
|
|
|
269
269
|
toggleAlert(alertId: string, enabled: boolean): Promise<{
|
|
270
270
|
updated: boolean;
|
|
271
271
|
}>;
|
|
272
|
-
/**
|
|
273
|
-
* Get alert rule.
|
|
274
|
-
*/
|
|
275
|
-
getAlert(alertId: string): Promise<AlertRuleDefinition & {
|
|
276
|
-
alertId: string;
|
|
277
|
-
}>;
|
|
278
272
|
/**
|
|
279
273
|
* List all alert rules.
|
|
280
274
|
*/
|
|
281
275
|
listAlerts(enabled?: boolean): Promise<Array<AlertRuleDefinition & {
|
|
282
276
|
alertId: string;
|
|
283
277
|
}>>;
|
|
284
|
-
/**
|
|
285
|
-
* Get triggered alerts.
|
|
286
|
-
*/
|
|
287
|
-
getTriggeredAlerts(filter?: AlertAnalyticsFilter): Promise<AlertInstance[]>;
|
|
288
278
|
/**
|
|
289
279
|
* Acknowledge an alert.
|
|
290
280
|
*/
|
|
@@ -307,10 +297,6 @@ export declare class AlertsAnalytics extends FlowGridTransport {
|
|
|
307
297
|
* Run anomaly detection.
|
|
308
298
|
*/
|
|
309
299
|
detectAnomalies(config: AnomalyDetectionConfig): Promise<Anomaly[]>;
|
|
310
|
-
/**
|
|
311
|
-
* Get historical anomalies.
|
|
312
|
-
*/
|
|
313
|
-
getAnomalies(filter?: AlertAnalyticsFilter): Promise<Anomaly[]>;
|
|
314
300
|
/**
|
|
315
301
|
* Configure notification channel.
|
|
316
302
|
*/
|
|
@@ -323,26 +309,4 @@ export declare class AlertsAnalytics extends FlowGridTransport {
|
|
|
323
309
|
testNotification(channel: NotificationChannel): Promise<{
|
|
324
310
|
success: boolean;
|
|
325
311
|
}>;
|
|
326
|
-
/**
|
|
327
|
-
* Get alert analytics.
|
|
328
|
-
*/
|
|
329
|
-
getAnalytics(filter?: AlertAnalyticsFilter): Promise<AlertAnalytics>;
|
|
330
|
-
/**
|
|
331
|
-
* Get metric with anomaly overlay.
|
|
332
|
-
*/
|
|
333
|
-
getMetricWithAnomalies(metric: string, filter?: DateRangeFilter, granularity?: TimeGranularity): Promise<{
|
|
334
|
-
data: TimeSeriesData;
|
|
335
|
-
anomalies: Array<{
|
|
336
|
-
timestamp: string;
|
|
337
|
-
score: number;
|
|
338
|
-
}>;
|
|
339
|
-
}>;
|
|
340
|
-
/**
|
|
341
|
-
* Get alert correlation analysis.
|
|
342
|
-
*/
|
|
343
|
-
getAlertCorrelation(filter?: DateRangeFilter): Promise<Array<{
|
|
344
|
-
alertPair: [string, string];
|
|
345
|
-
correlation: number;
|
|
346
|
-
coOccurrences: number;
|
|
347
|
-
}>>;
|
|
348
312
|
}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Enterprise - Alerts & Anomaly Detection
|
|
3
|
+
* @module features/enterprise/alerts
|
|
4
|
+
*
|
|
5
|
+
* @description
|
|
6
|
+
* Proactively monitor anomalies in key metrics and trigger alerts.
|
|
7
|
+
* Detect activation drops, error spikes, and custom threshold breaches.
|
|
8
|
+
*
|
|
9
|
+
* @useCases
|
|
10
|
+
* - Monitor for activation drops
|
|
11
|
+
* - Detect error/churn spikes
|
|
12
|
+
* - Set custom alert rules
|
|
13
|
+
* - Threshold monitoring
|
|
14
|
+
* - Real-time anomaly detection
|
|
15
|
+
*
|
|
16
|
+
* @metrics
|
|
17
|
+
* - Alert frequency
|
|
18
|
+
* - Time to detection
|
|
19
|
+
* - False positive rate
|
|
20
|
+
* - Alert resolution time
|
|
21
|
+
* - Metric anomaly score
|
|
22
|
+
*
|
|
23
|
+
* @chartData
|
|
24
|
+
* - Line chart: Metric with anomaly markers
|
|
25
|
+
* - Timeline: Alert history
|
|
26
|
+
* - Bar chart: Alerts by type
|
|
27
|
+
* - Dashboard: Alert status
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const alerts = new AlertsAnalytics(webId, endpoint, apiKey);
|
|
32
|
+
*
|
|
33
|
+
* // Create an alert rule
|
|
34
|
+
* await alerts.createAlert({
|
|
35
|
+
* name: 'Activation Drop',
|
|
36
|
+
* metric: 'activation_rate',
|
|
37
|
+
* condition: 'drops_below',
|
|
38
|
+
* threshold: 50,
|
|
39
|
+
* severity: 'high'
|
|
40
|
+
* });
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
import { FlowGridTransport } from "../../client/transport";
|
|
44
|
+
// ============================================================================
|
|
45
|
+
// HELPER FUNCTIONS
|
|
46
|
+
// ============================================================================
|
|
47
|
+
/**
|
|
48
|
+
* Calculate standard deviation.
|
|
49
|
+
*/
|
|
50
|
+
export function calculateStdDev(values) {
|
|
51
|
+
if (values.length === 0)
|
|
52
|
+
return 0;
|
|
53
|
+
const mean = values.reduce((a, b) => a + b, 0) / values.length;
|
|
54
|
+
const squareDiffs = values.map(value => Math.pow(value - mean, 2));
|
|
55
|
+
const avgSquareDiff = squareDiffs.reduce((a, b) => a + b, 0) / squareDiffs.length;
|
|
56
|
+
return Math.sqrt(avgSquareDiff);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Calculate Z-score for anomaly detection.
|
|
60
|
+
*/
|
|
61
|
+
export function calculateZScore(value, mean, stdDev) {
|
|
62
|
+
if (stdDev === 0)
|
|
63
|
+
return 0;
|
|
64
|
+
return (value - mean) / stdDev;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Determine if value is anomalous based on Z-score.
|
|
68
|
+
*/
|
|
69
|
+
export function isAnomaly(zScore, sensitivity = 0.5) {
|
|
70
|
+
// Higher sensitivity = lower threshold for anomaly detection
|
|
71
|
+
const threshold = 4 - (sensitivity * 2); // Ranges from 2 to 4
|
|
72
|
+
return Math.abs(zScore) > threshold;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Calculate anomaly score (0-1).
|
|
76
|
+
*/
|
|
77
|
+
export function calculateAnomalyScore(zScore) {
|
|
78
|
+
// Normalize Z-score to 0-1 range
|
|
79
|
+
const absZ = Math.abs(zScore);
|
|
80
|
+
if (absZ <= 2)
|
|
81
|
+
return absZ / 10;
|
|
82
|
+
if (absZ <= 3)
|
|
83
|
+
return 0.2 + (absZ - 2) * 0.3;
|
|
84
|
+
if (absZ <= 4)
|
|
85
|
+
return 0.5 + (absZ - 3) * 0.3;
|
|
86
|
+
return Math.min(0.8 + (absZ - 4) * 0.1, 1);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Classify severity from anomaly score.
|
|
90
|
+
*/
|
|
91
|
+
export function classifySeverity(anomalyScore) {
|
|
92
|
+
if (anomalyScore < 0.25)
|
|
93
|
+
return 'info';
|
|
94
|
+
if (anomalyScore < 0.5)
|
|
95
|
+
return 'warning';
|
|
96
|
+
if (anomalyScore < 0.75)
|
|
97
|
+
return 'high';
|
|
98
|
+
return 'critical';
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Check if alert condition is met.
|
|
102
|
+
*/
|
|
103
|
+
export function checkAlertCondition(currentValue, condition, threshold, previousValue, changePercent) {
|
|
104
|
+
switch (condition) {
|
|
105
|
+
case 'exceeds':
|
|
106
|
+
return currentValue > threshold;
|
|
107
|
+
case 'drops_below':
|
|
108
|
+
return currentValue < threshold;
|
|
109
|
+
case 'changes_by':
|
|
110
|
+
if (previousValue === undefined || changePercent === undefined)
|
|
111
|
+
return false;
|
|
112
|
+
const change = Math.abs((currentValue - previousValue) / previousValue) * 100;
|
|
113
|
+
return change >= changePercent;
|
|
114
|
+
case 'no_data':
|
|
115
|
+
return currentValue === 0 || currentValue === null;
|
|
116
|
+
default:
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// ============================================================================
|
|
121
|
+
// MAIN CLASS
|
|
122
|
+
// ============================================================================
|
|
123
|
+
/**
|
|
124
|
+
* Alerts and anomaly detection class.
|
|
125
|
+
*/
|
|
126
|
+
export class AlertsAnalytics extends FlowGridTransport {
|
|
127
|
+
/**
|
|
128
|
+
* Create an alert rule.
|
|
129
|
+
*/
|
|
130
|
+
async createAlert(definition) {
|
|
131
|
+
return await this.initFeature("alerts.create", {
|
|
132
|
+
type: "alerts",
|
|
133
|
+
...definition,
|
|
134
|
+
alertId: definition.alertId ??
|
|
135
|
+
definition.name.toLowerCase().replace(/[^a-z0-9]+/g, '_'),
|
|
136
|
+
enabled: definition.enabled ?? true,
|
|
137
|
+
timestamp: new Date().toISOString()
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Update an alert rule.
|
|
142
|
+
*/
|
|
143
|
+
async updateAlert(alertId, updates) {
|
|
144
|
+
return await this.initFeature("alerts.update", {
|
|
145
|
+
type: "alerts",
|
|
146
|
+
alertId,
|
|
147
|
+
...updates,
|
|
148
|
+
timestamp: new Date().toISOString()
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Delete an alert rule.
|
|
153
|
+
*/
|
|
154
|
+
async deleteAlert(alertId) {
|
|
155
|
+
return await this.initFeature("alerts.delete", {
|
|
156
|
+
type: "alerts",
|
|
157
|
+
alertId,
|
|
158
|
+
timestamp: new Date().toISOString()
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Enable/disable an alert.
|
|
163
|
+
*/
|
|
164
|
+
async toggleAlert(alertId, enabled) {
|
|
165
|
+
return await this.initFeature("alerts.toggle", {
|
|
166
|
+
type: "alerts",
|
|
167
|
+
alertId,
|
|
168
|
+
enabled,
|
|
169
|
+
timestamp: new Date().toISOString()
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* List all alert rules.
|
|
174
|
+
*/
|
|
175
|
+
async listAlerts(enabled) {
|
|
176
|
+
return await this.initFeature("alerts.list", {
|
|
177
|
+
type: "alerts",
|
|
178
|
+
enabled,
|
|
179
|
+
timestamp: new Date().toISOString()
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Acknowledge an alert.
|
|
184
|
+
*/
|
|
185
|
+
async acknowledgeAlert(instanceId, acknowledgedBy) {
|
|
186
|
+
return await this.initFeature("alerts.acknowledge", {
|
|
187
|
+
type: "alerts",
|
|
188
|
+
instanceId,
|
|
189
|
+
acknowledgedBy,
|
|
190
|
+
timestamp: new Date().toISOString()
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Resolve an alert.
|
|
195
|
+
*/
|
|
196
|
+
async resolveAlert(instanceId, notes) {
|
|
197
|
+
return await this.initFeature("alerts.resolve", {
|
|
198
|
+
type: "alerts",
|
|
199
|
+
instanceId,
|
|
200
|
+
notes,
|
|
201
|
+
timestamp: new Date().toISOString()
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Mute an alert temporarily.
|
|
206
|
+
*/
|
|
207
|
+
async muteAlert(alertId, durationMinutes) {
|
|
208
|
+
return await this.initFeature("alerts.mute", {
|
|
209
|
+
type: "alerts",
|
|
210
|
+
alertId,
|
|
211
|
+
durationMinutes,
|
|
212
|
+
timestamp: new Date().toISOString()
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Run anomaly detection.
|
|
217
|
+
*/
|
|
218
|
+
async detectAnomalies(config) {
|
|
219
|
+
return await this.initFeature("alerts.detect_anomalies", {
|
|
220
|
+
type: "alerts",
|
|
221
|
+
...config,
|
|
222
|
+
timestamp: new Date().toISOString()
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Configure notification channel.
|
|
227
|
+
*/
|
|
228
|
+
async configureNotification(config) {
|
|
229
|
+
return await this.initFeature("alerts.configure_notification", {
|
|
230
|
+
type: "alerts",
|
|
231
|
+
...config,
|
|
232
|
+
timestamp: new Date().toISOString()
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Test notification channel.
|
|
237
|
+
*/
|
|
238
|
+
async testNotification(channel) {
|
|
239
|
+
return await this.initFeature("alerts.test_notification", {
|
|
240
|
+
type: "alerts",
|
|
241
|
+
channel,
|
|
242
|
+
timestamp: new Date().toISOString()
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
//# sourceMappingURL=alerts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alerts.js","sourceRoot":"","sources":["../../../../src/lib/features/enterprise/alerts.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
* ```
|
|
39
39
|
*/
|
|
40
40
|
import { FlowGridTransport } from "../../client/transport";
|
|
41
|
-
import { DateRangeFilter, TimeSeriesData
|
|
41
|
+
import { DateRangeFilter, TimeSeriesData } from "../../types";
|
|
42
42
|
/**
|
|
43
43
|
* Churn risk factors.
|
|
44
44
|
*/
|
|
@@ -215,18 +215,6 @@ export declare function generateRecommendations(riskFactors: Array<{
|
|
|
215
215
|
* Churn and predictive analytics class.
|
|
216
216
|
*/
|
|
217
217
|
export declare class ChurnAnalytics extends FlowGridTransport {
|
|
218
|
-
/**
|
|
219
|
-
* Get user churn risk score.
|
|
220
|
-
*/
|
|
221
|
-
getUserRiskScore(userId: string): Promise<ChurnRiskScore>;
|
|
222
|
-
/**
|
|
223
|
-
* Get multiple users' risk scores.
|
|
224
|
-
*/
|
|
225
|
-
getBulkRiskScores(userIds: string[]): Promise<ChurnRiskScore[]>;
|
|
226
|
-
/**
|
|
227
|
-
* Get at-risk users.
|
|
228
|
-
*/
|
|
229
|
-
getAtRiskUsers(filter?: AtRiskUsersFilter): Promise<ChurnRiskScore[]>;
|
|
230
218
|
/**
|
|
231
219
|
* Track usage decay.
|
|
232
220
|
*/
|
|
@@ -256,33 +244,4 @@ export declare class ChurnAnalytics extends FlowGridTransport {
|
|
|
256
244
|
updatePreventionOutcome(userId: string, actionType: string, outcome: 'success' | 'failed'): Promise<{
|
|
257
245
|
updated: boolean;
|
|
258
246
|
}>;
|
|
259
|
-
/**
|
|
260
|
-
* Get churn analytics.
|
|
261
|
-
*/
|
|
262
|
-
getAnalytics(filter?: DateRangeFilter): Promise<ChurnAnalyticsResult>;
|
|
263
|
-
/**
|
|
264
|
-
* Get churn rate trend.
|
|
265
|
-
*/
|
|
266
|
-
getChurnTrend(filter?: DateRangeFilter, granularity?: TimeGranularity): Promise<TimeSeriesData>;
|
|
267
|
-
/**
|
|
268
|
-
* Get churn by segment.
|
|
269
|
-
*/
|
|
270
|
-
getChurnBySegment(segmentAttribute: string, filter?: DateRangeFilter): Promise<Array<{
|
|
271
|
-
segment: string;
|
|
272
|
-
churnRate: number;
|
|
273
|
-
count: number;
|
|
274
|
-
}>>;
|
|
275
|
-
/**
|
|
276
|
-
* Get NPS trend.
|
|
277
|
-
*/
|
|
278
|
-
getNPSTrend(filter?: DateRangeFilter, granularity?: TimeGranularity): Promise<TimeSeriesData>;
|
|
279
|
-
/**
|
|
280
|
-
* Get prevention effectiveness.
|
|
281
|
-
*/
|
|
282
|
-
getPreventionEffectiveness(filter?: DateRangeFilter): Promise<Array<{
|
|
283
|
-
actionType: string;
|
|
284
|
-
attempts: number;
|
|
285
|
-
successes: number;
|
|
286
|
-
rate: number;
|
|
287
|
-
}>>;
|
|
288
247
|
}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Enterprise - Churn & Predictive Analytics
|
|
3
|
+
* @module features/enterprise/churn
|
|
4
|
+
*
|
|
5
|
+
* @description
|
|
6
|
+
* Predict and measure churn proactively using usage patterns,
|
|
7
|
+
* engagement signals, and predictive scoring models.
|
|
8
|
+
*
|
|
9
|
+
* @useCases
|
|
10
|
+
* - Detect usage decay patterns
|
|
11
|
+
* - Identify at-risk users
|
|
12
|
+
* - Predict churn probability
|
|
13
|
+
* - Correlate NPS with churn
|
|
14
|
+
* - Track churn prevention success
|
|
15
|
+
*
|
|
16
|
+
* @metrics
|
|
17
|
+
* - Churn rate
|
|
18
|
+
* - Churn risk score
|
|
19
|
+
* - Days to churn prediction
|
|
20
|
+
* - At-risk user count
|
|
21
|
+
* - Prevention success rate
|
|
22
|
+
*
|
|
23
|
+
* @chartData
|
|
24
|
+
* - Line chart: Churn rate over time
|
|
25
|
+
* - Distribution: Risk score distribution
|
|
26
|
+
* - Bar chart: Churn by segment
|
|
27
|
+
* - Funnel: Churn prevention funnel
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const churn = new ChurnAnalytics(webId, endpoint, apiKey);
|
|
32
|
+
*
|
|
33
|
+
* // Get user churn risk
|
|
34
|
+
* const risk = await churn.getUserRiskScore('user_123');
|
|
35
|
+
*
|
|
36
|
+
* // Get at-risk users
|
|
37
|
+
* const atRisk = await churn.getAtRiskUsers({ minScore: 70 });
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
import { FlowGridTransport } from "../../client/transport";
|
|
41
|
+
// ============================================================================
|
|
42
|
+
// HELPER FUNCTIONS
|
|
43
|
+
// ============================================================================
|
|
44
|
+
/**
|
|
45
|
+
* Calculate churn risk score from factors.
|
|
46
|
+
*/
|
|
47
|
+
export function calculateChurnRiskScore(factors) {
|
|
48
|
+
const weights = {
|
|
49
|
+
daysSinceLastActivity: 0.25,
|
|
50
|
+
usageTrend: 0.20,
|
|
51
|
+
sessionFrequencyChange: 0.15,
|
|
52
|
+
featureUsageChange: 0.10,
|
|
53
|
+
supportTickets: 0.10,
|
|
54
|
+
npsScore: 0.10,
|
|
55
|
+
paymentFailures: 0.05,
|
|
56
|
+
daysUntilRenewal: 0.05
|
|
57
|
+
};
|
|
58
|
+
let score = 0;
|
|
59
|
+
// Days since last activity (0-30 days mapped to 0-100)
|
|
60
|
+
score += Math.min(factors.daysSinceLastActivity / 30, 1) * 100 * weights.daysSinceLastActivity;
|
|
61
|
+
// Usage trend (negative trend increases risk)
|
|
62
|
+
score += Math.max(0, -factors.usageTrend) * weights.usageTrend;
|
|
63
|
+
// Session frequency change (negative increases risk)
|
|
64
|
+
score += Math.max(0, -factors.sessionFrequencyChange) * weights.sessionFrequencyChange;
|
|
65
|
+
// Feature usage change (negative increases risk)
|
|
66
|
+
score += Math.max(0, -factors.featureUsageChange) * weights.featureUsageChange;
|
|
67
|
+
// Support tickets (more tickets = higher risk)
|
|
68
|
+
score += Math.min(factors.supportTickets * 10, 100) * weights.supportTickets;
|
|
69
|
+
// NPS score (lower NPS = higher risk)
|
|
70
|
+
if (factors.npsScore !== undefined) {
|
|
71
|
+
score += (100 - factors.npsScore * 10) * weights.npsScore;
|
|
72
|
+
}
|
|
73
|
+
// Payment failures
|
|
74
|
+
score += Math.min(factors.paymentFailures * 25, 100) * weights.paymentFailures;
|
|
75
|
+
// Days until renewal (closer = higher urgency)
|
|
76
|
+
if (factors.daysUntilRenewal !== undefined) {
|
|
77
|
+
score += Math.max(0, 100 - factors.daysUntilRenewal) * weights.daysUntilRenewal;
|
|
78
|
+
}
|
|
79
|
+
return Math.round(Math.min(score, 100));
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Classify risk level from score.
|
|
83
|
+
*/
|
|
84
|
+
export function classifyRiskLevel(score) {
|
|
85
|
+
if (score < 25)
|
|
86
|
+
return 'low';
|
|
87
|
+
if (score < 50)
|
|
88
|
+
return 'medium';
|
|
89
|
+
if (score < 75)
|
|
90
|
+
return 'high';
|
|
91
|
+
return 'critical';
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Generate churn prevention recommendations.
|
|
95
|
+
*/
|
|
96
|
+
export function generateRecommendations(riskFactors) {
|
|
97
|
+
const recommendations = [];
|
|
98
|
+
const factorActions = {
|
|
99
|
+
daysSinceLastActivity: 'Send a re-engagement email or push notification',
|
|
100
|
+
usageTrend: 'Schedule a product walkthrough or training session',
|
|
101
|
+
sessionFrequencyChange: 'Offer incentives to increase usage frequency',
|
|
102
|
+
featureUsageChange: 'Highlight underutilized features via in-app messaging',
|
|
103
|
+
supportTickets: 'Escalate to customer success for personalized support',
|
|
104
|
+
npsScore: 'Conduct a follow-up call to address concerns',
|
|
105
|
+
paymentFailures: 'Reach out to resolve payment issues proactively',
|
|
106
|
+
daysUntilRenewal: 'Start renewal conversation early with value recap'
|
|
107
|
+
};
|
|
108
|
+
for (const factor of riskFactors.slice(0, 3)) {
|
|
109
|
+
if (factorActions[factor.factor]) {
|
|
110
|
+
recommendations.push(factorActions[factor.factor]);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return recommendations;
|
|
114
|
+
}
|
|
115
|
+
// ============================================================================
|
|
116
|
+
// MAIN CLASS
|
|
117
|
+
// ============================================================================
|
|
118
|
+
/**
|
|
119
|
+
* Churn and predictive analytics class.
|
|
120
|
+
*/
|
|
121
|
+
export class ChurnAnalytics extends FlowGridTransport {
|
|
122
|
+
/**
|
|
123
|
+
* Track usage decay.
|
|
124
|
+
*/
|
|
125
|
+
async trackUsageDecay(config) {
|
|
126
|
+
return await this.initFeature("churn.usage_decay", {
|
|
127
|
+
type: "churn",
|
|
128
|
+
...config,
|
|
129
|
+
timestamp: new Date().toISOString()
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Track NPS score.
|
|
134
|
+
*/
|
|
135
|
+
async trackNPS(config) {
|
|
136
|
+
return await this.initFeature("churn.nps", {
|
|
137
|
+
type: "churn",
|
|
138
|
+
...config,
|
|
139
|
+
timestamp: new Date().toISOString()
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Track churn event.
|
|
144
|
+
*/
|
|
145
|
+
async trackChurn(config) {
|
|
146
|
+
return await this.initFeature("churn.churn_event", {
|
|
147
|
+
type: "churn",
|
|
148
|
+
...config,
|
|
149
|
+
timestamp: new Date().toISOString()
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Track churn prevention action.
|
|
154
|
+
*/
|
|
155
|
+
async trackPreventionAction(config) {
|
|
156
|
+
return await this.initFeature("churn.prevention_action", {
|
|
157
|
+
type: "churn",
|
|
158
|
+
...config,
|
|
159
|
+
timestamp: new Date().toISOString()
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Update prevention action outcome.
|
|
164
|
+
*/
|
|
165
|
+
async updatePreventionOutcome(userId, actionType, outcome) {
|
|
166
|
+
return await this.initFeature("churn.update_prevention_outcome", {
|
|
167
|
+
type: "churn",
|
|
168
|
+
userId,
|
|
169
|
+
actionType,
|
|
170
|
+
outcome,
|
|
171
|
+
timestamp: new Date().toISOString()
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=churn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"churn.js","sourceRoot":"","sources":["../../../../src/lib/features/enterprise/churn.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
|
* Cohort rule operators.
|
|
45
45
|
*/
|
|
@@ -211,60 +211,24 @@ export declare class Cohorts extends FlowGridTransport {
|
|
|
211
211
|
deleteCohort(cohortId: string): Promise<{
|
|
212
212
|
deleted: boolean;
|
|
213
213
|
}>;
|
|
214
|
-
/**
|
|
215
|
-
* Get cohort by ID.
|
|
216
|
-
*/
|
|
217
|
-
getCohort(cohortId: string): Promise<CohortResponse & {
|
|
218
|
-
rules: CohortRule[];
|
|
219
|
-
}>;
|
|
220
214
|
/**
|
|
221
215
|
* List all cohorts.
|
|
222
216
|
*/
|
|
223
217
|
listCohorts(filter?: CohortAnalyticsFilter): Promise<CohortResponse[]>;
|
|
224
|
-
/**
|
|
225
|
-
* Get cohort members.
|
|
226
|
-
*/
|
|
227
|
-
getCohortMembers(cohortId: string, options?: {
|
|
228
|
-
limit?: number;
|
|
229
|
-
offset?: number;
|
|
230
|
-
}): Promise<{
|
|
231
|
-
members: CohortMember[];
|
|
232
|
-
total: number;
|
|
233
|
-
}>;
|
|
234
218
|
/**
|
|
235
219
|
* Check if user belongs to cohort.
|
|
236
220
|
*/
|
|
237
221
|
isUserInCohort(userId: string, cohortId: string): Promise<{
|
|
238
222
|
isMember: boolean;
|
|
239
223
|
}>;
|
|
240
|
-
/**
|
|
241
|
-
* Get user's cohorts.
|
|
242
|
-
*/
|
|
243
|
-
getUserCohorts(userId: string): Promise<CohortAssignment[]>;
|
|
244
224
|
/**
|
|
245
225
|
* Create a segment.
|
|
246
226
|
*/
|
|
247
227
|
createSegment(definition: SegmentDefinition): Promise<{
|
|
248
228
|
segmentId: string;
|
|
249
229
|
}>;
|
|
250
|
-
/**
|
|
251
|
-
* Get segment distribution.
|
|
252
|
-
*/
|
|
253
|
-
getSegmentDistribution(segmentId: string, filter?: DateRangeFilter): Promise<Array<{
|
|
254
|
-
bucket: string;
|
|
255
|
-
count: number;
|
|
256
|
-
percentage: number;
|
|
257
|
-
}>>;
|
|
258
230
|
/**
|
|
259
231
|
* Compare two cohorts.
|
|
260
232
|
*/
|
|
261
233
|
compareCohorts(config: CohortComparisonConfig): Promise<CohortComparison>;
|
|
262
|
-
/**
|
|
263
|
-
* Get cohort analytics.
|
|
264
|
-
*/
|
|
265
|
-
getCohortAnalytics(cohortId: string, filter?: DateRangeFilter): Promise<CohortAnalytics>;
|
|
266
|
-
/**
|
|
267
|
-
* Get cohort growth trend.
|
|
268
|
-
*/
|
|
269
|
-
getCohortGrowth(cohortId: string, filter?: DateRangeFilter, granularity?: TimeGranularity): Promise<TimeSeriesData>;
|
|
270
234
|
}
|