fix: push notifications — urlBase64ToUint8Array bug, add PushBanner prompt

This commit is contained in:
2026-04-15 12:24:18 +03:00
parent 1641b14f29
commit e6d84e6fd7
3 changed files with 78 additions and 4 deletions

View File

@@ -1,9 +1,8 @@
function urlBase64ToUint8Array(base64String: string): ArrayBuffer {
function urlBase64ToUint8Array(base64String: string): Uint8Array {
const padding = '='.repeat((4 - (base64String.length % 4)) % 4)
const base64 = (base64String + padding).replace(/-/g, '+').replace(/_/g, '/')
const rawData = window.atob(base64)
const arr = new Uint8Array([...rawData].map(char => char.charCodeAt(0)))
return arr.buffer as ArrayBuffer
return new Uint8Array([...rawData].map(char => char.charCodeAt(0)))
}
export async function registerSW(): Promise<ServiceWorkerRegistration | null> {
@@ -22,7 +21,7 @@ export async function subscribeToPush(vapidPublicKey: string): Promise<PushSubsc
if (existing) return existing
return await reg.pushManager.subscribe({
userVisibleOnly: true,
applicationServerKey: urlBase64ToUint8Array(vapidPublicKey),
applicationServerKey: urlBase64ToUint8Array(vapidPublicKey) as unknown as ArrayBuffer,
})
} catch { return null }
}