/** * @exports {AppStorage} */ import { AppStorage } from './class'; let prompt = require('./prompt'); let EV = require('./events'); let currency = require('./currency'); let loc = require('./loc'); let A = require('./analytics'); /** @type {AppStorage} */ let BlueApp = new AppStorage(); async function startAndDecrypt(retry) { let password = false; if (await BlueApp.storageIsEncrypted()) { do { password = await prompt((retry && loc._.bad_password) || loc._.enter_password, loc._.storage_is_encrypted, false); } while (!password); } let success = await BlueApp.loadFromDisk(password); if (success) { console.log('loaded from disk'); EV(EV.enum.WALLETS_COUNT_CHANGED); EV(EV.enum.TRANSACTIONS_COUNT_CHANGED); let securityAlert = require('./security-alert'); await securityAlert.start(); // now, lets try to fetch balance and txs for first wallet if it is time for it let hadToRefresh = false; let noErr = true; try { let wallets = BlueApp.getWallets(); if (wallets && wallets[0] && wallets[0].timeToRefreshBalance()) { console.log('time to refresh wallet #0'); let oldBalance = wallets[0].getBalance(); await wallets[0].fetchBalance(); if (oldBalance !== wallets[0].getBalance() || wallets[0].getUnconfirmedBalance() !== 0 || wallets[0].timeToRefreshTransaction()) { // balance changed, thus txs too // or wallet thinks its time to reload TX list await wallets[0].fetchTransactions(); hadToRefresh = true; EV(EV.enum.WALLETS_COUNT_CHANGED); EV(EV.enum.TRANSACTIONS_COUNT_CHANGED); } else { console.log('balance not changed'); } } // end of timeToRefresh } catch (Err) { noErr = false; console.warn(Err); } if (hadToRefresh && noErr) { await BlueApp.saveToDisk(); // caching } } if (!success && password) { // we had password and yet could not load/decrypt return startAndDecrypt(true); } } A(A.ENUM.INIT); BlueApp.startAndDecrypt = startAndDecrypt; currency.startUpdater(); module.exports = BlueApp;