mirror of
https://github.com/DIYgod/RSSHub.git
synced 2026-03-13 10:30:18 +08:00
* feat: deploy RSSHub to Cloudflare Workers - Create Worker entry point (lib/worker.ts) with polyfills - Implement Worker-specific app configuration (lib/app.worker.tsx) - Add automatic .worker.ts resolution plugin for cleaner config - Simplify build configuration with only 3 essential shims - Enable static asset serving via Cloudflare Static Assets feature - Support dynamic route loading with proper module aliasing 🤖 Generated with Claude Code Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * feat(worker): add puppeteer and request-rewriter support - Add @cloudflare/puppeteer for Browser Rendering API support - Create puppeteer.worker.ts with Cloudflare Browser binding - Add request-rewriter Worker version with static browser headers - Add vm module shim to node-module.ts for JSDOM compatibility - Configure __dirname/__filename in tsdown for CommonJS compat - Update wrangler.toml with BROWSER binding configuration - Dynamically extract namespaces from foloAnalysisTop100 for routes 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(cache): restore synchronous initialization for tests The async initialization caused cache tests to fail because the cache module wasn't ready when tests ran. Restored synchronous imports while keeping Worker-specific no-op behavior. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * test(worker): add automated Worker integration tests - Add miniflare for Worker environment simulation - Create lib/worker.worker.test.ts with integration tests - Test basic routes (/test/1, /, unknown routes) - Test RSS feed routes (hackernews, v2ex) - Test error handling for puppeteer routes without BROWSER binding - Add worker-test npm script 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * refactor(worker): use test routes for Worker integration tests - Replace third-party routes (hackernews, v2ex, weibo) with /test/* routes - Remove miniflare dependency (wrangler includes it internally) - Simplify test setup using wrangler's unstable_dev API 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * fix(test): make header-generator test less flaky The header-generator library may return different platform values due to internal randomness. Update test to check for valid format instead of exact value. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * fix(test): exclude worker tests from vitest coverage run Worker tests require the dist-worker bundle to be built first, which is not part of the regular CI test workflow. These tests should be run separately using 'pnpm worker-test'. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * test(worker): add automated Worker integration tests - Add worker-build step to CI workflow before running tests - Revert exclusion of worker tests from vitest coverage run - Worker tests now run as part of the regular test suite 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(worker): fix routes.js alias path in worker build config Change alias key from absolute path to relative import path to match how it's imported in lib/registry.ts. This fixes the worker build failing with "Could not resolve '../assets/build/routes.js'" error. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * ci: trigger CI re-run 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(ci): build worker routes before worker-build The worker build requires routes-worker.js which is generated by running build:routes with WORKER_BUILD=true. This was missing in CI, causing the worker build to fail with "Could not resolve routes.js". 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(test): increase timeout for Worker integration tests Worker tests need more time in CI environments. Increase individual test timeouts from default 10s to 30s for each test case. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com>
58 lines
1.8 KiB
TypeScript
58 lines
1.8 KiB
TypeScript
// Worker-compatible fetch wrapper
|
|
// Simplified version without proxy, rate limiting, or header-generator
|
|
import { config } from '@/config';
|
|
import logger from '@/utils/logger';
|
|
|
|
// Static browser headers (Chrome-like fingerprint)
|
|
const STATIC_BROWSER_HEADERS: Record<string, string> = {
|
|
accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8',
|
|
'accept-language': 'en-US,en;q=0.9',
|
|
'sec-ch-ua': '"Chromium";v="122", "Not(A:Brand";v="24", "Google Chrome";v="122"',
|
|
'sec-ch-ua-mobile': '?0',
|
|
'sec-ch-ua-platform': '"Windows"',
|
|
'sec-fetch-dest': 'document',
|
|
'sec-fetch-mode': 'navigate',
|
|
'sec-fetch-site': 'none',
|
|
'sec-fetch-user': '?1',
|
|
'upgrade-insecure-requests': '1',
|
|
};
|
|
|
|
const originalFetch = globalThis.fetch;
|
|
|
|
const wrappedFetch = (input: RequestInfo | URL, init?: RequestInit): Promise<Response> => {
|
|
const request = new Request(input, init);
|
|
|
|
logger.debug(`Outgoing request: ${request.method} ${request.url}`);
|
|
|
|
// Set User-Agent if not provided
|
|
if (!request.headers.has('user-agent')) {
|
|
request.headers.set('user-agent', config.ua);
|
|
}
|
|
|
|
// Set browser headers if not provided
|
|
for (const [header, value] of Object.entries(STATIC_BROWSER_HEADERS)) {
|
|
if (!request.headers.has(header)) {
|
|
request.headers.set(header, value);
|
|
}
|
|
}
|
|
|
|
// Set Referer if not provided
|
|
if (!request.headers.get('referer')) {
|
|
try {
|
|
const urlHandler = new URL(request.url);
|
|
request.headers.set('referer', urlHandler.origin);
|
|
} catch {
|
|
// ignore
|
|
}
|
|
}
|
|
|
|
// Remove x-prefer-proxy header (not supported in Workers)
|
|
if (request.headers.has('x-prefer-proxy')) {
|
|
request.headers.delete('x-prefer-proxy');
|
|
}
|
|
|
|
return originalFetch(request);
|
|
};
|
|
|
|
export default wrappedFetch;
|