UNPKG

@botwall/middleware

Version:

Express middleware for BotWall - protects your APIs with pay-per-crawl, signature verification, and bot analytics

142 lines (109 loc) 3.9 kB
# BotWall Middleware Express middleware for protecting your API routes with pay-per-crawl, signature verification, and bot analytics. ## Installation ```bash npm install @botwall/middleware ``` ## Quick Start ```javascript const express = require('express'); const { validateCrawlRequest } = require('@botwall/middleware'); const app = express(); // Basic protection app.use('/api', validateCrawlRequest({ siteId: 'your-site-id' })); // Advanced configuration app.use('/api', validateCrawlRequest({ siteId: 'your-site-id', backendUrl: 'https://botwall-api.onrender.com', monetizedRoutes: ['/api/protected/*'], pricePerCrawl: 0.01 })); app.listen(3000, () => { console.log('Server running on port 3000'); }); ``` ## Features - 🔒 **Bot Detection** - Automatically detects bots via user-agent patterns - 💳 **Pay-per-Crawl** - Charge bots for accessing protected routes - 🔐 **Signature Verification** - Verify Ed25519 signatures for authenticated bots - 📊 **Analytics** - Track bot activity and send data to BotWall backend - 🛡️ **Route Protection** - Protect specific routes from unauthorized access - 🚀 **Easy Setup** - Simple middleware configuration ## Configuration ### Options | Option | Type | Default | Description | |--------|------|---------|-------------| | `siteId` | string | **required** | Your BotWall site ID | | `backendUrl` | string | `https://botwall-api.onrender.com` | BotWall backend URL | | `monetizedRoutes` | string[] | `['/api/protected/*']` | Routes that require payment | | `pricePerCrawl` | number | `0.01` | Price per crawl in USD | ### Example Configurations #### Basic Protection ```javascript app.use('/api', validateCrawlRequest({ siteId: 'abc123' })); ``` #### Custom Routes ```javascript app.use('/api', validateCrawlRequest({ siteId: 'abc123', monetizedRoutes: ['/api/data/*', '/api/premium/*'] })); ``` #### Custom Backend ```javascript app.use('/api', validateCrawlRequest({ siteId: 'abc123', backendUrl: 'https://your-backend.com' })); ``` ## How It Works 1. **Request Arrives** - Middleware intercepts incoming requests 2. **Bot Detection** - Checks user-agent for bot patterns 3. **Browser Check** - Allows legitimate browsers immediately 4. **Route Check** - Determines if route is monetized 5. **Protection Applied** - Blocks bots or requires payment 6. **Analytics Logged** - Sends data to BotWall backend ## Bot Types ### Browsers -**Always Allowed** - No restrictions -**Analytics Logged** - For monitoring purposes ### Known Bots (Google, Bing, etc.) -**Configurable** - Allow/block per site preferences -**Analytics Logged** - Track activity ### Signed Bots (Your Bots) -**Signature Verified** - Ed25519 verification -**Credits Checked** - Must have sufficient credits -**Payment Required** - Deducts credits per request ### Unknown Bots -**Blocked** - On monetized routes -**Analytics Logged** - Track activity ## Testing ### Test Browser Access ```bash curl -H "User-Agent: Mozilla/5.0" http://localhost:3000/api/public # Should work ✅ ``` ### Test Bot Access ```bash curl -H "User-Agent: GPTBot" http://localhost:3000/api/protected # Should be blocked ❌ ``` ### Test Signed Bot ```bash curl -H "User-Agent: CustomBot" \ -H "crawler-id: your-bot-id" \ -H "signature-input: crawler-id" \ -H "signature: your-signature" \ http://localhost:3000/api/protected # Should work with credits ✅ ``` ## Support - **Documentation**: [https://botwall.com/docs](https://botwall.com/docs) - **Issues**: [GitHub Issues](https://github.com/botwall/botwall-pay-per-crawl/issues) - **Email**: support@botwall.com ## License MIT License - see [LICENSE](../../LICENSE) for details.