# Duelfi Chat Server A real-time chat server built with Socket.IO and Express, supporting message creation, editing, and deletion. ## Server Configuration - **Port**: 3040 - **CORS Origins**: - http://localhost:3000 - http://localhost:3030 - http://localhost:3031 - https://dev.duelfi.io - https://beta.duelfi.io - https://duelfi.io ## Message Structure ```typescript interface ChatMessage { id: string; // Unique message identifier user: string; // User identifier (DID format) message: string; // Message content timestamp: number; // Unix timestamp } ``` ## Socket Events ### Client to Server 1. **chat message** - Purpose: Send a new message - Payload: `ChatMessage` object - Response: Broadcasts to all clients 2. **edit message** - Purpose: Edit an existing message - Payload: `{ messageId: string, newMessage: string }` - Response: Broadcasts 'message edited' on success 3. **delete message** - Purpose: Delete a message - Payload: `messageId: string` - Response: Broadcasts 'message deleted' on success ### Server to Client 1. **recent messages** - Purpose: Initial message history - Payload: `ChatMessage[]` - Trigger: On connection 2. **chat message** - Purpose: New message notification - Payload: `ChatMessage` object - Trigger: When any client sends a message 3. **message edited** - Purpose: Message edit notification - Payload: `{ messageId: string, newMessage: string }` - Trigger: When a message is successfully edited 4. **message deleted** - Purpose: Message deletion notification - Payload: `messageId: string` - Trigger: When a message is successfully deleted ## Message Storage - Messages are stored in `chat_history.json` - Maximum of 100 messages are kept in memory - File storage maintains message history - All operations (create/edit/delete) are persisted to file ## Error Handling - File operations are wrapped in try-catch blocks - Failed operations return false - Successful operations return true - All errors are logged to console ## Usage Example ```typescript // Connect to server const socket = io('http://localhost:3040'); // Send message socket.emit('chat message', { id: Date.now().toString(), user: 'did:privy:user123', message: 'Hello world', timestamp: Date.now() }); // Edit message socket.emit('edit message', { messageId: 'message-id-here', newMessage: 'Updated message' }); // Delete message socket.emit('delete message', 'message-id-here'); // Listen for events socket.on('recent messages', (messages) => { // Handle initial messages }); socket.on('chat message', (message) => { // Handle new message }); socket.on('message edited', ({ messageId, newMessage }) => { // Handle edited message }); socket.on('message deleted', (messageId) => { // Handle deleted message }); ```