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
TypeScript
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