From 0bb1b411f4dbd5d1cfa7f5515756608b2e59cbb6 Mon Sep 17 00:00:00 2001 From: Max Litruv Boonzaayer Date: Fri, 20 Feb 2026 18:40:58 +1100 Subject: [PATCH] refactor(sw): streamline access token request handling with improved message listener --- src/sw.ts | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/src/sw.ts b/src/sw.ts index 2179dfc..cb84e3a 100644 --- a/src/sw.ts +++ b/src/sw.ts @@ -3,15 +3,30 @@ export type {}; declare const self: ServiceWorkerGlobalScope; -async function askForAccessToken(client: Client): Promise { +/** + * Pending token requests keyed by responseKey + */ +const pendingTokenRequests = new Map void>(); + +/** + * Message handler must be registered at top level for service worker compliance + */ +self.addEventListener('message', (event: ExtendableMessageEvent) => { + const { responseKey, token } = event.data; + if (responseKey && pendingTokenRequests.has(responseKey)) { + const resolve = pendingTokenRequests.get(responseKey)!; + pendingTokenRequests.delete(responseKey); + resolve(token); + } +}); + +/** + * Request an access token from the client + */ +function askForAccessToken(client: Client): Promise { return new Promise((resolve) => { const responseKey = Math.random().toString(36); - const listener = (event: ExtendableMessageEvent) => { - if (event.data.responseKey !== responseKey) return; - resolve(event.data.token); - self.removeEventListener('message', listener); - }; - self.addEventListener('message', listener); + pendingTokenRequests.set(responseKey, resolve); client.postMessage({ responseKey, type: 'token' }); }); }