recoder-analytics
Version:
Comprehensive analytics and monitoring for the Recoder.xyz ecosystem
163 lines • 4.56 kB
TypeScript
/**
* Usage Analytics System for Recoder.xyz Ecosystem
*
* Privacy-focused analytics with user consent and data protection
*/
import { EventEmitter } from 'events';
export interface AnalyticsEvent {
id: string;
timestamp: number;
platform: 'cli' | 'web' | 'extension';
userId?: string;
sessionId: string;
eventType: string;
eventName: string;
properties: Record<string, any>;
metadata: {
version: string;
os: string;
nodeVersion?: string;
browserVersion?: string;
extensionVersion?: string;
};
}
export interface UsageMetrics {
daily: {
users: number;
sessions: number;
codeGenerations: number;
tokensUsed: number;
errors: number;
};
weekly: {
users: number;
sessions: number;
codeGenerations: number;
avgSessionDuration: number;
retentionRate: number;
};
monthly: {
users: number;
newUsers: number;
churnRate: number;
totalGenerations: number;
avgGenerationsPerUser: number;
};
features: {
mostUsedProviders: Array<{
provider: string;
usage: number;
}>;
mostUsedCommands: Array<{
command: string;
usage: number;
}>;
popularLanguages: Array<{
language: string;
usage: number;
}>;
averageProjectSize: number;
};
}
export interface PrivacySettings {
analyticsEnabled: boolean;
errorReportingEnabled: boolean;
performanceMetricsEnabled: boolean;
featureUsageEnabled: boolean;
shareAnonymousStats: boolean;
}
export declare class UsageAnalytics extends EventEmitter {
private static instance;
private events;
private sessionId;
private userId?;
private platform;
private privacySettings;
private isEnabled;
private constructor();
static getInstance(platform: 'cli' | 'web' | 'extension'): UsageAnalytics;
/**
* Initialize analytics with user consent
*/
initializeAnalytics(): Promise<void>;
/**
* Start analytics collection
*/
private startAnalytics;
/**
* Set user ID (hashed for privacy)
*/
setUserId(userId: string): void;
/**
* Track analytics event
*/
trackEvent(eventType: string, eventName: string, properties?: Record<string, any>): void;
/**
* Track code generation
*/
trackCodeGeneration(provider: string, language: string, tokens: number, success: boolean): void;
/**
* Track command usage
*/
trackCommandUsage(command: string, args: string[], success: boolean): void;
/**
* Track error occurrence
*/
trackError(error: Error, context?: Record<string, any>): void;
/**
* Track performance metrics
*/
trackPerformance(metric: string, value: number, unit: string): void;
/**
* Track feature usage
*/
trackFeatureUsage(feature: string, action: string, metadata?: Record<string, any>): void;
/**
* Get usage metrics
*/
getUsageMetrics(): UsageMetrics;
/**
* Update privacy settings
*/
updatePrivacySettings(settings: Partial<PrivacySettings>): void;
/**
* Get current privacy settings
*/
getPrivacySettings(): PrivacySettings;
/**
* Export user data (GDPR compliance)
*/
exportUserData(): any;
/**
* Delete user data (GDPR compliance)
*/
deleteUserData(): void;
private generateSessionId;
private generateEventId;
private hashUserId;
private sanitizeProperties;
private isSensitiveKey;
private sanitizeString;
private sanitizeErrorMessage;
private sanitizeStackTrace;
private getMetadata;
private getVersion;
private sendToAnalyticsService;
private calculateDailyMetrics;
private calculateWeeklyMetrics;
private calculateMonthlyMetrics;
private calculateFeatureMetrics;
private getUniqueUserCount;
private getUniqueSessionCount;
private calculateAverageSessionDuration;
private calculateRetentionRate;
private getDefaultPrivacySettings;
private loadPrivacySettings;
private savePrivacySettings;
private clearStoredData;
}
export declare const createCLIAnalytics: () => UsageAnalytics;
export declare const createWebAnalytics: () => UsageAnalytics;
export declare const createExtensionAnalytics: () => UsageAnalytics;
export default UsageAnalytics;
//# sourceMappingURL=usage-analytics.d.ts.map