// src/debug/notificationDebugger.js /** * 通知系统调试工具 * 扩展现有的 window.__NOTIFY_DEBUG__,添加更多生产环境调试能力 */ import { browserNotificationService } from '@services/browserNotificationService'; class NotificationDebugger { constructor() { this.eventLog = []; this.maxLogSize = 100; } /** * 初始化调试工具 */ init() { console.log('%c[Notification Debugger] Initialized', 'color: #FF9800; font-weight: bold;'); } /** * 记录通知事件 */ logEvent(eventType, data) { const logEntry = { type: eventType, timestamp: new Date().toISOString(), data, }; this.eventLog.unshift(logEntry); if (this.eventLog.length > this.maxLogSize) { this.eventLog = this.eventLog.slice(0, this.maxLogSize); } console.log( `%c[Notification Event] ${eventType}`, 'color: #9C27B0; font-weight: bold;', data ); } /** * 获取所有事件日志 */ getLogs() { return this.eventLog; } /** * 清空日志 */ clearLogs() { this.eventLog = []; console.log('[Notification Debugger] Logs cleared'); } /** * 导出日志 */ exportLogs() { const blob = new Blob([JSON.stringify(this.eventLog, null, 2)], { type: 'application/json', }); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = `notification-logs-${Date.now()}.json`; a.click(); URL.revokeObjectURL(url); console.log('[Notification Debugger] Logs exported'); } /** * 强制发送浏览器通知(测试用) */ forceNotification(options = {}) { const defaultOptions = { title: '🧪 测试通知', body: `测试时间: ${new Date().toLocaleString()}`, tag: `test_${Date.now()}`, requireInteraction: false, autoClose: 5000, }; const finalOptions = { ...defaultOptions, ...options }; console.log('[Notification Debugger] Sending test notification:', finalOptions); const notification = browserNotificationService.sendNotification(finalOptions); if (notification) { console.log('[Notification Debugger] ✅ Notification sent successfully'); } else { console.error('[Notification Debugger] ❌ Failed to send notification'); } return notification; } /** * 检查通知权限状态 */ checkPermission() { const permission = browserNotificationService.getPermissionStatus(); const isSupported = browserNotificationService.isSupported(); const status = { supported: isSupported, permission, canSend: isSupported && permission === 'granted', }; console.table(status); return status; } /** * 请求通知权限 */ async requestPermission() { console.log('[Notification Debugger] Requesting notification permission...'); const result = await browserNotificationService.requestPermission(); console.log(`[Notification Debugger] Permission result: ${result}`); return result; } /** * 打印事件统计 */ printStats() { const stats = { total: this.eventLog.length, byType: {}, }; this.eventLog.forEach((log) => { stats.byType[log.type] = (stats.byType[log.type] || 0) + 1; }); console.log('=== Notification Stats ==='); console.table(stats.byType); console.log(`Total events: ${stats.total}`); return stats; } /** * 按类型过滤日志 */ getLogsByType(eventType) { return this.eventLog.filter((log) => log.type === eventType); } /** * 获取最近的事件 */ getRecentEvents(count = 10) { return this.eventLog.slice(0, count); } } // 导出单例 export const notificationDebugger = new NotificationDebugger(); export default notificationDebugger;