All files / logging log-provider.interface.ts

50% Statements 1/2
0% Branches 0/3
0% Functions 0/1
50% Lines 1/2

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74                                                                                                                                            6x      
/**
 * Log level types
 */
export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
 
/**
 * Log entry structure for persistence and dispatch
 */
export interface LogEntry {
    /** Auto-increment ID for IndexedDB */
    id?: number;
    /** Log severity level */
    level: LogLevel;
    /** Log message */
    message: string;
    /** Optional context (e.g., service name) */
    context?: string;
    /** Additional data (sanitized before storage) */
    data?: unknown;
    /** When the log was created */
    timestamp: Date;
    /** Current page URL */
    url?: string;
}
 
/**
 * Options for querying logs from storage
 */
export interface GetLogsOptions {
    /** Maximum number of logs to return */
    limit?: number;
    /** Filter logs from this date */
    fromDate?: Date;
    /** Filter logs until this date */
    toDate?: Date;
    /** Filter by specific log levels */
    levels?: LogLevel[];
}
 
/**
 * Base interface for log providers
 * Providers receive log entries and handle them (console, IndexedDB, Sentry, etc.)
 */
export interface LogProvider {
    /** Unique provider name for identification */
    readonly name: string;
    /** Whether provider is available (false on SSR for browser-only providers) */
    readonly isAvailable: boolean;
    /** Process a log entry */
    log(entry: LogEntry): void;
    /** Optional: flush buffered logs (for batch providers) */
    flush?(): Promise<void>;
}
 
/**
 * Extended interface for providers that store logs
 * Used for IndexedDB and similar persistent storage
 */
export interface LogStorageProvider extends LogProvider {
    /** Retrieve logs with optional filtering */
    getLogs(options?: GetLogsOptions): Promise<LogEntry[]>;
    /** Clear all stored logs */
    clearLogs(): Promise<void>;
    /** Get approximate storage size in bytes */
    getStorageSize(): Promise<number>;
}
 
/**
 * Type guard to check if a provider supports storage operations
 */
export function isStorageProvider(provider: LogProvider): provider is LogStorageProvider {
    return 'getLogs' in provider && 'clearLogs' in provider && 'getStorageSize' in provider;
}