Ravex

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

  • SendMessagePayload
  • EditMessagePayload
  • ReactPayload
  • CreateRoomPayload

See the full definitions and more payload types in the source:

Next Steps

On this page