182 lines
4.7 KiB
TypeScript
182 lines
4.7 KiB
TypeScript
export type EventLevel = 'fatal' | 'error' | 'warning' | 'info' | 'debug';
|
|
export interface ContextLevelConfig {
|
|
maxStackFrames: number;
|
|
maxBreadcrumbs: number;
|
|
}
|
|
export type ContextLevelMap = Record<EventLevel, ContextLevelConfig>;
|
|
export interface UserInfo {
|
|
id?: string;
|
|
username?: string;
|
|
email?: string;
|
|
[key: string]: unknown;
|
|
}
|
|
export interface StackFrame {
|
|
filename: string;
|
|
function?: string;
|
|
lineno?: number;
|
|
colno?: number;
|
|
in_app?: boolean;
|
|
}
|
|
export interface ExceptionInfo {
|
|
type: string;
|
|
value: string;
|
|
stacktrace?: {
|
|
frames: StackFrame[];
|
|
};
|
|
}
|
|
export interface RequestInfo {
|
|
url: string;
|
|
method?: string;
|
|
headers?: Record<string, string>;
|
|
referrer?: string;
|
|
}
|
|
export interface BrowserContext {
|
|
name: string;
|
|
version?: string;
|
|
}
|
|
export interface OSContext {
|
|
name: string;
|
|
version?: string;
|
|
}
|
|
export interface DeviceContext {
|
|
family?: string;
|
|
model?: string;
|
|
brand?: string;
|
|
type?: string;
|
|
}
|
|
export interface Contexts {
|
|
browser?: BrowserContext;
|
|
os?: OSContext;
|
|
device?: DeviceContext;
|
|
}
|
|
export interface Breadcrumb {
|
|
type: string;
|
|
message: string;
|
|
timestamp: number;
|
|
category?: string;
|
|
data?: Record<string, unknown>;
|
|
level?: EventLevel;
|
|
}
|
|
export interface BaseEvent {
|
|
type: string;
|
|
level: EventLevel;
|
|
timestamp: number;
|
|
release?: string;
|
|
environment?: string;
|
|
user?: UserInfo;
|
|
tags?: Record<string, string>;
|
|
extra?: Record<string, unknown>;
|
|
breadcrumbs?: Breadcrumb[];
|
|
request?: RequestInfo;
|
|
contexts?: Contexts;
|
|
context_id?: string;
|
|
}
|
|
export interface ErrorEvent extends BaseEvent {
|
|
type: 'error';
|
|
message: string;
|
|
exception?: ExceptionInfo;
|
|
fingerprint?: string;
|
|
title?: string;
|
|
}
|
|
export interface PerformanceEvent extends BaseEvent {
|
|
type: 'performance';
|
|
metric: string;
|
|
value: number;
|
|
unit: string;
|
|
rating?: 'good' | 'needs-improvement' | 'poor';
|
|
}
|
|
export interface NetworkEvent extends BaseEvent {
|
|
type: 'network';
|
|
sub_type: 'fetch' | 'xhr';
|
|
method: string;
|
|
url: string;
|
|
status_code?: number;
|
|
duration?: number;
|
|
request_size?: number;
|
|
response_size?: number;
|
|
success: boolean;
|
|
error?: string;
|
|
}
|
|
export interface BehaviorEvent extends BaseEvent {
|
|
type: 'behavior';
|
|
sub_type: 'pv' | 'click' | 'route' | 'scroll' | 'duration';
|
|
page_url: string;
|
|
referrer?: string;
|
|
properties?: Record<string, unknown>;
|
|
}
|
|
export interface CountEvent extends BaseEvent {
|
|
type: 'count';
|
|
fingerprint: string;
|
|
count: number;
|
|
ts_start: number;
|
|
ts_end: number;
|
|
}
|
|
export type SentryEvent = ErrorEvent | PerformanceEvent | NetworkEvent | BehaviorEvent | CountEvent;
|
|
export interface DSNInfo {
|
|
protocol: string;
|
|
publicKey: string;
|
|
host: string;
|
|
projectId: string;
|
|
}
|
|
export interface SamplingConfig {
|
|
rates?: {
|
|
error?: number;
|
|
performance?: number;
|
|
network?: number;
|
|
behavior?: number;
|
|
[key: string]: number | undefined;
|
|
};
|
|
}
|
|
export interface LightConfig {
|
|
dsn: string;
|
|
release?: string;
|
|
environment?: string;
|
|
enabled?: boolean;
|
|
sampleRate?: number;
|
|
maxQueueSize?: number;
|
|
flushInterval?: number;
|
|
maxRetries?: number;
|
|
retryDelay?: number;
|
|
ignoreErrors?: (string | RegExp)[];
|
|
ignoreUrls?: (string | RegExp)[];
|
|
includePaths?: (string | RegExp)[];
|
|
maxBreadcrumbs?: number;
|
|
beforeSend?: (event: SentryEvent) => SentryEvent | null;
|
|
user?: UserInfo;
|
|
plugins?: (LightPlugin | string)[];
|
|
contextLevel?: Partial<ContextLevelMap>;
|
|
sampling?: SamplingConfig;
|
|
[pluginName: string]: unknown;
|
|
}
|
|
export interface LightPlugin {
|
|
name: string;
|
|
version: string;
|
|
setup(client: LightClient): void;
|
|
destroy?(): void;
|
|
beforeReport?(event: SentryEvent): SentryEvent | null;
|
|
afterReport?(event: SentryEvent): void;
|
|
}
|
|
export interface LightClient {
|
|
config: LightConfig;
|
|
dsn: DSNInfo;
|
|
on(event: string, handler: (...args: unknown[]) => void): void;
|
|
off(event: string, handler: (...args: unknown[]) => void): void;
|
|
emit(event: string, ...args: unknown[]): void;
|
|
captureException(error: Error | unknown): void;
|
|
captureMessage(message: string, level?: EventLevel): void;
|
|
captureEvent(event: Partial<SentryEvent> & {
|
|
type: string;
|
|
}): void;
|
|
setUser(user: UserInfo | null): void;
|
|
setTag(key: string, value: string): void;
|
|
setTags(tags: Record<string, string>): void;
|
|
setExtra(key: string, value: unknown): void;
|
|
addBreadcrumb(breadcrumb: Omit<Breadcrumb, 'timestamp'>): void;
|
|
flush(): Promise<void>;
|
|
disable(): void;
|
|
enable(): void;
|
|
use(plugin: LightPlugin): void;
|
|
init(): void;
|
|
destroy(): void;
|
|
}
|