-
released this
2026-05-03 15:10:07 +00:00 | 6 commits to main since this releaseMajor refactor: customer-merchant communication moved from NIP-04
(kind 4, AES-256-CBC) to NIP-17 (kind 1059 gift wraps, NIP-44 v2
encryption + NIP-59 wrapping). Closes aiolabs/nostrmarket#1.Highlights:
- New nostr/nip44.py + nostr/nip59.py (44 unit tests, validated
against the official NIP-44 spec test vector) - Subscription filter: kind 4 → kind 1059
- _handle_nip04_message replaced with _handle_gift_wrap; merchant ↔
customer DMs flow through wrap_message / unwrap_message - Eliminates the merchant-as-customer routing bug previously patched
byd3229cd— NIP-59's layered envelope is sender/recipient
unambiguous by design
Other improvements:
- Account-keypair-based merchant auto-provisioning (default Online
zone + "'s Store" stall, kind 30017 published on signup) - New shared services.provision_merchant() consumed by both the
extension's lazy GET fallback and the LNbits signup hook - Key-rotation migration feature (PATCH /merchant/.../migrate-keys
republishes stalls/products under the new account pubkey) - Subscription health monitor (auto-resubscribes after 120s of
silence) - Stall re-publish on every product publish — eliminates the
"Unknown Stall" race for new merchants
Companion releases:
- aiolabs/webapp#39 (merged) — customer client publishes orders
with nip59.wrapEvent() - aiolabs/lnbits#11 (merged) — _create_default_merchant delegates
to nostrmarket.services.provision_merchant()
Breaking change: no NIP-04 fallback. Customers and merchants must
both run NIP-17-capable clients.Downloads
-
Source code (ZIP)
3 downloads
-
Source code (TAR.GZ)
1 download
- New nostr/nip44.py + nostr/nip59.py (44 unit tests, validated