5.5 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Project Overview
This is a Cloudflare Workers project called "url-cleaner" built with TypeScript. It's a serverless URL cleaning service that removes tracking parameters from URLs, similar to the ClearURLs browser extension. The worker runs on Cloudflare's edge network for fast global performance.
Architecture
- Runtime: Cloudflare Workers (serverless edge computing)
- Language: TypeScript with ES2021 target
- Entry Point:
src/index.ts
- main worker handler accepting?url=
parameter - URL Cleaner:
src/cleaner.ts
- core cleaning engine with redirect following and fragment cleaning - Rules Cache:
src/rules-cache.ts
- Durable Object for caching ClearURLs rules with SHA256 validation - Types:
src/types.ts
- TypeScript interfaces for ClearURLs rule structure - Configuration:
wrangler.jsonc
- Cloudflare Workers deployment configuration with Durable Objects - Testing: Vitest with Cloudflare Workers testing pool
API Usage
Clean URL Endpoint
Endpoint: GET /?url=<encoded-url>
Response: Plain text containing the cleaned URL
Examples:
/?url=https://example.com?utm_source=test
→https://example.com
/?url=https://youtube.com/watch?v=abc&feature=share
→https://youtube.com/watch?v=abc
Cache Purge Endpoint
Endpoint: DELETE /?url=<encoded-url>
Response: Plain text confirming cache deletion
Examples:
DELETE /?url=https://example.com?utm_source=test
→Cache entry deleted
(200)DELETE /?url=https://nonexistent.com
→Cache entry not found
(404)
Common Commands
Development
npm run dev
ornpm run start
- Start local development server with Wranglernpm run deploy
- Deploy worker to Cloudflarenpm test
- Run tests with Vitestnpm run format
- Format code with Prettiernpm run format:check
- Check code formattingnpm run cf-typegen
- Generate TypeScript types for Cloudflare bindings
Development Server
The development server runs on http://localhost:8787/
by default.
Project Structure
src/
├── index.ts # Main worker entry point with fetch handler
├── cleaner.ts # Core URL cleaning engine with redirect following and fragment cleaning
├── rules-cache.ts # Durable Object for caching ClearURLs rules with validation
└── types.ts # TypeScript interfaces for ClearURLs rule structure
test/
├── index.spec.ts # Unit and integration tests with ClearURLs rule mocking
├── tsconfig.json # Test-specific TypeScript config
└── env.d.ts # Test environment types
URL Cleaning Features
Core Functionality
- Official ClearURLs Rules: Uses the same rule database as ClearURLs browser extension (250+ providers)
- Redirect Following: Follows up to 5 redirects to unwrap shortened URLs and tracking redirects
- Provider-Specific Rules: Domain-specific rules prevent false positives and preserve functionality
- Query Parameter Cleaning: Removes tracking from URL query parameters (
?utm_source=test
) - Fragment Cleaning: Removes tracking from URL fragments/hash parameters (
#utm_campaign=test
) - Raw Rules Support: Handles complex regex-based cleaning for advanced tracking patterns
- Loop Prevention: Tracks visited URLs to prevent infinite redirect loops
- Response Caching: 1-hour cache using Cloudflare Cache API for improved performance
- Cache Management: DELETE endpoint for manual cache purging
Rule System
- Live Updates: Fetches rules from ClearURLs official API (
https://rules2.clearurls.xyz/
) - SHA256 Validation: Cryptographically verifies rule integrity
- Durable Object Caching: 7-day cache with automatic refresh
- Fallback Support: Uses cached rules if fresh fetch fails
- Provider Priority: Domain-specific providers take precedence over global rules
Supported Providers (250+ total)
- Google: Search, Analytics, Ads tracking removal
- YouTube: Preserves video/playlist IDs, removes tracking
- Amazon: E-commerce functionality preserved, affiliate tracking removed
- Facebook/Meta: Social features preserved, tracking removed
- Twitter/X: Post/user functionality preserved, tracking removed
- TikTok: Video functionality preserved, tracking removed
- And 240+ more providers maintained by the ClearURLs community
Advanced Features
- Exception Handling: Respects provider-specific exception rules
- Redirection Unwrapping: Follows ClearURLs redirection patterns
- Regex Pattern Matching: Exact ClearURLs compatibility with
^rule$
pattern matching - Case-Insensitive Matching: Handles mixed-case tracking parameters
- Fragment Parameter Support: Cleans tracking from URL hash fragments
Key Files
wrangler.jsonc
- Worker configuration including compatibility date and observabilityvitest.config.mts
- Test configuration using Cloudflare Workers poolworker-configuration.d.ts
- Generated TypeScript definitions for Cloudflare bindingstsconfig.json
- TypeScript configuration with strict mode enabled
Testing
The project uses Vitest with the Cloudflare Workers testing pool (@cloudflare/vitest-pool-workers
). Tests support both unit testing (with mocked context) and integration testing (using SELF.fetch()
).
TypeScript Configuration
- Target: ES2021
- Module: ES2022
- Strict mode enabled
- JSX support configured for React
- Excludes test files from main compilation