feat(image): 新建 knowai-core:1.0.0 镜像并完成推送
Some checks reported errors
continuous-integration/drone/push Build was killed

- 搭建 api、auth、utils 等逻辑模块
- 通过 tsc、eslint、vitest 测试验证

BREAKING CHANGE: 新镜像分支
This commit is contained in:
tobegold574
2025-11-10 20:20:25 +08:00
commit 6a81b7bb13
73 changed files with 10511 additions and 0 deletions

170
auth/auth-service.ts Normal file
View File

@@ -0,0 +1,170 @@
/**
* 认证服务实现
* 集成事件管理、会话管理和存储适配器功能
* 完全实现AuthService接口定义
*/
import type { ApiClient } from '@/api/types';
import type { User } from '@/types';
import type {
AuthService,
AuthEventType
} from './types';
import type {
LoginRequest,
LoginResponse,
RegisterRequest,
RegisterResponse
} from '@/types/user';
import { AuthError } from './errors';
import { authEventManager } from './event-manager';
import { createSessionManager } from './session-manager';
import { createStorageAdapter } from './storage-adapter';
/**
* 默认认证服务实现
*/
export class DefaultAuthService implements AuthService {
private readonly apiClient: ApiClient;
private readonly sessionManager: ReturnType<typeof createSessionManager>;
private readonly storage: ReturnType<typeof createStorageAdapter>;
constructor(apiClient: ApiClient) {
this.apiClient = apiClient;
this.storage = createStorageAdapter('memory');
this.sessionManager = createSessionManager(apiClient, this.storage);
}
/**
* 用户登录
* @param credentials 登录凭证
* @returns 登录响应包含用户信息和会话ID
*/
async login(credentials: LoginRequest): Promise<LoginResponse> {
try {
const response = await this.apiClient.post<LoginResponse>('/auth/login', credentials);
// 触发登录成功事件
authEventManager.emit('login', response.user);
// 更新会话管理器中的用户信息
await this.sessionManager.getUserInfo();
return response;
} catch (error) {
throw AuthError.loginFailed('Login failed', error);
}
}
/**
* 用户注册
* @param userData 注册数据
* @returns 注册响应包含用户信息和会话ID
*/
async register(userData: RegisterRequest): Promise<RegisterResponse> {
try {
const response = await this.apiClient.post<RegisterResponse>('/auth/register', userData);
// 触发注册成功事件
authEventManager.emit('register', response.user);
// 更新会话管理器中的用户信息
await this.sessionManager.getUserInfo();
return response;
} catch (error) {
throw AuthError.registerFailed('Registration failed', error);
}
}
/**
* 用户登出
* 调用服务器端登出API清除会话
*/
async logout(): Promise<void> {
try {
// 调用服务器端登出API
await this.apiClient.post('/auth/logout');
// 清除本地缓存
this.sessionManager.clearCache();
// 触发登出事件
authEventManager.emit('logout');
} catch (error) {
// 即使API调用失败也要清除本地状态
this.sessionManager.clearCache();
throw AuthError.logoutFailed('Logout failed', error);
}
}
/**
* 获取当前用户信息
* @returns 当前用户信息
*/
async getCurrentUser(): Promise<User> {
try {
const user = await this.sessionManager.getUserInfo();
if (!user) {
throw AuthError.notAuthenticated();
}
return user;
} catch (error) {
// 如果已经是AuthError直接抛出
if (error instanceof AuthError) {
throw error;
}
throw AuthError.userNotFound('Failed to get current user', error);
}
}
/**
* 检查用户是否已认证
* @returns 是否已认证
*/
async isAuthenticated(): Promise<boolean> {
try {
return await this.sessionManager.isAuthenticated();
} catch (error) {
// 如果已经是AuthError直接抛出
if (error instanceof AuthError) {
throw error;
}
throw AuthError.unknown('Authentication check failed', error);
}
}
/**
* 添加认证事件监听器
* @param event 事件类型
* @param listener 事件监听器
*/
on(event: AuthEventType, listener: (...args: unknown[]) => void): void {
authEventManager.on(event, listener);
}
/**
* 移除认证事件监听器
* @param event 事件类型
* @param listener 事件监听器
*/
off(event: AuthEventType, listener: (...args: unknown[]) => void): void {
authEventManager.off(event, listener);
}
/**
* 清除本地缓存
* 不影响服务器端session
*/
clearCache(): void {
this.sessionManager.clearCache();
}
}
/**
* 创建认证服务实例
* @param apiClient API客户端
* @returns 认证服务实例
*/
export function createAuthService(apiClient: ApiClient): AuthService {
return new DefaultAuthService(apiClient);
}