Commit Graph

9083 Commits

Author SHA1 Message Date
nrobi144 39393d328b fix(quartz): fix NIP-44 key mutation and NIP-46 connect response handling
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>
2026-03-09 07:49:58 +02:00
David Kaspar 931ea33694 Merge pull request #1758 from vitorpamplona/l10n_crowdin_translations
New Crowdin Translations
2026-03-04 05:21:06 +00:00
Crowdin Bot a37c6b5e6f New Crowdin translations by GitHub Action 2026-03-04 00:32:36 +00:00
Vitor Pamplona 546d1e9e73 Protects against invalid URLs 2026-03-03 19:30:39 -05:00
Vitor Pamplona 5cf306683a Merge branch 'main' of https://github.com/vitorpamplona/amethyst
* 'main' of https://github.com/vitorpamplona/amethyst:
  New Crowdin translations by GitHub Action
  update cz, pt, de, sv
  New Crowdin translations by GitHub Action
  update cz, pt, de, sv
  New Crowdin translations by GitHub Action
2026-03-03 19:26:25 -05:00
Vitor Pamplona 96967b9e30 Clearing AccountViewModels more precisely 2026-03-03 19:17:15 -05:00
David Kaspar ea8ed31ba4 Merge pull request #1756 from vitorpamplona/l10n_crowdin_translations
New Crowdin Translations
2026-03-03 22:43:07 +00:00
Crowdin Bot b1504da012 New Crowdin translations by GitHub Action 2026-03-03 22:40:22 +00:00
David Kaspar 9b6d2e9c3a Merge pull request #1755 from davotoula/update-translations
update cz, pt, de, sv
2026-03-03 22:39:09 +00:00
davotoula 8ad1cddb42 update cz, pt, de, sv 2026-03-03 22:36:06 +00:00
David Kaspar c04d93fcea Merge pull request #1754 from vitorpamplona/l10n_crowdin_translations
New Crowdin Translations
2026-03-03 22:24:51 +00:00
Crowdin Bot 8c8fdbc27c New Crowdin translations by GitHub Action 2026-03-03 22:23:46 +00:00
David Kaspar 43133b70f4 Merge pull request #1753 from davotoula/update-translations
update cz, pt, de, sv
2026-03-03 22:22:21 +00:00
davotoula 382273647f update cz, pt, de, sv 2026-03-03 22:18:20 +00:00
Vitor Pamplona 14e6f1bdb1 Merge pull request #1752 from vitorpamplona/l10n_crowdin_translations
New Crowdin Translations
2026-03-03 17:07:27 -05:00
Crowdin Bot dc817abe2c New Crowdin translations by GitHub Action 2026-03-03 21:44:54 +00:00
Vitor Pamplona d8911ef69c Account State is more than just a view model. 2026-03-03 16:42:45 -05:00
Vitor Pamplona 2e71401342 Deletes the default scope form App Modules 2026-03-03 15:17:01 -05:00
Vitor Pamplona a417eb46f7 Fixes the need to have tags and kinds for inbox.nostr.wine to work 2026-03-03 13:40:26 -05:00
Vitor Pamplona 264b988b41 Fixing sending inside this function 2026-03-03 13:37:55 -05:00
Vitor Pamplona 7b80ee8bf0 Fixes the need to specify route in the check if navigation is going to the same route or not 2026-03-03 12:29:17 -05:00
Vitor Pamplona cdbee03e93 Fixes animation for settings pages 2026-03-03 12:10:57 -05:00
Vitor Pamplona cd6cdf7add Switch Surface use on KeyBackup to Scaffod 2026-03-03 12:10:45 -05:00
Vitor Pamplona edb73b3556 Updates AGP 2026-03-03 11:52:03 -05:00
Vitor Pamplona 5d8452af06 lint 2026-03-03 10:54:44 -05:00
Vitor Pamplona 386afdbe8d Merge pull request #1751 from vitorpamplona/claude/improve-zapcustomdialog-ui-2Fzic
Redesign Zap Custom Dialog with improved UI/UX
2026-03-03 10:54:05 -05:00
Vitor Pamplona 7695416ca0 Merge pull request #1750 from vitorpamplona/claude/convert-dialog-to-route-9lrlG
Convert UpdateZapAmountDialog to full-screen navigation route
2026-03-03 10:51:07 -05:00
Vitor Pamplona 583891a145 Merge branch 'main' into claude/convert-dialog-to-route-9lrlG 2026-03-03 10:51:00 -05:00
Vitor Pamplona be0e53fa08 Merge pull request #1748 from vitorpamplona/claude/convert-backup-dialog-route-ngbkf
Convert AccountBackupDialog to full-screen navigation route
2026-03-03 10:48:20 -05:00
Vitor Pamplona 1fb4860d68 Merge pull request #1749 from vitorpamplona/claude/convert-dialog-to-route-7Co1n
Convert UpdateReactionTypeDialog to screen-based navigation
2026-03-03 10:48:05 -05:00
Claude 6f80232c32 feat: improve ZapCustomDialog UI with chips and cleaner layout
- Add dialog title "Send Zap" with close button in header
- Add preset amount SuggestionChips from user's saved zap amounts
- Replace TextSpinner dropdown with FilterChip row for zap type selection
- Make amount field full-width with "sats" suffix
- Move ZapButton to bottom as full-width call-to-action
- Add imePadding for keyboard avoidance
- Add RoundedCornerShape(16dp) to dialog Surface
- Add HorizontalDivider separating header from content
- Change message keyboard capitalization to Sentences
- Add send_zap string resource

