ghost
95f6451b39
feat(sync): add Brex provider connections (#1752)
* feat(sync): add Brex provider schema
Adds Brex item and account tables with per-family credentials, scoped upstream account uniqueness, encrypted token storage, and sanitized provider payload columns.
* feat(sync): add Brex provider core
Adds Brex item/account models, provider client and adapter support, family connection helpers, and provider enum registration for read-only Brex cash and card data.
* feat(sync): add Brex import pipeline
Adds Brex account discovery, linked-account sync, cash/card balance processors, transaction import, sanitized metadata handling, and idempotent provider entry processing.
* feat(sync): add Brex connection flows
Adds Mercury-style Brex connection management, explicit item-scoped account selection and linking, settings provider UI, account index visibility, localized copy, and per-item cache handling.
* test(sync): cover Brex provider workflows
Adds targeted coverage for Brex provider requests, adapter config, item/account guards, importer behavior, entry processing, and Mercury-style controller flows.
* fix(sync): align Brex API edge cases
Tightens Brex account fetching against the official card-account response shape, sends transaction start filters as RFC3339 date-times, and keeps provider error bodies out of user-facing messages while expanding provider client guard coverage.
* fix(sync): harden Brex provider integration
Restrict Brex API base URLs to official hosts, tighten account-selection UI behavior, and add tests for invalid credentials, cache scoping, and provider setup edge cases.
* test(sync): avoid Brex secret-shaped fixtures
* refactor(sync): extract Brex account flows
* fix(sync): address Brex provider review feedback
* fix(sync): address Brex review follow-ups
Move remaining Brex review cleanup into focused model behavior, tighten link/setup edge cases, localize summaries, and add regression coverage from CodeRabbit feedback.
Also records the security-review pass as no-findings after diff-scoped inspection and Brakeman validation.
* refactor(sync): split Brex account flow controllers
Route Brex account selection and setup actions through small namespaced controllers while keeping existing URLs and helpers stable.
Business flow remains in BrexItem::AccountFlow; the main Brex item controller now only handles connection CRUD, provider-panel rendering, destroy, and sync.
* fix(sync): address Brex CodeRabbit review
* fix(sync): address Brex follow-up review
* fix(sync): address Brex review follow-ups
* fix(sync): address Brex sync review findings
* fix(sync): polish Brex review copy and errors
* fix(sync): register Brex provider health
* fix(sync): polish Brex bank sync presentation
* fix(sync): address Brex review follow-ups
* fix(sync): tighten Brex setup params
* test(api): stabilize usage rate-limit window
* fix(sync): polish Brex setup flow nits
* fix(sync): harden Brex setup params
* fix(sync): finalize Brex review cleanup
---------
Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
Co-authored-by: Juan José Mata <juanjo.mata@gmail.com>
2026-05-13 18:13:48 +02:00
..
2026-05-13 14:03:37 +02:00
2026-05-03 20:33:29 +02:00
2026-05-12 23:45:19 +02:00
2026-05-07 17:31:16 +02:00
2026-04-08 22:23:15 +02:00
2026-04-07 14:43:17 +02:00
2026-05-13 18:13:48 +02:00
2026-05-13 18:13:48 +02:00
2026-05-13 18:13:48 +02:00
2025-03-28 13:08:22 -04:00
2026-01-21 22:56:39 +01:00
2026-01-21 22:56:39 +01:00
2026-04-11 21:37:07 +02:00
2026-04-01 20:25:06 +02:00
2026-04-11 21:37:07 +02:00
2026-05-13 18:13:48 +02:00
2026-03-11 15:54:01 +01:00
2026-05-13 14:03:37 +02:00
2026-05-12 00:17:49 +02:00
2026-05-13 17:54:09 +02:00
2026-02-06 18:04:03 +01:00
2026-04-13 00:51:23 +02:00
2026-05-13 18:13:48 +02:00
2026-05-12 23:45:19 +02:00
2026-05-12 23:45:19 +02:00
2026-05-12 23:45:19 +02:00
2026-05-12 00:00:49 +02:00
2026-04-10 23:19:48 +02:00
2026-04-27 18:33:22 +02:00
2026-04-27 18:33:22 +02:00
2026-01-09 13:03:40 +01:00
2026-05-12 00:22:37 +02:00
2026-05-12 00:22:37 +02:00
2026-01-12 15:35:14 -05:00
2026-02-19 18:58:01 +01:00
2026-01-23 00:53:24 +01:00
2026-01-09 19:38:04 +01:00
2026-01-22 20:37:07 +01:00
2026-01-22 20:37:07 +01:00
2026-01-22 20:37:07 +01:00
2026-03-25 17:47:04 +01:00
2026-01-10 20:11:00 +01:00
2026-03-13 08:11:51 +01:00
2026-05-13 18:13:48 +02:00
2026-03-23 12:34:43 +01:00
2026-05-12 00:37:47 +02:00
2026-03-25 17:47:04 +01:00
2026-04-10 15:43:22 +02:00
2026-01-05 22:11:47 +01:00
2026-05-07 23:31:26 +02:00
2026-01-16 12:34:06 +01:00
2026-04-18 09:50:34 +02:00
2026-05-12 23:45:19 +02:00
2026-05-12 12:17:00 +02:00
2026-04-19 11:16:04 +02:00
2026-04-19 11:16:04 +02:00
2026-05-09 21:55:20 +02:00
2025-10-22 16:02:50 +02:00
2026-04-09 18:33:59 +02:00
2026-05-12 23:45:19 +02:00
2026-04-08 21:05:58 +02:00
2025-07-15 11:42:41 -04:00
2026-03-20 17:01:31 +01:00
2026-01-22 15:25:43 +01:00
2025-08-11 22:58:44 +02:00
2026-01-07 15:59:04 +01:00
2026-03-25 10:50:23 +01:00
2026-05-12 23:45:19 +02:00
2025-04-16 20:26:45 -05:00
2026-02-06 21:25:52 +01:00
2026-03-14 20:14:18 +01:00
2026-05-03 20:33:29 +02:00
2026-03-03 15:47:51 +01:00
2026-05-01 13:31:32 +02:00
2026-03-25 10:50:23 +01:00
2025-07-23 18:15:14 -04:00
2026-04-07 14:43:17 +02:00
2026-04-07 14:43:17 +02:00
2026-05-13 18:13:48 +02:00
2026-05-13 18:13:48 +02:00
2026-04-13 20:03:55 +02:00
2026-04-23 21:28:38 +02:00
2026-05-05 01:12:48 +02:00
2026-04-01 20:27:29 +02:00
2026-05-03 20:33:29 +02:00
2026-03-19 15:17:55 +01:00
2026-04-07 16:28:01 +02:00
2026-04-01 20:25:06 +02:00
2026-04-01 20:25:06 +02:00
2026-05-13 18:13:48 +02:00
2026-01-21 22:56:39 +01:00
2026-03-25 10:50:23 +01:00
2026-05-13 18:13:48 +02:00
2026-05-13 18:13:48 +02:00
2026-04-10 23:19:48 +02:00
2026-04-10 23:19:48 +02:00
2026-02-01 23:48:54 +01:00
2026-05-09 12:36:41 +02:00
2026-03-29 17:30:12 +02:00
2026-04-13 00:51:23 +02:00
2025-03-17 11:54:53 -04:00
2026-02-11 15:22:56 +01:00
2025-09-24 00:19:51 +02:00
2026-01-09 19:38:04 +01:00
2026-01-21 17:16:51 +01:00
2026-05-13 18:13:48 +02:00
2026-05-12 23:45:19 +02:00
2026-05-12 23:45:19 +02:00
2026-05-12 23:45:19 +02:00
2024-10-18 11:26:58 -05:00
2024-10-18 11:26:58 -05:00
2026-05-12 00:00:49 +02:00
2026-03-25 17:47:04 +01:00
2026-03-19 15:17:55 +01:00
2026-02-10 23:42:22 +01:00
2026-03-25 10:50:23 +01:00
2026-04-11 15:09:59 +02:00
2026-05-05 01:04:29 +02:00
2026-03-25 10:50:23 +01:00
2026-01-23 22:05:28 +01:00
2026-05-12 00:22:37 +02:00
2026-05-12 00:22:37 +02:00
2025-11-22 02:15:20 +01:00
2026-04-18 00:06:24 +02:00
2026-03-19 15:17:55 +01:00
2026-05-12 12:18:17 +02:00
2026-04-09 18:33:59 +02:00
2024-08-23 09:33:42 -04:00
2025-11-01 09:12:42 +01:00
2026-03-19 15:17:55 +01:00
2026-05-03 10:56:31 +02:00
2026-05-03 20:33:29 +02:00
2026-05-12 00:00:49 +02:00
2026-02-06 18:04:29 +01:00
2026-05-12 21:55:22 +02:00
2025-02-21 11:57:59 -05:00
2025-02-21 11:57:59 -05:00
2026-05-05 01:12:48 +02:00
2026-04-21 19:02:41 +02:00
2026-03-19 15:17:55 +01:00
2026-02-10 23:42:22 +01:00
2026-05-05 01:04:29 +02:00
2026-05-13 18:13:48 +02:00
2026-05-13 18:13:48 +02:00
2025-05-15 10:19:56 -04:00
2026-05-05 01:12:48 +02:00
2026-05-12 00:37:47 +02:00
2025-04-14 11:40:34 -04:00
2026-05-05 01:12:48 +02:00
2025-12-07 16:30:02 +01:00
2026-04-07 11:24:50 +02:00
2026-04-10 17:42:16 +02:00
2025-11-20 08:31:03 +01:00
2026-01-23 22:05:28 +01:00
2026-04-15 18:45:24 +02:00
2026-04-18 09:50:34 +02:00
2026-02-10 23:42:22 +01:00
2026-03-20 14:52:09 +01:00
2026-05-03 10:28:31 +02:00
2026-05-09 21:55:20 +02:00
2026-05-09 21:55:20 +02:00
2026-01-03 17:56:42 -05:00
2026-05-05 00:47:45 +02:00
2026-02-10 23:14:58 +01:00
2026-01-23 18:55:51 +01:00
2026-05-12 00:00:49 +02:00
2026-05-06 22:02:21 +02:00
2026-02-23 17:43:00 -05:00
2025-03-28 13:08:22 -04:00
2026-01-16 21:04:10 +01:00
2026-05-12 23:45:19 +02:00
2026-01-16 12:34:06 +01:00
2026-05-12 23:45:19 +02:00
2026-01-12 15:35:14 -05:00
2025-02-21 11:57:59 -05:00
2026-05-03 20:33:29 +02:00
2026-05-05 01:20:57 +02:00
2025-07-15 11:42:41 -04:00
2026-02-11 15:22:56 +01:00
2025-04-14 11:40:34 -04:00
2026-05-03 22:13:28 +02:00