/** * @rajeev02/app-shell — Chat Module * Real-time messaging with offline queue, typing indicators, media messages, read receipts */ export type MessageType = "text" | "image" | "video" | "audio" | "document" | "location" | "contact" | "sticker"; export type MessageStatus = "sending" | "sent" | "delivered" | "read" | "failed"; export interface ChatMessage { id: string; roomId: string; senderId: string; type: MessageType; content: string; mediaUrl?: string; thumbnailUrl?: string; mediaSizeBytes?: number; replyTo?: string; forwardedFrom?: string; status: MessageStatus; timestamp: number; editedAt?: number; deletedAt?: number; reactions?: Record; metadata?: Record; } export interface ChatRoom { id: string; name?: string; type: "direct" | "group" | "channel" | "support"; participants: string[]; lastMessage?: ChatMessage; unreadCount: number; muted: boolean; pinned: boolean; createdAt: number; updatedAt: number; } export interface TypingIndicator { roomId: string; userId: string; isTyping: boolean; timestamp: number; } /** * Chat Engine — manages rooms, messages, offline queue */ export declare class ChatEngine { private rooms; private messages; private offlineQueue; private typingUsers; private listeners; private currentUserId; constructor(userId: string); /** Send a text message */ sendMessage(roomId: string, content: string, type?: MessageType, replyTo?: string): ChatMessage; /** Receive a message (from server/websocket) */ receiveMessage(message: ChatMessage): void; /** Mark a message as delivered/read */ updateMessageStatus(messageId: string, roomId: string, status: MessageStatus): void; /** Mark all messages in room as read */ markRoomAsRead(roomId: string): void; /** Delete a message (soft delete) */ deleteMessage(messageId: string, roomId: string): void; /** Add reaction */ addReaction(messageId: string, roomId: string, emoji: string): void; /** Set typing indicator */ setTyping(roomId: string, isTyping: boolean): void; /** Handle remote typing indicator */ onRemoteTyping(roomId: string, userId: string, isTyping: boolean): void; /** Get typing users in a room */ getTypingUsers(roomId: string): string[]; /** Get messages for a room */ getMessages(roomId: string, limit?: number, before?: number): ChatMessage[]; /** Get all rooms sorted by last activity */ getRooms(): ChatRoom[]; /** Get total unread count */ getTotalUnread(): number; /** Get offline queue for syncing */ getOfflineQueue(): ChatMessage[]; /** Clear offline queue after successful sync */ clearOfflineQueue(): void; /** Search messages across rooms */ search(query: string, limit?: number): ChatMessage[]; /** Subscribe to room events */ onRoomEvent(roomId: string, listener: (event: ChatEvent) => void): () => void; private addMessage; private updateRoom; private emit; } export type ChatEvent = { type: "message_sent"; message: ChatMessage; } | { type: "message_received"; message: ChatMessage; } | { type: "message_deleted"; messageId: string; } | { type: "status_update"; messageId: string; status: MessageStatus; } | { type: "typing"; userId: string; isTyping: boolean; } | { type: "room_read"; roomId: string; }; //# sourceMappingURL=index.d.ts.map