diff --git a/.claude/skills/quartz-integration/SKILL.md b/.claude/skills/quartz-integration/SKILL.md index 1c0bb21759..29b41f2d65 100644 --- a/.claude/skills/quartz-integration/SKILL.md +++ b/.claude/skills/quartz-integration/SKILL.md @@ -7,7 +7,7 @@ description: Integration guide for using the Quartz Nostr KMP library in externa Reference for integrating `com.vitorpamplona.quartz:quartz` into external Nostr KMP projects. -**Published artifact**: `com.vitorpamplona.quartz:quartz:1.12.5` (Maven Central) +**Published artifact**: `com.vitorpamplona.quartz:quartz:1.12.6` (Maven Central) **Targets**: JVM 21+, Android (minSdk 21+), iOS (XCFramework `quartz-kmpKit`) **License**: MIT @@ -19,7 +19,7 @@ Reference for integrating `com.vitorpamplona.quartz:quartz` into external Nostr ```toml [versions] -quartz = "1.12.5" +quartz = "1.12.6" [libraries] quartz = { module = "com.vitorpamplona.quartz:quartz", version.ref = "quartz" } @@ -41,7 +41,7 @@ kotlin { ```kotlin dependencies { - implementation("com.vitorpamplona.quartz:quartz:1.12.5") + implementation("com.vitorpamplona.quartz:quartz:1.12.6") } ``` diff --git a/.claude/skills/quartz-integration/references/gradle-setup.md b/.claude/skills/quartz-integration/references/gradle-setup.md index 5698f007ad..4c3a55e054 100644 --- a/.claude/skills/quartz-integration/references/gradle-setup.md +++ b/.claude/skills/quartz-integration/references/gradle-setup.md @@ -3,7 +3,7 @@ ## Current version ``` -com.vitorpamplona.quartz:quartz:1.12.5 +com.vitorpamplona.quartz:quartz:1.12.6 ``` Check latest: https://central.sonatype.com/artifact/com.vitorpamplona.quartz/quartz @@ -16,7 +16,7 @@ Check latest: https://central.sonatype.com/artifact/com.vitorpamplona.quartz/qua ```toml [versions] -quartz = "1.12.5" +quartz = "1.12.6" [libraries] quartz = { module = "com.vitorpamplona.quartz:quartz", version.ref = "quartz" } @@ -55,7 +55,7 @@ kotlin { ```kotlin // build.gradle.kts (app module) dependencies { - implementation("com.vitorpamplona.quartz:quartz:1.12.5") + implementation("com.vitorpamplona.quartz:quartz:1.12.6") } ``` @@ -70,7 +70,7 @@ plugins { } dependencies { - implementation("com.vitorpamplona.quartz:quartz:1.12.5") + implementation("com.vitorpamplona.quartz:quartz:1.12.6") // JNA needed for libsodium (NIP-44) on JVM implementation("net.java.dev.jna:jna:5.18.1") } diff --git a/README.md b/README.md index f161899601..9148b6b1be 100644 --- a/README.md +++ b/README.md @@ -297,16 +297,16 @@ repositories { Add the following line to your `commonMain` dependencies: ```gradle -implementation('com.vitorpamplona.quartz:quartz:1.12.5') +implementation('com.vitorpamplona.quartz:quartz:1.12.6') ``` Variations to each platform are also available: ```gradle -implementation('com.vitorpamplona.quartz:quartz-android:1.12.5') -implementation('com.vitorpamplona.quartz:quartz-jvm:1.12.5') -implementation('com.vitorpamplona.quartz:quartz-iosarm64:1.12.5') -implementation('com.vitorpamplona.quartz:quartz-iossimulatorarm64:1.12.5') +implementation('com.vitorpamplona.quartz:quartz-android:1.12.6') +implementation('com.vitorpamplona.quartz:quartz-jvm:1.12.6') +implementation('com.vitorpamplona.quartz:quartz-iosarm64:1.12.6') +implementation('com.vitorpamplona.quartz:quartz-iossimulatorarm64:1.12.6') ``` Check versions on [MavenCentral](https://central.sonatype.com/search?q=com.vitorpamplona.quartz) diff --git a/docs/changelog/README.md b/docs/changelog/README.md index 08e6e79268..86cce14ed5 100644 --- a/docs/changelog/README.md +++ b/docs/changelog/README.md @@ -2,6 +2,7 @@ Release notes for Amethyst, one file per version. Files are named with zero-padded version numbers so they sort correctly in any file browser. Use [`TEMPLATE.md`](TEMPLATE.md) as the starting point for the next release. +- [v1.12.6 — Napplets, Static Sites & Cashu Multi-Mint](v1.12.06.md) - [v1.12.5 — macOS Desktop Signing Fix (cont.)](v1.12.05.md) - [v1.12.4 — macOS Desktop Signing Fix](v1.12.04.md) - [v1.12.3 — Relay Latency Health & a macOS Notarization Fix](v1.12.03.md) diff --git a/docs/changelog/v1.12.06.md b/docs/changelog/v1.12.06.md new file mode 100644 index 0000000000..7d0064e567 --- /dev/null +++ b/docs/changelog/v1.12.06.md @@ -0,0 +1,74 @@ +# v1.12.6: Napplets, Static Sites & Cashu Multi-Mint + +Highlights: + +- New protocol support for **Nostr Web Applets (NIP-5D)** and **static websites + (NIP-5A)**, resolved straight from signed manifests over Blossom. +- Cashu tokens that span **multiple mints** now redeem in full, and both Base64 + alphabets are accepted. +- A batch of stability fixes across notifications, playback, feeds, and the + emoji pack screens. + +## New Features + +- Add support for **Nostr Web Applets (NIP-5D)** and **static websites + (NIP-5A)**. Napplet manifests (snapshot/root/named kinds) and the NIP-5A + aggregate-hash layer land in Quartz, with a resolver that downloads each + listed Blossom server in order and accepts only the blob whose recomputed + SHA-256 matches the signed manifest — a substituted or corrupted blob fails + verification and is skipped. + +## Performance + +- Cashu token-prefix dispatch now compares against precomputed `DualCase` + prefixes instead of case-folding the cashuA/cashuB markers on every call. + +## Improvements and Bug fixes + +- Cashu: redeeming a pasted token now redeems **every mint/keyset group** in it + (previously only the first), validating all mints are in the wallet up front + and summing the redeemed amounts. The parser also tolerates both standard and + url-safe Base64 and mixed-case `cashuA`/`cashuB` prefixes. +- Stop the `DisappearingScaffold` top/bottom bars from overshooting their + resting edge during the show/hide animation. +- Dedupe emoji shortcodes in the Emoji Pack screen to prevent a `LazyGrid` + crash, and dedupe emoji pack addresses in the My Emoji List grid. +- Cap media-session artwork to the platform bitmap limit so large covers no + longer crash playback. +- Handle a missing camera app gracefully when taking photos or videos. +- Snapshot live-stream status order before sorting, and snapshot feed filters + too, to avoid `TimSort` "contract violation" crashes. +- Notifications: call `startForeground` on every start command and always + `stopSelf` when foreground promotion fails. +- Guard the Health Connect permission check against service-bind failures. +- Add a descriptive message to the media-download HTTP check. + +## Cli + +- `amy napplet fetch` resolves and fetches a NIP-5D napplet. +- `amy nsite fetch` resolves and verifies a NIP-5A static site / napplet. + +## Quartz + +- Implement NIP-5D napplets and the NIP-5A static-site resolver (manifest model, + path lookup, hash verification, Blossom candidate assembly) in `commonMain`, + with HTTP injected so Quartz keeps no networking dependency. +- Move the out-of-band Cashu token parser, the `cashuB` (v4) encoder, and the + token container model into Quartz, so Desktop's rich-text viewer can now parse + received Cashu tokens. Adds `kotlinx-serialization-cbor` (Apache-2.0). +- Centralize Blossom protocol strings in Quartz. +- Never let signer timeouts crash from auto-signing launches. + +## Build & Documentation + +- Generate the changelog translator credits offline from a committed + `translators.json`, track a rolling "since last tag" contributor list, and + seed it from Crowdin on every sync without rewriting the timestamp each run. + +## Contributors + +- @npub1gcxzte5zlkncx26j68ez60fzkvtkm9e0vrwdcvsjakxf9mu9qewqlfnj5z + +## Translations + +- _None this release._ diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 34b5e7b6f8..5b3df52637 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,8 +2,8 @@ # Amethyst app version — single source of truth consumed by both Android (amethyst/) # and Desktop (desktopApp/). `appCode` is the Android versionCode: a monotonic # integer that must increment on every release, even when `app` is unchanged. -app = "1.12.5" -appCode = "453" +app = "1.12.6" +appCode = "454" accompanistAdaptive = "0.37.3" cachemapVersion = "0.2.4" composeMultiplatform = "1.11.1"