{"_id":"@dagsite/erecht24-next","name":"@dagsite/erecht24-next","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@dagsite/erecht24-next","version":"0.1.0","description":"eRecht24 Rechtstexte-API für Next.js (App Router): Auto-Sync von Impressum + Datenschutz via Pull + Push-Webhook.","keywords":["erecht24","rechtstexte","impressum","datenschutz","nextjs","dsgvo","legal"],"license":"MIT","author":{"name":"DagSite","url":"https://dagsite.com"},"engines":{"node":">=20.6.0"},"homepage":"https://github.com/dagsitegit/erecht24-next","repository":{"type":"git","url":"git+https://github.com/dagsitegit/erecht24-next.git"},"type":"module","sideEffects":["*.css"],"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./legal-text.css":"./src/legal-text.css"},"bin":{"erecht24-register":"bin/erecht24-register.mjs"},"scripts":{"build":"tsup","typecheck":"tsc --noEmit","pretest":"tsup","test":"node --test","prepublishOnly":"pnpm build"},"dependencies":{"server-only":"^0.0.1"},"peerDependencies":{"next":">=14","react":">=18"},"devDependencies":{"@types/node":"^22","@types/react":"^19","next":"^15","react":"^19","tsup":"^8","typescript":"^5"},"gitHead":"b5ec74fb87682b1c6f7c2e35f5ca3f9e9b148455","_id":"@dagsite/erecht24-next@0.1.0","bugs":{"url":"https://github.com/dagsitegit/erecht24-next/issues"},"_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-j55fWhYwmD8+r2MClmVi/KXfkDVcLMhOKQozew34gQCrknx5yez5/f7Y7tkziN8O5J1xrSEC99j4965JS1XVcg==","shasum":"bcd476cc6b2fe332b4a06ee5d80dd25c0088d639","tarball":"https://registry.npmjs.org/@dagsite/erecht24-next/-/erecht24-next-0.1.0.tgz","fileCount":14,"unpackedSize":30829,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGiW3m71jk1klMxxapMARUOEM/arfKbkv+6J8iGCgpmAAiAe8TIj3SkOA4Ak/rLcDN5AHURBS4S9mem/abHcK2MeBw=="}]},"_npmUser":{"name":"dagsite","email":"deniz@dagsite.com"},"directories":{},"maintainers":[{"name":"dagsite","email":"deniz@dagsite.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/erecht24-next_0.1.0_1782494534320_0.253614429551122"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-26T17:22:14.135Z","0.1.0":"2026-06-26T17:22:14.507Z","modified":"2026-06-26T17:22:14.854Z"},"maintainers":[{"name":"dagsite","email":"deniz@dagsite.com"}],"description":"eRecht24 Rechtstexte-API für Next.js (App Router): Auto-Sync von Impressum + Datenschutz via Pull + Push-Webhook.","homepage":"https://github.com/dagsitegit/erecht24-next","keywords":["erecht24","rechtstexte","impressum","datenschutz","nextjs","dsgvo","legal"],"repository":{"type":"git","url":"git+https://github.com/dagsitegit/erecht24-next.git"},"author":{"name":"DagSite","url":"https://dagsite.com"},"bugs":{"url":"https://github.com/dagsitegit/erecht24-next/issues"},"license":"MIT","readme":"# @dagsite/erecht24-next\n\nAuto-Sync der eRecht24-Rechtstexte (Impressum, Datenschutz, Datenschutz Social Media) für **Next.js (App Router)** - per Pull + Push-Webhook. Änderungen in eRecht24 sind binnen Sekunden auf der Website live, ohne manuelles Kopieren und ohne Redeploy.\n\n> Inoffizielle Integration. Entwickelt und gepflegt von [DagSite](https://dagsite.com). eRecht24 ist nicht der Autor dieses Pakets und leistet dafür keinen Support.\n\n## Was es kann\n\n- **Pull**: Impressum, Datenschutz und Datenschutz Social Media als HTML abrufen (Next.js-Caching mit eigenem Tag pro Texttyp).\n- **Push**: fertiger Webhook-Handler, der das eRecht24-Secret prüft und die betroffene Seite gezielt revalidiert.\n- **Headless-Komponente** `<LegalText>`: rendert das gelieferte HTML, design-neutral - du bettest es in dein eigenes Layout ein und stylst es selbst.\n- **CLI** zum Registrieren, Auflisten und Löschen der Push-Clients.\n\n## Voraussetzungen\n\n- eRecht24-**Premium** mit gepflegten Texten im Projektmanager (liefert den **API-Key** pro Projekt).\n- Next.js >= 14, React >= 18.\n\nEinen eigenen Developer-/Plugin-Key brauchst du **nicht** - der Plugin-Identifier ist im Paket eingebaut.\n\n## Installation\n\n```bash\nnpm install @dagsite/erecht24-next\n# oder: pnpm add @dagsite/erecht24-next\n# oder: yarn add @dagsite/erecht24-next\n# oder: bun add @dagsite/erecht24-next\n```\n\n## ENV-Variablen\n\nDu musst nur **einen** Wert setzen - den projektbezogenen API-Key:\n\n```bash\nERECHT24_API_KEY=        # Projekt-Key aus dem eRecht24-Projektmanager (pro Projekt)\n```\n\n- `ERECHT24_PLUGIN_KEY` ist **nicht** nötig - der Plugin-Identifier ist im Paket eingebaut. Nur setzen, wenn du eine eigene Integration mit eigenem Developer-Key betreiben willst (Override).\n- `ERECHT24_PUSH_SECRET` musst du **nicht** manuell setzen - der `register`-Befehl (unten) erzeugt es und schreibt es automatisch in deine `.env.local`.\n\nDer API-Key gehört ausschließlich in die Server-Env (z.B. `.env.local`, Vercel Project Env), niemals in den Client-Bundle.\n\n## Verwendung\n\n### 1) Seiten\n\n```tsx\n// app/impressum/page.tsx\nimport { LegalText } from \"@dagsite/erecht24-next\"\nimport \"@dagsite/erecht24-next/legal-text.css\"\n\nexport const revalidate = 86400 // 24h-Fallback; der Push aktualisiert sofort\nexport const metadata = {\n  title: \"Impressum\",\n  robots: { index: true, follow: true },\n}\n\nexport default function Page() {\n  return (\n    <main>\n      <LegalText type=\"imprint\" className=\"erecht24-prose\" />\n    </main>\n  )\n}\n```\n\nHinweis: Das von eRecht24 gelieferte HTML enthält **bereits eine eigene `<h1>`** - setze keine zweite Überschrift drumherum (sonst doppelte H1, schlecht für SEO/Barrierefreiheit).\n\nHinweis (Ausfallsicherheit): Für Pflicht-Seiten (Impressum, Datenschutz) **kein `fallback` setzen**. Schlägt der Abruf fehl, propagiert der Fehler - Next.js behält per ISR die zuletzt erfolgreich gerenderte Seite, statt einen Platzhalter zu cachen. `fallback` nur für unkritische Inhalte verwenden.\n\nSprachversionen: Standard ist Deutsch. Für Englisch `<LegalText type=\"imprint\" lang=\"en\" />`. Liefert eRecht24 keine englische Version, fällt die Komponente automatisch auf Deutsch zurück. Beide Sprachen = einfach zwei `<LegalText>` rendern.\n\n### 2) Push-Webhook\n\n```ts\n// app/api/erecht24/push/route.ts\nimport { createErecht24PushRoute } from \"@dagsite/erecht24-next\"\n\nexport const runtime = \"nodejs\"\nexport const dynamic = \"force-dynamic\"\n\nexport const POST = createErecht24PushRoute()\n// Optional eigene Pfade:\n// export const POST = createErecht24PushRoute({\n//   pathByType: { imprint: \"/impressum\", privacyPolicy: \"/datenschutz\" },\n// })\n```\n\n### 3) Push-Client registrieren\n\nDie CLI kommt mit dem Paket - kein eigenes Script nötig. Im Projektverzeichnis (mit `ERECHT24_API_KEY` in `.env.local`):\n\n```bash\nnpx erecht24-register https://deine-domain.de/api/erecht24/push   # registriert + speichert das Secret\nnpx erecht24-register --list\nnpx erecht24-register --delete <id>\n```\n\nDas Push-Secret wird automatisch als `ERECHT24_PUSH_SECRET` in `.env.local` geschrieben (`--no-write` schaltet das ab). Für Production denselben Wert zusätzlich in die Server-Env (z.B. Vercel) eintragen und einmal neu deployen. Danach in eRecht24 \"Push testen\" - die Seite muss sich aktualisieren.\n\nDie CLI lädt `.env.local` automatisch ab Node 20.12. Auf älteren Versionen vorher `export ERECHT24_API_KEY=...`.\n\n## Gut zu wissen\n\n- **Server-seitig**: Das Paket nutzt einen `server-only`-Guard, damit die API-Keys nie in den Client-Bundle gelangen. In Server Components / Route Handlers importieren, nicht in `\"use client\"`-Dateien. Typen mit `import type { ... }` einbinden.\n- **CLI lädt `.env.local` automatisch** ab Node 20.12 (`process.loadEnvFile`). Auf älteren Node-Versionen die Variablen vorher exportieren. Die Laufzeit-Teile (Pull/Push) laufen auf jeder Next.js-tauglichen Node-Version.\n- **Max. 3 Push-Clients pro Projekt** (z.B. Production + Preview + Staging).\n- **snake_case**: `POST /clients` erwartet `push_uri`, `push_method`, `cms`, `cms_version`, `plugin_name`, `author_mail` (die CLI erledigt das). Die Read-Endpunkte liefern dagegen `html_de`, `html_en`, `modified`.\n- **Sicherheit**: Das HTML stammt aus der eRecht24-API (vertrauenswürdige Quelle) und wird via `dangerouslySetInnerHTML` gerendert - hier ausschließlich Inhalte der offiziellen API einspeisen. Für Defense-in-Depth kannst du die Ausgabe zusätzlich durch einen HTML-Sanitizer schicken. Das Push-Secret wird konstant-zeitlich verglichen (ohne Prefix-Leak).\n- **Cache/Aktualisierung**: Der Text wird im Next.js-Data-Cache mit Tag gehalten (Default-TTL 24h). Ein Push invalidiert den Tag und damit den Text **überall**, wo er gerendert wird (auch im Footer), plus die jeweilige Route.\n- **Abmahnschutz**: Die Texte werden unverändert ausgeliefert; Wortlaut und Inhalt kommen 1:1 aus eRecht24.\n\n## API\n\n- `getLegalText(type)`, `createClient`, `listClients`, `deleteClient`, `triggerTestPush`, `legalTextTag(type)`\n- `createErecht24PushRoute(options?)`\n- `<LegalText type lang? fallback? className? />`\n- Typen: `LegalTextType`, `ERecht24Client`, `CreateClientInput`, `PushPayload`\n\n## Beispiel\n\nEin minimales App-Router-Beispiel liegt unter [`examples/nextjs`](./examples/nextjs).\n\n## Lizenz\n\nMIT (c) DagSite\n","readmeFilename":"README.md","_rev":"1-d260d639b83936c67e4b18c691d9720e"}