feat: remote browser login persistence + balance display + UI consistency
- Retain login state in remote browser profiles (don't delete on disconnect)
- Add GET /api/browser-sessions/{id}/clipboard for clipboard sync
- Add POST /api/browser-sessions/{id}/autofill-login for manual credential fill
- Add DELETE /api/browser-sessions/profiles/{custom_page_id} for login clear
- Add balance tracking with configurable divisor (balance_divisor)
- Health check on session reuse, idle TTL eviction, background cleanup
- Add first-frame watchdog (10s timeout) to prevent infinite loading
- Reconnect browser on active=true when session was closed
- UI: uniform text-only inline buttons (websites + upstreams pages)
- Fix page switch race with closingRemoteSessionPromise
This commit is contained in:
@@ -62,6 +62,18 @@ def _check_upstream(upstream_id: int) -> None:
|
||||
snapshot = build_snapshot(
|
||||
upstream.id, upstream.base_url, upstream.api_prefix, groups, raw_rates
|
||||
)
|
||||
# ── Balance fetch (inside with block, client still open) ──
|
||||
balance: Optional[float] = None
|
||||
if upstream.balance_endpoint and upstream.balance_response_path:
|
||||
try:
|
||||
raw_balance = client.get_balance(upstream.balance_endpoint, upstream.balance_response_path)
|
||||
if raw_balance is not None:
|
||||
divisor = upstream.balance_divisor or 1.0
|
||||
balance = raw_balance / divisor
|
||||
except Exception as exc:
|
||||
logger.warning("upstream %s balance fetch failed: %s", upstream.name, exc)
|
||||
upstream.balance = balance
|
||||
upstream.balance_updated_at = datetime.now(timezone.utc) if balance is not None else None
|
||||
except Exception as exc:
|
||||
# failure path
|
||||
upstream.consecutive_failures = (upstream.consecutive_failures or 0) + 1
|
||||
@@ -83,6 +95,7 @@ def _check_upstream(upstream_id: int) -> None:
|
||||
return
|
||||
|
||||
# success path (client auto-closed by `with`)
|
||||
|
||||
prev_snapshot_row = (
|
||||
db.query(UpstreamRateSnapshot)
|
||||
.filter(UpstreamRateSnapshot.upstream_id == upstream_id)
|
||||
|
||||
Reference in New Issue
Block a user