Commit graph

46 commits

Author SHA1 Message Date
25023df8bd Add keypair rotation detection and migration feature
When a user rotates their Nostr keypair in account settings, the
merchant still holds the old key. This adds:

- key_mismatch flag on MerchantConfig (runtime, not persisted) -
  detected on each GET /api/v1/merchant by comparing account vs
  merchant pubkey
- POST /api/v1/merchant/{id}/migrate-keys endpoint that updates
  the merchant keys, republishes all stalls/products under the new
  identity, and resubscribes
- Warning banner in the UI with a "Migrate Keys" button and
  confirmation dialog
- update_merchant_keys() crud function

Orders and DM history are preserved since they reference customer
pubkeys. Old stall/product events on relays become orphaned.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-03 16:59:03 +02:00
5c38947fc6 Auto-provision merchant from account keypair on first access
The LNbits user account IS the merchant identity. GET /api/v1/merchant
now auto-creates the merchant record using the account's existing Nostr
keypair if one doesn't exist yet, so the extension is immediately
usable without any setup screen.

- Extract _auto_create_merchant() helper used by both GET and POST
- Remove welcome/key-generation screen (replaced with loading spinner)
- Remove dead frontend code (generateKeys, importKeys dialogs)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-03 16:59:03 +02:00
a8eeace36d Improve merchant creation with automatic keypair generation
Enhance the merchant creation process by automatically generating Nostr keypairs
for users who don't have them, and streamline the API interface.

Changes:
- Add CreateMerchantRequest model to simplify merchant creation API
- Auto-generate Nostr keypairs for users without existing keys
- Update merchant creation endpoint to use user account keypairs
- Improve error handling and validation in merchant creation flow
- Clean up frontend JavaScript for merchant creation

This ensures all merchants have proper Nostr keypairs for marketplace
functionality without requiring manual key management from users.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-04-24 01:59:27 -04:00
arcbtc
7771201c32 moved to orders tab 2025-12-30 11:46:45 +00:00
arcbtc
1777b5df6d Merge branch 'main' into feature/merchant-keys-panel-146 2025-12-30 11:40:14 +00:00
Ben Weeks
7aec14854c feat: multi-profile support and UI improvements
- Remove backend restriction on one merchant per user
- Add "Generate New Key" dialog with npub/nsec display
- Add "Import Existing Key" option with duplicate check
- Change "Save" to "Save & Publish" in edit profile dialog
- Remove standalone Publish button (now part of Save)
- Add trash icon to saved profile for removal
- Show display_name in saved profiles dropdown
- Hide nsec by default with eye toggle in generate dialog

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 14:05:18 +00:00
Arc
a2931d675a fixup: ui 2025-12-24 05:32:27 +00:00
Arc
05a23fae0b Merge remote-tracking branch 'origin/main' into feature/nostrclient-status-indicator 2025-12-24 03:57:27 +00:00
Ben Weeks
bd010ece6b style: fix prettier formatting
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 12:21:59 +00:00
Ben Weeks
b8c2c99175 chore: remove unused status endpoint and debug logging
- Remove api_get_nostr_status() - frontend calls nostrclient directly
- Remove unused httpx and settings imports
- Remove console.log debug statement

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 14:46:30 +00:00
Ben Weeks
d2755d7232 fix: improve nostrclient status detection and display
- Call nostrclient /relays API directly from frontend for accurate status
- Show correct error messages from API response (body.detail)
- Add orange warning state for no relays configured
- Show relay count when connected (X of Y connected)
- Simplify status logic: 200 = green, no relays = orange, error = red

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 12:49:33 +00:00
Ben Weeks
9911a03575 feat: add nostrclient status indicator and connection button
- Add /api/v1/status endpoint to check nostrclient availability
- Add color-coded "Connect" button (red/orange/green) based on status
- Show dropdown with connection details (relays count, websocket status)
- Add warning banner when nostrclient extension is not available
- Update info card with description of extension functionality

