Vitor Pamplona
d01b5aba4e
Merge pull request #1791 from nrobi144/feat/nip46-bunker-login
...
feat(desktop): NIP-46 bunker login with heartbeat indicator
2026-03-11 07:47:38 -04:00
nrobi144
edf764709d
fix: resolve conflicts with upstream PR #1789 merge
...
- Add missing commons domain files (BunkerLoginUseCase, NostrConnectLoginUseCase)
- Restore CoroutineScope in NostrSignerRemote for suspend decrypt call
- Update isolation test: upstream removed `since` filter (PR #1789 )
- Add new INostrClient interface methods to TrackingNostrClient mock
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-11 10:35:56 +02:00
nrobi144
36efbd1544
fix(desktop): remove noisy debug logs and silence SLF4J warnings
...
Remove feedSub/contactList debug prints from FeedScreen, suppress
GiftWrapEvent decryption failure log (expected for others' wraps),
and add slf4j-nop to silence "No SLF4J providers" console warnings.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-11 10:20:19 +02:00
nrobi144
4d1d92db39
feat(desktop): add bunker heartbeat indicator to sidebar navigation
...
Pulsating green heart icon shows NIP-46 signer connection status in both
DeckSidebar and SinglePaneLayout NavigationRail. Tooltip displays last
ping time. SignerConnectionState moved to commons for KMP sharing.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-11 10:20:18 +02:00
nrobi144
5475d6c2bc
fix(desktop): verify user pubkey via get_public_key after nostrconnect login
...
The nostrconnect flow was trusting params[0] from the signer's connect
message as the user's pubkey. Some signers (e.g. nsec.app) don't put
the actual user pubkey there, causing all relay subscriptions to query
the wrong identity — contact lists, profiles, and DMs all returned empty.
Now calls remoteSigner.getPublicKey() after the handshake to get the
verified pubkey from the signer. Also stabilizes FeedScreen relay
subscriptions with distinctUntilChanged() and adds relay.primal.net
to defaults.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-11 10:20:18 +02:00
nrobi144
3a1e38a2f2
fix(desktop): address code review findings for NIP-46 bunker login
...
- Add bounds check in fromBunkerUri for missing query params (P2-1)
- Preserve bunker keys on transient force-logout (P2-3)
- Replace debug printlns with DebugConfig.log() (P2-4)
- Replace unused Unstable with Disconnected state (P2-5)
- Move validateBunkerUri to account package (P3-9)
- Fix Compose state update from IO thread (P3-11)
- Add disconnectNip46Client() to onDispose cleanup (P3-12)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-11 10:16:10 +02:00
nrobi144
12c91aae3d
feat(desktop): add nostrconnect:// login flow for QR-based signer pairing
...
Adds client-initiated NIP-46 (nostrconnect://) flow so users can pair
with a remote signer (e.g. Amber) by scanning a QR code instead of
manually copying a bunker:// URI.
Changes:
- Fix RemoteSignerManager to decrypt NIP-44 content before parsing
- Add CoroutineScope to NostrSignerRemote for async event callbacks
- Add loginWithNostrConnect() to AccountManager with 120s timeout
- Add QrCodeCanvas composable using ZXing for QR generation
- Add "Connect" tab to LoginCard showing QR + copyable URI + waiting state
- Wire nostrconnect flow through LoginScreen
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-11 10:16:10 +02:00
nrobi144
bff6723ba6
revert: remove QR code scanning from login
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-11 10:16:10 +02:00
nrobi144
d030843522
feat(desktop): webcam QR scanning via ffmpeg for bunker login
...
Replaces webcam-capture (broken on Apple Silicon) with ffmpeg
avfoundation capture. Opens a live preview dialog that scans
for QR codes from the FaceTime camera. Works natively on arm64.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-11 10:16:10 +02:00
nrobi144
6e04482981
feat(desktop): add webcam QR code scanning for bunker login
...
Uses webcam-capture + ZXing to scan QR codes from the camera.
Click the QR icon on the login screen to open a webcam scanner
dialog that auto-detects bunker:// URIs from Amber's QR display.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-11 10:16:10 +02:00
nrobi144
fd1b435020
feat(desktop): add QR code scanning for bunker login
...
Adds a QR scan button to the login card that decodes QR codes from
clipboard images or image files using ZXing. Useful for scanning
bunker:// URIs from Amber's QR display.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-11 10:16:09 +02:00
nrobi144
5661c6df27
fix(desktop): clear stored credentials on logout
...
All user-initiated logouts now pass deleteKey=true to remove
nsec from secure storage, clear last_npub, and delete bunker state.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-11 10:16:09 +02:00
nrobi144
eafedda99e
feat(desktop): update login hints to mention bunker:// option
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-11 10:16:09 +02:00
nrobi144
26ea0be4c7
fix(desktop): simplify settings logout to just a button
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-11 10:16:09 +02:00
nrobi144
2346d92f16
feat(desktop): add logout option to menu bar and settings
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-11 10:16:09 +02:00
nrobi144
1821b9ff71
test: add NIP-46 test suite for desktop, quartz, and fix pre-existing chess test errors
...
Add comprehensive test coverage for NIP-46 bunker login across quartz and desktopApp:
Quartz (4 files, 48 tests):
- ResponseParserTest: all 7 response parsers (success/error/unexpected)
- FromBunkerUriTest: URI parsing, validation, edge cases
- ConvertExceptionsTest: SignerResult→Exception mapping
- NostrConnectEventTest: canDecrypt, talkingWith, verifiedRecipientPubKey
Desktop (6 files, 45 tests):
- BunkerUriUtilsTest: validateBunkerUri + stripBunkerSecret
- AccountManagerKeyLoginTest: nsec/npub/invalid login, save, generate
- AccountManagerLogoutTest: logout, forceLogout, state transitions
- AccountManagerLoadAccountTest: internal/bunker/missing-key scenarios
- AccountManagerBunkerLoginTest: hasBunkerAccount, setConnectingRelays
- AccountManagerHeartbeatTest: start/stop, no-crash with internal signer
Production changes:
- AccountManager: constructor private→internal, add homeDir param for test injection, extract stripBunkerSecret to internal top-level, constants internal
- desktopApp/build.gradle.kts: add mockk test dependency
Fix pre-existing chess test compilation errors:
- ChessStateReconstructorTest: add missing jester subpackage imports
- ChessGameEventTest: altText()→alt() + add nip31Alts import
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-11 10:16:09 +02:00
nrobi144
6c24c52104
feat(desktop): add NIP-46 remote signer (bunker://) login
...
Support bunker:// URI login for desktop, enabling private key delegation
to remote signers (nsec.app, Amber). Includes heartbeat monitoring,
force-logout on revocation, and ConnectingRelays startup state.
- AccountManager: bunker login/save/load, heartbeat ping, force logout
- LoginCard: auto-detect bunker:// URI, validation, connecting state
- LoginScreen: wire bunker callback, ConnectingRelays screen
- Main.kt: relay timeout, error recovery, scope cleanup, data objects
- ForceLogoutDialog: alert on signer revocation/disconnect
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-11 10:15:24 +02:00
Vitor Pamplona
9f903709e7
Move location permission watcher to the outside of the screens to avoid recreating them
2026-03-10 20:01:55 -04:00
Vitor Pamplona
8cd9449ba6
Improves upload of music and documents.
2026-03-10 19:49:15 -04:00
Vitor Pamplona
8a03f0b501
Replaces Aboutme for NIP-05 in the user search
2026-03-10 19:12:27 -04:00
Vitor Pamplona
2567a7c022
Better alignment and options in the UI.
2026-03-10 18:56:00 -04:00
Vitor Pamplona
178fcbb4c1
removes unused imports
2026-03-10 18:47:00 -04:00
Vitor Pamplona
cc4e81146f
Saves the position of the screen on import follows dialog
2026-03-10 18:46:18 -04:00
Vitor Pamplona
7a3794eabb
New string resource
2026-03-10 18:19:10 -04:00
Vitor Pamplona
a8d4705fa6
Merge branch 'main' of https://github.com/vitorpamplona/amethyst
...
* 'main' of https://github.com/vitorpamplona/amethyst :
New Crowdin translations by GitHub Action
2026-03-10 16:58:24 -04:00
Vitor Pamplona
a1e90b8c9f
save the lazy list state and make it scroll in the search view model to avoid coming back on another feed position
2026-03-10 16:56:31 -04:00
Vitor Pamplona
26b7efafe8
enforces specific keys when using nip05/namecoin
2026-03-10 16:41:59 -04:00
Vitor Pamplona
ef1d7e1249
Merge pull request #1800 from vitorpamplona/l10n_crowdin_translations
...
New Crowdin Translations
2026-03-10 16:29:14 -04:00
Vitor Pamplona
9a3b11e522
Adds the ability to upload any file form any new post screen
2026-03-10 16:23:02 -04:00
Crowdin Bot
ffff1399b9
New Crowdin translations by GitHub Action
2026-03-10 20:18:49 +00:00
Vitor Pamplona
087e5878a6
Fixes some compilation issues
2026-03-10 16:14:38 -04:00
Vitor Pamplona
c0e97c19c0
Improves wording to download to the phone as opposed to the profile gallery
2026-03-10 16:07:45 -04:00
Vitor Pamplona
b4184d2235
Moves the upload file button closer to the image upload
2026-03-10 15:54:03 -04:00
Vitor Pamplona
b2a8a422b2
- Breaks the new Import Follow interface into two screens
...
- Improves user suggestion search by evaluating specific nip-05s and npubs
2026-03-10 15:48:04 -04:00
Vitor Pamplona
dbaa02cdb0
merge
2026-03-10 15:29:28 -04:00
Vitor Pamplona
cdc9ff783d
Accepts INIP05Client on the check and update function
2026-03-10 14:39:33 -04:00
David Kaspar
8f5e69e5ba
Merge pull request #1799 from vitorpamplona/l10n_crowdin_translations
...
New Crowdin Translations
2026-03-10 18:38:29 +00:00
Vitor Pamplona
558e8a2dd2
Adds constructor to DualCase class
2026-03-10 14:37:55 -04:00
Vitor Pamplona
1de38ad9ec
Creates an interface for Nip05Client
2026-03-10 14:37:40 -04:00
Crowdin Bot
132959a5cf
New Crowdin translations by GitHub Action
2026-03-10 18:23:38 +00:00
Vitor Pamplona
9b233c8679
no message
2026-03-10 14:23:31 -04:00
Vitor Pamplona
835001bd6c
Making nip05 client stable
2026-03-10 14:22:06 -04:00
Vitor Pamplona
ccb3ca69dc
Merge pull request #1798 from vitorpamplona/l10n_crowdin_translations
...
New Crowdin Translations
2026-03-10 14:21:39 -04:00
Vitor Pamplona
d69a9fdde1
Merge branch 'main' of https://github.com/vitorpamplona/amethyst
...
* 'main' of https://github.com/vitorpamplona/amethyst :
fix: preserve search screen scroll position across navigation
feat: add audio and PDF file upload support to ShortNotePostScreen
New Crowdin translations by GitHub Action
2026-03-10 13:50:13 -04:00
Vitor Pamplona
9e105e017d
Merge branch 'main' of https://github.com/vitorpamplona/amethyst
...
* 'main' of https://github.com/vitorpamplona/amethyst :
update cz, pt, de, sv
New Crowdin translations by GitHub Action
2026-03-10 13:49:26 -04:00
Crowdin Bot
98a09db9b0
New Crowdin translations by GitHub Action
2026-03-10 17:47:16 +00:00
Vitor Pamplona
7b8352afe2
Merge pull request #1795 from vitorpamplona/l10n_crowdin_translations
...
New Crowdin Translations
2026-03-10 13:45:34 -04:00
Vitor Pamplona
cdecc2087c
Merge pull request #1796 from vitorpamplona/claude/add-audio-pdf-upload-dy1dy
...
Add file upload support for audio and PDF documents
2026-03-10 13:45:23 -04:00
Vitor Pamplona
4ad9e435e0
Merge pull request #1797 from vitorpamplona/claude/fix-search-scroll-position-U10Lv
...
Persist search screen scroll position across navigation
2026-03-10 13:44:24 -04:00
Claude
a64e9bb3cf
fix: preserve search screen scroll position across navigation
...
Replace ephemeral rememberLazyListState() with rememberForeverLazyListState()
so the scroll position is persisted when navigating to a search result and back.
https://claude.ai/code/session_01PmSFQqSMzP51mtqPLwFEtp
2026-03-10 15:15:27 +00:00