Skip to main content

WebSocket Module

The WebSocket module is a comprehensive real-time communication system for the Comdeall platform that enables bidirectional communication between clients and the server. It provides secure messaging capabilities between therapists and parents/children, real-time online status tracking, and robust authentication mechanisms. The module is built on Socket.IO with JWT-based authentication, message persistence, and comprehensive error handling to support the therapy management workflow with instant communication.

Table of Contents

  1. Module Structure
  2. WebSocket Events
  3. Core Features
  4. Authentication & Security
  5. Message Management
  6. Online Status Tracking
  7. Real-time Communication
  8. Integration Points
  9. Technical Implementation
  10. Error Handling
  11. Best Practices
  12. Conclusion

Module Structure

The WebSocket module follows a gateway-based architecture with comprehensive security and messaging features:

@Module({
imports: [DBModule, JwtModule.register({})],
providers: [
SocketGateway,
SocketService,
WsAuthGuard,
CustomJwtService,
SocketHelper,
MessageSanitizer
],
exports: [SocketService],
})
export class SocketModule {}

Core Components:

  1. Gateway Layer (socket.gateway.ts): WebSocket event handling, connection management, and message routing

  2. Service Layer (socket.service.ts): Business logic for messaging, online status management, and database operations

  3. Authentication Layer (guards/ws-auth.guard.ts): JWT-based WebSocket authentication and user context management

  4. Helper Services (helpers/socket.helper.ts): Utility functions for token extraction and socket operations

  5. Database Layer (db/socket/): Message persistence, online status tracking, and data management

WebSocket Events

EventDirectionDescriptionAuth RequiredPayload
connectionClient → ServerInitial WebSocket connectionJWT Token{ auth: { token } }
disconnectClient → ServerWebSocket disconnectionNoNone
private-messageClient → ServerSend private messageYesMessageInputDto
messageClient → ServerBroadcast messageYesobject
private-messageServer → ClientReceive private messageNoMessageInputDto
exceptionServer → ClientError notificationNo{ message, type, details }

Event Flow:

  • Connection: JWT authentication, user identification, online status update
  • Private Messages: Direct messaging between therapists and parents/children
  • Broadcast Messages: General message broadcasting capabilities
  • Exception Handling: Comprehensive error communication to clients

Core Features

Real-time Messaging System

The module provides a comprehensive messaging system for therapy-related communications:

Message Types:

  • Private Messages: Direct communication between therapists and parents/children
  • Broadcast Messages: General announcements and group communications
  • System Messages: Automated notifications and status updates

Message Features:

  • Message Persistence: All messages saved to database for history and compliance
  • Content Type Support: Text messages with extensible content type system
  • UUID Generation: Automatic message ID generation for tracking and persistence
  • Timestamp Management: Automatic creation timestamp with timezone support

Secure Authentication System

WebSocket connections implement JWT-based authentication with comprehensive security:

Authentication Flow:

  1. Token Extraction: JWT token extracted from WebSocket handshake
  2. Token Verification: Token validation using custom JWT service
  3. User Context: Hasura claims extraction for user identification and authorization
  4. Room Assignment: User-specific room assignment for targeted messaging

Security Features:

  • Token Validation: Comprehensive JWT token verification with error handling
  • User Context: Complete user information extraction from Hasura claims
  • Automatic Disconnection: Invalid token leads to immediate connection termination
  • Error Communication: Structured error messages sent to clients before disconnection

Online Status Management

Real-time user presence tracking supports therapy scheduling and communication:

Online Status Features:

  • Connection Tracking: Automatic online status update on connection
  • Disconnection Handling: Offline status update on disconnect
  • Database Persistence: Online status stored in database for cross-session tracking
  • Upsert Logic: Intelligent insert/update logic for status management

Status States:

  • ONLINE: User actively connected to WebSocket
  • OFFLINE: User disconnected or session ended

Authentication & Security

JWT Authentication Guard

The WsAuthGuard implements comprehensive WebSocket authentication:

@Injectable()
export class WsAuthGuard implements CanActivate {
async canActivate(context: ExecutionContext): Promise<boolean> {
const client: Socket = context.switchToWs().getClient();
const token = this.socketHelper.getAuthTokenFromSocket(client);
const payload = await this.jwtService.verifyAccessToken(token);

client.data.user = {
email: payload.data['email'],
id: payload.data['https://hasura.io/jwt/claims'][HasuraClaims.USER_ID],
role: payload.data['https://hasura.io/jwt/claims'][HasuraClaims.DEFAULT_ROLE],
therapist_id: payload.data['https://hasura.io/jwt/claims'][HasuraClaims.THERAPIST_ID],
parent_id: payload.data['https://hasura.io/jwt/claims'][HasuraClaims.PARENT_ID],
};
return true;
}
}

