Commit Graph

10262 Commits

Author SHA1 Message Date
M 1ca904b415 refactor: remove Namecoin label from search results per review
Remove namecoinResolvedUser StateFlow and the chain-emoji label
from search results. .bit resolution still works through the
existing NIP-05 path — just no special UI decoration.
2026-03-26 09:37:56 +11:00
Vitor Pamplona e43047c027 removes warnings 2026-03-25 18:33:03 -04:00
M 67fd48c5b8 refactor: simplify .bit search resolution per review feedback
Address @vitorpamplona's review comments on the last commit:

1. Remove NamecoinResolutionState sealed class and status banners
   — the existing NIP-05 resolver already handles .bit, no need for
   separate Namecoin-specific UI state (spinner, chain emoji, error)

2. Remove separate toNip05IdOrNull() resolution path
   — widen the existing `if (term.contains('@'))` gate in both
   SearchBarViewModel and UserSuggestionState to also accept bare
   .bit domains (synthesize _@domain.bit → existing NIP-05 flow)

3. Remove d/ and id/ identifier support from search
   — per feedback, only NIP-05 style resolution (.bit) in search

4. Remove special Namecoin result rendering in ImportFollowList
   — just show UserLine for all results, no separation needed

5. Keep a lightweight 'Namecoin' label on resolved users in search
   — namecoinResolvedUser StateFlow tracks the .bit-resolved user,
   shown as a small label above the UserCompose row

Net: -405 lines, +50 lines across 6 files.
2026-03-26 08:43:39 +11:00
M 0d83af8912 feat: resolve bare .bit domains and show Namecoin resolution status in UI
Widen the existing NIP-05 resolution gate in UserSuggestionState and
SearchBarViewModel to also accept bare .bit domains and d//id/ Namecoin
identifiers. A synthesised Nip05Id is passed to the existing
nip05Client.get() path — which already routes .bit to the
NamecoinNameResolver — so no separate resolution logic is needed.

Add NamecoinResolutionState (Idle/Resolving/Resolved/Error) as a
StateFlow so the UI can show progress. ImportFollowListSelectUserScreen
and SearchScreen display an animated status banner (spinner while
resolving, chain emoji on success, warning on error) and label
Namecoin-resolved profiles in the results list.
2026-03-26 07:40:25 +11:00
Vitor Pamplona 46b75abc81 Merge pull request #1950 from vitorpamplona/l10n_crowdin_translations
New Crowdin Translations
2026-03-25 16:20:00 -04:00
Crowdin Bot 618edf9dd5 New Crowdin translations by GitHub Action 2026-03-25 20:17:28 +00:00
Vitor Pamplona 0de01ca295 Merge pull request #1949 from vitorpamplona/l10n_crowdin_translations
New Crowdin Translations
2026-03-25 16:16:54 -04:00
Vitor Pamplona 2e9beacb13 no message 2026-03-25 16:14:20 -04:00
Crowdin Bot 9db9283952 New Crowdin translations by GitHub Action 2026-03-25 20:07:46 +00:00
Vitor Pamplona 452d2accc9 Merge pull request #1948 from vitorpamplona/claude/add-web-bookmarks-qYwpU
feat: implement NIP-B0 Web Bookmarking (kind 39701)
2026-03-25 16:06:09 -04:00
Vitor Pamplona bf8791088c Trying to resolve the build issue between spotless and vlcSetup without running vlcSetup when applying spotless from Claude. 2026-03-25 16:05:29 -04:00
Vitor Pamplona 15ccdf0c73 Merge pull request #1938 from vitorpamplona/claude/organize-favorite-relay-feeds-DL3o2
feat: separate favorite relay feeds into own category in nav popup
2026-03-25 15:44:59 -04:00
Vitor Pamplona c903996cc2 Merge pull request #1939 from vitorpamplona/claude/nip89-client-tag-LZYhd
feat: NIP-89 client tag on all signed events
2026-03-25 15:42:31 -04:00
Vitor Pamplona 052fa22d59 Merge branch 'main' of https://github.com/vitorpamplona/amethyst
* 'main' of https://github.com/vitorpamplona/amethyst:
  New Crowdin translations by GitHub Action
2026-03-25 15:38:16 -04:00
Vitor Pamplona e90945d201 Removing the solution to a warning about spotless dependencies because claude can't run the vlc step 2026-03-25 15:34:32 -04:00
M 2e02edc333 refactor: rename trustAllCerts → usePinnedTrustStore
The field no longer means 'trust all certificates' — since the Samsung
One UI 7 fix, it means 'use the pinned trust store (hardcoded +
TOFU-pinned certs + system CAs) instead of system-only trust.'

The old name was actively misleading and could cause a future
contributor to interpret the flag literally, potentially reintroducing
the trust-all pattern that Samsung Knox and GrapheneOS reject.

