|
| 1 | +# NostrKey Browser Plugin TODO |
| 2 | + |
| 3 | +## NIP-46 nsecBunker UX — Remote Signing via NostrKeep Relay |
| 4 | + |
| 5 | +**Status:** Planned |
| 6 | +**Depends on:** `relay.nostrkeep.app` deployment (`nostrkeep.srvr.relay.src` Phase 1 complete) |
| 7 | +**Related:** `nostrkeep.bizdocs.src` TODO (business model + relay details) |
| 8 | + |
| 9 | +### Summary |
| 10 | + |
| 11 | +Add a Remote Signing (nsecBunker) settings panel to NostrKey. Default bunker relay is `wss://relay.nostrkeep.app` (free, provided by NostrKeep). Users can override with their own relay URL. The nsec never leaves the device — NostrKeep only carries encrypted NIP-46 messages. |
| 12 | + |
| 13 | +### UX Reference |
| 14 | + |
| 15 | +#### Settings Panel |
| 16 | + |
| 17 | +``` |
| 18 | +┌─────────────────────────────────────────────┐ |
| 19 | +│ Remote Signing (nsecBunker) │ |
| 20 | +│ │ |
| 21 | +│ ✅ Enable remote signing │ |
| 22 | +│ │ |
| 23 | +│ Bunker relay: │ |
| 24 | +│ ┌─────────────────────────────────────┐ │ |
| 25 | +│ │ wss://relay.nostrkeep.app │ │ |
| 26 | +│ └─────────────────────────────────────┘ │ |
| 27 | +│ Free relay provided by NostrKeep. │ |
| 28 | +│ Or enter your own relay URL. │ |
| 29 | +│ │ |
| 30 | +│ Your bunker address: │ |
| 31 | +│ ┌─────────────────────────────────────┐ │ |
| 32 | +│ │ bunker://5189fd3b...?relay=wss:// │ │ |
| 33 | +│ │ relay.nostrkeep.app │ │ |
| 34 | +│ └─────────────────────────────────────┘ │ |
| 35 | +│ [Copy] [QR Code] │ |
| 36 | +│ │ |
| 37 | +│ Paste this into any Nostr client that │ |
| 38 | +│ supports NIP-46 login. Your private key │ |
| 39 | +│ stays on this device. │ |
| 40 | +└─────────────────────────────────────────────┘ |
| 41 | +``` |
| 42 | + |
| 43 | +#### Signing Request Approval |
| 44 | + |
| 45 | +``` |
| 46 | +┌─────────────────────────────────────────────┐ |
| 47 | +│ 🔔 Signing Request │ |
| 48 | +│ │ |
| 49 | +│ Primal wants to sign: │ |
| 50 | +│ Kind 1 (note) │ |
| 51 | +│ "Just posted from Primal using my..." │ |
| 52 | +│ │ |
| 53 | +│ [Approve] [Approve All Kind 1] [Deny] │ |
| 54 | +└─────────────────────────────────────────────┘ |
| 55 | +``` |
| 56 | + |
| 57 | +### Key Design Decisions |
| 58 | + |
| 59 | +- **NostrKey is the bunker** (holds key, signs) — **NostrKeep is the relay** (carries messages) |
| 60 | +- NIP-46 messages are NIP-44 encrypted end-to-end — relay cannot read them |
| 61 | +- Default relay: `wss://relay.nostrkeep.app` (free, ephemeral events cost ~nothing) |
| 62 | +- Editable text field for users who want their own relay |
| 63 | +- Bunker address auto-generated from active profile pubkey + relay URL |
| 64 | +- Copy button + QR code for easy sharing |
| 65 | +- Signing approval with per-kind "always allow" option |
| 66 | + |
| 67 | +### Implementation Notes |
| 68 | + |
| 69 | +- NIP-46 uses kind 24133 (ephemeral range) — relay already bypasses allowlist for these |
| 70 | +- Bunker connection string format: `bunker://<pubkey>?relay=<relay-url>` |
| 71 | +- Subscribe to kind 24133 events addressed to active profile pubkey |
| 72 | +- Decrypt requests with NIP-44, sign requested events, encrypt + publish response |
| 73 | +- Extension already has NIP-46 support — this adds the UX layer + NostrKeep default relay |
| 74 | + |
| 75 | +### Tasks |
| 76 | + |
| 77 | +- [ ] Add "Remote Signing" section to settings page |
| 78 | +- [ ] Bunker relay URL field with `wss://relay.nostrkeep.app` default |
| 79 | +- [ ] Auto-generate bunker address from active profile + relay URL |
| 80 | +- [ ] Copy-to-clipboard + QR code for bunker address |
| 81 | +- [ ] Signing request notification/approval UI |
| 82 | +- [ ] Per-kind "always allow" permission management |
| 83 | +- [ ] Connect to bunker relay WebSocket when remote signing is enabled |
| 84 | +- [ ] Handle NIP-46 request/response lifecycle (decrypt → sign → encrypt → publish) |
| 85 | +- [ ] Mirror UX to iOS and Android apps |
0 commit comments