Core Concepts
The fundamental data models in ravex — User, Room, Message, and related types.
Core Concepts
ravex is built around a small set of well-defined types that are shared between server and client.
User
Represents a participant in the chat system.
interface User {
id: string;
username: string;
displayName?: string;
avatar?: string;
status: "online" | "offline" | "away" | "busy";
socketIds: string[];
connectedAt?: Date;
lastSeen?: Date;
metadata?: Record<string, unknown>;
}Room
A chat room or conversation.
interface Room {
id: string;
name: string;
type: "personal" | "group";
members: string[]; // user IDs
admins: string[];
createdBy: string;
createdAt: Date;
maxMembers?: number;
isPrivate?: boolean;
metadata?: Record<string, unknown>;
}Message
The core unit of communication.
interface Message {
id: string;
roomId: string;
senderId: string;
senderName: string;
content: string;
type: "text" | "image" | "file" | "audio" | "video" | "system";
chatType: "personal" | "group";
replyTo?: string;
attachments?: Attachment[];
reactions?: Record<string, string[]>; // emoji -> user IDs
deliveryStatus: "sent" | "delivered" | "read";
editedAt?: Date;
deletedAt?: Date;
metadata?: Record<string, unknown>;
createdAt: Date;
}Attachment
interface Attachment {
id: string;
name: string;
url: string;
mimeType: string;
size: number;
}Common Payloads
SendMessagePayloadEditMessagePayloadReactPayloadCreateRoomPayload
See the full definitions and more payload types in the source: