jwinterm
6506ce1e18
fix: reconciler hardening, decimal formatting, webhook retries
...
- Advisory lock: wrap per-invoice processing in try/finally so lock is
ALWAYS released, even on exception. Previously, any error between lock
acquisition and release would leak the lock, causing the invoice to be
silently skipped forever on subsequent cycles.
- Error logging: wallet RPC errors now logged at ERROR level (was DEBUG),
making silent reconciliation failures visible in production logs.
- Transfer protection: don't delete stored transfers when wallet-rpc
returns an empty response (transient RPC glitch). Only prune when we
actually got transfer data back.
- Wallet restore height: new wallets generated from keys now look back
~2 days (1440 blocks) instead of starting at current height. Prevents
missing payments that arrived before the wallet was first opened on a
given wallet-rpc instance.
- Decimal formatting: _format_xmr_fixed() now strips trailing zeros
instead of always showing 12 decimal places (0.033554999694 → 0.033555).
- Invoice amount rounding: fiat-converted amounts now use ROUND_UP with
5 decimal places (was ROUND_DOWN with 12), preventing undercharging.
- Webhook retries: BTCPay webhook delivery now retries up to 3 times
with 1s/2s backoff on 5xx or network errors. Timeout increased 5s→10s.
Failures logged at ERROR level (was WARNING/DEBUG).
2026-03-28 11:50:51 -04:00
jwinterm
b7d9d97ab7
docs: add webhook and extra_hosts documentation
2026-03-18 13:18:25 -04:00
jwinterm
5b747ab923
fix: correct API_BASE_URL default (was double-prefixing /api)
...
The default was http://nginx/api but all fetch calls already append
/api/... resulting in http://nginx/api/api/ ... (404). Changed to
http://nginx so the full path is http://nginx/api/admin/auth/verify .
2026-03-15 11:31:17 -04:00
jwinterm
1ce08560a2
security: harden admin auth, reconciler locking, and connection pooling
...
- Use secrets.compare_digest for timing-safe admin key comparison
- Strip whitespace from ADMIN_API_KEY env var
- Add PostgreSQL advisory locks per-invoice in reconciler to prevent
duplicate processing during deployments
- Add wallet-RPC retry with backoff (3 attempts: 0.5s, 1s, 2s)
- Raise MAX_SUBADDRESS_INDEX from 100 to 300
- Tune DB connection pool (pool_size=20, max_overflow=10, recycle=3600)
- Add 1-hour admin session timeout
- Regenerate UI lockfile
2026-03-15 10:49:24 -04:00
jwinterm
17ba489ee2
Add admin panel docs to README, fix nginx for reverse proxy setup
2026-03-10 11:34:28 -04:00
jwinterm
47cd52686a
Remove TLS from nginx — NPM handles TLS on LAN
2026-03-10 11:32:16 -04:00
jwinterm
5f1154d363
Add admin panel for merchant management
...
- POST/GET/DELETE /api/admin/users endpoints
- Admin UI at /admin with login, user list, create/delete
- Auth via ADMIN_API_KEY env var (separate from tenant auth)
- Tenants remain scoped to their own store only
2026-03-10 11:24:38 -04:00
jwinterm
bf6dd29c1f
Send signup requests to apps@such.software
2026-03-09 13:12:01 -04:00
jwinterm
57e549ddf4
Fix turnstile and resend package versions
2026-03-09 13:04:23 -04:00
jwinterm
3eabad598d
Add OPEN_REGISTRATION gate, signup request form, favicon
2026-03-09 13:02:21 -04:00
jwinterm
408312cce7
Add hosted by Such Software to footer
2026-03-09 11:54:38 -04:00
jwinterm
a69d199fab
Switch rate provider from CoinGecko to Kraken
...
Kraken public API is free and doesn't require an API key.
Supports XMR/USD and XMR/EUR pairs.
2026-03-09 10:27:47 -04:00
xmrcheckout
655d037c49
ui: highlight active nav item
2026-01-30 16:52:36 +00:00
xmrcheckout
a19b3566a6
reword marketing homepage in plain english
2026-01-30 16:52:31 +00:00
xmrcheckout
fa359443f8
ui: add public tour with simulated data
2026-01-30 16:52:25 +00:00
xmrcheckout
5753e2171c
Bump monero version to 0.18.4.5
2026-01-17 17:57:03 +00:00
xmrcheckout
ee35140633
docs: add post login UI screenshots and general polish
2026-01-17 15:29:56 +00:00
xmrcheckout
59fbd0c78a
docs: add non-Docker deployment and optional reverse proxy
2026-01-11 21:47:42 +00:00
xmrcheckout
7eadd14ca0
ui: wording tweaks
2026-01-10 22:28:19 +00:00
xmrcheckout
98d944ce0c
Ensure services restart after reboot
2026-01-09 20:02:58 +00:00
xmrcheckout
4db4b51fe9
ui: make donate copy voluntary
2026-01-09 17:20:20 +00:00
xmrcheckout
31eaf2d6a3
compose: only expose nginx by default
2026-01-09 15:23:18 +00:00
xmrcheckout
0ea8732062
ui: trim invoice page messaging
2026-01-09 14:57:08 +00:00
xmrcheckout
6290136327
Add optional Postgres backup service
2026-01-09 14:40:31 +00:00
xmrcheckout
81ce66803d
Add local monerod docker compose profile
2026-01-09 14:33:10 +00:00
xmrcheckout
39083eafb4
invoices: search by amount and refine archive copy
2026-01-09 14:01:02 +00:00
xmrcheckout
4c86be83f5
ui: simplify invoices table columns
2026-01-09 13:50:46 +00:00
xmrcheckout
274c5d80a7
Update monero logo
2026-01-08 18:49:50 +00:00
xmrcheckout
1125eb90a5
ui: add amount copy button to btcpay classic invoice
2026-01-08 18:30:28 +00:00
xmrcheckout
a4df797294
Align BTCPay receipt layout with reference
2026-01-08 17:57:24 +00:00
xmrcheckout
723891d7ea
Update hero wording
2026-01-08 17:56:06 +00:00
xmrcheckout
af60d1d4c6
Fix BTCPay webhook events and delivery
2026-01-08 17:50:09 +00:00
xmrcheckout
7bde17a3eb
Change default confirmation target to 1
2026-01-08 17:39:58 +00:00
xmrcheckout
90ade88057
improve README readability
2026-01-08 17:31:36 +00:00
xmrcheckout
7c6370646e
Add gitignore for local artifacts
2026-01-08 16:43:11 +00:00
xmrcheckout
0148caf501
Redesign create invoice modal
2026-01-08 16:43:11 +00:00
xmrcheckout
6a3156991a
Add optional post-confirmation continue URL
2026-01-08 16:43:11 +00:00
xmrcheckout
6eb8d381c9
BTCPay: add paid/receipt flow and redirect support
2026-01-08 16:43:11 +00:00
xmrcheckout
b53f6dca21
Change default confirmation target to 2
2026-01-06 16:06:39 +00:00
xmrcheckout
d09d73a653
Set default invoice expiry to 60 minutes
2026-01-05 21:53:31 +00:00
xmrcheckout
3d733feb9d
Fix UI quirks
2026-01-05 21:53:31 +00:00
xmrcheckout
b8a86c0c25
Add fiat invoice inputs to UI
2026-01-05 12:03:03 +00:00
xmrcheckout
87219a70eb
Add README.md
2026-01-04 17:57:07 +01:00
xmrcheckout
4c32d4fa60
Add LICENSE
2026-01-04 17:57:07 +01:00
xmrcheckout
5e0ca00af2
Add docker-compose.yml and friends
2026-01-04 17:57:07 +01:00
xmrcheckout
c92dfd2ef1
Add UI
2026-01-04 17:57:07 +01:00
xmrcheckout
3465c2054b
Add api
2026-01-04 16:26:37 +01:00