import { ConversationItem, MessageItem } from '../types/entity'; declare const DEFAULT_CONFIG: { MAX_CONVERSATIONS: number; }; /** * 缓存管理器 - 负责内存缓存和持久化存储的管理 */ export declare class CacheManager { /** 按 queryType 分桶的会话列表:Map(实现为 Record) */ private conversationCacheByQueryType; /** 会话 id -> queryType,用于按会话查找所在桶(多桶时存「主」桶:当前为各 queryType 的最小值) */ private conversationIdToQueryType; /** 逻辑结构:Map>(实现为 Record>)。 * Set 里每一项就是一个「列表类型」数字(如 3、6);不是把 Set 本身当作 queryType。 */ private groupIdToQueryTypes; private pinnedConversationOrder; private userInfo; private currentUsername?; private activeConversation?; private persistEnabled; private debug; private config; /** * 创建缓存管理器实例 * @param options 选项 */ constructor({ persistEnabled, debug, config }?: { persistEnabled?: boolean; debug?: boolean; config?: Partial; }); /** 与 SIMSDK `config.debug` 同步(`configure` 常在构造之后调用,否则 CacheManager 内日志不会开) */ setDebug(debug: boolean): void; /** * 初始化缓存 * @param username 当前用户名 */ initialize(username?: string): void; private getQueryTypeKey; private getConversationBucket; /** 从 groupIdToQueryTypes 取出该群所在的桶编号 Set */ getQueryTypesForGroup(groupId: number): Set; private syncConversationPrimaryQueryType; private registerGroupQueryType; private unregisterGroupQueryType; /** 根据当前各 queryType 桶重建 groupId -> queryTypes */ private rebuildGroupIdToQueryTypesFromBuckets; /** * 清除所有缓存 */ clear(): void; /** * 清除当前用户的本地存储 */ private clearCurrentUserStorage; /** * 获取会话缓存 * @param queryType 会话列表类型,不传默认 3(客服) */ getConversations(queryType?: number): ConversationItem[]; /** 获取有会话数据的 queryType 列表(用于 clearAllConversationUnread 等全量更新后通知) */ getQueryTypesWithData(): Set; /** 扫描各 queryType 桶,返回包含该 groupId 的 queryType 列表(映射缺失时的兜底) */ private getQueryTypesContainingConversationInBuckets; /** * 清除指定会话的未读数 * @param conversationId 会话ID */ clearConversationUnread(conversationId: number): void; /** * 更新会话的最后已读消息ID * @param groupId 群Id * @param msgId 消息ID */ updateConversationLastRead(groupId: number, msgId: number): void; /** * 清除所有会话的未读数 */ clearAllConversationUnread(): void; /** * 清除会话 */ getActiveConversation(): ConversationItem | undefined; /** * 设置会话缓存 * @param conversations 会话列表 * @param resetPinnedOrder 是否重置置顶会话顺序(首次加载或调用 getConversations 时设为 true) * @param queryType 会话列表类型,必填(与 getConversations 请求的 queryType 一致) */ setConversations(conversations: ConversationItem[], resetPinnedOrder: boolean | undefined, queryType: number): void; /** * 添加或更新会话(仅更新已由 getConversations 登记过的 groupId→queryTypes 对应桶) */ updateConversation(conversation: ConversationItem): void; /** * 更新会话的置顶状态 * @param groupId 群组ID * @param isPinned 是否置顶 */ updateConversationPinStatus(groupId: number, isPinned: boolean): void; /** * 获取会话所在的 queryType 桶 * @param conversationId 会话ID */ getQueryTypeForConversation(conversationId: number): number | undefined; /** * 更新会话免打扰(所有包含该 groupId 的 queryType 桶) */ updateConversationMuteStatus(groupId: number, isMuted: boolean): void; /** * 更新本地会话缓存中「接入客服」展示字段(ConversationItem.supportId / supportNick)。 * * - supportId 对应业务上的 supportChatId;supportNick 为客服昵称;未接入 / 转出时可为 null、undefined,原样写入会话。 * - 会更新该 groupId 已出现在内存中的各个 queryType 桶;若本地尚未拉过该会话列表则无写入、返回空数组。 * - `groupId → queryTypes` 映射为空时会扫描各桶兜底,与客服多列表(如 3 / 6)场景一致。 * * @param groupId 群/会话业务 id * @param supportId 接入客服 id(supportChatId);未接入 / 转出时为 null 或 undefined,原样写入,不改成空串 * @param supportNick 同上 * @returns 实际写入过的 queryType 列表,供触发 OnConversationListUpdated */ updateConversationSupportInfo(groupId: number, supportId?: string | null, supportNick?: string | null): number[]; /** * 使用消息更新会话 * @param message 消息 * @returns 若有更新返回 { updated: true, queryTypes },否则 { updated: false } */ updateConversationWithMessage(message: MessageItem, username?: string): { updated: boolean; queryTypes?: Set; }; /** * 对会话排序:置顶的会话在最上面(按初始顺序),非置顶的按最新消息时间排序 * @param queryType 只排序该桶;不传则排序所有桶 */ private sortConversations; /** * 强制限制会话数量(按 queryType 桶) */ private enforceConversationLimit; /** * 获取用户相关的存储键名 * @param baseKey 基础键名 * @returns 包含用户名的键名 */ private getUserStorageKey; /** * 从本地存储加载数据 */ private loadFromStorage; /** * 保存会话列表到本地存储(按 queryType 分桶) */ private saveConversationsToStorageByQueryType; /** * 保存会话列表到本地存储(按 queryType 分桶) */ private saveConversationsToStorage; /** * 处理存储错误,主要处理配额超出问题 */ private handleStorageError; /** 清理历史版本遗留的群消息 localStorage 键 */ private purgeLegacyGroupMessageStorage; /** * 保存用户信息到本地存储 */ private saveUserInfoToStorage; /** * 清除本地存储 */ private clearStorage; /** * 析构函数 - 清理定时器 */ destroy(): void; /** * * @param groupId * @param clearUnread */ markConversationAsActive(groupId: number, clearUnread?: boolean): boolean; /** * 重置当前活跃会话 * @returns 是否成功重置(如果之前有活跃会话则为true) */ resetActiveConversation(): boolean; } export {};