content-distribution-receiver
content-distribution-receiver — Target-Seite für Multi-Site-Content-Distribution. Empfängt signierte Snapshots vom content-distribution-source, validiert Signatur und mapped UUIDs auf den lokalen ID-Space.
Eine zentrale Editorial-TYPO3 („source") pushed Inhalte an n downstream-TYPO3-Instanzen („targets"). Redakteur·innen arbeiten weiter im gewohnten Backend; die Distribution triggert auf Workspace-zu-Live-Publish, signiert die Payload mit Ed25519 und liefert einen DAG-strukturierten Snapshot — referenziert per UUIDv7, nie per TYPO3-UID. Der Companion moselwal/content-distribution-receiver empfängt und schreibt ins lokale Schema.
moselwal/semantic-delivery verteilt Content an externe Kanäle — LinkedIn, Buffer, n8n, generische Webhooks. Es weiß nichts über:
content-distribution-source füllt genau diese Lücke. Es reused den SSRF-sicheren URL-Validator, die Ed25519-Key-Infrastruktur aus moselwal/content-provenance und die Rate-Limit- und Nonce-Patterns aus moselwal/webmcp.
moselwal/content-distribution-sourcemoselwal/content-provenance für Vault-basierte Key-Provider, moselwal/structured-content für Relations und Annotationenacked.Snapshots referenzieren alle Records per origin_uuid (UUIDv7) — nie per TYPO3-UID. Das lässt den Receiver Foreign-Keys gegen seinen eigenen ID-Space auflösen, ohne dass die UIDs zwischen den Instanzen kollidieren.
Distribution wird nur getriggert, wenn ein Record im TYPO3-Workspace zu live gestaged wird. Drafts lecken nie. Der Trigger ist ein TYPO3-14-Event-Listener mit DataHandler-Hook als Fallback.
KeyProviderInterface aus moselwal/content-provenance verwaltet — file-based oder Vault-backed, rotierbar.pages mit allen tt_content-Kindernsys_file_reference plus sys_file (Binär-Inhalt per signierter URL nachgeladen, nie inline)sys_file_metadata, sys_categorysettings.yaml registriert
composer require moselwal/content-distribution-source
vendor/bin/typo3 extension:setup
Schema-Migrationen ergänzen origin_uuid-Spalten an pages, tt_content, sys_file* sowie die Package-Tabellen tx_cdsource_target und tx_cdsource_outbox.
# Ein Target registrieren
vendor/bin/typo3 cdsource:targets:add \
--label="Production EN" \
--base-url="https://en.example.com" \
--subscribed-tables="pages,tt_content,sys_file_reference" \
--subscribed-languages="0,1"
# Outbox abarbeiten (per cron oder scheduler)
vendor/bin/typo3 cdsource:outbox:process
| Command | Zweck |
|---|---|
cdsource:targets:list | Konfigurierte Targets listen |
cdsource:targets:add | Target-Instanz registrieren |
cdsource:targets:test | Probe-Ping zu einem Target schicken |
cdsource:outbox:process | Alle pending- und retryable-Einträge senden |
cdsource:outbox:retry | Failed-Einträge erneut einreihen |
cdsource:outbox:purge | Alte acked-Einträge aufräumen |
Strict DDD 4-Layer-Architektur, enforced via deptrac:
| Layer | Darf abhängen von |
|---|---|
| Domain | Moselwal\ContentProvenance\* (Interface only) |
| Application | Domain, ContentProvenance |
| Infrastructure | Application, Domain, Framework, ContentProvenance, StructuredContent |
| Presentation | Application, Domain, Framework |
Lizenz GPL-2.0-or-later (siehe Repo). Codebase-Begleitdokumentation: CLAUDE.md im Paket.
TYPO3-zu-TYPO3-Distribution aufsetzen?
Wenn du redaktionelle Inhalte zentral pflegen und an mehrere TYPO3-Brand-Sites pushen willst, ohne Headless-Architektur und ohne Editor-Workflow-Bruch, ist content-distribution-source der richtige Layer. Sprich mich für Architektur-Beratung, Multi-Site-Setup und Migration aus bestehenden Syndication-Lösungen an.
Oder direkt schreiben: kontakt@moselwal.de
Dieses Paket trägt die Multi-Site- und Multi-Region-Syndizierung in TYPO3 Kubernetes und ist Bestandteil souveräner Plattformen, die unter Open Source & Digitale Souveränität beschrieben sind. In der betreuten Variante: AI-Ready CMS as a Service.