Core interfaces and abstract classes for building a comprehensive service-to-service communication layer with protocols, resilience patterns, service discovery, and load balancing
npm install @naman_deep_singh/communication-coreVersion - 1.2.2
> Core interfaces and abstract classes for building a comprehensive service-to-service communication layer in TypeScript
This package provides the foundational interfaces, abstract base classes, types, and utilities needed to build a complete microservices communication ecosystem. It serves as the architectural foundation for 5 specialized subpackages that handle different aspects of service communication.
- ๐ Protocol Abstraction: Unified interface for HTTP, gRPC, WebSocket protocols
- ๐ก๏ธ Resilience Patterns: Circuit breaker and retry strategy interfaces
- ๐ Service Discovery: Dynamic service location and health monitoring
- โ๏ธ Load Balancing: Traffic distribution strategies
- ๐ฏ Unified Client: Composable client that orchestrates all components
- ๐ง Connection Pooling: Built-in connection management with health checks
- ๐ Observability: Metrics, events, and health monitoring
- ๐ฆ Interceptors: Request/response middleware system
- โก TypeScript First: Full type safety with strict import/export patterns
``bash`
npm install @naman_deep_singh/communication-core
: Base interface for all communication protocols: Connection pooling and lifecycle management: Request/response middleware: Circuit breaker pattern for fault tolerance: Configurable retry mechanisms with backoff: Dynamic service instance discovery: Traffic distribution algorithms: Main client interface that composes all components: Factory for creating and managing client instancesThese classes provide common functionality and enforce consistent patterns:
: Common protocol functionality (connection pooling, metrics, error handling): Connection lifecycle, health checks, and resource management: Caching, health monitoring, and event-driven updates: Standardized request/response objects: Service endpoint representation: Comprehensive client configuration: Connection pool settings: Protocol-specific settings: Circuit breaker thresholds and timeouts: Retry policies and backoff strategies: Load balancing algorithms and weights: Base error class with error codes and context: Connection-specific errors: Request timeout errors: Service discovery errorsThis core package enables building 5 specialized subpackages:
Purpose: Protocol-specific implementations (HTTP, gRPC, WebSocket)
``
communication-protocols/
โโโ src/
โ โโโ http/
โ โ โโโ HTTPProtocol.ts # extends BaseProtocol
โ โ โโโ HTTPConnectionPool.ts # extends BaseConnectionPool
โ โ โโโ HTTPInterceptor.ts # implements BaseInterceptor
| | โโโ index.ts
โ โโโ grpc/
โ โ โโโ GRPCProtocol.ts # extends BaseProtocol
โ โ โโโ GRPCConnectionPool.ts # extends BaseConnectionPool
โ โ โโโ GRPCInterceptor.ts # implements IInterceptor
| | โโโ index.ts
โ โโโ websocket/
โ โ โโโ WebSocketProtocol.ts # extends BaseProtocol
โ โ โโโ WebSocketConnectionPool.ts
โ โ โโโ WebSocketInterceptor.ts
| | โโโ index.ts
โ โโโ index.ts
โโโ package.json
โโโ README.md
Key Dependencies: axios, @grpc/grpc-js, ws
Usage:
`typescript`
import { HTTPProtocol } from '@naman_deep_singh/communication-protocols/http';
import { GRPCProtocol } from '@naman_deep_singh/communication-protocols/grpc';
Purpose: Fault tolerance patterns (Circuit Breaker, Retry Strategies)
``
communication-resilience/
โโโ src/
โ โโโ circuit-breaker/
โ โ โโโ CircuitBreakerImpl.ts # implements ICircuitBreaker
โ โ โโโ CircuitBreakerState.ts # State management
โ โ โโโ CircuitBreakerMetrics.ts # Failure tracking
| | โโโ index.ts
โ โโโ retry/
โ โ โโโ ExponentialBackoffRetry.ts # implements IRetryStrategy
โ โ โโโ LinearBackoffRetry.ts # implements IRetryStrategy
โ โ โโโ FixedDelayRetry.ts # implements IRetryStrategy
โ โ โโโ JitterRetry.ts # implements IRetryStrategy
| | โโโ index.ts
โ โโโ policies/
โ โ โโโ RetryPolicy.ts
โ โ โโโ CircuitBreakerPolicy.ts
| | โโโ index.ts
โ โโโ index.ts
โโโ package.json
โโโ README.md
Usage:
`typescript`
import { CircuitBreakerImpl } from '@naman_deep_singh/communication-resilience/circuit-breaker';
import { ExponentialBackoffRetry } from '@naman_deep_singh/communication-resilience/retry';
Purpose: Service discovery implementations (Consul, etcd, Kubernetes)
``
communication-discovery/
โโโ src/
โ โโโ consul/
โ โ โโโ ConsulServiceDiscoverer.ts # extends BaseServiceDiscoverer
โ โ โโโ ConsulHealthChecker.ts
โ โ โโโ ConsulWatcher.ts
| | โโโ index.ts
โ โโโ etcd/
โ โ โโโ EtcdServiceDiscoverer.ts # extends BaseServiceDiscoverer
โ โ โโโ EtcdHealthChecker.ts
โ โ โโโ EtcdWatcher.ts
| | โโโ index.ts
โ โโโ kubernetes/
โ โ โโโ K8sServiceDiscoverer.ts # extends BaseServiceDiscoverer
โ โ โโโ K8sHealthChecker.ts
โ โ โโโ K8sWatcher.ts
| | โโโ index.ts
โ โโโ static/
โ โ โโโ StaticServiceDiscoverer.ts # For testing/development
| | โโโ index.ts
โ โโโ index.ts
โโโ package.json
โโโ README.md
Key Dependencies: consul, etcd3, @kubernetes/client-node
Usage:
`typescript`
import { ConsulServiceDiscoverer } from '@naman_deep_singh/communication-discovery/consul';
import { K8sServiceDiscoverer } from '@naman_deep_singh/communication-discovery/kubernetes';
Purpose: Load balancing strategies for traffic distribution
``
communication-load-balancing/
โโโ src/
โ โโโ strategies/
โ โ โโโ RoundRobinStrategy.ts # implements ILoadBalanceStrategy
โ โ โโโ WeightedRoundRobinStrategy.ts # implements ILoadBalanceStrategy
โ โ โโโ LeastConnectionsStrategy.ts # implements ILoadBalanceStrategy
โ โ โโโ RandomStrategy.ts # implements ILoadBalanceStrategy
โ โ โโโ ConsistentHashStrategy.ts # implements ILoadBalanceStrategy
| | โโโ index.ts
โ โโโ health/
โ โ โโโ HealthAwareLoadBalancer.ts
โ โ โโโ HealthScorer.ts
| | โโโ index.ts
โ โโโ metrics/
โ โ โโโ LoadBalancerMetrics.ts
โ โ โโโ ConnectionTracker.ts
| | โโโ index.ts
โ โโโ index.ts
โโโ package.json
โโโ README.md
Usage:
`typescript`
import { RoundRobinStrategy } from '@naman_deep_singh/communication-load-balancing/strategies';
import { WeightedRoundRobinStrategy } from '@naman_deep_singh/communication-load-balancing/strategies';
Purpose: Unified client that orchestrates all components
``
communication-client/
โโโ src/
โ โโโ client/
โ โ โโโ CommunicationClient.ts # implements IClient
โ โ โโโ ClientFactory.ts # implements IClientFactory
โ โ โโโ ClientBuilder.ts # Fluent builder pattern
| | โโโ index.ts
โ โโโ pipeline/
โ โ โโโ RequestPipeline.ts
โ โ โโโ ResponsePipeline.ts
โ โ โโโ InterceptorChain.ts
| | โโโ index.ts
โ โโโ middleware/
โ โ โโโ LoggingInterceptor.ts
โ โ โโโ MetricsInterceptor.ts
โ โ โโโ TracingInterceptor.ts
โ โ โโโ AuthInterceptor.ts
| | โโโ index.ts
โ โโโ events/
โ โ โโโ ClientEventEmitter.ts
โ โ โโโ ClientEvents.ts
| | โโโ index.ts
โ โโโ index.ts
โโโ package.json
โโโ README.md
Usage:
`typescript
import { CommunicationClient, ClientBuilder } from '@naman_deep_singh/communication-client';
// Fluent builder pattern
const client = new ClientBuilder()
.withProtocol(new HTTPProtocol())
.withServiceDiscovery(new ConsulServiceDiscoverer(consulConfig))
.withLoadBalancer(new RoundRobinStrategy())
.withCircuitBreaker(new CircuitBreakerImpl(cbConfig))
.withRetryStrategy(new ExponentialBackoffRetry(retryConfig))
.build('user-service');
`
with connection pooling
- Add basic interceptor support
- Create comprehensive tests$3
- Implement CircuitBreakerImpl with state management
- Add ExponentialBackoffRetry strategy
- Integration testing with HTTP protocol$3
- Implement ConsulServiceDiscoverer
- Add health checking and caching
- Event-driven service updates$3
- Implement RoundRobinStrategy
- Add health-aware load balancing
- Performance benchmarking$3
- Create unified CommunicationClient
- Implement request pipeline
- End-to-end integration testingUsage Example
`typescript
import {
IClient,
IProtocol,
IServiceDiscoverer,
ILoadBalanceStrategy,
ICircuitBreaker,
IRetryStrategy
} from '@naman_deep_singh/communication-core';// This core package provides the contracts
// Implementations come from subpackages:
// From communication-protocols
const protocol: IProtocol = new HTTPProtocol({
timeout: 5000,
maxConnections: 100
});
// From communication-discovery
const discovery: IServiceDiscoverer = new ConsulServiceDiscoverer({
host: 'localhost',
port: 8500
});
// From communication-load-balancing
const loadBalancer: ILoadBalanceStrategy = new RoundRobinStrategy();
// From communication-resilience
const circuitBreaker: ICircuitBreaker = new CircuitBreakerImpl({
failureThreshold: 5,
timeout: 60000
});
// From communication-client
const client: IClient = new CommunicationClient({
serviceName: 'user-service',
protocol,
serviceDiscoverer: discovery,
loadBalancer,
circuitBreaker
});
// Make requests
const response = await client.call('/users/123');
``- ๐ง Modular Architecture: Use only the components you need
- ๐ Consistent Patterns: All implementations follow the same interfaces
- ๐งช Easy Testing: Mock interfaces for comprehensive unit testing
- ๐ Extensible: Add new protocols/strategies without breaking changes
- โก Performance: Built-in connection pooling and caching
- ๐ก๏ธ Reliable: Circuit breakers and retry mechanisms
- ๐ Observable: Built-in metrics and event system
This package follows strict TypeScript patterns:
- No wildcard exports (except root index)
- Type keyword for all type imports
- .js extensions in imports
- Barrel exports in all directories
MIT