Files
amethyst/zapstore.yaml
T
Claude 5295d7c718 feat(cli): amy releases publish also publishes the APK for Zapstore
The same command now signs the Android release the way zsp did, so Zapstore
keeps updating the installs it made, with one tool for both NIP-82 readers.

- commons/appupdate: AndroidRelease (app id, flavors, ABIs, APK names),
  AndroidReleaseEvents (zsp's asset tags: version_code, min/target SDK,
  ABIs as platforms, apk_certificate_hash, variant, supported_nip; the
  release; the listing with Zapstore's community h tag), ZapstoreConfig
  (zapstore.yaml), and in jvmMain ApkInspector (apksig: signature check,
  signer certificate, manifest fields) and ReleaseBundles (files -> signed
  events, Blossom mirroring of APKs and listing images).
- amy releases publish: picks up the APKs (googleplay arm64-v8a by default,
  as zsp did), refuses APKs of another package, version or signer, reads
  zapstore.yaml, --blossom mirrors as zsp does with cdn.zapstore.dev,
  --only desktop|android.
- New dependencies, both Apache-2.0: apksig (commons jvmMain; the AGP
  version) and jackson-dataformat-yaml with SnakeYAML (cli).

Checked against Zapstore's live v1.19.0 events: for the real APK the asset
tags match zsp's except its cache-prefixed filename, and the predicted
listing (icon and screenshot Blossom URLs included) matches tag for tag.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HjWRrkeWh8jtjHeFDRXkc3
2026-10-15 20:20:38 +00:00

161 lines
6.7 KiB
YAML

# ═══════════════════════════════════════════════════════════════════
# SOURCE CONFIGURATION
# ═══════════════════════════════════════════════════════════════════
# Source code repository URL or NIP-34 naddr (for display in app store)
repository: https://github.com/vitorpamplona/amethyst
# ═══════════════════════════════════════════════════════════════════
# APP METADATA
# ═══════════════════════════════════════════════════════════════════
# App name (overrides APK label)
name: Amethyst
# Short one-line description
summary: The all-in-one Nostr client
# Full description (supports markdown)
description: |
A privacy-focused Nostr client for Android. Built-in TOR support, the most configurable relay system,
encrypted messaging, zaps, marketplaces, live streams and complete data sovereignty.
# Category tags
tags:
- social-network
- nostr
# SPDX license identifier
license: MIT
# App homepage
website: https://amethyst.social/
# ═══════════════════════════════════════════════════════════════════
# MEDIA
# ═══════════════════════════════════════════════════════════════════
# App icon (local path or URL). 512x512 Play Store launcher icon.
icon: ./amethyst/src/main/ic_launcher-playstore.png
# Screenshots (local paths or URLs)
images:
- ./docs/screenshots/home.png
- ./docs/screenshots/messages.png
- ./docs/screenshots/notifications.png
- ./docs/screenshots/replies.png
# ═══════════════════════════════════════════════════════════════════
# NOSTR METADATA
# ═══════════════════════════════════════════════════════════════════
# NIPs implemented by the app (shown on the Zapstore listing). Kept in sync
# with the "Supported NIPs" checklist in README.md (only the checked items).
supported_nips:
- "01" # Basic protocol flow
- "02" # Follow List
- "03" # OpenTimestamps Attestations
- "04" # Encrypted Direct Message
- "05" # DNS-based Identifiers
- "06" # Key Derivation from Mnemonic
- "08" # Handling Mentions
- "09" # Event Deletion Request
- "10" # Text Notes and Threads
- "11" # Relay Information Document
- "13" # Proof of Work
- "14" # Subject Tag in Text Events
- "15" # Nostr Marketplace
- "17" # Private Direct Messages
- "18" # Reposts
- "19" # bech32-encoded Entities
- "21" # nostr: URI Scheme
- "22" # Comment
- "23" # Long-form Content
- "24" # Extra Metadata Fields and Tags
- "25" # Reactions
- "26" # Delegated Event Signing
- "27" # Text Note References
- "28" # Public Chat
- "29" # Relay-based Groups
- "30" # Custom Emoji
- "31" # Dealing with Unknown Events
- "32" # Labeling
- "34" # git stuff
- "35" # Torrents
- "36" # Sensitive Content
- "37" # Draft Events
- "38" # User Statuses
- "39" # External Identities in Profiles
- "40" # Expiration Timestamp
- "42" # Authentication of Clients to Relays
- "43" # Relay Access Metadata and Requests
- "44" # Encrypted Payloads / Versioned
- "45" # Counting Results
- "46" # Nostr Remote Signing
- "47" # Nostr Wallet Connect
- "48" # Proxy Tags
- "49" # Private Key Encryption
- "50" # Search Capability
- "51" # Lists
- "52" # Calendar Events
- "53" # Live Activities
- "54" # Wiki
- "55" # Android Signer Application
- "56" # Reporting
- "57" # Lightning Zaps
- "58" # Badges
- "59" # Gift Wrap
- "5A" # Pubkey Static Websites
- "60" # Cashu Wallet
- "61" # Nutzaps
- "62" # Request to Vanish
- "64" # Chess / PGN
- "65" # Relay List Metadata
- "66" # Relay Discovery and Liveness Monitoring
- "68" # Picture-first Feeds
- "69" # Peer-to-peer Order Events
- "70" # Protected Events
- "71" # Video Events
- "72" # Moderated Communities
- "73" # External Content IDs
- "75" # Zap Goals
- "77" # Negentropy Syncing
- "78" # Application-specific Data
- "7D" # Threads
- "84" # Highlights
- "85" # Trusted Assertions
- "86" # Relay Management API
- "87" # Ecash Mint Discoverability
- "88" # Polls
- "89" # Recommended Application Handlers
- "90" # Data Vending Machines
- "92" # Media Attachments
- "94" # File Metadata
- "95" # Binary Blobs (Draft)
- "96" # HTTP File Storage Integration
- "98" # HTTP Auth
- "99" # Classified Listings
# ═══════════════════════════════════════════════════════════════════
# VARIANTS
# ═══════════════════════════════════════════════════════════════════
# APK variant patterns (for apps with multiple builds)
variants:
fdroid: ".*-fdroid-.*\\.apk$"
google: ".*-googleplay-.*\\.apk$"
# ═══════════════════════════════════════════════════════════════════
# PUBLISHING RELAYS
# ═══════════════════════════════════════════════════════════════════
# Relays are NOT configured in this file. `amy releases publish`, which reads
# this file for the listing and the supported NIPs, publishes to
# AndroidRelease.RELAYS (relay.zapstore.dev first) unless --relay says otherwise.
# `zsp publish` reads them from the RELAY_URLS environment variable
# (comma-separated) and falls back to wss://relay.zapstore.dev, e.g.:
#
# RELAY_URLS="wss://relay.zapstore.dev,wss://relay.damus.io,wss://nos.lol" \
# SIGN_WITH=<amethyst-nsec> zsp publish
#
# See RELEASE_OPS.md for the maintainer publishing checklist.