Commit graph

31 commits

Author SHA1 Message Date
50f87c9970 fix(nip17): drop since filter on kind 1059 subscription
Some checks failed
ci.yml / fix(nip17): drop `since` filter on kind 1059 subscription (pull_request) Failing after 0s
ci.yml / fix(nip17): drop `since` filter on kind 1059 subscription (push) Failing after 0s
NIP-59 randomizes gift wrap created_at up to 2 days into the past so
metadata observers can't correlate publish moments. The lenient
`since = last_dm_time - 5min` window from commit e0fdada was designed
for NIP-04 messages where created_at is the real send time; with
gift wraps it locks out any wrap whose randomized timestamp falls
before the latest stored DM.

aio-demo symptom: established merchant (last_dm_time = today 14:40)
subscribes with `since = today 14:35`. Customer publishes a new gift
wrap whose randomized created_at is May 1 23:11. NostrFilter.matches
sees `event.created_at < self.since` and returns False — relay logs
" Filter didn't match" and the order never reaches the merchant.

Fix: don't apply `since` at all on the kind 1059 filter. Replay risk
is bounded by server-side dedup and our existing
NostrClient.is_duplicate_event() guard. Other filters (stalls,
products, profiles) keep their `since` because those events use
real timestamps.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-03 17:41:30 +02:00
725944ae9c Replace NIP-04 messaging with NIP-17 (NIP-44 + NIP-59 gift wrapping)
Modernize the entire customer-merchant communication layer from deprecated
NIP-04 (kind 4, AES-256-CBC) to NIP-17 private direct messages using
NIP-44 v2 encryption (ChaCha20 + HMAC-SHA256) and NIP-59 gift wrapping
(rumor/seal/gift-wrap protocol). No backwards compatibility retained.

New modules:
- nostr/nip44.py: NIP-44 v2 encryption verified against official spec vectors
- nostr/nip59.py: NIP-59 gift wrap with wrap/unwrap convenience functions
- tests/: 44 unit tests for NIP-44 and NIP-59

Key changes:
- Subscription filters: kind 4 → kind 1059 gift wraps
- Message handler: _handle_nip04_message → _handle_gift_wrap (unwrap + route)
- send_dm/reply_to_structured_dm: NIP-59 gift wrap to recipient + self-archive
- Merchant model: removed NIP-04 crypto methods (decrypt/encrypt/build_dm_event)
- helpers.py: removed NIP-04 functions, kept Schnorr signing + key normalization
- views_api.py: consolidated DM sending through send_dm() service function

Reliability improvements:
- Event deduplication via bounded LRU set in NostrClient
- Subscription health monitor (resubscribes after 120s of silence)
- Preserved 5-minute lenient time window from prior work

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-03 16:59:03 +02:00
d3229cd094 Improves Nostr message handling and error logging
Enhances the processing of Nostr messages by adding more robust error handling and logging, providing better insights into potential issues.

Specifically:
- Improves the checks on the websocket connection to log errors and debug information.
- Implements more comprehensive error logging for failed product quantity checks.
- Enhances logging and validation of EVENT messages to prevent potential errors.
- Implements a more robust merchant lookup logic to avoid double processing of events.
- Implements a more lenient time window for direct message subscriptions.
2026-04-24 01:59:27 -04:00
0b7523fbeb Enhances websocket connection robustness
Improves websocket connection reliability by predefining the websocket URL and handling potential queueing errors.

