Files
knowai/auth/event-manager.ts
2025-11-23 22:26:39 +08:00

67 lines
1.5 KiB
TypeScript

/**
* 认证事件管理器
* 管理认证相关的事件监听和触发
*/
import type { AuthEventType, AuthEventListener } from './types';
import { AuthError } from './errors';
/**
* 认证事件管理器
*/
export class AuthEventManager {
private listeners: Map<AuthEventType, AuthEventListener[]> = new Map();
/**
* 添加事件监听器
*/
on(event: AuthEventType, listener: AuthEventListener): void {
if (!this.listeners.has(event)) {
this.listeners.set(event, []);
}
const eventListeners = this.listeners.get(event);
// 神人判断
if (eventListeners) {
eventListeners.push(listener);
}
}
/**
* 移除事件监听器
*/
off(event: AuthEventType, listener: AuthEventListener): void {
const eventListeners = this.listeners.get(event);
if (eventListeners) {
const index = eventListeners.indexOf(listener);
if (index !== -1) {
eventListeners.splice(index, 1);
}
}
}
/**
* 触发事件
*/
emit(event: AuthEventType, ...args: unknown[]): void {
const eventListeners = this.listeners.get(event);
if (eventListeners) {
eventListeners.forEach(listener => {
try {
listener(...args);
} catch (error) {
throw AuthError.unknown(`Error in auth event listener for ${event}`, error);
}
});
}
}
/**
* 清除所有监听器
*/
clear(): void {
this.listeners.clear();
}
}
// 创建全局事件管理器实例
export const authEventManager = new AuthEventManager();