unified-error-handling
Version:
A lightweight, zero-dependency error handling library with dynamic adapter loading for multiple error tracking services
93 lines • 3.03 kB
TypeScript
export interface ErrorContext {
user?: UserContext;
device?: DeviceContext;
custom?: Record<string, any>;
tags?: Record<string, string>;
extra?: Record<string, any>;
}
export interface UserContext {
id?: string;
email?: string;
username?: string;
[key: string]: any;
}
export interface DeviceContext {
platform?: string;
model?: string;
osVersion?: string;
appVersion?: string;
[key: string]: any;
}
export type ErrorLevel = 'debug' | 'info' | 'warning' | 'error' | 'fatal';
export interface Breadcrumb {
timestamp: number;
message: string;
category?: string;
level?: 'debug' | 'info' | 'warning' | 'error';
data?: Record<string, any>;
}
export interface NormalizedError {
message: string;
stack?: string;
type?: string;
code?: string;
timestamp: number;
context: ErrorContext;
breadcrumbs: Breadcrumb[];
fingerprint?: string;
level?: ErrorLevel;
handled?: boolean;
source?: 'manual' | 'global' | 'unhandledRejection' | 'react';
}
export interface ErrorAdapter {
name: string;
initialize(config: any): Promise<void>;
captureError(error: NormalizedError): Promise<void>;
captureMessage?(message: string, level?: string): Promise<void>;
setContext?(context: ErrorContext): Promise<void>;
addBreadcrumb?(breadcrumb: Breadcrumb): Promise<void>;
flush?(): Promise<void>;
close?(): Promise<void>;
}
export interface ErrorStoreState {
context: ErrorContext;
breadcrumbs: Breadcrumb[];
adapters: Map<string, ErrorAdapter>;
activeAdapter: string | null;
config: ErrorStoreConfig;
initialized: boolean;
offline: boolean;
errorQueue: NormalizedError[];
}
export interface ErrorStoreConfig {
maxBreadcrumbs?: number;
enableGlobalHandlers?: boolean;
enableOfflineQueue?: boolean;
enableConsoleCapture?: boolean;
enableNetworkCapture?: boolean;
beforeSend?: (error: NormalizedError) => NormalizedError | null;
environment?: string;
release?: string;
debug?: boolean;
}
export interface ErrorStoreActions {
initialize(config?: ErrorStoreConfig): void;
captureError(error: Error | string, additionalContext?: Partial<ErrorContext>): void;
captureMessage(message: string, level?: string): void;
setUser(user: UserContext | null): void;
setContext(context: Partial<ErrorContext>): void;
addBreadcrumb(breadcrumb: Omit<Breadcrumb, 'timestamp'>): void;
clearBreadcrumbs(): void;
useAdapter(name: string, config?: any): Promise<void>;
removeAdapter(name: string): void;
flush(): Promise<void>;
reset(): void;
}
export type ErrorStore = ErrorStoreState & ErrorStoreActions;
export type ErrorListener = (error: NormalizedError) => void;
export interface StorageAdapter {
getItem(key: string): string | null | Promise<string | null>;
setItem(key: string, value: string): void | Promise<void>;
removeItem(key: string): void | Promise<void>;
}
//# sourceMappingURL=types.d.ts.map