From c654c46477602b162b931689902ecd09f574fbb1 Mon Sep 17 00:00:00 2001 From: Fuwn Date: Sat, 24 Aug 2024 03:05:43 -0700 Subject: feat(notifications): fingerprint for multiple grants --- src/lib/Utility/fingerprint.ts | 14 ++++++++++++++ src/lib/Utility/notifications.ts | 8 +++++--- 2 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 src/lib/Utility/fingerprint.ts (limited to 'src/lib/Utility') diff --git a/src/lib/Utility/fingerprint.ts b/src/lib/Utility/fingerprint.ts new file mode 100644 index 00000000..d526d332 --- /dev/null +++ b/src/lib/Utility/fingerprint.ts @@ -0,0 +1,14 @@ +export const getFingerprint = () => + btoa( + `${(() => { + const gl = new OffscreenCanvas(0, 0).getContext('webgl'); + + if (!gl) return 'none'; + + const debugInfo = gl.getExtension('WEBGL_debug_renderer_info'); + + return debugInfo ? gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL) : 'unknown'; + })()}-${ + navigator === null || navigator === void 0 ? void 0 : navigator.hardwareConcurrency + }-${new Date().getTimezoneOffset()}` + ); diff --git a/src/lib/Utility/notifications.ts b/src/lib/Utility/notifications.ts index 6356650c..44fa0dd7 100644 --- a/src/lib/Utility/notifications.ts +++ b/src/lib/Utility/notifications.ts @@ -1,17 +1,18 @@ import { env } from '$env/dynamic/public'; +import { getFingerprint } from './fingerprint'; import root from './root'; export const requestNotifications = async () => { - if ('Notification' in window && navigator.serviceWorker) + if ('Notification' in window && navigator.serviceWorker) { if ((await Notification.requestPermission()) === 'granted') { const pushSubscription = await ( await navigator.serviceWorker.ready ).pushManager.subscribe({ - userVisibleOnly: false, + userVisibleOnly: true, applicationServerKey: env.PUBLIC_VAPID_PUBLIC_KEY }); - await fetch(root('/api/notifications/subscribe'), { + await fetch(root(`/api/notifications/subscribe?p=${getFingerprint()}`), { method: 'POST', headers: { 'Content-Type': 'application/json' @@ -19,4 +20,5 @@ export const requestNotifications = async () => { body: JSON.stringify(pushSubscription) }); } + } }; -- cgit v1.2.3