Our own keyless Bun service (not Linky's): watches relays for kind-1059 wraps
carrying the plaintext marker ["skatespots","push"] on the recipient copy,
extracts only {recipient, wrapId}, and sends a Web Push. NEVER decrypts - the
client fetches + decrypts the named wrap itself.
Endpoints: GET /health, GET /vapid-public-key, POST /auth/challenge ->
/subscribe|/unsubscribe with a one-time NIP-98 (kind 27235) challenge proof.
State is a JSON file; VAPID keys from env. Wired like the other standalone
servers (typecheck:push + check:push in npm test, deploy:push, Caddyfile +
systemd unit). Verified locally end-to-end: auth -> subscribe -> marked wrap ->
watcher -> push attempt, and proof replay rejected.
Client half (service worker, subscribe hook + Settings toggle, marker on DM
sends) is the next step.
16 lines
304 B
JSON
16 lines
304 B
JSON
{
|
|
"name": "skatespots-push",
|
|
"private": true,
|
|
"type": "module",
|
|
"scripts": {
|
|
"start": "bun run server.ts",
|
|
"dev": "bun --watch run server.ts"
|
|
},
|
|
"dependencies": {
|
|
"nostr-tools": "^2.13.0",
|
|
"web-push": "^3.6.7"
|
|
},
|
|
"devDependencies": {
|
|
"@types/web-push": "^3.6.4"
|
|
}
|
|
}
|