https://claude.ai/code/session_017gXfNSaqGshRth2x5tdTKz
2026-03-03 15:46:19 +00:00
Claude 9910bd0dfa feat: convert AccountBackupDialog to a navigation Route
Replaces the local dialog state in AllSettingsScreen with a proper
Route.AccountBackup, presented as a bottom-slide composable.

- Add `Route.AccountBackup` to Routes.kt (sealed class + getRouteWithArguments)
- Rename `AccountBackupDialog` → `AccountBackupScreen` accepting `INav` instead of `onClose`; remove Dialog wrapper
- Register `composableFromBottom<Route.AccountBackup>` in AppNavigation
- Update AllSettingsScreen to navigate to Route.AccountBackup instead of managing local dialog state

https://claude.ai/code/session_01KRRANB1b7wV7mpxEvpfjc7
2026-03-03 15:43:18 +00:00
Claude fb066b3b6f feat: convert UpdateReactionTypeDialog to a route
Replace the dialog-based UpdateReactionTypeDialog with a
navigation route (Route.UpdateReactionType) that slides up
from the bottom. UpdateReactionTypeScreen replaces the Dialog
wrapper with a plain Scaffold. Call sites in AllSettingsScreen
and ReactionsRow now navigate to the route instead of managing
local dialog state.

https://claude.ai/code/session_01TSjuYdBADTRXwT4w8Yx1vU
2026-03-03 15:42:51 +00:00
Claude c3a0141a47 feat: convert UpdateZapAmountDialog to Route
- Add Route.UpdateZapAmount to Routes.kt with optional nip47 parameter
- Create UpdateZapAmountScreen.kt as a Scaffold-based screen using SavingTopBar
- Register composableFromBottomArgs<Route.UpdateZapAmount> in AppNavigation.kt
- Replace dialog state in AllSettingsScreen with nav.nav(Route.UpdateZapAmount())
- Replace dialog state in ReactionsRow with nav.nav(Route.UpdateZapAmount())
- Remove UpdateZapAmountDialog composables, keeping UpdateZapAmountContent and authenticate helpers

https://claude.ai/code/session_01N95sLM14khkJupTfvJcoKq
2026-03-03 15:42:27 +00:00
Vitor Pamplona 3c32dbc701 lint 2026-03-03 10:23:27 -05:00
Vitor Pamplona 2b80ab52b7 Merge pull request #1747 from vitorpamplona/claude/nip39-kind-10011-support-EACQk
Implement NIP-39 External Identities (kind 10011) event support
2026-03-03 10:01:52 -05:00
Claude 79b06d35b9 feat: add NIP-39 kind 10011 (ExternalIdentitiesEvent) support
- Add ExternalIdentitiesEvent (kind 10011) to quartz/nip39ExtIdentities
  with createNew/updateFromPast factory methods and identityClaims()
- Generalize TagArrayBuilderExt to work with any Event type (not just
  MetadataEvent) so claims/twitterClaim etc. work with both kinds
