whisper-money/resources/js/pages/settings
Víctor Falcón df9fc38562
feat: Add Binance integration (#131)
## Summary

- Adds Binance as a third banking provider alongside EnableBanking and
Indexa Capital
- Binance appears in the institution list for **all countries**, with
the full list sorted alphabetically
- Creates a single "Crypto Portfolio" investment account with total
portfolio value converted to the user's preferred currency
- Supports direct fiat pairs (e.g. BTCEUR), USD stablecoin 1:1 mapping,
and USDT fallback conversion

## Changes

- **Migration**: adds encrypted `api_secret` column to
`banking_connections`
- **BinanceClient**: HMAC-SHA256 authenticated API client for account
data and ticker prices
- **BinanceBalanceSyncService**: converts all non-zero balances to fiat
via direct pairs or USDT fallback
- **BinanceController + ConnectBinanceRequest**: validates credentials,
creates connection and single account
- **SyncBankingConnectionJob**: new `syncBinance()` branch
- **AccountMappingController**: Binance uses Investment account type
- **Frontend**: Binance institution for all countries, API Key + Secret
form fields, alphabetically sorted list
- **Factory**: `binance()` state on `BankingConnectionFactory`

## Test plan

- [x] `BinanceControllerTest` — 6 tests (valid connection, invalid
credentials, account-mapping flag, feature flag, validation, user
currency)
- [x] `BinanceBalanceSyncTest` — 7 tests (direct EUR pair, USDT
fallback, USD stablecoins, locked balances, same-date update, empty
balances, missing external ID)
- [x] Full test suite passes (545 tests)
- [x] Manual: open connection dialog → select any country → Binance
appears alphabetically → select Binance → API Key + Secret form →
connect
2026-02-18 15:23:46 +01:00
..
account.tsx feat: Spanish localization (#74) 2026-02-08 11:58:08 +01:00
accounts.tsx fix: Add gap between filter/create button on mobile settings pages (#115) 2026-02-12 20:50:05 +01:00
appearance.tsx feat: Spanish localization (#74) 2026-02-08 11:58:08 +01:00
automation-rules.tsx feat: Spanish localization (#74) 2026-02-08 11:58:08 +01:00
billing.tsx Replace E2E encryption mentions with privacy-first messaging (#124) 2026-02-14 16:59:50 +01:00
categories.tsx fix: Add gap between filter/create button on mobile settings pages (#115) 2026-02-12 20:50:05 +01:00
connections.tsx feat: Add Binance integration (#131) 2026-02-18 15:23:46 +01:00
delete-account.tsx feat: Spanish localization (#74) 2026-02-08 11:58:08 +01:00
labels.tsx fix: Add gap between filter/create button on mobile settings pages (#115) 2026-02-12 20:50:05 +01:00
password.tsx feat: Spanish localization (#74) 2026-02-08 11:58:08 +01:00
two-factor.tsx feat: Spanish localization (#74) 2026-02-08 11:58:08 +01:00