Closes #132

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 10:15:11 +00:00
Ben Weeks
71f458b9b9 feat: restructure UI with tab-based navigation (#119)
Reorganizes the merchant dashboard into a tab-based layout:
- Tabs: Merchant | Shipping | Stalls | Products | Messages | Orders
- Publish dropdown with NIP-15 options (NIP-99 disabled/coming soon)
- Consistent UI patterns across all tabs:
  - Search/filter/buttons aligned right
  - Actions column on right side of tables
  - Equal-width tabs
- Stalls tab: popup edit dialog, navigation to Products/Orders
- Products tab: filter icon dropdown for stall filtering
- Modular component structure for each tab section
- Fixed product API calls to use correct endpoints

Closes #119

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 19:06:28 +00: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
PatMulligan
7a3b144a94
pass showKeys as prop to merchant-details child and use emit to toggle (#105)
previously, index and its child compoment merchant-details had their own
booleans and their values were not synched. Using a prop avoids this
problem
2024-10-25 15:19:13 +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
31d04ff3a5 feat: show shipping cost for order 2023-07-05 09:58:34 +03:00
Vlad Stan
e47c6ec7f4 feat: show order details for customer 2023-07-04 08:40:49 +02:00
Vlad Stan
4bcc994057 chore: code clean-up 2023-07-04 08:40:49 +02:00
Vlad Stan
0ce4d1ebce fix: notification for orders 2023-07-04 08:40:49 +02:00
Vlad Stan
a3c221aca8 feat: activate/deactivate merchant 2023-07-04 08:40:49 +02: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
a65017d04e fix: shipping cost; update UI on new order 2023-04-03 11:57:55 +03:00
Vlad Stan
ef49983e10 feat: dinamically refresh orders 2023-03-30 13:58:14 +03:00
Vlad Stan
178966f0bb feat: navigate from chat to orders 2023-03-30 13:58:14 +03:00
Vlad Stan
9dac1d25b2 feat: keep customer profiles up to date 2023-03-30 13:58:14 +03:00
Vlad Stan
dd4d677ce1 feat: allow delete merchant from nostr 2023-03-23 11:14:34 +02:00
Vlad Stan
27589856bd fix: clear merchant screen on delete 2023-03-23 09:47:40 +02:00
Vlad Stan
9d63d2f5d8 feat: link order to DMs 2023-03-17 10:51:20 +02:00
Vlad Stan
aeebae863e fix: do not allow two merchants with the same public key 2023-03-16 09:56:30 +02:00
Vlad Stan
a16bce543b feat: add merchant-details 2023-03-14 14:31:30 +02:00
Vlad Stan
8228487fc4 feat: add empty DMs box 2023-03-14 14:31:30 +02:00
Vlad Stan
0ca5bf6475 feat: add basic order-list 2023-03-07 09:12:14 +02:00
Vlad Stan
e72e315b7a feat: import private key 2023-03-02 16:00:40 +02:00
Vlad Stan
46f3ad46ad feat: allow restore from nsec 2023-03-02 15:52:40 +02:00
Vlad Stan
8ea5fbc113 feat: basic stall flow 2023-03-01 11:35:04 +02:00
Vlad Stan
fef4f349f2 feat: manage shipping zones 2023-02-28 16:30:09 +02:00
Vlad Stan
dc6ae1d9b3 feat: basic shipping zones UI 2023-02-28 13:08:58 +02:00
Vlad Stan
03a1ccb0b2 fix: set merchant after create 2023-02-28 12:28:51 +02:00
Vlad Stan
e1745703f6 feat: show merchant keypair 2023-02-28 12:21:34 +02:00
Vlad Stan
b0ffbe0b4c feat: init merchant 2023-02-28 11:46:40 +02:00
Vlad Stan
6f3154a449 fix: js references 2023-02-28 09:50:49 +02:00
Tiago Vasconcelos
eb3d1e8f99 Initial skeleton 2023-02-27 18:13:26 +00:00