UNPKG

cross-log

Version:

A universal logging package that works in both browser and Node.js environments with environment variable configuration

104 lines 4.05 kB
import { ILogger } from '../core/types'; export interface PluginContext { logger: ILogger; config: PluginConfig; } export interface PluginConfig { enabled?: boolean; [key: string]: any; } export interface Plugin<T extends PluginConfig = PluginConfig> { name: string; version?: string; init(context: PluginContext): void; destroy?(): void; config?: T; } export interface PluginInstance { plugin: Plugin; context: PluginContext; methods?: Record<string, Function> | ApiPlugin | DatabasePlugin | AnalyticsPlugin | PerformancePlugin | SecurityPlugin; } export interface LoggerWithPlugins extends ILogger { use(plugin: Plugin): ILogger; getPlugin(name: string): Plugin | undefined; hasPlugin(name: string): boolean; removePlugin(name: string): void; api?: ApiPlugin; database?: DatabasePlugin; analytics?: AnalyticsPlugin; performance?: PerformancePlugin; security?: SecurityPlugin; } export interface ApiPluginConfig extends PluginConfig { includeSessionId?: boolean; includeHeaders?: boolean; truncateUrl?: number; } export interface ApiPlugin { request(method: string, url: string, duration?: number, status?: number, data?: any): void; response(url: string, status: number, duration?: number, data?: any): void; error(method: string, url: string, error: Error | string, status?: number): void; } export interface DatabasePluginConfig extends PluginConfig { truncateQueries?: number; includeParams?: boolean; slowQueryThreshold?: number; } export interface DatabasePlugin { query(sql: string, duration?: number, rowCount?: number, params?: any[]): void; error(sql: string, error: Error | string, params?: any[]): void; transaction(id: string, action: 'begin' | 'commit' | 'rollback', duration?: number): void; slowQuery(sql: string, duration: number, params?: any[]): void; } export interface AnalyticsPluginConfig extends PluginConfig { providers?: string[]; includeUserContext?: boolean; } export interface AnalyticsPlugin { event(name: string, provider?: string, properties?: Record<string, any>): void; pageView(url: string, provider?: string, properties?: Record<string, any>): void; conversion(name: string, value?: number, provider?: string, properties?: Record<string, any>): void; identify(userId: string, traits?: Record<string, any>, provider?: string): void; } export interface PerformancePluginConfig extends PluginConfig { webVitals?: boolean; resourceTiming?: boolean; thresholds?: { fcp?: number; lcp?: number; fid?: number; cls?: number; ttfb?: number; }; } export interface WebVitalsMetrics { fcp?: number; lcp?: number; fid?: number; cls?: number; ttfb?: number; inp?: number; } export interface PerformancePlugin { measure(name: string, duration: number, metadata?: Record<string, any>): void; mark(name: string, metadata?: Record<string, any>): void; webVitals(metrics: WebVitalsMetrics): void; resource(name: string, type: string, duration: number, size?: number): void; cache(operation: 'hit' | 'miss' | 'set' | 'delete', key: string, duration?: number): void; } export interface SecurityPluginConfig extends PluginConfig { severity?: boolean; includeIpAddress?: boolean; includeUserAgent?: boolean; } export type SecuritySeverity = 'low' | 'medium' | 'high' | 'critical'; export interface SecurityPlugin { event(type: string, severity?: SecuritySeverity, details?: Record<string, any>): void; authFailure(reason: string, userId?: string, details?: Record<string, any>): void; authSuccess(userId: string, method?: string, details?: Record<string, any>): void; accessDenied(resource: string, userId?: string, reason?: string): void; suspiciousActivity(type: string, details?: Record<string, any>): void; vulnerability(type: string, severity: SecuritySeverity, details?: Record<string, any>): void; } //# sourceMappingURL=types.d.ts.map