What's Changed
- feat(config): store node secrets in an encrypted vault by @jeroenubbink in #570
- fix(deps): patch reachable pip security advisories (aiohttp, pyjwt, python-multipart, pydantic-settings) by @9qeklajc in #571
- EHBP proxy support, Tinfoil direct integration, rate limiting, wallet fixes and more by @sh1ftred in #575
- fix: specific, sanitized errors for failed Cashu token redemption by @9qeklajc in #578
- Reviewing the changes by @sh1ftred in #580
- Resolve generic provider pricing instead of fabricating it by @jeroenubbink in #581
- fix payout by @9qeklajc in #585
- bump version by @9qeklajc in #587
- add model path endpoint by @9qeklajc in #588
- Fix provider-scoped model overrides by @9qeklajc in #589
- fix(wallet): return 425 when refund is pending, not 404 by @sh1ftred in #591
- Fix/security pip deps by @9qeklajc in #593
- update lock file by @9qeklajc in #594
- Remove require_parameters injection from OpenRouter provider by @sh1ftred in #595
- fix: per-mint rate limiting, trusted-mint fallback, and retry factory… by @9qeklajc in #597
- Fix input/output cost breakdown calculation by @9qeklajc in #599
- Retry Cashu transaction storage on transient DB failures by @9qeklajc in #600
- fix: make auto-topup tokens recoverable by @9qeklajc in #602
- test: exercise refund sweep state transitions by @9qeklajc in #603
- Revert "Retry Cashu transaction storage on transient DB failures" by @9qeklajc in #604
- fix: record admin withdrawals as outgoing transactions by @9qeklajc in #605
- test: cover periodic refund sweep behavior by @9qeklajc in #608
- fix mypy by @9qeklajc in #610
- fix overflow by @9qeklajc in #613
- Fix review blockers: hop-by-hop headers, exact attestation routing, doc updates by @sh1ftred in #614
- fix: bill PPQ.AI BYOK upstream_inference_cost + BYOK fee by @sh1ftred in #616
- config: Ensure docker compose services are restarted unless explicitly stopped by @jeroenubbink in #618
- fix: guard fee payouts against crash double-payments by @9qeklajc in #620
- fix: propagate Cashu storage errors by @9qeklajc in #621
- fix: retry critical Cashu storage writes by @9qeklajc in #622
- fix: fail safely on streaming billing errors by @9qeklajc in #623
- test: extract passing coverage tests from #619 by @9qeklajc in #624
- fix(wallet): recover stale Cashu reservations safely by @9qeklajc in #628
- fix: bill and forward failover requests as the provider that actually served by @jeroenubbink in #629
- fix: stop sharing AsyncSession across tasks and release DB connections during external I/O by @9qeklajc in #630
- fix: expose cost breakdown in paid responses by @9qeklajc in #631
- fix: stop DB connection-pool exhaustion in balance reads (+ env-configurable pool sizing) by @jeroenubbink in #632
- fix: avoid 414 errors when creating keys from Cashu tokens by @9qeklajc in #633
- fix: combine DB pool-exhaustion and session-lifecycle fixes by @9qeklajc in #634
- reapply fee migration by @9qeklajc in #635
- ppq-auto-topup by @9qeklajc in #636
- test: reproduce forwarded model ID alias regression by @9qeklajc in #640
- Fix payout safety and proxy session lifecycle by @9qeklajc in #642
- fix: return persisted API-key refund token by @9qeklajc in #644
- fix(db): increase default connection pool capacity by @9qeklajc in #645
- fix: treat 'quote not found' as definitive unpaid for invoice expiry by @9qeklajc in #647
- better fallback by @9qeklajc in #649
- make provider id unique by @9qeklajc in #650
- use specific refund error message/code by @9qeklajc in #655
- fix: reconcile fee payouts safely @9qeklajc in #659
- Fix broadcast cheapest model catalog @9qeklajc in #660
- add missing error code from topup response endpoint @9qeklajc in #662
- fix: handle Cashu tokens with short keyset IDs by @ashen0x in #663
- fix: surface backend error details instead of raw axios strings by @ashen0x in #657
- fix: one clipboard hook that only claims success when the copy landed by @ashen0x in #656
- fix: handle Cashu tokens with short keyset IDs by @ashen0x in #663
- Add SECURITY.md with vulnerability reporting policy by @sh1ftred in #666
- fix(pricing): a rate that is not a number is not a price by @jeroenubbink in #694
- chore: remove unused dashboard code by @ashen0x in #648
- Make withdrawn tokens recoverable by @ashen0x in #651
New Contributors
- @ashen0x made his first contribution
Full Changelog: v0.4.4...v0.4.5