Los módulos
El servicio es un binario en Rust. Un proceso levanta tres cosas: el API (axum), el poller y el worker de emisión.
El mapa de módulos
Qué hace cada uno
Traer material — ingesta/
Un módulo por origen, todos detrás de la misma forma: dado una cuenta y su cursor, devolver lo nuevo.
| Módulo | Origen | Cómo |
|---|---|---|
ingesta/cliente.rs | Instagram con token | Graph API, cuentas Business/Creator |
ingesta/instagram_publico.rs | Instagram sin token | Navegador headless sobre el perfil público |
ingesta/telegram.rs | Telegram | Bot API (getUpdates) |
ingesta/rss.rs | Cualquier feed | feed-rs, RSS y Atom |
ingesta/web.rs | El sitio propio | La API de Antisionista |
Instagram tiene dos módulos y no uno. Con token se usa la API oficial, que
es rápida y estable. Sin token —una cuenta pública que dio permiso pero no puede
entregar credenciales de empresa— se entra al perfil con un navegador. Son
caminos distintos con costos distintos, y la marca de cuál usar es explícita
(config.via = 'navegador'), nunca inferida de que falte la credencial:
inferirla convertiría un token revocado en un scrapeo sin que nadie lo decidiera.
Publicar — redes/
| Módulo | Destino |
|---|---|
redes/mastodon.rs | Mastodon y compatibles |
redes/telegram.rs | Canales y grupos |
redes/identidad.rs | «¿Quién soy con este token?» — verifica antes de dar de alta |
redes/segmentacion.rs | Parte un video largo en piezas publicables |
redes/falso.rs | Un destino de mentira, para los tests |
Las sondas — probe/
Responden «¿esto funcionaría?» sin publicar nada. Están partidas en
origen y destino porque son preguntas distintas: si se puede leer, y si se
puede escribir.
Una sonda nunca devuelve «ok» sin haber tocado la red. Puede devolver
no_verificado, que no es ni bien ni mal: no hubo con qué comprobarlo. Que
exista como estado propio es lo que impide que «no se pudo mirar» se cuente
como «está bien».
Cómo se relacionan las piezas de emisión
El grifo (max_por_hora) vive en la CUENTA de destino, no en la ruta. El
límite es de quien recibe: si tres flujos distintos apuntan a la misma cuenta de
Mastodon, el techo lo pone Mastodon y no cada flujo por su lado. Ponerlo en la
ruta habría dejado que tres rutas «de 4 por hora» hicieran 12.
Las dos superficies: HTTP y CLI
Hacen cosas parecidas y no son intercambiables.
El respaldo con credenciales cifradas sale sólo por CLI. Por HTTP los tokens salen vacíos, siempre. Ese corte es lo que deja al invariante «este servicio no tiene un endpoint que devuelva texto cifrado» sin excepciones: el único camino que los toca no es un endpoint.
La CLI no tiene pase libre por correr en el servidor. Importar y restaurar validan identidad contra el anfitrión y exigen capacidad de administrar. Sólo exportar y validar quedan exentos, porque un respaldo tiene que poder correr por cron.