import { readFile, writeFile } from "node:fs/promises"; export default defineEventHandler(async (event) => { const body: { subscription: PushSubscriptionJSON } = await readBody(event); 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 { message: "Existing subscription refreshed."}; } return { message: "New subscription registered."}; })