actual/packages/loot-core/src/server/accounts/link.js
Tom French 9c0df36e16
Sort import in alphabetical order (#238)
* style: enforce sorting of imports

* style: alphabetize imports

* style: merge duplicated imports
2022-09-02 15:07:24 +01:00

86 lines
2.3 KiB
JavaScript

import asyncStorage from '../../platform/server/asyncStorage';
import { fromPlaidAccountType } from '../../shared/accounts';
import { amountToInteger } from '../../shared/util';
import * as db from '../db';
import { runMutator } from '../mutators';
import { post } from '../post';
import { getServer } from '../server-config';
import * as bankSync from './sync';
const uuid = require('../../platform/uuid');
export async function handoffPublicToken(institution, publicToken) {
let [[, userId], [, key]] = await asyncStorage.multiGet([
'user-id',
'user-key'
]);
if (institution == null || !institution.institution_id || !institution.name) {
throw new Error('Invalid institution object');
}
let id = uuid.v4Sync();
// Make sure to generate an access token first before inserting it
// into our local database in case it fails
await post(getServer().PLAID_SERVER + '/handoff_public_token', {
userId,
key,
item_id: id,
public_token: publicToken
});
await runMutator(() =>
db.insertWithUUID('banks', {
id,
bank_id: institution.institution_id,
name: institution.name
})
);
return id;
}
export async function addAccounts(bankId, accountIds, offbudgetIds = []) {
let [[, userId], [, userKey]] = await asyncStorage.multiGet([
'user-id',
'user-key'
]);
// Get all the available accounts
let accounts = await bankSync.getAccounts(userId, userKey, bankId);
// Only add the selected accounts
accounts = accounts.filter(acct => accountIds.includes(acct.account_id));
return Promise.all(
accounts.map(async acct => {
let id = await runMutator(async () => {
let id = await db.insertAccount({
account_id: acct.account_id,
name: acct.name,
official_name: acct.official_name,
type: fromPlaidAccountType(acct.type),
balance_current: amountToInteger(acct.balances.current),
mask: acct.mask,
bank: bankId,
offbudget: offbudgetIds.includes(acct.account_id) ? 1 : 0
});
// Create a transfer payee
await db.insertPayee({
name: '',
transfer_acct: id
});
return id;
});
// Do an initial sync
await bankSync.syncAccount(userId, userKey, id, acct.account_id, bankId);
return id;
})
);
}