runicRPC Logo
runicRPCv0.1
Documentation

Events

runicRPC emits events for comprehensive observability.

Event Types

Endpoint Events

rpc.on('endpoint:healthy', (event) => {
  console.log(`${event.endpoint} is now healthy`);
});

rpc.on('endpoint:unhealthy', (event) => {
  console.log(`${event.endpoint} is unhealthy: ${event.reason}`);
});

rpc.on('endpoint:selected', (event) => {
  console.log(`Selected endpoint: ${event.endpoint}`);
});

Request Events

rpc.on('request:start', (event) => {
  console.log(`Starting ${event.method}`);
});

rpc.on('request:success', (event) => {
  console.log(`${event.method} completed in ${event.duration}ms`);
});

rpc.on('request:error', (event) => {
  console.error(`${event.method} failed:`, event.error);
});

rpc.on('request:retry', (event) => {
  console.log(`Retrying ${event.method}, attempt ${event.attempt}`);
});

Cache Events

rpc.on('cache:hit', (event) => {
  console.log(`Cache hit for ${event.method}`);
});

rpc.on('cache:miss', (event) => {
  console.log(`Cache miss for ${event.method}`);
});

Circuit Breaker Events

rpc.on('circuit:open', (event) => {
  console.warn(`Circuit opened for ${event.endpoint}`);
});

rpc.on('circuit:halfOpen', (event) => {
  console.log(`Circuit half-open for ${event.endpoint}`);
});

rpc.on('circuit:closed', (event) => {
  console.log(`Circuit closed for ${event.endpoint}`);
});

WebSocket Events

rpc.on('ws:reconnect', (event) => {
  console.log(`Reconnecting to ${event.endpoint}, attempt ${event.attempt}`);
});

Complete Example

const rpc = RunicRPC.create({
  providers: {
    helius: { apiKey: 'your-key' }
  }
});

// Monitor all events
rpc.on('endpoint:unhealthy', (event) => {
  // Alert your team
  sendAlert(`Endpoint ${event.endpoint} is down: ${event.reason}`);
});

rpc.on('circuit:open', (event) => {
  // Log to monitoring system
  logger.error('Circuit breaker opened', { endpoint: event.endpoint });
});

rpc.on('request:retry', (event) => {
  // Track retry metrics
  metrics.increment('rpc.retries', { method: event.method });
});

Removing Event Listeners

const handler = (event) => {
  console.log('Event:', event);
};

// Add listener
rpc.on('request:success', handler);

// Remove listener
rpc.off('request:success', handler);