kanmi-perf-revenue 1.0.0 → 1.2.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 +347 -173
- package/dist/empirical/ab-testing.d.ts +83 -0
- package/dist/empirical/ab-testing.d.ts.map +1 -0
- package/dist/empirical/ab-testing.js +281 -0
- package/dist/empirical/ab-testing.js.map +1 -0
- package/dist/empirical/alerting.d.ts +85 -0
- package/dist/empirical/alerting.d.ts.map +1 -0
- package/dist/empirical/alerting.js +358 -0
- package/dist/empirical/alerting.js.map +1 -0
- package/dist/empirical/attribution.d.ts +80 -0
- package/dist/empirical/attribution.d.ts.map +1 -0
- package/dist/empirical/attribution.js +305 -0
- package/dist/empirical/attribution.js.map +1 -0
- package/dist/empirical/cohort.d.ts +75 -0
- package/dist/empirical/cohort.d.ts.map +1 -0
- package/dist/empirical/cohort.js +305 -0
- package/dist/empirical/cohort.js.map +1 -0
- package/dist/empirical/conversion-curve.d.ts +7 -10
- package/dist/empirical/conversion-curve.d.ts.map +1 -1
- package/dist/empirical/conversion-curve.js +37 -4
- package/dist/empirical/conversion-curve.js.map +1 -1
- package/dist/empirical/correlation.d.ts +91 -0
- package/dist/empirical/correlation.d.ts.map +1 -0
- package/dist/empirical/correlation.js +461 -0
- package/dist/empirical/correlation.js.map +1 -0
- package/dist/empirical/data-import.d.ts +22 -0
- package/dist/empirical/data-import.d.ts.map +1 -1
- package/dist/empirical/data-import.js +44 -0
- package/dist/empirical/data-import.js.map +1 -1
- package/dist/empirical/datadog-product-analytics.d.ts +192 -0
- package/dist/empirical/datadog-product-analytics.d.ts.map +1 -0
- package/dist/empirical/datadog-product-analytics.js +632 -0
- package/dist/empirical/datadog-product-analytics.js.map +1 -0
- package/dist/empirical/datadog-session-query.d.ts +32 -0
- package/dist/empirical/datadog-session-query.d.ts.map +1 -1
- package/dist/empirical/datadog-session-query.js +238 -17
- package/dist/empirical/datadog-session-query.js.map +1 -1
- package/dist/empirical/engagement-analysis.d.ts +112 -0
- package/dist/empirical/engagement-analysis.d.ts.map +1 -0
- package/dist/empirical/engagement-analysis.js +354 -0
- package/dist/empirical/engagement-analysis.js.map +1 -0
- package/dist/empirical/export.d.ts +75 -0
- package/dist/empirical/export.d.ts.map +1 -0
- package/dist/empirical/export.js +392 -0
- package/dist/empirical/export.js.map +1 -0
- package/dist/empirical/forecasting.d.ts +80 -0
- package/dist/empirical/forecasting.d.ts.map +1 -0
- package/dist/empirical/forecasting.js +287 -0
- package/dist/empirical/forecasting.js.map +1 -0
- package/dist/empirical/funnel.d.ts +66 -0
- package/dist/empirical/funnel.d.ts.map +1 -0
- package/dist/empirical/funnel.js +293 -0
- package/dist/empirical/funnel.js.map +1 -0
- package/dist/empirical/history.d.ts +198 -0
- package/dist/empirical/history.d.ts.map +1 -0
- package/dist/empirical/history.js +396 -0
- package/dist/empirical/history.js.map +1 -0
- package/dist/empirical/index.d.ts +41 -16
- package/dist/empirical/index.d.ts.map +1 -1
- package/dist/empirical/index.js +96 -13
- package/dist/empirical/index.js.map +1 -1
- package/dist/empirical/interactions.d.ts +89 -0
- package/dist/empirical/interactions.d.ts.map +1 -0
- package/dist/empirical/interactions.js +346 -0
- package/dist/empirical/interactions.js.map +1 -0
- package/dist/empirical/opportunity-calculator.d.ts +6 -18
- package/dist/empirical/opportunity-calculator.d.ts.map +1 -1
- package/dist/empirical/opportunity-calculator.js +19 -1
- package/dist/empirical/opportunity-calculator.js.map +1 -1
- package/dist/empirical/report.d.ts +3 -11
- package/dist/empirical/report.d.ts.map +1 -1
- package/dist/empirical/report.js +11 -7
- package/dist/empirical/report.js.map +1 -1
- package/dist/empirical/roi-calculator.d.ts +104 -0
- package/dist/empirical/roi-calculator.d.ts.map +1 -0
- package/dist/empirical/roi-calculator.js +403 -0
- package/dist/empirical/roi-calculator.js.map +1 -0
- package/dist/empirical/seasonality.d.ts +80 -0
- package/dist/empirical/seasonality.d.ts.map +1 -0
- package/dist/empirical/seasonality.js +340 -0
- package/dist/empirical/seasonality.js.map +1 -0
- package/dist/empirical/segmentation.d.ts +135 -0
- package/dist/empirical/segmentation.d.ts.map +1 -0
- package/dist/empirical/segmentation.js +379 -0
- package/dist/empirical/segmentation.js.map +1 -0
- package/dist/empirical/statistics.d.ts +118 -0
- package/dist/empirical/statistics.d.ts.map +1 -0
- package/dist/empirical/statistics.js +344 -0
- package/dist/empirical/statistics.js.map +1 -0
- package/dist/empirical/sweet-spot.d.ts +81 -0
- package/dist/empirical/sweet-spot.d.ts.map +1 -0
- package/dist/empirical/sweet-spot.js +198 -0
- package/dist/empirical/sweet-spot.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Datadog Product Analytics Integration
|
|
3
|
+
*
|
|
4
|
+
* Queries Datadog Product Analytics for enhanced user behavior data:
|
|
5
|
+
* - Conversion funnels with drop-off analysis
|
|
6
|
+
* - Cohort retention analysis
|
|
7
|
+
* - User journey mapping
|
|
8
|
+
* - Frustration signals (rage clicks, error clicks, dead clicks)
|
|
9
|
+
*
|
|
10
|
+
* Product Analytics uses the same SDK as RUM, providing unified
|
|
11
|
+
* performance + behavior data without needing Google Analytics.
|
|
12
|
+
*
|
|
13
|
+
* @author Kanmi Obasa <i@kanmiobasa.com>
|
|
14
|
+
*/
|
|
15
|
+
import type { SessionData, DatadogQueryConfig } from './datadog-session-query.js';
|
|
16
|
+
export interface ProductAnalyticsConfig extends DatadogQueryConfig {
|
|
17
|
+
/** Application ID for Product Analytics */
|
|
18
|
+
applicationId?: string;
|
|
19
|
+
/** Include frustration signals */
|
|
20
|
+
includeFrustrationSignals?: boolean;
|
|
21
|
+
/** Include retention metrics */
|
|
22
|
+
includeRetention?: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface FrustrationSignals {
|
|
25
|
+
/** Rage clicks (rapid repeated clicks on same element) */
|
|
26
|
+
rageClicks: number;
|
|
27
|
+
/** Dead clicks (clicks on non-interactive elements) */
|
|
28
|
+
deadClicks: number;
|
|
29
|
+
/** Error clicks (clicks that triggered JS errors) */
|
|
30
|
+
errorClicks: number;
|
|
31
|
+
/** Total frustration score (weighted sum) */
|
|
32
|
+
frustrationScore: number;
|
|
33
|
+
}
|
|
34
|
+
export interface EnhancedSessionData extends SessionData {
|
|
35
|
+
/** Frustration signals from user behavior */
|
|
36
|
+
frustration?: FrustrationSignals;
|
|
37
|
+
/** Session replay available */
|
|
38
|
+
hasReplay?: boolean;
|
|
39
|
+
/** User engagement score (0-100) */
|
|
40
|
+
engagementScore?: number;
|
|
41
|
+
/** Actions taken in session */
|
|
42
|
+
actions?: UserAction[];
|
|
43
|
+
/** Errors encountered */
|
|
44
|
+
errors?: SessionError[];
|
|
45
|
+
}
|
|
46
|
+
export interface UserAction {
|
|
47
|
+
type: 'click' | 'scroll' | 'input' | 'custom';
|
|
48
|
+
name: string;
|
|
49
|
+
timestamp: string;
|
|
50
|
+
target?: string;
|
|
51
|
+
frustrationSignal?: 'rage_click' | 'dead_click' | 'error_click';
|
|
52
|
+
}
|
|
53
|
+
export interface SessionError {
|
|
54
|
+
message: string;
|
|
55
|
+
source: string;
|
|
56
|
+
timestamp: string;
|
|
57
|
+
handled: boolean;
|
|
58
|
+
}
|
|
59
|
+
export interface FunnelStep {
|
|
60
|
+
name: string;
|
|
61
|
+
/** CSS selector or action name to match */
|
|
62
|
+
selector: string;
|
|
63
|
+
/** Whether this is a conversion event */
|
|
64
|
+
isConversion?: boolean;
|
|
65
|
+
}
|
|
66
|
+
export interface FunnelResult {
|
|
67
|
+
steps: FunnelStepResult[];
|
|
68
|
+
overallConversionRate: number;
|
|
69
|
+
totalSessions: number;
|
|
70
|
+
medianTimeToConvert: number | null;
|
|
71
|
+
}
|
|
72
|
+
export interface FunnelStepResult {
|
|
73
|
+
name: string;
|
|
74
|
+
sessions: number;
|
|
75
|
+
conversionRate: number;
|
|
76
|
+
dropOffRate: number;
|
|
77
|
+
avgTimeToNext: number | null;
|
|
78
|
+
/** Performance at this step */
|
|
79
|
+
performance: {
|
|
80
|
+
p75Lcp: number | null;
|
|
81
|
+
p75Inp: number | null;
|
|
82
|
+
frustrationRate: number;
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
export interface CohortDefinition {
|
|
86
|
+
/** Cohort name */
|
|
87
|
+
name: string;
|
|
88
|
+
/** Filter query (Datadog query syntax) */
|
|
89
|
+
query: string;
|
|
90
|
+
/** Time period for cohort */
|
|
91
|
+
period?: {
|
|
92
|
+
start: string;
|
|
93
|
+
end: string;
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
export interface RetentionResult {
|
|
97
|
+
cohort: string;
|
|
98
|
+
initialUsers: number;
|
|
99
|
+
/** Retention by period (day/week/month) */
|
|
100
|
+
retention: RetentionPeriod[];
|
|
101
|
+
/** Average LTV per user */
|
|
102
|
+
avgLtv: number;
|
|
103
|
+
}
|
|
104
|
+
export interface RetentionPeriod {
|
|
105
|
+
period: number;
|
|
106
|
+
label: string;
|
|
107
|
+
usersReturned: number;
|
|
108
|
+
retentionRate: number;
|
|
109
|
+
revenue: number;
|
|
110
|
+
}
|
|
111
|
+
export interface JourneyNode {
|
|
112
|
+
page: string;
|
|
113
|
+
sessions: number;
|
|
114
|
+
avgTimeSpent: number;
|
|
115
|
+
exitRate: number;
|
|
116
|
+
nextPages: Array<{
|
|
117
|
+
page: string;
|
|
118
|
+
probability: number;
|
|
119
|
+
}>;
|
|
120
|
+
}
|
|
121
|
+
export interface UserJourneyMap {
|
|
122
|
+
entryPoints: JourneyNode[];
|
|
123
|
+
totalJourneys: number;
|
|
124
|
+
avgJourneyLength: number;
|
|
125
|
+
commonPaths: Array<{
|
|
126
|
+
path: string[];
|
|
127
|
+
count: number;
|
|
128
|
+
conversionRate: number;
|
|
129
|
+
}>;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Query Datadog for enhanced session data including frustration signals.
|
|
133
|
+
*/
|
|
134
|
+
export declare function queryEnhancedSessions(config: ProductAnalyticsConfig): Promise<{
|
|
135
|
+
sessions: EnhancedSessionData[];
|
|
136
|
+
metadata: Record<string, unknown>;
|
|
137
|
+
}>;
|
|
138
|
+
/**
|
|
139
|
+
* Query and analyze a conversion funnel.
|
|
140
|
+
*/
|
|
141
|
+
export declare function queryFunnel(config: ProductAnalyticsConfig, steps: FunnelStep[]): Promise<FunnelResult>;
|
|
142
|
+
/**
|
|
143
|
+
* Analyze funnel with performance correlation.
|
|
144
|
+
*/
|
|
145
|
+
export declare function analyzeFunnelPerformanceImpact(funnel: FunnelResult, _sessions: EnhancedSessionData[]): {
|
|
146
|
+
stepAnalysis: Array<{
|
|
147
|
+
step: string;
|
|
148
|
+
fastSessions: {
|
|
149
|
+
count: number;
|
|
150
|
+
conversionRate: number;
|
|
151
|
+
};
|
|
152
|
+
slowSessions: {
|
|
153
|
+
count: number;
|
|
154
|
+
conversionRate: number;
|
|
155
|
+
};
|
|
156
|
+
performanceImpact: number;
|
|
157
|
+
}>;
|
|
158
|
+
recommendations: string[];
|
|
159
|
+
};
|
|
160
|
+
/**
|
|
161
|
+
* Query cohort retention data.
|
|
162
|
+
*/
|
|
163
|
+
export declare function queryCohortRetention(config: ProductAnalyticsConfig, cohort: CohortDefinition, periods?: number, periodType?: 'day' | 'week' | 'month'): Promise<RetentionResult>;
|
|
164
|
+
/**
|
|
165
|
+
* Build user journey map from session data.
|
|
166
|
+
*/
|
|
167
|
+
export declare function buildUserJourneyMap(sessions: EnhancedSessionData[]): UserJourneyMap;
|
|
168
|
+
/**
|
|
169
|
+
* Analyze frustration signals and their impact on conversions.
|
|
170
|
+
*/
|
|
171
|
+
export declare function analyzeFrustrationImpact(sessions: EnhancedSessionData[]): {
|
|
172
|
+
summary: {
|
|
173
|
+
totalSessions: number;
|
|
174
|
+
frustratedSessions: number;
|
|
175
|
+
frustrationRate: number;
|
|
176
|
+
conversionWithFrustration: number;
|
|
177
|
+
conversionWithoutFrustration: number;
|
|
178
|
+
conversionImpact: number;
|
|
179
|
+
};
|
|
180
|
+
bySignalType: Array<{
|
|
181
|
+
type: string;
|
|
182
|
+
count: number;
|
|
183
|
+
sessionsAffected: number;
|
|
184
|
+
conversionRate: number;
|
|
185
|
+
}>;
|
|
186
|
+
recommendations: string[];
|
|
187
|
+
};
|
|
188
|
+
/**
|
|
189
|
+
* Generate markdown report for Product Analytics data.
|
|
190
|
+
*/
|
|
191
|
+
export declare function generateProductAnalyticsMarkdown(sessions: EnhancedSessionData[], funnel?: FunnelResult, retention?: RetentionResult): string;
|
|
192
|
+
//# sourceMappingURL=datadog-product-analytics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"datadog-product-analytics.d.ts","sourceRoot":"","sources":["../../src/empirical/datadog-product-analytics.ts"],"names":[],"mappings":"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"}
|