UNPKG

@error-monitor/sdk

Version:

Monitor SDK - 多平台前端监控SDK解决方案,支持自动环境检测,Web、Taro小程序一站式监控方案

712 lines (704 loc) 17.4 kB
/** * 监控SDK核心类型定义 * 统一各平台的数据类型,确保数据结构一致性 */ /** * 基础配置接口 */ interface BaseConfig { /** 项目ID */ projectId: string; /** 服务器地址 */ serverUrl: string; /** API密钥 */ apiKey?: string; /** 用户ID */ userId?: string; /** 自定义标签 */ tags?: Record<string, string>; /** 是否在开发环境启用 */ enableInDev?: boolean; /** 采样率 (0-1) */ sampleRate?: number; /** 项目版本 */ projectVersion?: string; /** 构建ID */ buildId?: string; /** 构建时间 */ buildTime?: string; /** 环境 */ environment?: "development" | "testing" | "staging" | "production"; /** 是否启用源代码映射 */ enableSourceMapping?: boolean; } /** * 错误监控配置 */ interface ErrorConfig { /** 是否启用错误监控 */ enabled?: boolean; /** 最大错误数量 */ maxErrors?: number; /** 错误过滤规则 */ filters?: RegExp[]; /** 采样率 */ sampleRate?: number; } /** * 性能监控配置 */ interface PerformanceConfig { /** 是否启用性能监控 */ enabled?: boolean; /** 最大性能数据数量 */ maxPerformance?: number; /** 是否监控资源加载 */ enableResourceTiming?: boolean; /** 是否监控用户交互 */ enableUserTiming?: boolean; } /** * 行为监控配置 */ interface BehaviorConfig { /** 是否启用行为监控 */ enabled?: boolean; /** 最大行为数据数量 */ maxBehaviors?: number; /** 是否自动追踪点击 */ autoTrackClick?: boolean; /** 是否自动追踪页面浏览 */ autoTrackPageView?: boolean; } /** * 数据上报配置 */ interface ReportConfig { /** 上报间隔(毫秒) */ interval?: number; /** 最大队列大小 */ maxQueueSize?: number; /** 批量上报大小 */ batchSize?: number; /** 请求超时时间 */ timeout?: number; /** 最大重试次数 */ maxRetries?: number; /** 重试延迟 */ retryDelay?: number; /** 是否启用离线缓存 */ enableOfflineCache?: boolean; } /** * 完整的监控配置 */ interface MonitorConfig extends BaseConfig { /** 错误监控配置 */ error?: ErrorConfig; /** 性能监控配置 */ performance?: PerformanceConfig; /** 行为监控配置 */ behavior?: BehaviorConfig; /** 数据上报配置 */ report?: ReportConfig; } /** * 错误类型枚举 */ declare enum ErrorType { /** JavaScript运行时错误 */ JS_ERROR = "js_error", /** Promise未捕获错误 */ PROMISE_ERROR = "promise_error", /** 资源加载错误 */ RESOURCE_ERROR = "resource_error", /** 网络请求错误 */ HTTP_ERROR = "http_error", /** 自定义错误 */ CUSTOM_ERROR = "custom_error", /** 框架错误 */ FRAMEWORK_ERROR = "framework_error" } /** * 性能指标类型 */ declare enum PerformanceType { /** 页面加载性能 */ PAGE_LOAD = "page_load", /** 网络请求性能 */ HTTP_REQUEST = "http_request", /** 资源加载性能 */ RESOURCE_LOAD = "resource_load", /** 用户交互性能 */ USER_INTERACTION = "user_interaction", /** 自定义性能指标 */ CUSTOM_METRIC = "custom_metric" } /** * 用户行为类型 */ declare enum BehaviorType { /** 页面访问 */ PAGE_VIEW = "page_view", /** 点击事件 */ CLICK = "click", /** 滚动事件 */ SCROLL = "scroll", /** 表单提交 */ FORM_SUBMIT = "form_submit", /** 路由变化 */ ROUTE_CHANGE = "route_change", /** 自定义事件 */ CUSTOM = "custom" } /** * 基础监控数据接口 */ interface BaseMonitorData { /** 数据ID */ id: string; /** 时间戳 */ timestamp: number; /** 项目ID */ projectId: string; /** 项目版本 */ projectVersion?: string; /** 用户ID */ userId?: string; /** 会话ID */ sessionId: string; /** 页面URL */ url: string; /** 用户代理 */ userAgent: string; /** 平台信息 */ platform: string; /** 自定义标签 */ tags?: Record<string, string>; } /** * 错误监控数据 */ interface ErrorData extends BaseMonitorData { /** 错误类型 */ type: ErrorType; /** 错误消息 */ message: string; /** 错误堆栈 */ stack?: string; /** 文件名 */ filename?: string; /** 行号 */ lineno?: number; /** 列号 */ colno?: number; /** 错误对象 */ error?: any; /** 组件堆栈(React等框架) */ componentStack?: string; /** 错误级别 */ level?: "error" | "warning" | "info"; /** 项目版本 */ projectVersion?: string; /** 构建ID */ buildId?: string; /** 源代码映射状态 */ sourceMappingStatus?: "mapped" | "unmapped" | "pending"; /** 原始源文件路径 */ sourceFilePath?: string; /** 原始源代码行号 */ sourceLineNumber?: number; /** 原始源代码列号 */ sourceColumnNumber?: number; /** 源代码上下文 */ sourceContext?: { /** 前面的代码行 */ preLines: string[]; /** 错误行 */ errorLine: string; /** 后面的代码行 */ postLines: string[]; }; } /** * 性能监控数据 */ interface PerformanceData extends BaseMonitorData { /** 性能类型 */ type: PerformanceType; /** 性能指标 */ metrics: Record<string, number>; /** 资源信息 */ resource?: { name: string; size: number; duration: number; type: string; }; /** 导航时间 */ navigation?: { fetchStart: number; domainLookupStart: number; domainLookupEnd: number; connectStart: number; connectEnd: number; requestStart: number; responseStart: number; responseEnd: number; domContentLoadedEventStart: number; domContentLoadedEventEnd: number; loadEventStart: number; loadEventEnd: number; }; } /** * 用户行为数据 */ interface BehaviorData extends BaseMonitorData { /** 行为类型 */ type: BehaviorType; /** 事件名称 */ event: string; /** 目标元素 */ target?: string; /** 元素路径 */ xpath?: string; /** 额外数据 */ data?: Record<string, any>; /** 持续时间 */ duration?: number; } /** * 上报数据联合类型 */ type MonitorData = ErrorData | PerformanceData | BehaviorData; /** * 事件发射器接口 */ interface EventEmitter { on(event: string, listener: Function): void; off(event: string, listener?: Function): void; emit(event: string, ...args: any[]): boolean; once(event: string, listener: Function): void; } /** * 队列状态 */ interface QueueStatus { /** 队列大小 */ size: number; /** 最大队列大小 */ maxSize: number; /** 是否已满 */ isFull: boolean; /** 错误数量 */ errorCount: number; /** 性能数据数量 */ performanceCount: number; /** 行为数据数量 */ behaviorCount: number; } /** * SDK状态 */ interface SDKStatus { /** 是否已初始化 */ initialized: boolean; /** 是否启用 */ enabled: boolean; /** 队列状态 */ queue: QueueStatus; /** 上次上报时间 */ lastReportTime: number; /** 错误监控状态 */ errorMonitor: boolean; /** 性能监控状态 */ performanceMonitor: boolean; /** 行为监控状态 */ behaviorMonitor: boolean; } /** * 平台适配器接口 * 定义各平台需要实现的核心接口,实现平台无关的监控功能 */ /** * 平台环境信息 */ interface PlatformInfo { /** 平台类型 */ platform: "web" | "taro-mini" | "wechat-mini" | "react-native"; /** 平台版本 */ version: string; /** 用户代理信息 */ userAgent: string; /** 设备信息 */ deviceInfo: Record<string, any>; } /** * 错误捕获接口 */ interface ErrorCaptureAdapter { /** * 初始化错误监听 * @param onError 错误回调函数 */ initErrorListeners(onError: (error: ErrorData) => void): void; /** * 销毁错误监听 */ destroyErrorListeners(): void; /** * 手动捕获错误 * @param error 错误对象或消息 * @param extra 额外信息 */ captureError(error: Error | string, extra?: Record<string, any>): ErrorData; /** * 捕获HTTP错误 * @param request 请求信息 */ captureHttpError(request: HttpRequestInfo): ErrorData; } /** * 性能监控接口 */ interface PerformanceAdapter { /** * 初始化性能监控 * @param onPerformance 性能数据回调 */ initPerformanceMonitor(onPerformance: (data: PerformanceData) => void): void; /** * 销毁性能监控 */ destroyPerformanceMonitor(): void; /** * 手动记录性能指标 * @param name 指标名称 * @param metrics 指标数据 */ recordPerformance(name: string, metrics: Record<string, number>): PerformanceData; /** * 获取页面性能指标 */ getPagePerformance(): Record<string, number>; } /** * 行为监控接口 */ interface BehaviorAdapter { /** * 初始化行为监控 * @param onBehavior 行为数据回调 */ initBehaviorMonitor(onBehavior: (data: BehaviorData) => void): void; /** * 销毁行为监控 */ destroyBehaviorMonitor(): void; /** * 手动记录行为 * @param event 事件名称 * @param data 事件数据 */ recordBehavior(event: string, data?: Record<string, any>): BehaviorData; } /** * 网络适配接口 */ interface NetworkAdapter { /** * 拦截网络请求 * @param onRequest 请求回调 * @param onResponse 响应回调 * @param onError 错误回调 */ interceptNetwork(onRequest: (request: any) => void, onResponse: (response: any) => void, onError: (error: any) => void): void; /** * 发送监控数据 * @param url 接口地址 * @param data 数据 * @param options 选项 */ sendData(url: string, data: any, options?: { timeout?: number; retries?: number; headers?: Record<string, string>; }): Promise<any>; } /** * 存储适配接口 */ interface StorageAdapter { /** * 设置本地存储 * @param key 键 * @param value 值 */ setItem(key: string, value: string): void; /** * 获取本地存储 * @param key 键 */ getItem(key: string): string | null; /** * 删除本地存储 * @param key 键 */ removeItem(key: string): void; /** * 清空本地存储 */ clear(): void; } /** * HTTP请求信息 */ interface HttpRequestInfo { url: string; method: string; status: number; statusText: string; duration: number; requestSize?: number; responseSize?: number; error?: string; } /** * 完整的平台适配器接口 */ interface PlatformAdapter { /** 平台信息 */ readonly platformInfo: PlatformInfo; /** 错误捕获适配器 */ readonly errorCapture: ErrorCaptureAdapter; /** 性能监控适配器 */ readonly performance: PerformanceAdapter; /** 行为监控适配器 */ readonly behavior: BehaviorAdapter; /** 网络适配器 */ readonly network: NetworkAdapter; /** 存储适配器 */ readonly storage: StorageAdapter; /** * 初始化平台适配器 * @param config 配置选项 */ init(config: Record<string, any>): void; /** * 销毁平台适配器 */ destroy(): void; } /** * 核心基础管理器 * 提供监控SDK的基础功能:配置管理、事件系统、队列管理等 */ /** * 监控SDK核心管理器 */ declare class BaseManager implements EventEmitter { protected config: MonitorConfig; protected platformAdapter: PlatformAdapter; protected sessionId: string; protected dataQueue: MonitorData[]; protected isInitialized: boolean; protected isEnabled: boolean; protected listeners: Map<string, Function[]>; protected reportTimer?: any; constructor(config: MonitorConfig, platformAdapter: PlatformAdapter); /** * 合并默认配置和用户配置 * @param userConfig 用户配置 * @returns 合并后的配置 */ private mergeConfig; /** * 深度合并对象 * @param target 目标对象 * @param source 源对象 * @returns 合并后的对象 */ private deepMerge; /** * 初始化监控SDK */ init(): Promise<void>; /** * 检查是否应该启用监控 * @returns 是否启用 */ private shouldEnable; /** * 检查是否为开发环境 * @returns 是否为开发环境 */ private isDevelopment; /** * 初始化错误监控 */ private initErrorMonitor; /** * 初始化性能监控 */ private initPerformanceMonitor; /** * 初始化行为监控 */ private initBehaviorMonitor; /** * 添加数据到队列 * @param data 监控数据 */ protected addToQueue(data: MonitorData): void; /** * 启动定时上报 */ private startReportTimer; /** * 立即上报所有数据 * @returns Promise */ flush(): Promise<void>; /** * 发送数据到服务器 * @param data 要发送的数据 */ private sendData; /** * 手动捕获错误 * @param error 错误对象或消息 * @param extra 额外信息 */ captureError(error: Error | string, extra?: Record<string, any>): void; /** * 手动记录性能指标 * @param name 指标名称 * @param metrics 指标数据 */ recordPerformance(name: string, metrics: Record<string, number>): void; /** * 手动记录用户行为 * @param event 事件名称 * @param data 事件数据 */ recordBehavior(event: string, data?: Record<string, any>): void; /** * 获取SDK状态 * @returns SDK状态 */ getStatus(): SDKStatus; /** * 销毁SDK */ destroy(): void; on(event: string, listener: Function): void; off(event: string, listener?: Function): void; emit(event: string, ...args: any[]): boolean; once(event: string, listener: Function): void; } /** * 版本信息工具 * 提供版本信息管理和源代码映射相关功能 */ /** * 版本信息接口 */ interface VersionInfo { /** 项目版本 */ projectVersion: string; /** 构建ID */ buildId?: string; /** 构建时间 */ buildTime?: string; /** 环境 */ environment?: string; /** 是否包含 sourcemap */ hasSourcemap?: boolean; /** 额外信息 */ extra?: Record<string, string>; } /** * Web监控SDK类 */ declare class WebMonitorSDK extends BaseManager { private static instance; constructor(config: MonitorConfig); /** * 初始化Web监控SDK(单例模式) * @param config 配置选项 * @returns SDK实例 */ static init(config: MonitorConfig): WebMonitorSDK; /** * 获取当前SDK实例 * @returns SDK实例或null */ static getInstance(): WebMonitorSDK | null; /** * 销毁SDK */ static destroy(): void; } declare const MonitorSDK: { /** * 初始化监控SDK * @param config 配置选项 * @returns SDK实例 */ init: (config: MonitorConfig) => WebMonitorSDK; /** * 设置版本信息 * @param versionInfo 版本信息对象 */ setVersionInfo: (versionInfo: VersionInfo) => void; /** * 获取当前实例 * @returns SDK实例或null */ getInstance: () => WebMonitorSDK | null; /** * 手动捕获错误 * @param error 错误对象或消息 * @param extra 额外信息 */ captureError: (error: Error | string, extra?: Record<string, any>) => void; /** * 记录性能指标 * @param name 指标名称 * @param metrics 指标数据 */ recordPerformance: (name: string, metrics: Record<string, number>) => void; /** * 记录用户行为 * @param event 事件名称 * @param data 事件数据 */ recordBehavior: (event: string, data?: Record<string, any>) => void; /** * 立即上报数据 */ flush: () => Promise<void>; /** * 获取SDK状态 */ getStatus: () => SDKStatus | null; /** * 销毁SDK */ destroy: () => void; /** * 监听事件 * @param event 事件名称 * @param listener 监听器函数 */ on: (event: string, listener: Function) => void; /** * 移除事件监听 * @param event 事件名称 * @param listener 监听器函数 */ off: (event: string, listener?: Function) => void; }; export { BehaviorType, ErrorType, PerformanceType, WebMonitorSDK, MonitorSDK as default }; export type { BaseConfig, BaseMonitorData, BehaviorConfig, BehaviorData, ErrorConfig, ErrorData, EventEmitter, MonitorConfig, MonitorData, PerformanceConfig, PerformanceData, QueueStatus, ReportConfig, SDKStatus, VersionInfo };