Renamed across all 4 files:
- ElectrumxServer.kt: field definition + updated KDoc
- ElectrumXClient.kt: createSocket() usage + comments
- NamecoinSettings.kt: parseServerString() usage + comments
- NamecoinSettingsTest.kt: test assertions
2026-03-26 06:33:43 +11:00
Claude cbee188ca5 feat: implement NIP-B0 Web Bookmarking (kind 39701)
Add support for NIP-B0 web bookmarks with a complete protocol
implementation in Quartz and a full UI in Amethyst for adding,
editing, browsing, and deleting web bookmarks.

Quartz:
- WebBookmarkEvent (kind 39701) as an addressable event
- Tag builder/parser extensions for title, published_at, hashtags
- Registered in EventFactory

Amethyst:
- WebBookmarksScreen with FAB to add, and per-card edit/delete/open
- WebBookmarkEditDialog for add/edit with URL, title, description, tags
- WebBookmarkFeedFilter querying addressable notes by kind + pubkey
- Account.sendWebBookmark() and Account.deleteWebBookmark()
- LocalCache.consume() for WebBookmarkEvent
- Drawer navigation entry with Language icon
- Route.WebBookmarks and navigation registration

https://claude.ai/code/session_01UzfLJttwuJzovtb8HX5F9n
2026-03-25 19:29:55 +00:00
M 7f451ee7c7 fix: harden TLS for GrapheneOS and security-conscious Android ROMs
Address compatibility and security issues identified by reviewing
GrapheneOS source (hardened Conscrypt, strict TLS enforcement):

1. .onion: prefer pinned factory, fall back to trust-all

   GrapheneOS patches Conscrypt with stricter TLS enforcement that may
   reject no-op X509TrustManagers even for proxied sockets. The .onion
   server's cert is already in PINNED_ELECTRUMX_CERTS (same operator as
   electrumx.testls.space), so we now use cachedPinnedSslFactory() as
   the primary path. onionSslFactory() (trust-all) is kept as a fallback
   on SSLHandshakeException only — this handles cert rotation or unknown
   .onion servers gracefully.

2. TOFU: require explicit user confirmation before pinning

   Previously, Test Connection auto-pinned every cert on success. An
   attacker performing MITM during first test would get their cert
   permanently trusted. Now each new cert triggers an AlertDialog showing
   the full SHA-256 fingerprint. Users must explicitly accept ('Trust')
   or reject each cert — aligning with GrapheneOS's philosophy of
   explicit trust decisions.

3. Clarify trustAllCerts semantics

   The field name is misleading post-refactor: it now means 'use pinned
   trust store' not 'trust all certificates'. Added TODO to rename to
   usePinnedTrustStore and updated inline comments to prevent future
   misinterpretation.

Note: hostname verification on raw SSLSocket is a pre-existing gap
(not introduced by the Samsung fix PR) — SSLSocket.createSocket() uses
the host parameter for SNI only, not hostname verification. A follow-up
should add endpointIdentificationAlgorithm='HTTPS' or fingerprint-based
verification for pinned certs.
2026-03-26 06:26:18 +11:00
Vitor Pamplona 138428a233 Merge pull request #1947 from vitorpamplona/l10n_crowdin_translations
New Crowdin Translations
2026-03-25 15:24:15 -04:00
Crowdin Bot fd86e3c045 New Crowdin translations by GitHub Action 2026-03-25 19:23:05 +00:00
Vitor Pamplona 283fb96bb7 Merge branch 'main' of https://github.com/vitorpamplona/amethyst
* 'main' of https://github.com/vitorpamplona/amethyst:
  reuse hex methods.
  spotless
  delete voice files on failuer
  added progress and test plan to doc
  fix: delete abandoned compressed video when larger than original fix: eagerly delete intermediate temp files in upload pipeline fix: delete temp file from MediaCompressorFileUtils after image compression refactor: simplify temp file cleanup logic - Remove TOCTOU anti-pattern (file.exists() before file.delete()) - Consolidate double deleteTempUri calls into single conditional - Remove restating comments
  analysis for temporary files
  fix: clean up temp files after upload completes
  perf: optimize ChaCha20 and XChaCha20-Poly1305 for speed
  style: apply spotless formatting to ChaCha20/Poly1305 sources
  feat: replace libsodium with pure Kotlin ChaCha20/Poly1305 implementation
