content-distribution-source — TYPO3 pusht TYPO3, signiert, replay-sicher.

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.

Warum ein eigenes Paket

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.

Voraussetzungen

Transport, Authentifizierung und Scope

Transport — hybrid push plus pull

  1. Push-Ping: Auf Workspace-zu-Live-Publish sendet die Source einen kleinen signierten Webhook an jeden abonnierten Target und kommuniziert, was sich geändert hat.
  2. Pull-Fetch: Das Target authentifiziert sich zurück zum Source-Pull-Endpoint und lädt den vollständigen DAG-Snapshot.
  3. Ack: Das Target bestätigt; die Source markiert den Outbox-Eintrag als acked.

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.

Workspace-Integration

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.

Authentifizierung

Scope — was out of the box distributiert wird

Installation, Quickstart und Commands

Installation

 

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.

Quickstart

 

# 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

 

CLI-Commands

CommandZweck
cdsource:targets:listKonfigurierte Targets listen
cdsource:targets:addTarget-Instanz registrieren
cdsource:targets:testProbe-Ping zu einem Target schicken
cdsource:outbox:processAlle pending- und retryable-Einträge senden
cdsource:outbox:retryFailed-Einträge erneut einreihen
cdsource:outbox:purgeAlte acked-Einträge aufräumen

Backend-Module

Architektur (DDD 4-Layer)

Strict DDD 4-Layer-Architektur, enforced via deptrac:

LayerDarf abhängen von
DomainMoselwal\ContentProvenance\* (Interface only)
ApplicationDomain, ContentProvenance
InfrastructureApplication, Domain, Framework, ContentProvenance, StructuredContent
PresentationApplication, Domain, Framework

Lizenz GPL-2.0-or-later (siehe Repo). Codebase-Begleitdokumentation: CLAUDE.md im Paket.

Gehört zur Content-Distribution-Strecke

Nächster Schritt

TYPO3-zu-TYPO3-Distribution aufsetzen?

Wenn Sie redaktionelle Inhalte zentral pflegen und an mehrere TYPO3-Brand-Sites pushen wollen, ohne Headless-Architektur und ohne Editor-Workflow-Bruch, ist content-distribution-source der richtige Layer. Sprechen Sie uns für Architektur-Beratung, Multi-Site-Setup und Migration aus bestehenden Syndication-Lösungen an.

Distribution besprechen

Oder direkt schreiben: kontakt@moselwal.de

Setzen wir ein bei …

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.