diff --git a/api/subscriptionEndpoints.test.ts b/api/subscriptionEndpoints.test.ts index ebbc167..16576c1 100644 --- a/api/subscriptionEndpoints.test.ts +++ b/api/subscriptionEndpoints.test.ts @@ -21,10 +21,6 @@ describe("/api/subscription", () => { mockedCreateSubscription.mockImplementation((subscription) => Promise.resolve({ id: 40, subscription }) ) - - mockedUpdateSubscription.mockImplementation((subscription, id) => - Promise.resolve({ id, subscription }) - ) }) test("POST", async () => { diff --git a/app/install/EnableNotifications.tsx b/app/install/EnableNotifications.tsx index 0e7a3e1..27e9998 100644 --- a/app/install/EnableNotifications.tsx +++ b/app/install/EnableNotifications.tsx @@ -32,10 +32,16 @@ function EnableButton({ onSubscribe }: { onSubscribe: () => void }) { useEffect(() => { if (!canSendPush) return - subscribeToPush(urlB64ToUint8Array(pushPublicKey) as any, () => { - navigator.serviceWorker.controller?.postMessage({ type: "subscribed" }) - onSubscribe() - }) + subscribeToPush( + urlB64ToUint8Array(pushPublicKey) as any, + (subscription) => { + navigator.serviceWorker.controller?.postMessage({ + type: "subscribed", + subscription, + }) + onSubscribe() + } + ) }, [canSendPush]) return diff --git a/app/worker.ts b/app/worker.ts index 09339aa..07ed7d9 100644 --- a/app/worker.ts +++ b/app/worker.ts @@ -41,8 +41,17 @@ export default function start(self: ServiceWorkerGlobalScope) { // }) self.addEventListener("message", async function (event) { - if ("type" in event && event.type === "subscribed") { - await event.waitUntil(submitSubscription(self.registration)) + if ( + "type" in event && + event.type === "subscribed" && + "subscription" in event + ) { + await event.waitUntil( + submitSubscription( + self.registration, + event.subscription as PushSubscription + ) + ) } }) @@ -51,7 +60,12 @@ export default function start(self: ServiceWorkerGlobalScope) { waitEvent.waitUntil( (async () => { - const newSubscription = await submitSubscription(self.registration) + const existingSubscription = + await self.registration.pushManager.getSubscription() + const newSubscription = await submitSubscription( + self.registration, + existingSubscription + ) const clients = await self.clients.matchAll() @@ -70,10 +84,12 @@ export default function start(self: ServiceWorkerGlobalScope) { }) } -async function submitSubscription(registration: ServiceWorkerRegistration) { +async function submitSubscription( + registration: ServiceWorkerRegistration, + subscription: PushSubscription | null +) { const db = database() - const subscription = await registration.pushManager.getSubscription() if (subscription === null) return const existingSubscriptionId = await db.subscriptions.get(1)