# Vhost Nginx (hors Docker) — accès externe à Firecrawl (option B du requirements).
# L'app co-localisée n'en a pas besoin : elle tape http://127.0.0.1:3002 en direct.
#
# Installation :
#   1. Remplacer fc-CHANGEME ci-dessous par la valeur de FIRECRAWL_API_KEY du .env
#   2. sudo cp crawl.elevaseo.app.conf /etc/nginx/sites-available/
#      sudo ln -s /etc/nginx/sites-available/crawl.elevaseo.app.conf /etc/nginx/sites-enabled/
#   3. sudo nginx -t && sudo systemctl reload nginx
#   4. sudo certbot --nginx -d crawl.elevaseo.app   (ajoute le TLS au vhost)
#
# GARDE DE CLÉ API : le self-hosted n'a AUCUNE auth applicative — sans cette
# vérification, l'API serait ouverte au monde. Le SDK Firecrawl envoie
# "Authorization: Bearer <api_key>" sur chaque requête.

map $http_authorization $firecrawl_auth_ok {
    default              0;
    "Bearer fc-CHANGEME" 1;
}

server {
    listen 80;
    listen [::]:80;
    server_name crawl.elevaseo.app;

    # Payloads batch-scrape (~10 URLs + options) : largement suffisant
    client_max_body_size 10m;

    location / {
        if ($firecrawl_auth_ok = 0) {
            return 403;
        }

        proxy_pass http://127.0.0.1:3002;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # Un /v2/scrape synchrone peut tenir ~35 s (timeout page 30 s + marge) ;
        # les endpoints batch répondent vite (job id immédiat, puis poll).
        proxy_read_timeout 90s;
        proxy_send_timeout 90s;
    }

    # UI admin des queues : accessible au navigateur (pas de header Bearer),
    # protégée par BULL_AUTH_KEY dans l'URL : /admin/{BULL_AUTH_KEY}/queues
    location /admin/ {
        proxy_pass http://127.0.0.1:3002;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
