dataflow/ui
Paul Trowbridge c4e7211e6d Add Teller API sync as an alternative to CSV import
Sources with a `teller` block in their config can pull transactions
straight from the bank instead of taking a CSV upload. Only the fetch
differs — dedupe, logging, and transformation reuse the import path.

api/lib/teller.js speaks Teller's mutual-TLS protocol (client cert plus
the access token as the HTTP Basic username) and flattens transactions
into the shallow map the rule engine expects. Access tokens live in .env,
one per enrollment, not in the database that manage.py offers to reset.

Pending transactions are skipped by default: their ids change when they
post, which would import the same charge twice under two keys. Sources
should use ['id'] as constraint_fields — Teller's transaction id makes
overlapping pulls free while keeping genuinely repeated charges distinct.

Untested against the live API — Teller has no self-serve signup at the
moment, so no account to verify against.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G2HFeU5neCKagTnmA6o9Tu
2026-08-01 12:43:32 -04:00
..
src Add Teller API sync as an alternative to CSV import 2026-08-01 12:43:32 -04:00
eslint.config.js Add React UI and backend enhancements for dataflow 2026-03-29 00:35:33 -04:00
index.html Add React UI and backend enhancements for dataflow 2026-03-29 00:35:33 -04:00
package-lock.json Track package-lock.json for both the API and the UI 2026-07-26 21:54:10 -04:00
package.json Update patch/minor dependencies; skip major version bumps 2026-06-12 23:04:25 -04:00
vite.config.js Add React UI and backend enhancements for dataflow 2026-03-29 00:35:33 -04:00