kevinschaich / mintable

🍃 Automate your personal finances – for free, with no ads, and no data collection.
https://kevinschaich.io/mintable/
MIT License
1.52k stars 200 forks source link

Teller import integration #156

Open arithmetric opened 1 year ago

arithmetric commented 1 year ago

This PR adds support for using the Teller service for importing transactions from bank accounts.

When I tried using Mintable with the Plaid integration, I was only able to connect with accounts at one financial institution that I use. With the Teller integration, I'm able to connect to all of the accounts I wanted. So far I have been able to sign up and use Teller on a small scale for free.

See the account linking interface in Teller: Linking accounts with Teller

I've included documentation below, but the set up process is very similar to Plaid. First run mintable teller-setup to provide the account ID and credentials (for Teller, certificate files). Then run mintable teller-account-setup to link your accounts. Finally run mintable fetch to import the transactions.

The Teller and Plaid integrations can both be used for importing from different accounts.

ericcater commented 1 year ago

Nice. No issues so far that aren't of my own creation. Wish Teller supported more banks, especially Schwab.

Doesn't support github actions due to needing the files. Tried getting github actions to turn a secret into a file, but I think I was having issues with multilines. An alternative is having the cert/key as a string with \n for newlines.

Will be messing with it more.

arithmetric commented 1 year ago

@ericcater Thanks for the review!

One approach that might help with the storing the certificate files in secrets for GitHub Actions is to encode the certificate file as a Base64 string. See: https://stackoverflow.com/a/66603047

stevegraham commented 1 year ago

Thanks for this PR @arithmetric 🥰

@ericcater - we just added support for hundreds more FIs recently. We're working hard to get the total number closer to that of Plaid and others over the next few months. Schwab is coming soon!

UncleGravity commented 1 year ago

this worked great for me, awesome job @arithmetric. I hope this gets merged asap!

mcc0nkie commented 1 year ago

Great idea; love the integration. This worked for me, up until adding an account. Clicking "Link an account" seems to have no effect.

eliluong commented 1 year ago

How do I run this? I cloned the branch from arithmetric's repo. Thanks.

mcc0nkie commented 1 year ago

How do I run this? I cloned the branch from arithmetric's repo. Thanks.

Normally, these are the steps you'd take:

  1. Make sure you have npm, nodejs, and typescript (I use nvm to manage these for me, but you can search online for how to install these for your OS)
  2. cd into the cloned branch
  3. run npm install -- this installs the dependencies for the project
  4. run npm run build -- this builds your project
  5. run npm link so you can use the mintable command in the Terminal
  6. Follow the directions above for setting up Teller accounts or the instructions in the original repo for setting up Plaid, google sheets integration, etc.

To remove, you would follow these steps:

  1. run npm unlink mintable -g -- this removes the mintable command from your environment (i.e. removes the ability to run mintable in your Terminal)
  2. delete the cloned branch (i.e. in Debian/Ubuntu you'd run sudo rm -r /path/to/your/cloned/branch (-r says to remove directories, not just files)

I've had my own issues getting this to run the Teller integration after installation, but I'll post a solution if I have time to work through the code.

eliluong commented 1 year ago

I've had my own issues getting this to run the Teller integration after installation, but I'll post a solution if I have time to work through the code.

Thanks for explaining! I was missing typescript. Do you know how I would run mintable without having to use the link command? I tried npm run build but it did not run anything.

I was able to connect to Teller, and went through the account enrollment process, but like your issue, I was not able to fully complete account linking.

(node:5935) UnhandledPromiseRejectionWarning: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:592:3)
    at tryReadSync (fs.js:366:20)
    at Object.readFileSync (fs.js:403:19)
    at /home/user/Downloads/mintable-teller/mintable/lib/integrations/teller/tellerIntegration.js:61:32
    at new Promise (<anonymous>)
    at TellerIntegration.tellerApi (/home/user/Downloads/mintable-teller/mintable/lib/integrations/teller/tellerIntegration.js:57:20)
    at TellerIntegration.<anonymous> (/home/user/Downloads/mintable-teller/mintable/lib/integrations/teller/tellerIntegration.js:109:59)
    at step (/home/user/Downloads/mintable-teller/mintable/lib/integrations/teller/tellerIntegration.js:33:23)
    at Object.next (/home/user/Downloads/mintable-teller/mintable/lib/integrations/teller/tellerIntegration.js:14:53)
    at /home/user/Downloads/mintable-teller/mintable/lib/integrations/teller/tellerIntegration.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/user/Downloads/mintable-teller/mintable/lib/integrations/teller/tellerIntegration.js:4:12)
    at /home/user/Downloads/mintable-teller/mintable/lib/integrations/teller/tellerIntegration.js:99:83
    at Layer.handle [as handle_request] (/home/user/Downloads/mintable-teller/mintable/node_modules/express/lib/router/layer.js:95:5)
    at next (/home/user/Downloads/mintable-teller/mintable/node_modules/express/lib/router/route.js:137:13)
    at Route.dispatch (/home/user/Downloads/mintable-teller/mintable/node_modules/express/lib/router/route.js:112:3)
(Use `node --trace-warnings ...` to show where the warning was created)
(node:5935) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 2)
(node:5935) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
jsharf commented 1 year ago

Copying over my comment from the associated issue:

Thanks @arithmetric! I just got this setup and it was very simple, worked very easily!

When I ran fetch, the initial transactions failed due to timeout. But after I re-ran mintable fetch 3 times, it finally worked for all my accounts!

tlcaputi commented 1 year ago

Thanks for adding this!

Do you have guidance on safely adding the certificate to Github actions?

spencerogden commented 7 months ago

@ericcater - we just added support for hundreds more FIs recently. We're working hard to get the total number closer to that of Plaid and others over the next few months. Schwab is coming soon!

Curious what this comment meant last year. When I try to link Schwab or Chase using Plaid, I get an immediate "Something went wrong".

rajkumaar23 commented 6 months ago

This is amazing! Great work @arithmetric 🎉