Authentication Features:

  • Token Extraction: Secure token retrieval from WebSocket handshake
  • Hasura Integration: Compatible with Hasura GraphQL claims structure
  • User Context: Complete user information attached to socket connection
  • Role-based Access: User role and associated IDs for authorization

Connection Security

WebSocket connections implement multiple security layers:

Security Measures:

  • Token Validation: JWT signature verification and expiration checking
  • Connection Logging: Comprehensive connection attempt logging for security monitoring
  • Error Handling: Structured error responses with appropriate error types
  • Automatic Cleanup: Immediate disconnection for unauthorized access attempts

Privacy Protection:

  • Room-based Messaging: Users only receive messages intended for them
  • UUID Validation: Room names validated as UUIDs for security
  • Message Sanitization: Input validation and sanitization for all message content

Message Management

Message Structure and Validation

Comprehensive message structure ensures data integrity and proper communication:

Message Schema:

export class MessageInputDto {
sender_type: CHAT_MEDIUM; // CHILD | THERAPIST
recipient_type: CHAT_MEDIUM; // CHILD | THERAPIST
recipient_id: string; // UUID of recipient
child_id: string | null; // Child ID for context
text: string; // Message content
content_type: string; // MIME type
created_at?: Date | string; // Timestamp
}

Validation Features:

  • Enum Validation: Sender and recipient types validated against allowed values
  • UUID Validation: All IDs validated as proper UUIDs
  • Content Validation: Message text and content type validation
  • Timestamp Handling: Automatic timestamp generation with custom override support

Message Persistence and Database Integration

All messages are persisted to the database for compliance and history:

Database Operations:

  • Message Saving: Individual and bulk message persistence
  • Message History: Retrieval of recent messages for conversation continuity
  • Read Status: Message read status tracking and management
  • Bulk Operations: Efficient bulk message processing for performance

Message Storage Features:

  • Comprehensive Logging: All messages logged with full metadata
  • Relationship Tracking: Child-therapist-parent relationship context preservation
  • Content Type Support: Extensible content type system for future media support
  • Audit Trail: Complete message audit trail for compliance requirements

Online Status Tracking

Real-time Presence Management

The module tracks user presence for therapy scheduling and communication coordination:

Presence Tracking:

  • Connection Events: Automatic online status on successful authentication
  • Disconnection Events: Automatic offline status on client disconnect
  • Status Persistence: Online status stored in database for cross-session tracking
  • Bulk Operations: Efficient status management for multiple users

Status Management Methods:

// Individual status operations
await this.socketDBService.insertOnlineStatus(userId, ONLINE_STATUS.ONLINE);
await this.socketDBService.updateOnlineStatus(userId, ONLINE_STATUS.OFFLINE);

// Bulk operations
await this.socketDBService.resetAllOnlineStatus();
await this.socketDBService.getAllOnlineUsers();

Connection Lifecycle Management

Comprehensive connection lifecycle ensures accurate presence tracking:

Connection Flow:

  1. Authentication: JWT token verification and user identification
  2. Room Assignment: User assigned to personal room using user ID
  3. Status Update: Online status updated in database
  4. Ready State: Connection ready for message exchange

Disconnection Flow:

  1. Room Analysis: User ID extracted from socket rooms
  2. Status Update: Offline status updated in database
  3. Cleanup: Connection resources cleaned up
  4. Logging: Disconnection logged for monitoring

Real-time Communication

Private Messaging System

Direct messaging between therapists and parents/children with room-based delivery:

Private Message Flow:

  1. Authentication: User authentication via WsAuthGuard
  2. Message Validation: Input validation using ValidationPipe
  3. Room Delivery: Message sent to both sender and recipient rooms
  4. Database Persistence: Message saved to database with full metadata
  5. Real-time Delivery: Instant message delivery to connected clients

Message Delivery:

// Room-based message delivery
this.io.to(payload.recipient_id).to(sender_id).emit('private-message', payload);

// Database persistence
await this.saveMessagesInDB([msgData]);

Broadcast Messaging

General message broadcasting capabilities for announcements and group communications:

Broadcast Features:

  • Authenticated Broadcasting: Requires user authentication for broadcast privileges
  • Flexible Payload: Support for various message types and content
  • Exclusion Logic: Broadcaster excluded from receiving their own broadcast
  • Real-time Delivery: Instant delivery to all connected clients except sender

Integration Points

Database Integration

Comprehensive database integration for message persistence and status tracking:

Database Operations:

  • Message Storage: Messages saved with full metadata and relationship context
  • Online Status: User presence tracked across sessions and devices
  • Message History: Complete conversation history with pagination support
  • Bulk Operations: Efficient bulk processing for high-volume scenarios

Repository Pattern:

  • Abstraction Layer: Clean separation between business logic and data access
  • Transaction Support: Database transactions for data consistency
  • Error Handling: Comprehensive error handling for database operations
  • Performance Optimization: Optimized queries for real-time performance requirements

