UNPKG

recoder-analytics

Version:

Comprehensive analytics and monitoring for the Recoder.xyz ecosystem

163 lines 4.56 kB
/** * 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