diff --git a/client/src/lib/utils.ts b/client/src/lib/utils.ts index 0ac5eb8..b504c33 100644 --- a/client/src/lib/utils.ts +++ b/client/src/lib/utils.ts @@ -7,16 +7,17 @@ export function cn(...inputs: ClassValue[]) { // Convert base64 string to Uint8Array for web push export function urlBase64ToUint8Array(base64String: string): Uint8Array { - const padding = '='.repeat((4 - base64String.length % 4) % 4); - const base64 = (base64String + padding) - .replace(/\-/g, '+') - .replace(/_/g, '/'); + // Remove any padding characters from the base64 string + const base64 = base64String.replace(/=+$/, ''); - const rawData = window.atob(base64); + // Replace URL-safe characters back to standard base64 characters + const rawData = atob(base64.replace(/-/g, '+').replace(/_/g, '/')); + + // Convert raw string to Uint8Array const outputArray = new Uint8Array(rawData.length); - for (let i = 0; i < rawData.length; ++i) { outputArray[i] = rawData.charCodeAt(i); } + return outputArray; } \ No newline at end of file diff --git a/client/src/pages/home.tsx b/client/src/pages/home.tsx index a13960d..fe74f79 100644 --- a/client/src/pages/home.tsx +++ b/client/src/pages/home.tsx @@ -100,7 +100,8 @@ export default function Home() { console.log('VAPID public key available:', vapidPublicKey.slice(0, 10) + '...'); const convertedVapidKey = urlBase64ToUint8Array(vapidPublicKey); - console.log('Converted VAPID key to Uint8Array'); + console.log('Converted VAPID key length:', convertedVapidKey.length); + console.log('First few bytes:', Array.from(convertedVapidKey.slice(0, 5))); console.log('Requesting push subscription...'); const subscription = await registration.pushManager.subscribe({