aboutsummaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorFuwn <[email protected]>2026-03-28 06:25:30 +0000
committerFuwn <[email protected]>2026-03-28 06:25:30 +0000
commitb956fafb411fdb4f4ab5d6ed0d417bc3a14c656e (patch)
tree2432a44c7ea901e891e36ce4f7fcab5c9f7ec91c /src/lib
parentfix(notifications): prune dead push endpoints (diff)
downloaddue.moe-b956fafb411fdb4f4ab5d6ed0d417bc3a14c656e.tar.xz
due.moe-b956fafb411fdb4f4ab5d6ed0d417bc3a14c656e.zip
fix(notifications): stabilize browser subscription identity
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/Utility/fingerprint.ts25
1 files changed, 10 insertions, 15 deletions
diff --git a/src/lib/Utility/fingerprint.ts b/src/lib/Utility/fingerprint.ts
index 5af258d0..e38ff61f 100644
--- a/src/lib/Utility/fingerprint.ts
+++ b/src/lib/Utility/fingerprint.ts
@@ -1,18 +1,13 @@
-export const getFingerprint = () =>
- btoa(
- `${(() => {
- const gl = new OffscreenCanvas(0, 0).getContext("webgl");
+const STORAGE_KEY = "notificationDeviceId";
- if (!gl) return "none";
+export const getFingerprint = () => {
+ const existingFingerprint = window.localStorage.getItem(STORAGE_KEY);
- const debugInfo = gl.getExtension("WEBGL_debug_renderer_info");
+ if (existingFingerprint) return existingFingerprint;
- return debugInfo
- ? gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL)
- : "unknown";
- })()}-${
- navigator === null || navigator === void 0
- ? void 0
- : navigator.hardwareConcurrency
- }`,
- );
+ const generatedFingerprint = window.crypto.randomUUID();
+
+ window.localStorage.setItem(STORAGE_KEY, generatedFingerprint);
+
+ return generatedFingerprint;
+};