import { Parser } from "."; import { Message } from "./types"; /** * WebSocket 连接管理器(单例模式)。 * * 管理 WebSocket 的连接生命周期: * - 建立连接(仅调用一次) * - 自动重连(断开后每 3 秒重试) * - 消息分发到多个监听器 * - 通过 send() 主动发送消息到主程序 * - 内部自动处理 DimSumChatWidgetInfoRequest 等握手消息 * * @see {@link https://dimsum.chat/zh/api/websocket-manager.html} */ declare class WebSocketManager { private static instance; private webSocket; private messageListeners; /** * Nickname for this widget instance. * Set before connection (via onMessageOptions) or dynamically at runtime. * When non-empty, it will be included in DimSumChatWidgetInfoResponse * so other components can identify this widget via DimSumChatCallMessageRequest. */ widgetNickName: string; private constructor(); /** * 获取唯一的 WebSocket 管理器实例。 * * @returns WebSocketManager 单例 */ static getInstance(): WebSocketManager; /** * 连接到指定 WebSocket 服务器。 * * 仅可调用一次,重复调用将被忽略。 * 连接断开后自动每 3 秒尝试重连。 * * @param url - WebSocket 服务器 URL * @see {@link https://dimsum.chat/zh/api/websocket-manager.html#websocketmanager-connect} */ connect(url: string | URL): void; private handleMessage; /** * 注册消息监听器。 * * 收到 WebSocket 消息后以字符串形式传递给监听器。 * 添加监听器时若连接已建立,会自动推送一条欢迎消息。 * * @param listener - 消息回调,接收原始 JSON 字符串 * @see {@link https://dimsum.chat/zh/api/websocket-manager.html#websocketmanager-addmessagelistener} */ addMessageListener(listener: (message: string) => void): void; /** * 移除已注册的消息监听器。 * * @param listener - 之前通过 addMessageListener 注册的回调 */ removeMessageListener(listener: (message: string) => void): void; /** * 通过 WebSocket 主动发送消息到主程序。 * * 连接未就绪时静默失败,不会抛出异常。 * * @param message - 要发送的消息对象,会自动 JSON.stringify * @returns 发送成功返回 true,连接未就绪返回 false * * @example * ```ts * import { WebSocketManager } from 'dimsum-chat' * * const ws = WebSocketManager.getInstance() * ws.send({ * type: 'DimSumChatCallMessageRequest', * content: { * targetNickName: 'another-widget', * requestData: { action: 'refresh' } * } * }) * ``` */ send(message: object): boolean; } /** * 根据当前页面 URL 自动生成 WebSocket 服务器地址。 * * http 页面 → ws://,https 页面 → wss:// * 路径固定为 /websocket。 * * @returns WebSocket URL,例如 "ws://localhost:13500/websocket" */ declare function getWebSocketURL(): string; /** * 生成 B 站用户头像的代理 URL。 * * 走主程序 /bface/ 接口,避免跨域问题。 * * @param uid - B 站用户 ID * @returns 头像代理 URL,例如 "http://localhost:13500/bface/123456" */ declare function getBfaceURL(uid: string | number): string; /** * onMessage 配置选项。 * * @see {@link https://dimsum.chat/zh/api/websocket-manager.html#onmessage} */ interface onMessageOptions { customWsServer?: string | URL; /** * Nickname for this widget instance. * Set this to identify your widget when communicating between components * (e.g., via DimSumChatCallMessageRequest). * * Can also be set directly on WebSocketManager.getInstance().widgetNickName * at any point before the DimSumChatWidgetInfoRequest is received. */ widgetNickName?: string; } /** * 注册消息回调,一行代码接入直播间消息。 * * 内部组合了 WebSocketManager、getWebSocketURL、Parser 和 DimSumAuth, * 自动处理连接、认证和消息解析,开箱即用。 * * @param callback - 消息回调,接收原始 Message 和已创建的 Parser 实例 * @param options - 配置选项(可选),支持自定义 WebSocket 服务器 * * @example * ```ts * import { onMessage } from 'dimsum-chat' * * onMessage((msg, parser) => { * console.log(parser.userName + ': ' + parser.comment) * }) * ``` * * @see {@link https://dimsum.chat/zh/api/websocket-manager.html#onmessage} */ declare function onMessage(callback: (message: Message, parser: Parser) => void, options?: onMessageOptions): void; export { WebSocketManager, getBfaceURL, getWebSocketURL, onMessage };