> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lerian.studio/llms.txt
> Use this file to discover all available pages before exploring further.

# ¿Qué es Fetcher?

> Extrae datos de bases de datos externas con Fetcher — el servicio unificado y disponible en código fuente de extracción de datos de Lerian para PostgreSQL, MySQL, Oracle, SQL Server y MongoDB.

export const GSourceAvailable = ({children}) => <Tooltip headline="Source-available" tip="Un modelo de licencia donde el código fuente es públicamente accesible para inspección, modificación y auto-hospedaje, mientras que ciertos usos comerciales pueden requerir una licencia." cta="Ver glosario" href="/es/glossary">
    {children}
  </Tooltip>;

**Fetcher** es el servicio de extracción de datos de Lerian. Da a la plataforma — y a tus propias aplicaciones — una interfaz única y segura para conectarse a bases de datos externas, descubrir sus esquemas y extraer datos de ellas: PostgreSQL, MySQL, Oracle, SQL Server y MongoDB, todo a través de una sola API.

Fetcher es <GSourceAvailable>*source-available*</GSourceAvailable> bajo la [Elastic License 2.0](https://github.com/LerianStudio/fetcher/blob/main/LICENSE). El código fuente está disponible públicamente en [GitHub](https://github.com/LerianStudio/fetcher).

## Fetcher en la plataforma Lerian

***

Los productos Lerian necesitan con frecuencia datos que viven fuera de la plataforma — extractos de transacciones en la base de datos operativa de un banco, movimientos en el MySQL de un socio, registros de clientes en un MongoDB. Antes de Fetcher, cada producto implementaba su propia lógica de acceso, con código duplicado y prácticas de seguridad inconsistentes.

Fetcher centraliza ese trabajo. Productos como **Reporter** y **Matcher** lo usan para traer datos externos a sus flujos — generación de reportes, conciliación — y tus propios servicios pueden usar la misma API para cualquier acceso controlado y auditado a bases de datos externas.

Fetcher ofrece cuatro capacidades centrales:

1. **Gestión de conexiones**: Almacena, valida y prueba conexiones a bases de datos, con credenciales cifradas en reposo.
2. **Descubrimiento de esquemas**: Detección automática de tablas, columnas y tipos de datos en todas las bases soportadas.
3. **Extracción de datos**: Una interfaz de consulta unificada con proyección de campos, filtros y soporte multi-tabla, multi-esquema y multi-datasource.
4. **Orquestación de jobs**: Procesamiento asíncrono con detección de duplicados, seguimiento de estado y eventos de finalización.

## Arquitectura

***

Fetcher se ejecuta como dos servicios cooperantes sobre un núcleo embebible:

| Componente  | Rol                                                                                                                                                                                                                                        |
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Manager** | Servidor de API HTTP para la gestión de conexiones y jobs. Almacena metadatos en MongoDB y despacha jobs de extracción vía RabbitMQ.                                                                                                       |
| **Worker**  | Procesador asíncrono de jobs. Consume jobs de la cola, extrae datos de las bases configuradas, cifra los resultados en object storage (SeaweedFS o cualquier servicio compatible con S3) y publica eventos `job.completed` / `job.failed`. |
| **Engine**  | El núcleo de extracción (`pkg/engine`) sobre el que corren ambos servicios — ciclo de vida de conexiones, descubrimiento de esquemas, planificación de consultas, ejecución, límites y aislamiento de tenant.                              |

El **Engine** también puede importarse por sí solo: se distribuye como un módulo Go independiente, con cero dependencias de terceros, de modo que una aplicación anfitriona puede embeber las capacidades de extracción de Fetcher en su propio proceso — sin servicio, cola ni stack de almacenamiento separados. Los productos Lerian lo embeben exactamente así; el Manager y el Worker standalone son, ellos mismos, hosts que corren sobre el mismo Engine.

### Bases de datos soportadas

| Base de datos  | Versiones | Destacados                                                                       |
| -------------- | --------- | -------------------------------------------------------------------------------- |
| **PostgreSQL** | 12+       | Soporte multi-schema, parsing automático de JSONB, pooling de conexiones         |
| **MySQL**      | 8.0+      | Parsing automático de campos JSON, extracción multi-tabla, pooling de conexiones |
| **Oracle**     | 19c+      | Namespaces de owner/schema, extracción multi-tabla, pooling de conexiones        |
| **SQL Server** | 2019+     | Soporte multi-schema, coincidencia de filtros de tabla, pooling de conexiones    |
| **MongoDB**    | 7.0+      | Inferencia de esquema, muestreo estadístico, pipelines de agregación             |

## Postura de seguridad

***

Fetcher está construido para tocar bases de datos ajenas con seguridad:

* **Una clave maestra, tres claves derivadas.** Un único secreto `APP_ENC_KEY` deriva — vía HKDF — claves independientes para el cifrado de credenciales (AES-256-GCM), la firma de mensajes internos entre Manager y Worker (HMAC-SHA256) y la firma de los documentos extraídos, para que los consumidores puedan verificar su autenticidad.
* **Protección contra SSRF.** En despliegues multi-tenant, los hosts de las conexiones se validan contra rangos de direcciones privadas y de metadatos de nube antes de que Fetcher se conecte.
* **Transporte fail-closed.** Las conexiones inseguras (sin TLS) con la infraestructura se rechazan por defecto fuera del desarrollo local.
* **Aislamiento multi-tenant.** Cuando está habilitado, cada tenant recibe bases de metadatos, namespaces de caché y rutas de object storage aisladas, resueltas a partir del contexto de tenant basado en JWT — con costo cero cuando está deshabilitado.

## Próximos pasos

***

<CardGroup cols={2}>
  <Card title="Primeros pasos" icon="rocket" href="/es/fetcher/fetcher-getting-started">
    Ejecuta Fetcher localmente y corre tu primer job de extracción.
  </Card>

  <Card title="Conceptos centrales" icon="book" href="/es/fetcher/fetcher-core-concepts">
    Conexiones, descubrimiento de esquemas, jobs de extracción y resultados.
  </Card>
</CardGroup>
