HTTP client with timeout, retries, streaming, downloads, and error handling for browser and Node.js.
|
|
|
|
|
|
| Latest ✔ | Latest ✔ | Latest ✔ | Latest ✔ | Latest ✔ |
- 🌐 Universal Support - Browser and Node.js
- 🔐 Authentication - Basic, Bearer, and API key authentication
- 🔒 SSL Pinning - Certificate validation with SHA-256 pinning
- 🍪 Cookie Management - Automatic cookie handling for browser and Node.js
- ❌ Request Cancellation -
AbortSignalsupport - ⏱️ Timeout Control - Configurable timeouts (default: 30s)
- 🔄 Retry Logic - Exponential backoff with Retry-After header support
- 📡 NDJSON Streaming - Real-time JSON processing
- 📊 Progress Tracking - Upload and download progress
- 🚦 Rate Limiting - Control transfer speeds with
maxRateoption - 📦 Request Bodies - JSON, FormData, URLSearchParams, binary data
- 📥 File Downloads - Cross-platform file downloads
- ⚖️ Request Balancer - Load balance requests across multiple endpoints
- 📨 Response Forwarder - Forward responses to multiple endpoints
- 🛡️ Error Handling - Detailed error information with status codes
npm install @neabyte/fetch
<!-- ES Modules (Recommended) --> <script type="module"> import fetch from 'https://cdn.jsdelivr.net/npm/@neabyte/fetch/+esm' // or import fetch from 'https://esm.sh/@neabyte/fetch' // or import fetch from 'https://esm.run/@neabyte/fetch' // Use fetch as normal const data = await fetch.get('https://api.example.com/data') </script> <!-- UMD (Global Variable) --> <script src="https://unpkg.com/@neabyte/fetch@latest/dist/index.umd.min.js"></script> <script> // Available as global variable 'Fetch' with default export const FetchClient = window.Fetch.default const data = await FetchClient.get('https://api.example.com/data') </script>
import fetch, { FetchError } from '@neabyte/fetch' // Simple GET request const users = await fetch.get('https://jsonplaceholder.typicode.com/users') // POST with JSON body const newPost = await fetch.post('https://jsonplaceholder.typicode.com/posts', { title: 'My New Post', body: 'This is the content', userId: 1 }) // Error handling try { const data = await fetch.get('https://api.example.com/data') } catch (error) { if (error instanceof FetchError) { console.log('HTTP Error:', error.status, error.message) } } // Rate limiting for downloads (100KB/s) const file = await fetch.get('https://example.com/large-file.zip', { download: true, filename: 'large-file.zip', maxRate: 100 * 1024, // 100KB/s onProgress: (percentage) => console.log(`Download: ${percentage}%`) }) // Rate limiting for uploads (50KB/s) const result = await fetch.post('https://api.example.com/upload', fileData, { maxRate: 50 * 1024, // 50KB/s onProgress: (percentage) => console.log(`Upload: ${percentage}%`) }) // Cookie management (automatic in browser, manual in Node.js) const response = await fetch.get('https://api.example.com/data', { withCookies: true // Enables cookie handling })
For detailed examples and usage patterns, see the documentation.
- HTTP Proxy Support - HTTP proxy connections
- Proxy Authentication - Username/password for proxies
- Request/Response Interceptors - Request and response modification
- Request/Response Transformers - Data transformation
- SOCKS Proxy Support - SOCKS4/SOCKS5 proxy connections
- Additional proxy types and configurations
- Enhanced proxy error handling
- Proxy connection pooling
This project is licensed under the Apache License 2.0. See the LICENSE file for more info.