- Extract replaceClaims logic to List<IdentityClaimTag>.replaceClaims()
  shared extension used by both MetadataEvent and ExternalIdentitiesEvent
- Register ExternalIdentitiesEvent in EventFactory (kind 10011)
- Add consume(ExternalIdentitiesEvent) to LocalCache and dispatch in
  justConsumeInnerInner
- Add ExternalIdentitiesEvent.KIND to UserMetadataForKeyKinds relay filter
  so kind 10011 is fetched alongside kind 0 when loading user profiles
- Add UserExternalIdentitiesViewModel that observes the kind 10011
  AddressableNote for a user and exposes List<IdentityClaimTag> as a Flow
- Thread UserExternalIdentitiesViewModel through ProfileScreen →
  RenderScreen → ProfileHeader → DrawAdditionalInfo
- DrawAdditionalInfo now shows kind 10011 identities, falling back to
  kind 0 for backwards compatibility
- UserMetadataState: add sendNewUserIdentities() for kind 10011 and
  remove identity claim params from sendNewUserMetadata() (kind 0)
- NewUserMetadataViewModel: load identities from kind 10011 first
  (fallback to kind 0), save identities to kind 10011 separately

https://claude.ai/code/session_017iU6ZdRu5qRXPCeDztVeeV
2026-03-03 13:47:27 +00:00
Vitor Pamplona a005ec5354 Merge pull request #1746 from davotoula/cleaner-code
Cleaner code
2026-03-03 06:46:34 -05:00
Vitor Pamplona d2ddb9ded5 Merge pull request #1745 from davotoula/defensive-backup-rules
defensive backup rules
2026-03-03 06:45:28 -05:00
davotoula 169416b548 Remove unnecessary suspend modifier from sentToTop() and simplify getNoteIfExists call 2026-03-03 10:06:32 +00:00
davotoula 2d42556b03 Functions shouldn't be empty 2026-03-03 10:03:01 +00:00
davotoula b1a1ccc145 Define a constants instead of duplicating String literals 2026-03-03 09:54:54 +00:00
davotoula b3911fedd9 defensive backup rules 2026-03-03 09:42:43 +00:00
Vitor Pamplona 0370e51e57 Merge branch 'main' of https://github.com/vitorpamplona/amethyst
* 'main' of https://github.com/vitorpamplona/amethyst:
  feat: add NIP-C0 code snippet support (kind:1337)
2026-03-02 19:27:27 -05:00
Vitor Pamplona 88f5843e08 A bit more of a refactoring 2026-03-02 19:25:49 -05:00
Vitor Pamplona 1c3e58303d Merge pull request #1744 from vitorpamplona/claude/add-c0-protocol-support-GAos6
feat: add NIP-C0 code snippet support (kind:1337)
2026-03-02 19:17:53 -05:00
Claude 8c12d4d692 feat: add NIP-C0 code snippet support (kind:1337)
Adds full protocol support for NIP-C0 code snippet events following the
same structure used for NIP-88 polls.

Quartz (quartz/nipC0CodeSnippets/):
- CodeSnippetEvent (kind:1337) with accessors for all optional metadata
- TagArrayExt: parse language, extension, name, description, runtime,
  license, deps (repeatable), and repo from tag arrays
- TagArrayBuilderExt: typed builder functions for CodeSnippetEvent
- Tag classes: LanguageTag (l), ExtensionTag, SnippetNameTag (name),
  SnippetDescriptionTag (description), RuntimeTag, LicenseTag, DepTag,
  RepoTag

EventFactory: register kind 1337 → CodeSnippetEvent
LocalCache: add consume(CodeSnippetEvent) and dispatch in when block

https://claude.ai/code/session_013ykLNfJNdwWpXh8ZhZaSXY
2026-03-02 23:48:43 +00:00
Vitor Pamplona 27d1a00196 Merge branch 'main' of https://github.com/vitorpamplona/amethyst
* 'main' of https://github.com/vitorpamplona/amethyst:
  New Crowdin translations by GitHub Action
2026-03-02 18:35:34 -05:00
Vitor Pamplona 624cf26c29 Switches the public message API to use quoted posts on replies 2026-03-02 18:22:45 -05:00
Vitor Pamplona 934b1fd5ed First chess refactoring 2026-03-02 18:14:08 -05:00