Skip to content
Snippets Groups Projects
plaid.js 1.44 KiB
Newer Older
  • Learn to ignore specific revisions
  • /* eslint-disable import/no-unused-modules */
    
    James Long's avatar
    James Long committed
    import { send } from 'loot-core/src/platform/client/fetch';
    
    function _authorize(pushModal, plaidToken, { onSuccess, onClose }) {
      pushModal('plaid-external-msg', {
        onMoveExternal: async () => {
          let token = await send('create-web-token');
          let url = 'http://link.actualbudget.com/?token=' + token;
          // let url = 'http://localhost:8080/?token=' + token;
          if (plaidToken) {
            url = url + '&plaidToken=' + plaidToken;
          }
          window.Actual.openURLInBrowser(url);
    
          let { error, data } = await send('poll-web-token', { token });
    
          return { error, data };
        },
    
        onClose,
    
    James Long's avatar
    James Long committed
      });
    }
    
    export async function authorizeBank(pushModal, { upgradingId } = {}) {
      _authorize(pushModal, null, {
        onSuccess: async data => {
          pushModal('select-linked-accounts', {
            institution: data.metadata.institution,
            publicToken: data.publicToken,
            accounts: data.metadata.accounts,
    
    James Long's avatar
    James Long committed
          });
    
    James Long's avatar
    James Long committed
      });
    }
    
    export async function reauthorizeBank(pushModal, bankId, onSuccess) {
    
      let { linkToken } = await send('make-plaid-public-token', {
    
    James Long's avatar
    James Long committed
      });
    
      // We don't do anything with the error right now
      if (!linkToken) {
        return false;
      }
    
      // When the modal is closed here, always try to re-sync the account
      // by calling `onSuccess`
      _authorize(pushModal, linkToken, { onSuccess, onClose: onSuccess });
      return true;
    }