- AGENTS.md und README.md auf Craftvia umgeschrieben (Regeln, Andockpunkte, Stack mit Garage, tsx-Tests, Gate, Demo-Logins) - ISMS-Dokumente entfernt (SPEC, Prototypen, Lane-Prompts, Übergaben, Konzepte Incidents/Framework); Fundament-Doku (Deploy, Sicherheit, Backup, Identity) bleibt - Fundament-Tests an Craftvia-Rollen/Branding angepasst, Resttreffer certvia/isms in Skripten und Kommentaren bereinigt Gate: prisma generate, migrate status, tsc, lint, build, 22/22 Testskripte grün. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
30 lines
1.5 KiB
TypeScript
30 lines
1.5 KiB
TypeScript
// Direkt-Download-Pfad: exportTenant(persist:false) liefert das verschlüsselte
|
|
// Artefakt als Buffer OHNE Store-Roundtrip (Grundlage der /api/platform/backup/download-Route).
|
|
// Lauf: npx tsx scripts/test-backup-download.ts (nutzt lokale Craftvia-DB)
|
|
import "dotenv/config";
|
|
import { prisma } from "../src/server/db";
|
|
import { exportTenant } from "../src/server/backup/export";
|
|
|
|
let failures = 0;
|
|
const ok = (cond: boolean, msg: string) => {
|
|
console.log(`${cond ? "✓" : "✗ FEHLER"} ${msg}`);
|
|
if (!cond) failures++;
|
|
};
|
|
|
|
async function main() {
|
|
const demo = await prisma.tenant.findFirst({ where: { slug: "demo" }, select: { id: true } });
|
|
if (!demo) throw new Error("Mandant 'demo' fehlt — bitte seeden.");
|
|
|
|
const res = await exportTenant(demo.id, { persist: false });
|
|
ok(res.artifact.length > 1000, `Artefakt hat Bytes (${res.artifact.length})`);
|
|
ok(res.artifact.subarray(0, 4).toString("utf8") === "CVB1", `verschlüsselter Kopf „CVB1" (hex ${res.artifact.subarray(0, 4).toString("hex")})`);
|
|
ok(res.artifactKey === null, "persist:false → NICHT im Store abgelegt (artifactKey === null)");
|
|
ok((res.manifest.totalRows ?? 0) > 0, `Manifest: Zeilen > 0 (${res.manifest.totalRows})`);
|
|
ok(res.snapshotId.length > 0, `snapshotId für den Dateinamen vorhanden (${res.snapshotId})`);
|
|
|
|
await prisma.$disconnect();
|
|
console.log(failures === 0 ? "\nAlle grün." : `\n${failures} FEHLER`);
|
|
process.exit(failures === 0 ? 0 : 1);
|
|
}
|
|
main().catch((e) => { console.error(e); process.exit(1); });
|