whisper-money/resources/js/components
Víctor Falcón 3f541ca4d6
feat: Add Indexa Capital integration (#130)
## Summary

- Allow users to connect their Indexa Capital (Spanish robo-advisor)
account via API token
- Adds "Indexa Capital" option when selecting Spain in the bank
connection dialog
- Token-based auth flow: user enters API token (instead of OAuth
redirect), validated against Indexa API, stored encrypted
- Syncs portfolio balance only (no transactions) from the
`/accounts/{id}/performance` endpoint
- Accounts created as `Investment` type
- Reuses existing account mapping flow when the `account-mapping`
feature flag is active
- Disconnect flow skips session revocation for Indexa (no OAuth session
to revoke)

## New files
- `IndexaCapitalClient` — HTTP client for Indexa Capital API
(`X-AUTH-TOKEN`)
- `IndexaCapitalBalanceSyncService` — Syncs portfolio value into
`account_balances`
- `IndexaCapitalController` — Token validation + connection creation
- `ConnectIndexaCapitalRequest` — Form request validation
- Migration adding encrypted `api_token` column to `banking_connections`

## Test plan
- [x] 6 controller tests (connect, invalid token, mapping, feature flag,
validation, multi-account)
- [x] 4 balance sync tests (sync, update, skip, missing field)
- [x] 3 sync job tests (balance-only, no expire, no email for Indexa)
- [x] 1 disconnect test (no revokeSession for Indexa)
- [x] All 530 existing tests still pass
2026-02-18 10:42:13 +01:00
..
accounts feat: Add Indexa Capital integration (#130) 2026-02-18 10:42:13 +01:00
automation-rules feat: Integrate EnableBanking as open banking provider (#106) 2026-02-12 09:09:28 +01:00
budgets feat: Spanish localization (#74) 2026-02-08 11:58:08 +01:00
cashflow feat: Spanish localization (#74) 2026-02-08 11:58:08 +01:00
categories feat: Integrate EnableBanking as open banking provider (#106) 2026-02-12 09:09:28 +01:00
charts feat: Spanish localization (#74) 2026-02-08 11:58:08 +01:00
dashboard Remove plaintext-transactions feature flag & E2E references (#116) 2026-02-13 11:10:21 +01:00
icons Subscriptions (#15) 2025-12-06 19:09:56 +01:00
labels feat: Integrate EnableBanking as open banking provider (#106) 2026-02-12 09:09:28 +01:00
landing feat: Spanish localization (#74) 2026-02-08 11:58:08 +01:00
onboarding feat: Decrypt encrypted transactions on key unlock (#123) 2026-02-16 10:37:43 +01:00
open-banking feat: Add Indexa Capital integration (#130) 2026-02-18 10:42:13 +01:00
partials chore: Update discord link 2026-02-10 14:12:37 +01:00
shared feat: Spanish localization (#74) 2026-02-08 11:58:08 +01:00
transactions Fix horizontal scroll on transactions table (#127) 2026-02-17 08:45:07 +01:00
ui feat: Integrate EnableBanking as open banking provider (#106) 2026-02-12 09:09:28 +01:00
alert-error.tsx Set up a fresh Laravel app 2025-11-07 12:01:36 +00:00
app-content.tsx Set up a fresh Laravel app 2025-11-07 12:01:36 +00:00
app-logo-icon.tsx Automated rules labels (#30) 2025-12-15 12:11:55 +01:00
app-logo.tsx Add animated logo icon that transitions based on encryption key state 2025-12-12 11:24:42 +01:00
app-mobile-nav.tsx Mobile design (#17) 2025-12-08 15:43:09 +01:00
app-shell.tsx Set up a fresh Laravel app 2025-11-07 12:01:36 +00:00
app-sidebar-header.tsx feat: Decrypt encrypted transactions on key unlock (#123) 2026-02-16 10:37:43 +01:00
app-sidebar.tsx Fix mobile bottom nav alignment for 5 items (#81) 2026-01-27 19:02:38 +01:00
appearance-dropdown.tsx feat: Spanish localization (#74) 2026-02-08 11:58:08 +01:00
appearance-tabs.tsx feat: Spanish localization (#74) 2026-02-08 11:58:08 +01:00
bank-logo.tsx feat: Integrate EnableBanking as open banking provider (#106) 2026-02-12 09:09:28 +01:00
breadcrumbs.tsx feat: Spanish localization (#74) 2026-02-08 11:58:08 +01:00
delete-user.tsx feat: Spanish localization (#74) 2026-02-08 11:58:08 +01:00
encrypted-text.tsx fix: make encryption key storage SSR-safe to prevent 502 errors 2025-12-08 17:13:45 +01:00
encryption-key-button.tsx feat: Spanish localization (#74) 2026-02-08 11:58:08 +01:00
heading-small.tsx Add Budgeting Feature to Track and Manage Spending (#36) 2026-01-21 15:25:50 +01:00
heading.tsx Set up a fresh Laravel app 2025-11-07 12:01:36 +00:00
icon.tsx Set up a fresh Laravel app 2025-11-07 12:01:36 +00:00
input-error.tsx Set up a fresh Laravel app 2025-11-07 12:01:36 +00:00
nav-footer.tsx feat: Spanish localization (#74) 2026-02-08 11:58:08 +01:00
nav-main.tsx feat: Spanish localization (#74) 2026-02-08 11:58:08 +01:00
nav-user.tsx Format + Open transactions on row click 2025-12-08 15:58:50 +01:00
sync-status-button.tsx feat: Spanish localization (#74) 2026-02-08 11:58:08 +01:00
text-link.tsx Set up a fresh Laravel app 2025-11-07 12:01:36 +00:00
two-factor-recovery-codes.tsx feat: Spanish localization (#74) 2026-02-08 11:58:08 +01:00
two-factor-setup-modal.tsx feat: Spanish localization (#74) 2026-02-08 11:58:08 +01:00
unlock-message-dialog.tsx Remove encryption from bank account names (#104) 2026-02-09 14:15:26 +01:00
user-info.tsx feat: Replace user avatar with Facehash faces (#86) 2026-02-01 11:33:09 +01:00
user-menu-content.tsx feat: Spanish localization (#74) 2026-02-08 11:58:08 +01:00