import { NextRequest, NextResponse } from "next/server"; import { auth } from "@/auth"; import { uploadToHetzner, deleteFromHetzner, generateHetznerStreamUrl } from "@/lib/storage"; export const maxDuration = 120; /** POST /api/storage-test — upload a file to Hetzner and return a playback URL */ export async function POST(req: NextRequest) { const session = await auth(); if (!session?.user) { return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); } const formData = await req.formData(); const file = formData.get("file") as File | null; if (!file) { return NextResponse.json({ error: "No file provided" }, { status: 400 }); } const buffer = Buffer.from(await file.arrayBuffer()); const uploadStart = Date.now(); const { key } = await uploadToHetzner(buffer, file.name, file.type, "storage-test"); const uploadMs = Date.now() - uploadStart; const streamUrl = await generateHetznerStreamUrl(key, 3600); return NextResponse.json({ key, streamUrl, filename: file.name, fileSize: file.size, uploadMs, expiresAt: new Date(Date.now() + 3600 * 1000).toISOString(), }); } /** DELETE /api/storage-test?key=storage-test/... — clean up a test file */ export async function DELETE(req: NextRequest) { const session = await auth(); if (!session?.user) { return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); } const { searchParams } = new URL(req.url); const key = searchParams.get("key"); // Restrict deletions to the storage-test/ folder only if (!key || !key.startsWith("storage-test/")) { return NextResponse.json({ error: "Invalid key — only storage-test/ files can be deleted here" }, { status: 400 }); } await deleteFromHetzner(key); return NextResponse.json({ success: true }); }