@lobehub/chat
Version:
Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.
71 lines (56 loc) • 2.33 kB
text/typescript
import { DeepPartial } from 'utility-types';
import { MessageModel } from '@/database/_deprecated/models/message';
import { SessionModel } from '@/database/_deprecated/models/session';
import { UserModel } from '@/database/_deprecated/models/user';
import { UserGuide, UserInitializationState, UserPreference } from '@/types/user';
import { UserSettings } from '@/types/user/settings';
import { AsyncLocalStorage } from '@/utils/localStorage';
import { IUserService } from './type';
export class ClientService implements IUserService {
private preferenceStorage: AsyncLocalStorage<UserPreference>;
constructor() {
this.preferenceStorage = new AsyncLocalStorage('LOBE_PREFERENCE');
}
getUserRegistrationDuration = async () => {
throw new Error('Method not implemented.');
};
async getUserState(): Promise<UserInitializationState> {
const user = await UserModel.getUser();
const messageCount = await MessageModel.count();
const sessionCount = await SessionModel.count();
return {
avatar: user.avatar,
canEnablePWAGuide: messageCount >= 4,
canEnableTrace: messageCount >= 4,
hasConversation: messageCount > 0 || sessionCount > 0,
isOnboard: true,
preference: await this.preferenceStorage.getFromLocalStorage(),
settings: user.settings as UserSettings,
userId: user.uuid,
};
}
getUserSSOProviders = async () => {
// Account not exist on next-auth in client mode, no need to implement this method
return [];
};
unlinkSSOProvider = async () => {
// Account not exist on next-auth in client mode, no need to implement this method
};
// eslint-disable-next-line @typescript-eslint/no-unused-vars
updateUserSettings = async (patch: DeepPartial<UserSettings>, _?: any) => {
return UserModel.updateSettings(patch);
};
resetUserSettings = async () => {
return UserModel.resetSettings();
};
async updateAvatar(avatar: string) {
await UserModel.updateAvatar(avatar);
}
async updatePreference(preference: Partial<UserPreference>) {
await this.preferenceStorage.saveToLocalStorage(preference);
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars,unused-imports/no-unused-vars
async updateGuide(guide: Partial<UserGuide>) {
throw new Error('Method not implemented.');
}
}