https://github.com/fewsats/proxy402
URL shortener
https://github.com/fewsats/proxy402
ai ai-agents coinbase llm x402
Last synced: 10 months ago
JSON representation
URL shortener
- Host: GitHub
- URL: https://github.com/fewsats/proxy402
- Owner: Fewsats
- Created: 2025-04-24T08:04:35.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-06-02T20:21:23.000Z (about 1 year ago)
- Last Synced: 2025-06-03T03:45:03.344Z (about 1 year ago)
- Topics: ai, ai-agents, coinbase, llm, x402
- Language: Go
- Homepage: https://proxy402.com
- Size: 2.04 MB
- Stars: 18
- Watchers: 3
- Forks: 3
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Proxy402 - Monetize APIs with x402
Proxy402 lets you monetize APIs by requiring x402 payments on Base before accessing your endpoints.
## Quick Start (Client)
Test Proxy402 instantly with our pre-configured client:
```bash
# Clone the repo
git clone https://github.com/Fewsats/proxy402.git
cd proxy402/client
# Copy sample env file
cp .env.example .env
# Add your wallet keys to the .env file
# You can generate these keys with cast (google how to install foundry, cast is part of the suite)
# Then run the following command to get a test address
cast w new
# You will need Base Sepolia ETH & USDC. Get them from these faucets:
- [Base Sepolia ETH](https://portal.cdp.coinbase.com/products/faucet)
- [Base Sepolia USDC](https://faucet.circle.com/)
# Install dependencies
npm install
# Run client against a test endpoint (returns Bitcoin whitepaper)
npm run client https://proxy402.com/wUUbqudYsM
```
## Running Your Own Server
### Prerequisites
- [Docker & Docker Compose](https://docs.docker.com/engine/install/)
### Setup
```bash
# Clone the repo (if you haven't already)
git clone https://github.com/Fewsats/proxy402.git
cd proxy402
# Configure environment
cp .env.example .env
# Edit .env file with your details
# Start the server with Docker Compose
docker compose up
```
Important .env variables:
- `X402_PAYMENT_ADDRESS`: Your Base wallet address for receiving payments (works for Base Sepolia & Base Mainnet)
- `GOOGLE_CLIENT_ID` & `GOOGLE_CLIENT_SECRET`: For auth (obtain from [Google Cloud Console](https://console.cloud.google.com/apis/credentials))
### Creating Monetized Routes
1. Visit `http://localhost:8080` and log in
2. Fill the form with:
- Target URL to monetize
- Price in USDC
- HTTP method
- Test mode (on/off)
3. Use your new link: `http://localhost:8080/YOUR_SHORT_CODE`
## Target URL Verification
Proxy402 adds a `Proxy402-Secret` header to forwarded requests:
```javascript
// Node.js example
app.get('/api/data', (req, res) => {
if (req.headers['proxy402-secret'] !== 'YOUR_SECRET_FROM_USER_SETTINGS') {
return res.status(403).json({ error: 'Unauthorized' });
}
res.json({ data: 'Your protected data' });
});
```
## Additional Information
### Client Setup Details
The client uses your private key to make payments on Base:
```dotenv
# client/.env
PRIVATE_KEY="YOUR_CLIENT_WALLET_PRIVATE_KEY" # Never commit this to Git
```
### Server API Example
```bash
# Create route via API
curl -X POST http://localhost:8080/links/shrink \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"target_url": "https://raw.githubusercontent.com/ibz/bitcoin-whitepaper-markdown/refs/heads/master/bitcoin-whitepaper.md",
"method": "GET",
"price": "0.0001",
"is_test": true
}'
```
### How It Works
1. Client requests protected resource
2. Server returns 402 with x402 payment token
3. Client pays using Base and x402-axios library
4. Client retries with proof of payment
5. Server forwards request to target URL
For more details visit [x402.org](https://x402.org)
### Cloudflare R2 CORS Configuration
If using file uploads with Cloudflare R2, configure CORS to allow direct browser uploads:
You can configure it via Cloudflare dashboard:
1. Go to R2 > Your bucket > Settings > CORS
2. Add rules for both origins: `http://localhost:3009` and `https://your-domain.com`
3. Allow methods: PUT, GET, HEAD, DELETE
4. Allow all headers (`*`)
## Need Help?
Join our [Discord](https://discord.gg/2tPYBgWzQm) for support and discussions.
---