Skip to content

v0.6 - Amber Signer Login, Relay Cleanup & Login Hardening

Latest

Choose a tag to compare

@bitkarrot bitkarrot released this 07 Aug 06:32
c315055

2026 Summer Stage 4 β€” Amber Signer Login, Relay Cleanup & Login Hardening

πŸ”‘ Signer Login (Amber / NIP-46)

A new Signer tab in the Nostr login dialog supports cross-device pairing via NIP-46 (nostrconnect://). The NIP-46 flow is signer-agnostic, so it works with any remote NIP-46 signer β€” Amber, Primal, nsec.app, Keys.band, etc. A QR code is shown for easy mobile scanning.

πŸ” Unified Signer Plumbing

Amber and nostrconnect logins are now wired into the shared signer utilities (useLoginActions, useCurrentUser, and signerUtils.getUserSigner()). Every existing code path that already used the unified signer for nsec, extension, or bunker logins now also works for signer-based logins. Several spots that still called window.nostr directly were updated to use the shared signer, including list utilities, dashboard Nostr utilities, post writing, and NIP-42 auth.

🌐 Relay Cleanup

Stale relays were removed from all relay lists and fallbacks across the dashboard, including relay.damus.io and wss://relay.nostr.net. Default search and publish relays now consistently use wss://nos.lol and wss://relay.primal.net. The shared NPool is cached at module level so bunker and nostrconnect logins reuse a single connection pool instead of opening fresh WebSocket connections on every signer call.

πŸ› οΈ Android & Older WebView Compatibility

Added an AbortSignal.any() polyfill for older Android WebViews that don't support it, which previously broke every nostrconnect login with AbortSignal.any is not a function. The Signer tab also reorders the login options to promote the reliable NIP-46 flow first, while the NIP-55 on-device flow is clearly marked experimental because Chrome's IntentDispatcher doesn't always return the redirect after Amber approval.

🏠 My Rooms Reliability

Fixed the My Rooms page rendering an empty list even when the signed-in user owned rooms. It now fetches kind 30312 events directly from the relay's /api/events endpoint and parses room fields from tags, avoiding the broken /api/rooms-by-pubkey route. Diagnostics were also added for unexpected response shapes so relay compatibility issues are visible instead of silently failing.

πŸ§ͺ Testing & Infrastructure

Added a gsd-browser end-to-end test script that exercises Amber, nsec, and extension login plus signing round-trips against a local dev server. A scripts/BROWSER_TESTING.md guide documents what each test covers, how the transports are mocked, and the gotchas discovered while building the suite. A reverse proxy server was also added for public Amber testing routes.

🧹 Bug Fixes & Polish

  • Fixed nostrconnect session race conditions and stale state when the login dialog is closed and reopened.
  • Guarded all async login handlers against setState calls on unmounted components.
  • Replaced the shared loading boolean with per-method loadingMethod state so a long Amber wait no longer disables the other login tabs.
  • Deduplicated relay list constants and moved search relays to a single PUBLIC_SEARCH_RELAYS env variable.
  • Added an accessible aria-label to the nostrconnect QR code.
  • Restored the production start script and added start:proxy for the dev proxy server.

Special thanks to @Yeghro, @bitkarrot, and @devin-ai-integration[bot]

Contributors