Files
nexarch/web/dms-browser/lib/diffApi.ts
T
patrickandClaude Sonnet 5 46c5b8ee64
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
UX-10: Bearer-Token statt caller in dms-browser, dms-upload, pdf-viewer; Bulk-Edit-Actor aus dem Token
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-22 01:06:17 +02:00

42 lines
1.3 KiB
TypeScript

// Duenner Client fuer VER-04s Backend-Voraussetzung
// (dms/internal/versioningapi.handleDiff) — enthaelt keine eigene
// Diff-Berechnung, nur den HTTP-Aufruf.
import { apiFetch, statusMessage } from "./http";
import { withCaller } from "./caller";
function apiBase(): string {
const base = process.env.NEXT_PUBLIC_VERSIONING_API_URL;
if (!base) {
throw new Error("NEXT_PUBLIC_VERSIONING_API_URL ist nicht gesetzt (Umgebungsvariable erforderlich)");
}
return base;
}
export type DiffOp = "equal" | "insert" | "delete";
export interface DiffLine {
op: DiffOp;
text: string;
}
export interface MetadataDiffEntry {
field: string;
before: string;
after: string;
}
export interface DiffResult {
text: DiffLine[];
metadata: MetadataDiffEntry[];
}
export async function fetchDiff(documentID: string, fromRevisionID: string, toRevisionID: string): Promise<DiffResult> {
const url = withCaller(`${apiBase()}/documents/${encodeURIComponent(documentID)}/diff?from=${encodeURIComponent(fromRevisionID)}&to=${encodeURIComponent(toRevisionID)}`);
const res = await apiFetch(url);
if (!res.ok) {
if (res.status === 403) throw new Error("Zugriff verweigert: keine Berechtigung für eine der beiden Revisionen.");
throw new Error(statusMessage(res, "Vergleich fehlgeschlagen"));
}
return res.json();
}