9qeklajc
2268c3a962
add migration
2026-07-30 03:09:21 +02:00
9qeklajc and GitHub
c4d27ba02a
Merge pull request #634 from Routstr/fix/combined-db-pool-exhaustion
...
fix: combine DB pool-exhaustion and session-lifecycle fixes
2026-07-30 00:45:00 +02:00
9qeklajc
5ea5024608
resolve review comments
2026-07-29 22:50:33 +02:00
9qeklajc
39f801561b
fix: recreate refund sweep migration on latest head
2026-07-26 12:52:24 +02:00
9qeklajc
ff55788e2d
fix: address PR 634 review feedback
2026-07-26 12:44:37 +02:00
9qeklajc and GitHub
f15eab9f10
Merge pull request #635 from Routstr/re-apply-migration
...
reapply fee migration
2026-07-25 23:54:53 +02:00
9qeklajc
344c3c5f21
reapply fee migration
2026-07-25 23:42:50 +02:00
9qeklajc and GitHub
1d4b8d7cb2
Merge pull request #633 from Routstr/fix/cashu-token-create-post
...
fix: avoid 414 errors when creating keys from Cashu tokens
2026-07-24 23:43:56 +02:00
9qeklajc
1131c2d583
test: keep dynamic settings validation mypy-safe
2026-07-24 23:41:01 +02:00
9qeklajc
7108d554c8
merge: combine PR #632 with broader pool-exhaustion fixes
2026-07-24 23:22:01 +02:00
9qeklajc
1eddf89d52
merge: preserve PR #630 history
2026-07-24 23:06:51 +02:00
9qeklajc
b0c70ecddc
fix: send Cashu token creation payload in request body
2026-07-24 23:01:10 +02:00
9qeklajc
2410a4a6ce
fix: address review findings on payout liability staleness, sweep races, and cancellation safety
...
- periodic_payout: fetch liability per mint/unit right before computing
available balance, so a concurrent top-up can only shrink the payout
- refund sweep: atomically claim each refund before redeeming; release the
claim on failure so retries still happen and concurrent sweeps cannot
misreport a sweep as client-collected
- check_invoice_payment: catch BaseException so task cancellation after a
successful mint still emits the reconciliation alert
- tests: DB-guard race test where both mints succeed (exactly one credit);
pool_size=1 test proving the fee payout releases its connection during
the external send
2026-07-24 22:14:57 +02:00
9qeklajc
1b09639265
docs: document DB pool and mint concurrency env vars in .env.example
2026-07-24 21:44:11 +02:00
9qeklajc
7394b10e75
fix-concurent-issue
2026-07-24 21:29:21 +02:00
9qeklajc and GitHub
b94d95fc2b
Merge pull request #623 from Routstr/fix/streaming-billing-finalization
...
fix: fail safely on streaming billing errors
2026-07-24 20:19:56 +02:00
9qeklajc
27f81dbf42
update migration
2026-07-24 02:36:38 +02:00
9qeklajc
66ba31d0df
Merge remote-tracking branch 'origin/main' into fix/streaming-billing-finalization
2026-07-24 02:05:58 +02:00
9qeklajc and GitHub
a9593ab416
Merge pull request #570 from jeroenubbink/feat/config-ownership-secrets
...
feat(config): store node secrets in an encrypted vault
2026-07-24 02:02:21 +02:00
9qeklajc and GitHub
6221ee8152
Merge pull request #628 from Routstr/fix/cashu-reservation-recovery
...
fix(wallet): recover stale Cashu reservations safely
2026-07-24 01:12:57 +02:00
9qeklajc
65ea28cb85
add test
2026-07-24 01:10:57 +02:00
9qeklajc
2ed20b1b85
resolve reviews
2026-07-24 00:24:24 +02:00
9qeklajc
dbe7a53afd
fix format
2026-07-23 00:09:03 +02:00
9qeklajc
e0c74e3a46
Merge branch 'main' into fix/streaming-billing-finalization
...
# Conflicts:
# routstr/auth.py
# routstr/proxy.py
# routstr/upstream/base.py
# tests/integration/test_balance_negative_on_cost_overrun.py
# tests/integration/test_free_response_stale_reservation.py
2026-07-23 00:03:01 +02:00
9qeklajc and GitHub
18965b4ea4
Merge pull request #629 from jeroenubbink/fix/bill-served-candidate
...
fix: bill and forward failover requests as the provider that actually served
2026-07-22 23:23:07 +02:00
9qeklajc
97dc10a8ad
harden impl.
2026-07-22 23:10:27 +02:00
9qeklajc
87850c97b9
Merge branch 'main' into fix/streaming-billing-finalization
2026-07-22 21:21:06 +02:00
9qeklajc and GitHub
fcc87718ff
Merge pull request #621 from Routstr/fix/propagate-cashu-storage-errors
...
fix: propagate Cashu storage errors
2026-07-22 21:18:10 +02:00
thefux
6c762f0c3d
fix: type reconciliation report mappings
2026-07-22 00:09:36 +00:00
thefux
2b4f70442a
fix: recover stale Cashu reservations safely
2026-07-22 00:06:33 +00:00
9qeklajc and GitHub
99724cc5f5
Merge pull request #620 from Routstr/fix/fee-payout-crash-guard
...
fix: guard fee payouts against crash double-payments
2026-07-22 00:41:04 +02:00
9qeklajc and GitHub
e19f679609
Merge pull request #622 from Routstr/fix/retry-cashu-storage-writes
...
fix: retry critical Cashu storage writes
2026-07-22 00:39:21 +02:00
9qeklajc and GitHub
bd1edcef26
Merge pull request #624 from Routstr/coverage-tests-pr-619
...
test: extract passing coverage tests from #619
2026-07-19 12:54:51 +02:00
9qeklajc
22a94a68a4
test: extract passing coverage tests from #619
2026-07-18 15:58:54 +02:00
9qeklajc
4defe4f227
fix: identify reservation releases
2026-07-18 14:59:57 +02:00
9qeklajc
f8125a8a2d
Merge branch 'fix/fee-payout-crash-guard' into fix/streaming-billing-finalization
2026-07-18 14:57:15 +02:00
9qeklajc
999a5634fa
fix: snapshot reservation cleanup state
2026-07-18 14:54:06 +02:00
9qeklajc
2c218cce49
fix: make reservation cleanup atomic
2026-07-18 14:48:02 +02:00
9qeklajc
fa0b366f9a
fix: fail safely on streaming billing errors
2026-07-18 14:42:03 +02:00
9qeklajc
a3a4d69ed3
fix: make storage retries idempotent
2026-07-18 14:33:40 +02:00
9qeklajc
c9533c872a
fix: retry critical Cashu storage writes
2026-07-18 14:28:18 +02:00
9qeklajc
90da3803c6
fix: preserve caller recovery on storage errors
2026-07-18 14:22:16 +02:00
9qeklajc
8b3b59e176
fix: propagate Cashu transaction storage errors
2026-07-18 14:16:30 +02:00
9qeklajc
be5e323c68
test: cover payout restart and migration safety
2026-07-18 14:13:20 +02:00
9qeklajc
f6d1a41728
fix: checkpoint fee payouts before sending
2026-07-18 14:08:41 +02:00
9qeklajc and GitHub
b3bf1f0e90
Merge pull request #613 from Routstr/fix-overflowing-in-mobile
...
fix overflow
2026-07-17 21:51:38 +02:00
9qeklajc and GitHub
3035292d2a
Merge pull request #575 from Routstr/ehbp-proxy-refactor
...
EHBP proxy support, Tinfoil direct integration, rate limiting, wallet fixes and more
2026-07-17 20:22:14 +02:00
9qeklajc and GitHub
ac436d0862
Merge pull request #618 from jeroenubbink/config/docker-compose-restart-unless-stopped
...
config: Ensure docker compose services are restarted unless explicitly stopped
2026-07-17 20:21:34 +02:00
9qeklajc
281607108c
fix(ui): use dynamic viewport heights
2026-07-16 13:25:44 +02:00
9qeklajc and GitHub
8314f3c1b0
Merge pull request #614 from Routstr/pr-575-review-fixes
...
Fix review blockers: hop-by-hop headers, exact attestation routing, doc updates
2026-07-16 13:18:56 +02:00
9qeklajc and GitHub
1a9041766b
Merge pull request #616 from Routstr/fix/ppq-upstream-inference-cost
...
fix: bill PPQ.AI BYOK upstream_inference_cost + BYOK fee
2026-07-16 13:16:30 +02:00
9qeklajc
c6733dbb62
fix overflow
2026-07-14 21:47:26 +02:00
9qeklajc and GitHub
c671d277d3
Merge pull request #603 from Routstr/refund-sweep-behavior-tests
...
test: exercise refund sweep state transitions
2026-07-13 00:09:30 +02:00
9qeklajc
9460e24f21
fix: persist outbound Cashu tokens before sending
2026-07-13 00:07:00 +02:00
9qeklajc and GitHub
f31929b538
Merge pull request #610 from Routstr/fix-mypy
...
fix mypy
2026-07-12 23:35:35 +02:00
9qeklajc
129ea7bb76
fix mypy
2026-07-12 23:33:22 +02:00
9qeklajc and GitHub
b88c6d84fa
Merge pull request #608 from Routstr/fix/refund-sweep-test-coverage
...
test: cover periodic refund sweep behavior
2026-07-12 23:06:51 +02:00
9qeklajc and GitHub
238beb3e52
Merge pull request #605 from Routstr/fix/admin-withdraw-transaction-audit
...
fix: record admin withdrawals as outgoing transactions
2026-07-12 15:05:20 +02:00
9qeklajc and GitHub
dc833d9f5f
Merge pull request #602 from Routstr/fix/auto-topup-transaction-recovery
...
fix: make auto-topup tokens recoverable
2026-07-12 14:57:03 +02:00
9qeklajc
31e7ff8fbd
test: cover periodic refund sweep behavior
2026-07-12 14:54:26 +02:00
9qeklajc
a1850dfa55
fix: record admin withdrawals as outgoing transactions
2026-07-12 14:49:51 +02:00
9qeklajc and GitHub
9eacabde0e
Merge pull request #604 from Routstr/revert-600-fix/retry-cashu-transaction-storage
...
Revert "Retry Cashu transaction storage on transient DB failures"
2026-07-12 14:49:28 +02:00
9qeklajc and GitHub
73f52ef1fd
Revert "Retry Cashu transaction storage on transient DB failures"
2026-07-12 14:47:30 +02:00
9qeklajc
110ec5da5d
test: exercise refund sweep state transitions
2026-07-12 14:46:19 +02:00
9qeklajc
a5cee796c9
fix: make auto-topup tokens recoverable
2026-07-12 14:45:17 +02:00
9qeklajc and GitHub
aabf08a930
Merge pull request #600 from Routstr/fix/retry-cashu-transaction-storage
...
Retry Cashu transaction storage on transient DB failures
2026-07-12 14:21:40 +02:00
9qeklajc
07c15de106
better retry logic
2026-07-12 14:12:29 +02:00
9qeklajc
aea24d23da
fix: retry Cashu transaction storage
2026-07-12 13:29:09 +02:00
9qeklajc and GitHub
e100c77288
Merge pull request #599 from Routstr/fix/cost-calculation-breakdown
...
Fix input/output cost breakdown calculation
2026-07-12 13:25:08 +02:00
9qeklajc
057a752b1e
fix cost breakdown calculation
2026-07-12 13:07:05 +02:00
9qeklajc and GitHub
5daa2602f5
Merge pull request #593 from Routstr/fix/security-pip-deps
...
Fix/security pip deps
2026-07-11 12:28:31 +02:00
9qeklajc and GitHub
d80912b10e
Merge pull request #589 from Routstr/fix/provider-scoped-model-overrides
...
Fix provider-scoped model overrides
2026-07-10 22:44:16 +02:00
9qeklajc
8f087bf07a
Merge branch 'main' into fix/provider-scoped-model-overrides
2026-07-10 22:00:25 +02:00
9qeklajc and GitHub
744321153f
Merge pull request #585 from Routstr/fix-payout
...
fix payout
2026-07-10 20:37:10 +02:00
9qeklajc
a1118a510d
Merge branch 'main' into fix-payout
2026-07-08 22:40:03 +02:00
9qeklajc and GitHub
27dedfdf77
Merge pull request #595 from Routstr/remove-require-parameters
...
Remove require_parameters injection from OpenRouter provider
2026-07-08 16:47:07 +02:00
9qeklajc
7c2e2ce512
Merge branch 'main' into fix/security-pip-deps
2026-07-07 17:22:58 +02:00
9qeklajc
89b93fde98
resolve rest
2026-07-07 17:22:48 +02:00
9qeklajc and GitHub
c48693973b
Merge pull request #594 from Routstr/update-lock-file
...
update lock file
2026-07-07 16:45:23 +02:00
9qeklajc
407f4745a0
update lock file
2026-07-07 16:29:00 +02:00
9qeklajc and GitHub
806771df13
Merge pull request #591 from Routstr/fix/refund-race-condition
...
fix(wallet): return 425 when refund is pending, not 404
2026-07-07 16:27:00 +02:00
9qeklajc and GitHub
3c1b6d5f17
Merge pull request #578 from Routstr/token-error-code
...
fix: specific, sanitized errors for failed Cashu token redemption
2026-07-07 15:59:49 +02:00
9qeklajc and GitHub
b36bb56a30
Merge pull request #571 from Routstr/fix/security-pip-deps
...
fix(deps): patch reachable pip security advisories (aiohttp, pyjwt, python-multipart, pydantic-settings)
2026-07-07 14:40:09 +02:00
9qeklajc
9b4b4d734f
Merge branch 'main' into fix/security-pip-deps
2026-07-07 14:39:36 +02:00
9qeklajc and GitHub
97172641f8
Merge pull request #581 from jeroenubbink/fix/generic-provider-pricing
...
Resolve generic provider pricing instead of fabricating it
2026-07-07 14:38:32 +02:00
9qeklajc
46bbba7027
resolve reivews
2026-07-07 14:29:39 +02:00
9qeklajc
edfb0f127c
fix provider-scoped model overrides
2026-07-07 13:59:23 +02:00
9qeklajc
65ccf83dbd
update lock file
2026-07-07 12:30:02 +02:00
9qeklajc and GitHub
f55c3e9c8c
Merge pull request #587 from Routstr/bump-version
...
bump version
2026-07-06 23:02:54 +02:00
9qeklajc
e3ac06342f
bump version
2026-07-06 23:00:41 +02:00
9qeklajc
6097193442
fix payout
2026-07-05 23:35:10 +02:00
9qeklajc
e2aa02307b
explicit code for error report & update doc
2026-07-05 23:05:53 +02:00
9qeklajc
66bc1260a4
refactor: align bearer redemption errors with shared X-Cashu taxonomy
...
Route the Authorization: Bearer cashu… redemption failures through the
same failure taxonomy the X-Cashu path already uses (token_already_spent /
invalid_token / mint_error / cashu_error, carried in the error "type"),
with matching statuses, so both redemption paths agree on the
classification for a given failure class instead of introducing a third
parallel code.
- "already spent" -> token_already_spent (400)
- fee/melt failures -> mint_error (422)
- invalid/undecodable token -> invalid_token (400, was 401)
- other expected wallet errors -> cashu_error (400)
- unexpected faults still -> internal_error (500)
Also align the msats<=0 defense-in-depth envelope and note it is now
practically unreachable (credit_balance rejects non-positive amounts).
2026-07-05 17:14:30 +02:00
9qeklajc
9dc4c979b8
fix: tighten redemption error mapping and stop X-Cashu raw-text leak
...
- Anchor the broad invalid/decode buckets to co-occur with "token" so
internal faults (e.g. "Invalid isoformat string") fall through to 500
instead of masquerading as a 401 token error.
- Map the "estimate fees"/"exceed token amount" wallet errors to the
specific "too small to cover swap fees" message instead of the generic
bucket.
- Stop the X-Cashu redemption path from interpolating raw mint/exception
text into mint_error/cashu_error responses (both duplicated blocks).
- Add tests for the fee-gap mapping and the anchored gate.
2026-07-05 16:53:54 +02:00
9qeklajc and GitHub
c81de0de0a
Merge pull request #583 from Routstr/fix/cache-pricing-ui
...
make cache prices configurable
2026-07-04 21:54:30 +02:00
9qeklajc
12c4c1f030
make cache prices configurable
2026-07-04 21:49:05 +02:00
9qeklajc and GitHub
81658d0ba6
Merge pull request #561 from Routstr/fix/refund-truly-empty-responses
...
fix(payment): refund truly-empty upstream responses billed a non-zero USD cost
2026-07-04 21:42:46 +02:00
9qeklajc
ee5ced10c7
refactor(payment): extract shared _empty_cost helper; drop .gitignore change
...
Address PR #561 review:
- Extract the all-zero refund cost object into _empty_cost(), reused by
both the no-usage-data path and the truly-empty USD-cost path.
- Revert the .gitignore additions; those belong in a separate PR.
2026-07-04 20:13:01 +02:00
9qeklajc
7f49ba1771
fix: cast HTTPException detail in tests for mypy
2026-07-02 00:57:31 +02:00
9qeklajc
949dc433f1
fix: return sanitized, specific errors when redeeming an incoming Cashu token fails
2026-07-02 00:47:56 +02:00