JWT Service Integration

Seamless integration with the application's JWT authentication system:

JWT Integration:

  • Token Verification: Reuse of existing JWT verification logic
  • Hasura Claims: Compatible with Hasura GraphQL authorization system
  • User Context: Complete user information extraction from token claims
  • Error Handling: Consistent error handling with REST API authentication

Technical Implementation

Socket.IO Configuration

The module uses Socket.IO for WebSocket communication with comprehensive configuration:

Gateway Configuration:

@WebSocketGateway()
@UseFilters(AllWsExceptionFilter)
@UsePipes(new ValidationPipe({
transform: true,
exceptionFactory: (errors) => new WsException({
message: 'Validation failed',
type: 'VALIDATION_ERROR',
details: errors
})
}))

Features:

  • Global Exception Handling: Comprehensive error handling for all WebSocket operations
  • Input Validation: Automatic validation using class-validator decorators
  • Error Transformation: Structured error responses with detailed validation information
  • Transform Support: Automatic payload transformation and type conversion

Room Management Strategy

User-based room assignment ensures secure and targeted message delivery:

Room Strategy:

  • User Rooms: Each user assigned to a room using their user ID
  • UUID Validation: Room names validated as UUIDs for security
  • Message Targeting: Messages delivered to specific user rooms
  • Presence Tracking: Room membership used for online status determination

Error Handling Architecture

Comprehensive error handling ensures robust WebSocket communication:

Error Categories:

  • Authentication Errors: Invalid tokens, expired sessions, unauthorized access
  • Validation Errors: Invalid message format, missing required fields
  • System Errors: Database connectivity, server errors, unexpected exceptions
  • Communication Errors: Message delivery failures, connection issues

Error Response Format:

client.emit('exception', {
message: errorMessage,
type: errorType,
details: errorDetails,
traceId: errorTraceId,
chatId: errorChatId
});

Error Handling

The module implements comprehensive error handling for reliable WebSocket communication:

Error Types:

  • Unauthorized Access: Invalid or missing JWT tokens with immediate disconnection
  • Validation Errors: Message format validation with detailed field-level errors
  • System Errors: Database and server errors with appropriate client notification
  • Network Errors: Connection issues with retry guidance and status information

Error Management Features:

  • Structured Responses: Consistent error format across all error types
  • Client Notification: Immediate error notification to clients with actionable information
  • Logging Integration: Comprehensive error logging for debugging and monitoring
  • Graceful Degradation: System continues operation despite individual connection failures

Best Practices

Security Considerations

WebSocket security best practices ensure safe real-time communication:

Security Practices:

  • Token Validation: Always validate JWT tokens before processing any WebSocket events
  • Room Security: Use UUIDs for room names to prevent unauthorized access
  • Input Sanitization: Validate and sanitize all incoming message content
  • Connection Limits: Implement connection limits to prevent resource exhaustion

Performance Optimization

Real-time communication optimization ensures scalable performance:

Performance Practices:

  • Connection Pooling: Efficient database connection management
  • Bulk Operations: Use bulk database operations for high-volume scenarios
  • Room Targeting: Precise message targeting to minimize bandwidth usage
  • Status Caching: Cache online status for frequently accessed user presence data

Messages Management

Effective message management ensures reliable communication:

Message Practices:

  • Persistence Priority: Always persist messages before real-time delivery
  • Content Validation: Validate message content and format before processing
  • Metadata Tracking: Include comprehensive metadata for audit and compliance
  • Error Recovery: Implement message retry mechanisms for delivery failures

Conclusion

The WebSocket module provides a comprehensive real-time communication foundation for the Comdeall platform, enabling secure and reliable messaging between therapists, parents, and children. Key strengths include:

Real-time Communication:

  • Bidirectional Messaging: Instant communication with message persistence and delivery confirmation
  • Online Presence: Real-time user status tracking for therapy scheduling and coordination
  • Secure Authentication: JWT-based authentication with comprehensive security measures
  • Message Management: Complete message lifecycle with validation, persistence, and delivery

Production-Ready Features:

  • Error Handling: Comprehensive error management with structured client notification
  • Performance Optimization: Efficient room-based messaging with database optimization
  • Security Implementation: Multi-layered security with token validation and input sanitization
  • Integration Architecture: Seamless integration with existing JWT and database systems

Scalable Design:

  • Room Management: Efficient user-based room assignment for targeted messaging
  • Database Integration: Robust message persistence with bulk operation support
  • Status Tracking: Comprehensive online status management across sessions
  • Monitoring Support: Complete logging and error tracking for operational excellence

The module's architecture supports the critical real-time communication needs of the therapy management platform, ensuring reliable, secure, and efficient messaging capabilities that enhance the therapeutic relationship between all stakeholders in the child development process.