import md5 from "spark-md5"; import { NextRequest, NextResponse } from "next/server"; import { getServerSideConfig } from "@/app/config/server"; async function handle(req: NextRequest, res: NextResponse) { const serverConfig = getServerSideConfig(); const storeUrl = () => `https://api.cloudflare.com/client/v4/accounts/${serverConfig.cloudflareAccountId}/storage/kv/namespaces/${serverConfig.cloudflareKVNamespaceId}`; const storeHeaders = () => ({ Authorization: `Bearer ${serverConfig.cloudflareKVApiKey}`, }); if (req.method === "POST") { const clonedBody = await req.text(); const hashedCode = md5.hash(clonedBody).trim(); const body: { key: string; value: string; expiration_ttl?: number; } = { key: hashedCode, value: clonedBody, }; try { const ttl = parseInt(serverConfig.cloudflareKVTTL as string); if (ttl > 60) { body["expiration_ttl"] = ttl; } } catch (e) { console.error(e); } const res = await fetch(`${storeUrl()}/bulk`, { headers: { ...storeHeaders(), "Content-Type": "application/json", }, method: "PUT", body: JSON.stringify([body]), }); const result = await res.json(); console.log("save data", result); if (result?.success) { return NextResponse.json( { code: 0, id: hashedCode, result }, { status: res.status }, ); } return NextResponse.json( { error: true, msg: "Save data error" }, { status: 400 }, ); } if (req.method === "GET") { const id = req?.nextUrl?.searchParams?.get("id"); const res = await fetch(`${storeUrl()}/values/${id}`, { headers: storeHeaders(), method: "GET", }); return new Response(res.body, { status: res.status, statusText: res.statusText, headers: res.headers, }); } return NextResponse.json( { error: true, msg: "Invalid request" }, { status: 400 }, ); } export const POST = handle; export const GET = handle; export const runtime = "edge";