Adds UI rendering for kind 31922 (CalendarDateSlotEvent) and kind 31923
(CalendarTimeSlotEvent) in the note feed. Each event renders with a header
image, title, date/time range, location, and summary.
* 'main' of https://github.com/vitorpamplona/amethyst:
fix(quartz): connect() returns Unit, caller calls getPublicKey separately
fix(quartz): fix NIP-44 key mutation and NIP-46 connect response handling
feat: add custom ElectrumX server settings for Namecoin resolution
feat: import follow list with Namecoin resolution during signup
Per Amber maintainer: connect never returns a pubkey — response is
"ack" or the secret string. Rewrote ConnectResponse.parse() to check
result/error fields directly on base BunkerResponse (matching Jackson
deserialization). connect() is now a pure protocol handshake; callers
call getPublicKey() separately as a domain concern.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Two bugs in quartz's NIP-46 remote signer:
1. FixedKey.getEncoded() returned the raw byte array reference. javax.crypto.Mac
zeroes the key via destroy() after HMAC computation, corrupting the NIP-44
saltPrefix ("nip44-v2") after the first computeConversationKey call. All
subsequent NIP-44 decryptions with different key pairs fail with Invalid Mac.
Fix: return key.copyOf() instead of key.
2. NostrSignerRemote.connect() only handled pubkey responses. Amber (and other
signers) may respond with "ack" or "already connected" error. Added
ConnectResponse parser that maps these to success and falls back to
getPublicKey() to retrieve the actual pubkey.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add a 'Namecoin Resolution' section that lets users configure custom
ElectrumX servers for .bit / d/ / id/ name resolution. When custom
servers are configured, they are used EXCLUSIVELY — the hardcoded
public defaults are completely ignored. This gives privacy-conscious
users full control over which servers observe their name lookups.
Server format: host:port (TLS default) or host:port:tcp (plaintext).
Supports .onion addresses for Tor-routed lookups.
New files:
NamecoinSettings.kt
Immutable settings data class with server string parsing/formatting.
NamecoinSharedPreferences.kt
DataStore-backed persistence following the TorSharedPreferences
pattern. Provides a synchronous snapshot for the serverListProvider
lambda and observable StateFlow for the UI.
NamecoinSettingsSection.kt
Compose UI: enable/disable toggle, active server display with
DEFAULT/CUSTOM badge, add/remove servers with validation, reset.
NamecoinSettingsTest.kt
Unit tests for parsing, formatting, round-trips, and edge cases.
Integration:
AppModules.kt — added namecoinPrefs (NamecoinSharedPreferences) and
wired customServersOrNull into the existing serverListProvider so
user-configured servers take priority over the Tor/default logic.
Refactored from an earlier patch to avoid duplicating code already in
main. The quartz-layer ElectrumXClient, NamecoinNameResolver, and
supporting types are reused unchanged.