owltide/old/app/api/subscribe/route.ts

30 lines
953 B
TypeScript
Raw Normal View History

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."}));
}