From a5743b99a9c16cd0b2c4efce910c147184e9e9b7 Mon Sep 17 00:00:00 2001 From: phil Date: Sun, 6 Jul 2025 22:55:14 -0400 Subject: [PATCH] extract domain/psl and lex group --- atproto-notifications/package-lock.json | 14 +++++++++++++- atproto-notifications/package.json | 1 + atproto-notifications/src/service-worker.ts | 15 ++++++++++++++- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/atproto-notifications/package-lock.json b/atproto-notifications/package-lock.json index 27d4db5..8039c91 100644 --- a/atproto-notifications/package-lock.json +++ b/atproto-notifications/package-lock.json @@ -10,6 +10,7 @@ "dependencies": { "@atcute/identity-resolver": "^1.1.3", "@uidotdev/usehooks": "^2.4.1", + "psl": "^1.15.0", "react": "^19.1.0", "react-dom": "^19.1.0" }, @@ -2918,11 +2919,22 @@ "node": ">= 0.8.0" } }, + "node_modules/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" diff --git a/atproto-notifications/package.json b/atproto-notifications/package.json index 6e3cbfb..9c231aa 100644 --- a/atproto-notifications/package.json +++ b/atproto-notifications/package.json @@ -12,6 +12,7 @@ "dependencies": { "@atcute/identity-resolver": "^1.1.3", "@uidotdev/usehooks": "^2.4.1", + "psl": "^1.15.0", "react": "^19.1.0", "react-dom": "^19.1.0" }, diff --git a/atproto-notifications/src/service-worker.ts b/atproto-notifications/src/service-worker.ts index 01e011e..f24095f 100644 --- a/atproto-notifications/src/service-worker.ts +++ b/atproto-notifications/src/service-worker.ts @@ -1,3 +1,4 @@ +import psl from 'psl'; import { resolveDid } from './atproto/resolve'; self.addEventListener('push', handlePush); @@ -58,6 +59,18 @@ async function handlePush(ev) { // const tag = 'simple-push-demo-notification-tag'; // TODO: resubscribe to notifs to try to stay alive + let group; + let domain; + try { + const [nsid, ...rp] = source.split(':'); + const parts = nsid.split('.'); + group = parts.slice(0, parts.length - 1).join('.') ?? 'unknown'; + const unreversed = parts.toReversed().join('.'); + domain = psl.parse(unreversed)?.domain ?? 'unknown'; + } catch (e) { + console.error('getting top app domain failed', e); + } + let db; try { db = await getDB(); @@ -79,7 +92,7 @@ async function handlePush(ev) { const notification = self.registration.showNotification(title, { icon, - body: `from ${handle}`, + body: `from ${handle} on ${domain} in ${group}`, // actions: [ // {'action': 'bsky', title: 'Bluesky'}, // {'action': 'spacedust', title: 'All notifications'}, -- 2.51.2