The package uses a modular transport layer architecture:
transport/
├── base.ts # Base transport with core functionality
├── websocket.ts # WebSocket-specific implementation
└── metrics/
├── base.ts # Transport-agnostic metrics
└── websocket.ts # WebSocket-specific metrics
-
Transport Agnosticism
- Core functionality in base transport
- Transport-specific features in dedicated modules
- Easy to add new transport types
-
Metrics System
- Base metrics for all transports
- Transport-specific metrics in respective modules
- Optional metrics collection
- Pluggable scoring strategies
-
Parent App Integration
// Basic usage const transport = new WebSocketTransport(); // Custom scoring transport.setScoringStrategy({ calculateScore(metrics) { return customScore; } }); // Disable metrics const transport = new WebSocketTransport({ metricsEnabled: false });
- Create new transport file in
transport/ - Extend
BaseTransport - Implement required methods
- Add transport-specific metrics
class NewTransport extends BaseTransport {
async connect(endpoint: string): Promise<void> {
// Implementation
}
async disconnect(endpoint: string): Promise<void> {
// Implementation
}
async send(endpoint: string, data: any): Promise<void> {
// Implementation
}
}- Define in appropriate metrics file
- Add to metrics provider
- Implement tracking in transport
interface CustomMetrics extends BaseMetrics {
customMetric1: number;
customMetric2: string;
}
class CustomMetricsProvider implements MetricsProvider<CustomMetrics> {
// Implementation
}-
Unit Tests
- Test each transport independently
- Mock metrics collection
- Test scoring strategies
-
Integration Tests
- Test transport with real connections
- Verify metrics collection
- Test parent app integration
-
Metrics Collection
- Use sampling for high-frequency events
- Batch metric updates
- Allow disabling metrics
-
Memory Usage
- Clean up old metrics
- Use weak references where appropriate
- Monitor memory usage
-
Code Comments
- Document public APIs
- Explain complex algorithms
- Note performance implications
-
Type Definitions
- Use proper TypeScript types
- Document type constraints
- Keep interfaces clean
-
Pull Requests
- Follow architecture principles
- Add tests for new features
- Update documentation
-
Code Style
- Use TypeScript
- Follow existing patterns
- Keep modules focused