Resilient by Default
Protect your applications from cascading failures with automatic circuit breaker patterns
A lightweight wrapper around opossum for easier circuit breaker management. Protect your applications from unexpected failures with a simple, intuitive API.
npm install @nodelibraries/circuit-breakerimport {
CircuitBreaker,
CircuitBreakerLevel,
} from '@nodelibraries/circuit-breaker';
import axios from 'axios';
const circuitBreaker = new CircuitBreaker({
timeout: () => console.error('Request timeout'),
failure: () => console.error('Request failed'),
open: () => console.error('Circuit breaker opened'),
});
async function fetchUserData(userId: number) {
const response = await axios.get(`https://api.example.com/users/${userId}`);
return response.data;
}
async function getUser(userId: number) {
try {
const user = await circuitBreaker.execute({
level: CircuitBreakerLevel.External,
name: 'fetchUserData',
requestFn: fetchUserData,
args: [userId],
fallbackFn: () => ({ id: userId, name: 'Unknown User' }),
});
return user;
} catch (error) {
console.error('Failed to fetch user:', error);
throw error;
}
}@nodelibraries/circuit-breaker is a production-ready, lightweight wrapper around the powerful opossum circuit breaker library. It simplifies circuit breaker management with an intuitive API while maintaining all the flexibility and power of the underlying library.
No complex setup, no framework lock-in. Your code remains clean and framework-agnostic.
const result = await circuitBreaker.execute({
level: CircuitBreakerLevel.External,
name: 'myService',
requestFn: myAsyncFunction,
args: [arg1, arg2],
});Built from the ground up for TypeScript. Full type inference, autocomplete, and compile-time safety.
const result: User = await circuitBreaker.execute<User>({
// TypeScript knows the return type
});Battle-tested features including event handling, statistics tracking, and comprehensive error handling.
const stats = circuitBreaker.getCircuitBreakerStats();
console.log(stats); // Detailed statistics for all circuit breakersnpm install @nodelibraries/circuit-breakerNo additional configuration required! The library works out of the box.
If you find this project helpful, please consider supporting its development: