1.0.1 â€ĸ Published 5 months ago

accio-js v1.0.1

Weekly downloads
-
License
MIT
Repository
github
Last release
5 months ago

Accio-JS

A modern, lightweight HTTP client for Node.js with built-in retry capabilities, timeout handling, and event monitoring. Built on top of Node's native fetch (via undici).

Node.js Version TypeScript

Features

  • 🔄 Automatic retries with exponential backoff
  • âąī¸ Request timeout support
  • đŸŽ¯ Configurable retry conditions
  • 🎲 Jitter for distributed systems
  • 📊 Event-based monitoring
  • đŸ’Ē Full TypeScript support
  • đŸĒļ Lightweight with minimal dependencies

Quick Start

import { createHttpClient } from 'accio-js';

const client = createHttpClient();

try {
  const response = await client.get('https://api.example.com/data');
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error('Request failed:', error);
}

Configuration

const client = createHttpClient({
  // Default headers for all requests
  headers: {
    'Authorization': 'Bearer token',
  },
  
  // Request timeout in milliseconds
  timeout: 5000,
  
  // Retry configuration
  retry: {
    maxRetries: 3,
    initialDelay: 100,
    maxDelay: 1000,
    jitter: 0.1,
    retryableStatuses: [408, 429, 500, 502, 503, 504],
    shouldRetry: (error, attempt) => true,
  }
});

Configuration Options

OptionTypeDefaultDescription
headersRecord<string, string>{}Default headers for all requests
timeoutnumberundefinedRequest timeout in milliseconds
retry.maxRetriesnumber3Maximum number of retry attempts
retry.initialDelaynumber100Initial delay between retries (ms)
retry.maxDelaynumber1000Maximum delay between retries (ms)
retry.jitternumber0.1Random delay factor (0-1)
retry.retryableStatusesnumber[][408, 429, 500, 502, 503, 504]HTTP status codes that trigger retries

Event Monitoring

Monitor request lifecycle events:

client.on('request:start', (url, init) => {
  console.log(`Starting request to ${url}`);
});

client.on('request:end', (url, response, duration) => {
  console.log(`Request completed in ${duration}ms`);
});

client.on('request:error', (url, error, attempt) => {
  console.error(`Request failed (attempt ${attempt}):`, error);
});

client.on('request:retry', (url, error, attempt) => {
  console.log(`Retrying request (attempt ${attempt})`);
});

API Reference

HTTP Methods

  • client.get(url, init?)
  • client.post(url, init?)
  • client.put(url, init?)
  • client.delete(url, init?)
  • client.patch(url, init?)
  • client.fetch(url, init?) - Direct fetch with full request options

All methods return a Promise<Response> compatible with the Fetch API.

Events

  • request:start - Emitted when a request begins
  • request:end - Emitted when a request successfully completes
  • request:error - Emitted when a request fails
  • request:retry - Emitted before a retry attempt
1.0.1

5 months ago

1.0.0

5 months ago

0.1.1

4 years ago

0.1.0

4 years ago