import { BaseDemultiplexedHttpResource } from "./baseDemultiplexedHttp.resource"; import { ChatClientInfoAttribute, ChatData, ChatMessageResourceFilters } from "../core/entities/chat"; import { ChatMessage, ChatMessageData, MultichatMessage } from "../core/entities/message"; import { StreamListener } from "../core/websockets/websocketManager"; import { APICursorHttpResponse } from "../helpers/apiCursor.helper"; import { Observable } from "rxjs"; export interface ChatInterface { mergeMessages: Function; } /** * Chats resource, base class for the Chat. */ export declare abstract class BaseDemultiplexedHttpChatsResource extends BaseDemultiplexedHttpResource implements ChatInterface { baseResource: string; uuid: string; id: number; client_attributes: Array; sessionKey: string; messages: ChatMessage[]; data: ChatData; messagesObservable: Observable; protected sortKey: string; resourceIdentifyingMetadata: { chat: string; }; constructor(data: ChatData); abstract requestMessages(uuid: string, filters?: ChatMessageResourceFilters): Promise>; abstract mergeMessages(messages: Array): void; readonly abstract loadedMessages: ChatMessage[]; /** * This method should return an instance of a ChatMessage or a subclass. * @param {MultichatMessage | ChatMessageData} data * @returns {ChatMessage} */ abstract newMessage(data: MultichatMessage | ChatMessageData): ChatMessage; protected sortMessages(): void; /** * Get the current statuses of Chats. * @param base */ currentStatuses: (base: string) => Promise; getMessages(filters?: ChatMessageResourceFilters): Promise; loadPreviousMessages(): Promise; loadNextMessages(): Promise; /** * Return the current state of this chat * @returns {{nFromLast: nFromLast}} */ readonly state: { nFromLast: (msg: ChatMessage, origin?: string, customKey?: string) => number; }; /** * Send a message on this chat * @param {ChatMessage} message */ sendMessage(message: ChatMessage): void; /** * Listen for messages on this chat. Should be idempotent. * @return {Chat} */ ensureListeningForMessages(): this; stopListeningForMessages(): this; readonly lastMessage: ChatMessage | undefined; _findMessagesListener(listener: StreamListener): boolean; }