import { readFile, writeFile } from "fs/promises"; export async function POST(request: Request) { const body: { subscription: PushSubscriptionJSON } = await request.json(); let subscriptions: PushSubscriptionJSON[]; try { subscriptions = JSON.parse(await readFile("push-subscriptions.json", "utf-8")); } catch (err: any) { if (err.code !== "ENOENT") { throw err; } subscriptions = []; } const existingIndex = subscriptions.findIndex(sub => sub.endpoint === body.subscription.endpoint); if (existingIndex !== -1) { subscriptions[existingIndex] = body.subscription; } else { subscriptions.push(body.subscription); } await writeFile( "push-subscriptions.json", JSON.stringify(subscriptions, undefined, "\t"), "utf-8" ); if (existingIndex !== -1) { return new Response(JSON.stringify({ message: "Existing subscription refreshed."})); } return new Response(JSON.stringify({ message: "New subscription registered."})); }