Files
metamask-integration/scripts/setup-token-list-hosting.sh
2026-03-02 12:14:14 -08:00

276 lines
6.5 KiB
Bash
Executable File

#!/bin/bash
# Setup Public Token List Hosting for MetaMask
# This script prepares token list for hosting on various platforms
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
TOKEN_LIST="$PROJECT_ROOT/../token-lists/lists/dbis-138.tokenlist.json"
# Colors
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
log_success() { echo -e "${GREEN}[]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
log_info "========================================="
log_info "Token List Hosting Setup"
log_info "========================================="
log_info ""
# Validate token list
if [ ! -f "$TOKEN_LIST" ]; then
log_error "Token list not found: $TOKEN_LIST"
exit 1
fi
if ! jq empty "$TOKEN_LIST" 2>/dev/null; then
log_error "Token list JSON is invalid"
exit 1
fi
log_success "Token list JSON is valid"
# Create hosting directory
HOSTING_DIR="$PROJECT_ROOT/token-list-hosting"
mkdir -p "$HOSTING_DIR"
# Copy token list
cp "$TOKEN_LIST" "$HOSTING_DIR/token-list.json"
log_success "Copied token list to hosting directory"
# Create GitHub Pages setup
log_info "Creating GitHub Pages setup..."
cat > "$HOSTING_DIR/github-pages-setup.md" << 'EOF'
# GitHub Pages Token List Hosting
## Setup Steps
1. **Create GitHub Repository**:
```bash
git init
git add token-list.json
git commit -m "Add ChainID 138 token list"
git remote add origin https://github.com/your-org/token-list.git
git push -u origin main
```
2. **Enable GitHub Pages**:
- Go to repository Settings
- Navigate to Pages
- Source: Deploy from a branch
- Branch: main
- Folder: / (root)
- Click Save
3. **Access Token List**:
- URL: `https://your-org.github.io/token-list/token-list.json`
- Or custom domain: `https://your-domain.com/token-list.json`
4. **Add to MetaMask**:
- Settings → Security & Privacy → Token Lists
- Add custom token list
- Enter: `https://your-org.github.io/token-list/token-list.json`
## CORS Configuration
GitHub Pages automatically serves with CORS headers, so no additional configuration needed.
## Auto-Update
When you update token-list.json and push to main, GitHub Pages automatically updates.
EOF
log_success "Created: $HOSTING_DIR/github-pages-setup.md"
# Create nginx hosting configuration
log_info "Creating nginx hosting configuration..."
cat > "$HOSTING_DIR/nginx-token-list.conf" << 'EOF'
# Nginx configuration for token list hosting
# Add to your nginx server block
server {
listen 443 ssl http2;
server_name your-domain.com;
# SSL Configuration
ssl_certificate /etc/ssl/certs/your-domain.crt;
ssl_certificate_key /etc/ssl/private/your-domain.key;
# Token List Location
location /token-list.json {
alias /var/www/token-list/token-list.json;
# CORS Headers
add_header Access-Control-Allow-Origin * always;
add_header Access-Control-Allow-Methods "GET, OPTIONS" always;
add_header Access-Control-Allow-Headers "Content-Type" always;
add_header Access-Control-Max-Age 3600 always;
add_header Content-Type application/json always;
# Cache for 1 hour
expires 1h;
add_header Cache-Control "public, must-revalidate";
# Handle OPTIONS
if ($request_method = OPTIONS) {
add_header Access-Control-Allow-Origin * always;
add_header Access-Control-Allow-Methods "GET, OPTIONS" always;
add_header Access-Control-Max-Age 3600 always;
add_header Content-Length 0;
return 204;
}
}
}
EOF
log_success "Created: $HOSTING_DIR/nginx-token-list.conf"
# Create IPFS hosting guide
cat > "$HOSTING_DIR/ipfs-hosting-guide.md" << 'EOF'
# IPFS Token List Hosting
## Setup Steps
1. **Install IPFS**:
```bash
# Download from https://ipfs.io
# Or use package manager
```
2. **Start IPFS Node**:
```bash
ipfs daemon
```
3. **Add Token List**:
```bash
ipfs add token-list.json
# Note the hash returned
```
4. **Pin Token List**:
```bash
ipfs pin add <hash>
```
5. **Access Token List**:
- IPFS Gateway: `https://ipfs.io/ipfs/<hash>`
- Pinata Gateway: `https://gateway.pinata.cloud/ipfs/<hash>`
- Cloudflare Gateway: `https://cloudflare-ipfs.com/ipfs/<hash>`
6. **Add to MetaMask**:
- Use one of the gateway URLs above
- Add to MetaMask token lists
## Pinning Services
For permanent hosting, use a pinning service:
- Pinata: https://pinata.cloud
- Infura: https://infura.io
- NFT.Storage: https://nft.storage
## Advantages
- Decentralized
- Permanent (if pinned)
- No single point of failure
- CORS-friendly gateways
EOF
log_success "Created: $HOSTING_DIR/ipfs-hosting-guide.md"
# Create hosting comparison
cat > "$HOSTING_DIR/HOSTING_COMPARISON.md" << 'EOF'
# Token List Hosting Options Comparison
## GitHub Pages
**Pros**:
- Free
- Easy setup
- Automatic HTTPS
- Version control
- Auto-updates
**Cons**:
- Requires GitHub account
- Public repository
- Limited customization
**Best For**: Quick setup, version control
---
## IPFS
**Pros**:
- Decentralized
- Permanent (if pinned)
- No single point of failure
- Multiple gateways
**Cons**:
- Requires IPFS node or pinning service
- Hash changes on update
- Gateway dependency
**Best For**: Decentralized hosting, permanent storage
---
## Custom Domain/CDN
**Pros**:
- Full control
- Custom domain
- CDN performance
- Professional appearance
**Cons**:
- Requires server/CDN
- SSL certificate needed
- Maintenance required
- Cost
**Best For**: Production, professional setup
---
## Recommendation
1. **Start**: GitHub Pages (quick, free)
2. **Production**: Custom domain with CDN
3. **Backup**: IPFS (permanent, decentralized)
EOF
log_success "Created: $HOSTING_DIR/HOSTING_COMPARISON.md"
log_info ""
log_info "========================================="
log_info "Token List Hosting Setup Complete!"
log_info "========================================="
log_info ""
log_info "Files created in: $HOSTING_DIR"
log_info " - token-list.json (token list file)"
log_info " - github-pages-setup.md (GitHub Pages guide)"
log_info " - nginx-token-list.conf (nginx config)"
log_info " - ipfs-hosting-guide.md (IPFS guide)"
log_info " - HOSTING_COMPARISON.md (hosting options)"
log_info ""
log_info "Next steps:"
log_info "1. Choose hosting method"
log_info "2. Follow setup guide"
log_info "3. Host token list"
log_info "4. Add URL to MetaMask"
log_info "5. Verify token list works"
log_info ""