bgustscraper 0.2.0

Advanced semantic scraping engine with AI-driven compliance checks and legal terms validation
Documentation
# Servidor Web API Seguro con JWT y OpenAPI 馃攼馃殌

`bgustscraper` no es solo una CLI de raspado, tambi茅n es una soluci贸n SaaS que expone los datos recolectados y la cach茅 a trav茅s de una **API HTTP de alto rendimiento** escrita en Rust utilizando el framework as铆ncrono **Axum**.

---

## 馃攽 1. Autenticaci贸n JSON Web Tokens (JWT)

Para proteger la integridad de los datos, todos los endpoints del servidor web (a excepci贸n del endpoint p煤blico de login y OpenAPI) requieren de autenticaci贸n estricta basada en JWT.

### Flujo de Trabajo:
1.  **Petici贸n POST `/api/auth`:**
    *   Env铆as credenciales JSON `{ "username": "admin", "password": "..." }`.
    *   Rust valida contra las variables de entorno configuradas (`API_USER` y `API_PASS`).
2.  **Generaci贸n del Token (`src/auth.rs`):**
    *   Si son v谩lidas, Rust crea los claims configurando la expiraci贸n (`exp`) a **2 horas** a partir del tiempo actual de UTC.
    *   Firma el token criptogr谩ficamente usando el algoritmo HS256 y tu clave secreta `JWT_SECRET`.
3.  **Extractor Bearer en Axum (`src/api.rs`):**
    *   Implementamos un extractor de tipo en Rust para Axum (`impl FromRequestParts for Claims`).
    *   Para cada endpoint protegido, Axum extrae la cabecera `Authorization`, verifica que comience con `Bearer `, decodifica el token, y rechaza la petici贸n con `401 Unauthorized` si est谩 vencido o es inv谩lido, sin llegar a ejecutar el controlador de la ruta.

---

## 馃摗 2. Cat谩logo de Endpoints de la API

### POST `/api/auth`
Autentica el acceso y entrega el token.
*   **Request JSON:**
    ```json
    {
      "username": "admin",
      "password": "change_me"
    }
    ```
*   **Response JSON (200 OK):**
    ```json
    {
      "token": "ey..."
    }
    ```

### GET `/api/bcv` (Protegido por JWT)
Retorna la 煤ltima captura sem谩ntica del d贸lar/euro recolectada por el planificador desatendido.
*   **Headers requeridos:** `Authorization: Bearer <token>`
*   **Response JSON (200 OK):**
    ```json
    {
      "USD": 36.45,
      "EUR": 39.12
    }
    ```

### GET `/api/cache` (Protegido por JWT)
Retorna los metadatos y estado de integridad de la base de datos embebida `redb`.
*   **Headers requeridos:** `Authorization: Bearer <token>`
*   **Response JSON (200 OK):**
    ```json
    {
      "database_path": "downloads/cache.db",
      "status": "active",
      "storage_engine": "redb",
      "info": "La base de datos embebida redb est谩 en ejecuci贸n y securizada."
    }
    ```

### GET `/api/openapi.json` (P煤blico)
Retorna la especificaci贸n OpenAPI 3.0 completa en JSON del servidor para su consumo en Swagger UI u otras herramientas externas.

---

## 馃寪 3. Middlewares y CORS
El servidor incluye la capa `tower-http::cors::CorsLayer` permisiva, posibilitando que clientes desarrollados en frontend modernos (React, Angular, Svelte) alojados en otros dominios o puertos se conecten a la API sin sufrir bloqueos CORS.