From 015aa67ec2e483425ea5e21b1ad7873383638136 Mon Sep 17 00:00:00 2001 From: Shinei Nouzen <157171073+Shineii86@users.noreply.github.com> Date: Thu, 2 Jul 2026 08:58:05 +0530 Subject: [PATCH] fix: ScraperAPI requires premium plan for protected domains like Miruro - pipe.js: add premium=true to ScraperAPI URL - README.md: update ScraperAPI cost to $49/mo (premium required) - .env.example: note protected domain requirement - CHANGELOG.md: update ScraperAPI cost info --- .env.example | 3 ++- CHANGELOG.md | 2 +- README.md | 14 +++++++------- src/helpers/pipe.js | 2 +- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/.env.example b/.env.example index fadd395..e5cdf08 100644 --- a/.env.example +++ b/.env.example @@ -16,9 +16,10 @@ PRU_PROXY_KEY=a54d389c18527d9fd3e7f0643e27edbe # SELF-HEALING FALLBACK METHODS (optional, enables auto-recovery) # ══════════════════════════════════════════════════════════════ -# Method 2: ScraperAPI (free 1,000 req/month, no CC needed) +# Method 2: ScraperAPI (requires premium plan — $49/month) # Sign up at https://www.scraperapi.com/ # Enables automatic fallback when direct requests are blocked by Cloudflare +# NOTE: Miruro is a protected domain — free plan will NOT work SCRAPER_API_KEY= # Method 3: FlareSolverr (self-hosted browser proxy) diff --git a/CHANGELOG.md b/CHANGELOG.md index 056afe9..7e164e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,7 +25,7 @@ GET /api/pipe-health #### Configuration (all optional, zero-config to start) | Env Var | Purpose | Free? | |---------|---------|-------| -| `SCRAPER_API_KEY` | ScraperAPI proxy | Yes (1K req/mo) | +| `SCRAPER_API_KEY` | ScraperAPI proxy | No ($49/mo premium required for protected domains) | | `FLARESOLVERR_URL` | FlareSolverr browser | Yes (self-hosted) | | `PIPE_OBF_KEY` | XOR decode key | N/A | diff --git a/README.md b/README.md index ed5031d..c1c8c88 100644 --- a/README.md +++ b/README.md @@ -102,10 +102,10 @@ When Cloudflare blocks streaming requests, the API automatically tries fallback methods: - **Direct** → Mirror rotation across 4 domains (miruro.to, miruro.ru, miruro.bz, miruro.tv) -- **ScraperAPI** → Free proxy bypass (1K req/month) +- **ScraperAPI** → Proxy bypass via premium residential IPs ($49/mo) - **FlareSolverr** → Self-hosted browser proxy -Zero-config: works out of the box. Add `SCRAPER_API_KEY` env var for automatic Cloudflare bypass. +Zero-config: works out of the box. Add `SCRAPER_API_KEY` env var for automatic Cloudflare bypass (requires ScraperAPI premium plan for protected domains). ### ⚠️ Streaming Status @@ -124,7 +124,7 @@ Zero-config: works out of the box. Add `SCRAPER_API_KEY` env var for automatic C **To fix streaming**, set one of these environment variables in Vercel: ```bash -# Option 1: ScraperAPI (free 1K requests/month) +# Option 1: ScraperAPI (requires premium plan — $49/month) SCRAPER_API_KEY=your_scraperapi_key # Option 2: FlareSolverr (self-hosted, unlimited) @@ -436,12 +436,12 @@ bun dev | `ALLOWED_ORIGINS` | `*` | Comma-separated allowed origins (restricts CORS in production) | | `PIPE_OBF_KEY` | `71951034...` | Pipe response XOR obfuscation key (hex, 32 chars) | | `PRU_PROXY_KEY` | `a54d389c...` | PRU proxy URL XOR key (hex, 32 chars) | -| `SCRAPER_API_KEY` | — | ScraperAPI key for Cloudflare bypass (free 1K req/month) | +| `SCRAPER_API_KEY` | — | ScraperAPI key for Cloudflare bypass (requires premium plan, $49/mo) | | `FLARESOLVERR_URL` | — | FlareSolverr URL for browser-based bypass (e.g., `http://127.0.0.1:8191`) | > ⚠️ **Required for production:** Set `ALLOWED_ORIGINS` to restrict CORS. Set `PIPE_OBF_KEY` and `PRU_PROXY_KEY` for pipe decoding. > -> 📺 **For streaming:** Set `SCRAPER_API_KEY` or `FLARESOLVERR_URL` to bypass Cloudflare bot protection. See [How to Fix Streaming Issues](#-how-to-fix-streaming-issues). +> 📺 **For streaming:** Set `SCRAPER_API_KEY` (requires ScraperAPI premium plan) or `FLARESOLVERR_URL` (free, self-hosted) to bypass Cloudflare bot protection. See [How to Fix Streaming Issues](#-how-to-fix-streaming-issues). ### Vercel Configuration @@ -1503,7 +1503,7 @@ ScraperAPI proxies your requests through residential IPs, bypassing Cloudflare. SCRAPER_API_KEY=your_api_key_here ``` -**Cost:** Free for 1K requests/month. Paid plans from $49/month for 250K requests. +**Cost:** $49/month (premium plan required for protected domains like Miruro). #### Fix 2: FlareSolverr (Self-Hosted — Unlimited) @@ -1626,7 +1626,7 @@ Yes! Use npm start to run the Express server on any VPS, Docker con
❌ Why are streaming endpoints returning 500 errors?
-Cloudflare's bot protection blocks requests from Vercel's datacenter IPs. The pipe endpoint (miruro.to/api/secure/pipe) returns HTTP 403. To fix this, set SCRAPER_API_KEY (free 1K req/month from ScraperAPI) or FLARESOLVERR_URL (self-hosted browser proxy) in your Vercel environment variables. See How to Fix Streaming Issues above. +Cloudflare's bot protection blocks requests from Vercel's datacenter IPs. The pipe endpoint (miruro.to/api/secure/pipe) returns HTTP 403. To fix this, set SCRAPER_API_KEY (requires ScraperAPI premium plan, $49/mo) or FLARESOLVERR_URL (self-hosted, free) in your Vercel environment variables. See How to Fix Streaming Issues above.
diff --git a/src/helpers/pipe.js b/src/helpers/pipe.js index 65d28cd..1efe4cf 100644 --- a/src/helpers/pipe.js +++ b/src/helpers/pipe.js @@ -153,7 +153,7 @@ const methodScraperAPI = async (encodedReq) => { if (!SCRAPER_API_KEY) throw new Error("SCRAPER_API_KEY not configured"); const targetUrl = `${MIRURO_ORIGINS[0]}${PIPE_PATH}?e=${encodedReq}`; - const scraperUrl = `https://api.scraperapi.com/?api_key=${SCRAPER_API_KEY}&url=${encodeURIComponent(targetUrl)}`; + const scraperUrl = `https://api.scraperapi.com/?api_key=${SCRAPER_API_KEY}&premium=true&url=${encodeURIComponent(targetUrl)}`; const res = await axios.get(scraperUrl, { headers: {