diff --git a/README.md b/README.md index d45a446..3f5f716 100644 --- a/README.md +++ b/README.md @@ -132,8 +132,8 @@ Conectar una cuenta (OAuth con `state` de un solo uso y PKCE donde la red lo adm | Red | Conectar | Publicar | Notas | |---|---|---|---| -| Mastodon | Sí | Texto | Sin claves de servidor; cada cuenta registra la app en su instancia. | -| Telegram | Sí | Texto | Token del bot de BotFather. | +| Mastodon | Sí | Texto e imágenes (con texto alternativo) | Sin claves de servidor; cada cuenta registra la app en su instancia. | +| Telegram | Sí | Texto e imágenes | Token del bot de BotFather. | | Instagram | Sí, con `INSTAGRAM_CLIENT_ID/SECRET` | No todavía | Meta descarga la imagen de una URL pública y los medios están cifrados: falta un endpoint temporal. Ver [docs/oauth-connect.md](docs/oauth-connect.md). | | PeerTube | No | Directo sí | Falta el puente OAuth en tube.occupymedia.cc. | | X | No | No | Sin conector. API de pago por uso. | diff --git a/docs/T-HUB-VALIDACION.txt b/docs/T-HUB-VALIDACION.txt index c5f26ff..d40c58a 100644 --- a/docs/T-HUB-VALIDACION.txt +++ b/docs/T-HUB-VALIDACION.txt @@ -137,6 +137,49 @@ Verificación GET /media/ con sesión del colectivo B -> 404. +3b. PUBLICAR CON IMÁGENES (scheduler) +------------------------------------- +Problema + Desde 71db0a0/a6843e9 un borrador aprobado puede llevar mediaAssetIds y + altTexts, pero el registro del scheduler + (packages/connector-runtime/src/registry.ts) creaba los conectores sin + loadAsset/openAsset: Mastodon y Telegram devolvían rejected_permanent + INVALID_POST y el post no salía. Los altTexts no llegaban al conector. + +Qué cambia + - packages/connector-runtime/src/media.ts: loadAsset lee media_assets + dentro del colectivo de la ejecución (app.workspace_id, RLS forzado); + openAsset descarga el objeto, abre el marco SPENC1 con S3_KEK y + comprueba el hash del contenido. Solo lectura. Los bytes van + worker -> red; nunca pasan por la API. + - preparePostForDispatch convierte altTexts[i] en + providerMetadata.altText[mediaAssetIds[i]] (lo que lee Mastodon). + - Instagram registrado también en el scheduler: rechaza con error + explícito en vez de "proveedor desconocido". Sigue sin publicar fotos + (necesita URL pública; decisión pendiente). + +Tests + cd packages/connector-runtime && npx vitest run esperado: 33 pass + cd apps/scheduler && npx vitest run esperado: 96 pass + +Prueba manual (entorno de pruebas) + 1. Compose: post con 2 imágenes y texto alternativo a Mastodon. + 2. Aprobar y programar a 1 minuto. + 3. El post sale con las 2 imágenes y su descripción en la instancia. + 4. Con una imagen de otro colectivo forzada en mediaAssetIds -> falla + (MEDIA_ASSET_NOT_FOUND), no se publica nada. + + +3c. PRODUCTOR DE VÍDEO +---------------------- + - Quitado MEDIA_DEBUG_STDERR=1 del compose de producción (escribía la + salida de ffmpeg sin censurar en /tmp). + - El logo superpuesto solo acepta imágenes del propio colectivo + (adjuntos, recursos de grupo o la marca). Antes bastaba una clave con + formato válido. + cd apps/api && npx vitest run src/video esperado: 38 pass + + 4. ESTILO Y LOGO ---------------- - apps/web/src/app/globals.css: paleta de acampada26s.net. Fondo