Files
knowai/auth/event-manager.ts
tobegold574 6a81b7bb13
Some checks reported errors
continuous-integration/drone/push Build was killed
feat(image): 新建 knowai-core:1.0.0 镜像并完成推送
- 搭建 api、auth、utils 等逻辑模块
- 通过 tsc、eslint、vitest 测试验证

BREAKING CHANGE: 新镜像分支
2025-11-10 20:20:25 +08:00

66 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();