This is a Node.js Express application that serves as a backend API wrapper for the Tavus API, providing conversation and replica management capabilities. The application is built with a focus on simplicity, reliability, and proper error handling while maintaining a clean separation of concerns through a modular architecture.
The application follows a classic MVC (Model-View-Controller) pattern with additional service and middleware layers:
┌─────────────────┐
│ Express App │
└─────────────────┘
│
┌─────────────────┐
│ Middleware │ ← CORS, Morgan, Validation, Rate Limiting
└─────────────────┘
│
┌─────────────────┐
│ Routes │ ← conversations.js, replicas.js
└─────────────────┘
│
┌─────────────────┐
│ Controllers │ ← Business logic coordination
└─────────────────┘
│
┌─────────────────┐
│ Services │ ← Tavus API integration
└─────────────────┘
│
┌─────────────────┐
│ Tavus API │ ← External service
└─────────────────┘
- Express server setup and configuration
- Middleware registration (CORS, JSON parsing, logging)
- Route mounting and health check endpoint
- Error handling integration
- conversationModels.js: Object models and validation for conversation endpoints
- replicaModels.js: Object models and validation for replica endpoints
- index.js: Centralized model exports and common utilities
- Input sanitization and comprehensive validation rules
- TavusService: Direct Tavus API integration using axios
- Handles all HTTP communication with Tavus REST API
- Provides conversation and replica management methods
- Implements comprehensive error handling and logging
- ConversationController: Handles conversation-related HTTP requests
- ReplicaController: Manages replica-related operations
- ResponseBuilder: Utility class for standardizing API responses
- Uses object models for consistent request/response formatting
- Implements centralized validation and error handling
- Provides standardized pagination and success/error responses
- conversations.js: RESTful endpoints for conversation management
- replicas.js: RESTful endpoints for replica operations
- Implements rate limiting (50 requests/15min for conversations, 30 requests/15min for replicas)
- Enhanced validation middleware integration with object models
- errorHandler.js: Centralized error handling with proper logging
- validation.js: Object model-based input validation and sanitization
- deduplication.js: Request deduplication to prevent duplicate conversation creation
- Rate limiting implementation using express-rate-limit pattern
- Query parameter validation for pagination
- logger.js: Custom logging utility with configurable log levels
- Structured JSON logging with timestamps and circular reference protection
- Environment-based log level configuration
- environment.js: Centralized environment variable management
- Validation of required configuration values
- Default value assignments
- Request Flow: Client → Express → Routes → Middleware → Controller → Service → Tavus API
- Response Flow: Tavus API → Service → Controller → Routes → Express → Client
- Error Flow: Any Layer → Error Handler → Logged Response → Client
Conversations:
POST /api/conversations- Create new conversationGET /api/conversations- List conversations with paginationGET /api/conversations/:id- Get specific conversationPUT /api/conversations/:id- Update conversationPATCH /api/conversations/:id/end- End conversationDELETE /api/conversations/:id- Delete conversation
Replicas:
POST /api/replicas- Create new replicaGET /api/replicas- List replicas with paginationGET /api/replicas/:id- Get specific replicaPUT /api/replicas/:id- Update replicaDELETE /api/replicas/:id- Delete replica
Video Room:
GET /room?url=MEETING_URL- Video room interface for Tavus conversations
- express: Web application framework
- tavus-js-sdk: Official Tavus API client
- cors: Cross-origin resource sharing middleware
- morgan: HTTP request logging
- dotenv: Environment variable management
- Minimal dependency approach to reduce security surface
- Use of proven, well-maintained packages
- No database dependencies (stateless API wrapper)
- Development:
NODE_ENV=development, detailed logging - Production:
NODE_ENV=production, optimized logging - Port: Configurable via
PORTenvironment variable (default: 8000) - Host: Configurable via
HOSTenvironment variable (default: 0.0.0.0)
TAVUS_API_KEY: Authentication key for Tavus APINODE_ENV: Application environment (development/production)LOG_LEVEL: Logging verbosity (error/warn/info/debug)
- Configured for Node.js 20 runtime
- Automatic dependency installation via workflows
- Port 5000 monitoring for health checks
- Production-ready server startup command
-
June 25, 2025: Created comprehensive object models for all API endpoints
- Added
models/conversationModels.jswith validation schemas - Added
models/replicaModels.jswith validation schemas - Added
models/index.jsfor centralized model exports - Updated validation middleware to use object models
- Added detailed API documentation with examples
- Fixed error handling to prevent circular reference issues
- Enhanced input sanitization and parameter validation
- Added
-
June 25, 2025: Updated controllers to use object models
- Added
controllers/utils/responseBuilder.jsfor standardized responses - Updated both conversation and replica controllers to use ResponseBuilder
- Implemented consistent pagination and error response formatting
- Streamlined query parameter processing and validation
- Added centralized response utilities for better maintainability
- Added
-
June 25, 2025: Fixed error handling and API integration issues
- Improved Tavus API error handling with specific error messages
- Added comprehensive API usage examples and documentation
- Fixed persona_id validation and provided clear error feedback
- App now handles both valid and invalid requests gracefully
-
June 25, 2025: Added conversation end functionality
- Added
PATCH /api/conversations/:id/endendpoint to end active conversations - Updated TavusService with endConversation method
- Enhanced API documentation with conversation ending examples
- Provided proper error handling for conversation end operations
- Added
-
June 27, 2025: Added video room interface
- Added
GET /room?url=MEETING_URLendpoint for Tavus video conversations - Implemented Daily.co integration for video calling interface
- Created responsive HTML interface with error handling
- Enhanced server with video room capabilities
- Added
-
June 27, 2025: Implemented conversation creation deduplication
- Added strict rate limiting for conversation creation (5 requests per minute)
- Created deduplication middleware to prevent duplicate requests
- Added request tracking and logging for monitoring
- Implemented 10-second window for duplicate request detection
Changelog:
- June 25, 2025. Initial setup with Tavus API integration
- June 25, 2025. Added comprehensive object models and validation
Preferred communication style: Simple, everyday language.