Implement proof of concept push notifications

This commit is contained in:
Hornwitser 2025-02-28 15:32:03 +01:00
parent e3210afe3a
commit 6007f4caeb
13 changed files with 407 additions and 1 deletions

View file

@ -0,0 +1,26 @@
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.splice(existingIndex, 1);
} else {
return new Response(JSON.stringify({ message: "No subscription registered."}));
}
await writeFile(
"push-subscriptions.json",
JSON.stringify(subscriptions, undefined, "\t"),
"utf-8"
);
return new Response(JSON.stringify({ message: "Existing subscription removed."}));
}