Skip to content

@nodelibraries/circuit-breakerCircuit Breaker for Node.js

A lightweight wrapper around opossum for easier circuit breaker management. Protect your applications from unexpected failures with a simple, intuitive API.

Quick Start

bash
npm install @nodelibraries/circuit-breaker
typescript
import {
  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;
  }
}

Why Circuit Breaker?

@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.

🎯 Clean & Simple

No complex setup, no framework lock-in. Your code remains clean and framework-agnostic.

typescript
const result = await circuitBreaker.execute({
  level: CircuitBreakerLevel.External,
  name: 'myService',
  requestFn: myAsyncFunction,
  args: [arg1, arg2],
});

🔒 Type-Safe by Design

Built from the ground up for TypeScript. Full type inference, autocomplete, and compile-time safety.

typescript
const result: User = await circuitBreaker.execute<User>({
  // TypeScript knows the return type
});

🚀 Production Ready

Battle-tested features including event handling, statistics tracking, and comprehensive error handling.

typescript
const stats = circuitBreaker.getCircuitBreakerStats();
console.log(stats); // Detailed statistics for all circuit breakers

Installation

bash
npm install @nodelibraries/circuit-breaker

No additional configuration required! The library works out of the box.

Support

If you find this project helpful, please consider supporting its development:

Buy Me A Coffee

Next Steps