2026-03-25 15:20:28 -04:00
Vitor Pamplona 6db28dca0b Merge pull request #1908 from vitorpamplona/claude/remove-libsodium-dependency-DjtWa
Replace libsodium with pure Kotlin XChaCha20-Poly1305 implementation
2026-03-25 13:53:48 -04:00
Vitor Pamplona 2474ba1713 Fixes anon accounts becoming empty bubbles in the notifiy section of new posts. 2026-03-25 13:53:06 -04:00
Vitor Pamplona fc560d2752 reuse hex methods. 2026-03-25 13:22:02 -04:00
Vitor Pamplona 2ead6645c0 Merge pull request #1925 from vitorpamplona/claude/review-cache-cleanup-Yr2P6
Add cleanup of temporary files in upload pipeline
2026-03-25 13:20:52 -04:00
Vitor Pamplona 138bb144ee Merge branch 'main' into claude/review-cache-cleanup-Yr2P6 2026-03-25 13:20:30 -04:00
Vitor Pamplona e2ac534be0 spotless 2026-03-25 12:55:31 -04:00
davotoula aa5dad9fac delete voice files on failuer 2026-03-25 17:42:05 +01:00
Vitor Pamplona 0d92c86459 Merge branch 'main' into claude/remove-libsodium-dependency-DjtWa 2026-03-25 11:50:07 -04:00
Vitor Pamplona 9e9f6c3164 Completing the transition from NIP-44 architecture specific tests to commontTest 2026-03-25 11:48:37 -04:00
Vitor Pamplona d84d146981 Merge branch 'main' into claude/remove-libsodium-dependency-DjtWa 2026-03-25 11:24:55 -04:00
Vitor Pamplona 617db3613f Re-enables benchmark with native android ChaCha functions 2026-03-25 11:17:17 -04:00
Vitor Pamplona 60a44d25eb Merge branch 'main' of https://github.com/vitorpamplona/amethyst
* 'main' of https://github.com/vitorpamplona/amethyst:
  New Crowdin translations by GitHub Action
  New Crowdin translations by GitHub Action
  feat: implement NIP-45 HyperLogLog for probabilistic event counting
2026-03-25 10:55:12 -04:00
Vitor Pamplona 2ffb920f75 Fixes NIP-46 decoding test 2026-03-25 10:51:31 -04:00
Vitor Pamplona f8baf83146 Merge pull request #1941 from vitorpamplona/claude/implement-hyperloglog-nip45-Jai8I
feat: implement NIP-45 HyperLogLog support
2026-03-25 09:34:35 -04:00
Vitor Pamplona 08090f57b5 Merge pull request #1945 from vitorpamplona/l10n_crowdin_translations
New Crowdin Translations
2026-03-25 09:34:18 -04:00
Crowdin Bot 19ef2ca041 New Crowdin translations by GitHub Action 2026-03-25 13:30:02 +00:00
Vitor Pamplona 3a21396838 Merge pull request #1936 from vitorpamplona/l10n_crowdin_translations
New Crowdin Translations
2026-03-25 09:28:32 -04:00
Crowdin Bot 0705d070bd New Crowdin translations by GitHub Action 2026-03-25 12:40:37 +00:00
Vitor Pamplona d6541e37c3 merge 2026-03-25 08:37:18 -04:00
Vitor Pamplona 7583f7f8e1 Moves some of the nip-44 based tests to commonTest 2026-03-25 08:33:04 -04:00
Vitor Pamplona c654d2267c Protects against crashes when the signer sends an unverifiable payload back to Amethyst 2026-03-25 08:28:31 -04:00
Vitor Pamplona 0a0b6aefa0 Merge pull request #1943 from dadofsambonzuki/attestation-fix
Align attestation events with latest NIP format
2026-03-25 07:49:07 -04:00
Vitor Pamplona a1ad460b90 Merge pull request #1944 from KotlinGeekDev/kmp-completeness
Kmp completeness: update feature parity table.
2026-03-25 07:47:38 -04:00
Vitor Pamplona 9f6684b044 Merge pull request #1942 from nrobi144/features/long-form-content
feat(desktop): highlight UX, shared stores, profile tabs, editor toolbar
2026-03-25 07:47:21 -04:00
KotlinGeekDev ac60cbeb02 Update Quartz feature parity table. 2026-03-25 12:42:41 +01:00
Nathan Day 92ae288720 Align attestation tags with latest NIP format 2026-03-25 11:30:29 +00:00
Nathan Day 0b049c656c Merge branch 'vitorpamplona:main' into main 2026-03-25 11:01:43 +00:00
davotoula 42db03790a added progress and test plan to doc 2026-03-25 10:23:38 +01:00
davotoula 60b7c6bd0d fix: delete abandoned compressed video when larger than original
fix: eagerly delete intermediate temp files in upload pipeline
fix: delete temp file from MediaCompressorFileUtils after image compression
refactor: simplify temp file cleanup logic
- Remove TOCTOU anti-pattern (file.exists() before file.delete())
- Consolidate double deleteTempUri calls into single conditional
- Remove restating comments
2026-03-25 10:19:16 +01:00