Commit Graph

9342 Commits

Author SHA1 Message Date
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
Vitor Pamplona ab9ecdc939 Adds methods to follow a bunch of users at the same time 2026-03-10 11:12:23 -04:00
Claude a7cec6f5fd feat: add audio and PDF file upload support to ShortNotePostScreen
Add a new "attach file" button that opens a document picker filtered to
audio/* and application/pdf MIME types. This uses OpenMultipleDocuments
contract since PickVisualMedia only supports images/videos.

- Add SelectFromFiles composable with AttachFile icon button
- Add isAudio() and isDocument() helpers to SelectedMedia
- Add FilePreviewPlaceholder for audio/PDF thumbnail display
- Add upload_file string resource

https://claude.ai/code/session_018naEzfHjLRQLgaWAtY4aSz
2026-03-10 14:48:47 +00:00
Vitor Pamplona b8f9b18506 Moves the account import idea to a route after login 2026-03-10 10:19:18 -04:00
Crowdin Bot bc7d0fd758 New Crowdin translations by GitHub Action 2026-03-10 14:07:56 +00:00
David Kaspar f42939c3b0 Merge pull request #1794 from davotoula/update-translations
update cz, pt, de, sv
2026-03-10 14:04:37 +00:00
davotoula 1e65228488 update cz, pt, de, sv 2026-03-10 14:56:33 +01:00