API:
- POST /articles/archive-media (jwtAuth, rate-limit 10/min): fetcht
Artikel-Bilder SSRF-geschützt (lib/ssrf-guard: private Ranges, manuelle
Redirect-Hops, 10MB-Stream-Cap), legt sie in mana-media ab (CAS,
app='pageta') und schreibt <img src> auf media.mana.how um;
nicht ladbare Bilder werden entfernt — nie Hotlinks (Tracking-Leak).
srcset/picture/lazy-Attribute normalisiert, data-URIs <10KB inline.
- shared-rss ^0.5.0: /extract/preview liefert jetzt imageUrl (og:image).
- DSGVO: Export + Delete decken archivierte Media ab (app-scoped
mana-media-Endpoints, refcount-sicher).
- sync2-pageta: event-sync-0.14-Typ-Fixes (readonly Envelope, bigint seq).
Web:
- Save-Pfad: nach ArticleSaved non-blocking archive-media-Call →
ArticleMediaArchived-Event (htmlContent ≤750KB, imageUrl, mediaIds).
ArticleSaved.imageUrl bleibt bewusst null (kein Hotlink, auch nicht
übergangsweise). Duplicate-Save = organischer Backfill.
- Lese-Liste: Thumbnail (…/file/thumb); Reader: Lead-Image (…/file/medium,
nur wenn Inhalt bildlos) + htmlContent rendert jetzt (DOMPurify-Pfad
war schon verdrahtet).
- shared-schemas ^0.1.21 (ArticleMediaArchived + htmlContent im State).
⚠️ Deploy nur koordiniert mit publish:schemas pageta (422-Fenster).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
21 lines
613 B
Text
21 lines
613 B
Text
# pageta-api — example env
|
|
|
|
PORT=3099
|
|
DATABASE_URL=postgres://pageta:devpassword@localhost:5443/pageta
|
|
|
|
# mana-Plattform-URLs
|
|
MANA_AUTH_URL=http://localhost:3001
|
|
MANA_AUTH_JWKS_URL=http://localhost:3001/.well-known/jwks.json
|
|
MANA_RESEARCH_URL=http://localhost:3068
|
|
MANA_NEWS_POOL_URL=http://localhost:3079
|
|
MANA_SHARE_URL=http://localhost:3072
|
|
MANA_CREDITS_URL=http://localhost:3061
|
|
MANA_MEDIA_URL=https://media.mana.how
|
|
|
|
# Service-Identität
|
|
MANA_SERVICE_KEY=dev-service-key-change-me
|
|
PAGETA_APP_SERVICE_KEY=dev-pageta-key-change-me
|
|
|
|
# JWT-Issuer für lokale Validation
|
|
JWT_ISSUER=mana-auth
|
|
JWT_AUDIENCE=pageta
|