import type { ErrorContext, RevenueData } from '../definitions.js'; import type { Provider, ProviderConfig, ProviderType, ConsentSettings } from '../types/provider.js'; /** * Base interface for all providers */ export interface BaseProvider extends Provider { /** * Provider unique identifier */ readonly id: string; /** * Provider name */ readonly name: string; /** * Provider type */ readonly type: ProviderType; /** * Provider version */ readonly version: string; /** * Initialize the provider */ initialize(config: ProviderConfig): Promise; /** * Shutdown the provider */ shutdown(): Promise; /** * Update user consent */ updateConsent(consent: ConsentSettings): Promise; /** * Check if provider is ready */ isReady(): boolean; /** * Get current configuration */ getConfig(): ProviderConfig; /** * Enable or disable the provider */ setEnabled(enabled: boolean): void; /** * Check if provider is enabled */ isEnabled(): boolean; /** * Set debug mode */ setDebugMode(enabled: boolean): void; /** * Reset provider data */ reset(): Promise; /** * Pause provider (optional) */ pause?(): Promise; /** * Resume provider (optional) */ resume?(): Promise; } /** * Base interface for analytics providers */ export interface AnalyticsProvider extends BaseProvider { /** * Track a custom event */ track(eventName: string, properties?: Record): Promise; /** * Track a custom event (alias for track) */ trackEvent(eventName: string, properties?: Record): Promise; /** * Identify a user */ identifyUser(userId: string, traits?: Record): Promise; /** * Set user properties */ setUserProperties(properties: Record): Promise; /** * Log a screen view */ logScreenView(screenName: string, properties?: Record): Promise; /** * Log revenue */ logRevenue(data: RevenueData): Promise; /** * Start a timed event */ startTimedEvent?(eventName: string): void; /** * End a timed event */ endTimedEvent?(eventName: string, properties?: Record): Promise; /** * Set super properties (properties included with all events) */ setSuperProperties?(properties: Record): void; /** * Increment a user property */ incrementUserProperty?(property: string, value?: number): Promise; } /** * Base interface for error tracking providers */ export interface ErrorTrackingProvider extends BaseProvider { /** * Log an error */ logError(error: Error | string, context?: ErrorContext): Promise; /** * Log a message */ logMessage?(message: string, level?: 'debug' | 'info' | 'warning'): Promise; /** * Add breadcrumb */ addBreadcrumb?(message: string, category?: string, data?: Record): void; /** * Set user context */ setUserContext(user: { id?: string; email?: string; username?: string; [key: string]: unknown; }): void; /** * Set extra context */ setExtraContext(key: string, value: unknown): void; /** * Set tags */ setTags(tags: Record): void; /** * Capture unhandled exceptions */ captureException(exception: Error, context?: ErrorContext): Promise; /** * Start a transaction/span */ startTransaction?(name: string, operation?: string): unknown; /** * Finish a transaction/span */ finishTransaction?(transaction: unknown): void; } /** * Provider that supports both analytics and error tracking */ export interface UnifiedProvider extends AnalyticsProvider, ErrorTrackingProvider { /** * Provider capabilities */ readonly capabilities: { analytics: boolean; errorTracking: boolean; }; } /** * Provider factory function type */ export type ProviderFactory = () => T; /** * Provider registry interface */ export interface IProviderRegistry { analytics: Map>; errorTracking: Map>; unified: Map>; }