This change also updates the websocket close message for clarity.
2026-04-24 01:59:27 -04:00
0ebd5f642c add DEBUG logs 2026-04-24 01:59:27 -04:00
dni ⚡
9c00adbf2d
chore: get rid of secp lib (#114)
* chore: get rid of secp lib

* fixup!
2025-11-04 10:34:24 +01:00
PatMulligan
4938491774
FIX: add urlsafe=True (#111) 2025-09-10 15:10:45 +03:00
Vlad Stan
de7fe059b8
V1 (#106)
Some checks failed
/ release (push) Has been cancelled
/ pullrequest (push) Has been cancelled
2024-11-06 11:50:21 +02:00
Vlad Stan
bdf0b77a51
Use private realay enpoint (#97)
Some checks failed
/ release (push) Has been cancelled
/ pullrequest (push) Has been cancelled
* feat: use private ws endpoint

* chore: bump `min_lnbits_version`

* fix: retry logic

* fix: restart logic

* chore: fux log message
2024-01-22 13:50:40 +02:00
Vlad Stan
4edfc28513 fix: better handling of WS close
Some checks failed
/ release (push) Has been cancelled
/ pullrequest (push) Has been cancelled
2023-11-01 15:04:10 +02:00
Vlad Stan
1a840ac007
feat: refresh merchant from nostr (#85) 2023-09-20 12:06:36 +03:00
Vlad Stan
97ee1c8f49
Fix high load (#84)
* chore: testing

* fix: resubscribe when merchant added/removed

* chore: code clean-up

* fix: temp subscribe when new merchant is added

* fix: new customer profile
2023-09-20 09:17:01 +03:00
Vlad Stan
7f8e2c6b3d chore: code clean-up 2023-09-12 15:05:41 +03:00
Vlad Stan
f2773e0b44
Fix subscription errors (#81)
* pref: merge filters in one

* chore: load nit

* feat: restore individual order
2023-09-12 15:03:37 +03:00
Vlad Stan
33adae672d
Product delete (#64)
* feat: restore stalls from `nostr` as pending

* feat: stall and prod last update time

* feat: restore products and stalls as `pending`

* feat: show pending stalls

* feat: restore stall

* feat: restore a stall from nostr

* feat: add  blank `Restore Product` button

* fix: handle no talls to restore case

* feat: show restore dialog

* feat: allow query for pending products

* feat: restore products

* chore: code clean-up

* fix: last dm and last order query

* chore: code clean-up

* fix: subscribe for stalls and products on merchant create/restore

* feat: add message type to orders

* feat: simplify messages; code format

* feat: add type to DMs; restore DMs from nostr

* fix: parsing ints

* fix: hide copy button if invoice not present

* fix: do not generate invoice if product not found

* feat: order restore: first version

* refactor: move some logic into `services`

* feat: improve restore UX

* fix: too many calls to customer DMs

* fix: allow `All` customers filter

* fix: ws reconnect on server restart

* fix: query for customer profiles only one

* fix: unread messages per customer per merchant

* fix: disable `user-profile-events`

* fix: customer profile is optional

* fix: get customers after new message debounced

* chore: code clean-up

* feat: auto-create zone

* feat: fixed ID for default zone

* feat: notify order paid
2023-06-30 13:12:56 +03:00
Vlad Stan
37d26645da fix: remove closed websocket 2023-04-11 19:16:05 +03:00
Vlad Stan
af780a3080 feat: add reconnect to nostrclient 2023-04-11 19:03:41 +03:00
Vlad Stan
755f8ac9ae fix: filter and notifications 2023-04-03 15:11:46 +03:00
Vlad Stan
9dac1d25b2 feat: keep customer profiles up to date 2023-03-30 13:58:14 +03:00
Vlad Stan
32695bf698 feat: stubs for sync from nostr 2023-03-24 15:10:30 +02:00
Vlad Stan
cdf9b20e05 chore: code clean-up 2023-03-16 18:34:37 +02:00
Vlad Stan
97b9e30efd refactor: reorder and rename methods 2023-03-16 16:32:22 +02:00
Vlad Stan
62e54322f5 feat: extract nostr_client class 2023-03-16 16:01:14 +02:00
Vlad Stan
c976c9918a fix: create invoice for fresh merchant 2023-03-15 23:08:37 +02:00
Vlad Stan
64dbd958b0 feat: delete merchant from the local DB 2023-03-14 16:26:04 +02:00
Vlad Stan
108caa3014 fix: publish events via websocket 2023-03-14 16:00:01 +02:00
Vlad Stan
d58c97f080 feat: user merchant_id instead of user_id 2023-03-14 14:31:30 +02:00
Vlad Stan
2912589b70 feat: create order on DM 2023-03-06 15:03:02 +02:00
Vlad Stan
3988933e40 feat: listen for direct messages 2023-03-03 18:24:53 +02:00
Vlad Stan
b9cf037565 feat: add currency to product 2023-03-03 11:30:48 +02:00
Vlad Stan
639b4cb880 feat: publish event on C_UD for stalls 2023-03-02 10:14:11 +02:00