You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- Enforce ENCRYPTION_KEY on mainnet startup (hard-fail if missing)
- Extend invoice expiry by 30 min on payment detection (prevent stuck detected invoices)
- Redact memo and amount from info-level logs (moved to debug)
- Webhook retry: fail closed on secret decrypt error instead of fallback to raw ciphertext
- Remove premature try_detect_fee from mempool path (fix fee ledger consistency)
- Normalize confirmed webhook payload across all code paths (always include price_zec, received_zec, overpaid)
- Admin key comparison: use subtle::ConstantTimeEq for HMAC tag comparison
- Session validation: remove expected memo from error response
- Update roadmap: add payment link server-side resolution, refine rate limiting scope
-[x]`ALLOWED_ORIGINS` config for production deployment
33
33
-[x] Concurrent batch raw tx fetching (futures::join_all, batches of 20)
34
34
-[x] CipherScan raw tx endpoint (`GET /api/tx/{txid}/raw`)
35
-
-[ ]Rate limiting on public endpoints (actix-web-middleware or tower)
36
-
-[ ]Invoice lookup auth (merchant can only see own invoices)
37
-
-[ ]Merchant registration guard (admin key or invite-only in production)
35
+
-[ ]**Payment link server-side resolution** — move invoice creation from public API endpoint (`POST /api/payment-links/{slug}/checkout`) into the Next.js server component. Invoice creation happens server-to-server (authenticated with internal key), removing the unauthenticated public endpoint entirely. Follows Stripe's model: buyers load a web page, not an API. Page-level protection via Vercel/Cloudflare.
36
+
-[ ]Rate limiting on public endpoints — per-API-key for authenticated routes, per-IP for remaining unauthenticated routes (registration). `actix-governor` keyed limiters, `429` with `Retry-After`.
37
+
-[ ]Invoice lookup auth (merchant can only see own invoices via API; checkout page unaffected)
38
38
-[ ] Input validation hardening (UFVK format check, address validation)
39
39
-[x]**Switch from UFVK to UIVK storage** — accept UFVK or UIVK at registration, derive and store only the UIVK (discard FVK). Existing merchants migrated on startup. Reduces data exposure per principle of least privilege.
40
40
-[ ]**Account deletion cooldown** — schedule deletion for 48h instead of immediate hard-delete. Protects against compromised sessions. Merchant can cancel within the window. After 48h, purge all data (viewing keys, invoices, products, sessions).
0 commit comments