From f8d1e98dd82bd39fda2cec27e6b62561f42148af Mon Sep 17 00:00:00 2001 From: Igor Korsakov Date: Mon, 21 Jan 2019 14:33:49 +0000 Subject: [PATCH] Revert "REF: bugfixes" (#265) This reverts commit d762ab543b289f5c4eac537bcc1b5f2a0ad09e66. --- App.test.js | 46 +- App2.test.js | 16 +- BlueComponents.js | 50 -- HDWallet.test.js | 144 ++-- LightningCustodianWallet.test.js | 42 +- .../bluewallet/bluewallet/MainActivity.java | 2 +- .../bluewallet/MainApplication.java | 26 +- android/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- android/settings.gradle | 22 - ios/BlueWallet.xcodeproj/project.pbxproj | 26 - package-lock.json | 764 ++++++------------ package.json | 25 +- .../lndViewAdditionalInvoiceInformation.js | 34 +- screen/lnd/lndViewInvoice.js | 38 +- screen/receive/details.js | 34 +- screen/receive/receiveAmount.js | 38 +- screen/settings/about.js | 2 +- screen/wallets/buyBitcoin.js | 34 +- screen/wallets/xpub.js | 17 +- 20 files changed, 533 insertions(+), 831 deletions(-) diff --git a/App.test.js b/App.test.js index 072984948..b5c8c685a 100644 --- a/App.test.js +++ b/App.test.js @@ -57,7 +57,7 @@ describe('unit - LegacyWallet', function() { let b = LegacyWallet.fromJson(key); assert(key === JSON.stringify(b)); - assert.strictEqual(key, JSON.stringify(b)); + assert.equal(key, JSON.stringify(b)); }); it('can validate addresses', () => { @@ -118,8 +118,8 @@ it('Appstorage - loadFromDisk works', async () => { let Storage2 = new AppStorage(); await Storage2.loadFromDisk(); - assert.strictEqual(Storage2.wallets.length, 1); - assert.strictEqual(Storage2.wallets[0].getLabel(), 'testlabel'); + assert.equal(Storage2.wallets.length, 1); + assert.equal(Storage2.wallets[0].getLabel(), 'testlabel'); let isEncrypted = await Storage2.storageIsEncrypted(); assert.ok(!isEncrypted); @@ -146,7 +146,7 @@ it('Appstorage - encryptStorage & load encrypted storage works', async () => { assert.ok(!isEncrypted); await Storage.encryptStorage('password'); isEncrypted = await Storage.storageIsEncrypted(); - assert.strictEqual(Storage.cachedPassword, 'password'); + assert.equal(Storage.cachedPassword, 'password'); assert.ok(isEncrypted); // saved, now trying to load, using good password @@ -156,8 +156,8 @@ it('Appstorage - encryptStorage & load encrypted storage works', async () => { assert.ok(isEncrypted); let loadResult = await Storage2.loadFromDisk('password'); assert.ok(loadResult); - assert.strictEqual(Storage2.wallets.length, 1); - assert.strictEqual(Storage2.wallets[0].getLabel(), 'testlabel'); + assert.equal(Storage2.wallets.length, 1); + assert.equal(Storage2.wallets[0].getLabel(), 'testlabel'); // now trying to load, using bad password @@ -166,7 +166,7 @@ it('Appstorage - encryptStorage & load encrypted storage works', async () => { assert.ok(isEncrypted); loadResult = await Storage2.loadFromDisk('passwordBAD'); assert.ok(!loadResult); - assert.strictEqual(Storage2.wallets.length, 0); + assert.equal(Storage2.wallets.length, 0); // now, trying case with adding data after decrypt. // saveToDisk should be handled correctly @@ -176,14 +176,14 @@ it('Appstorage - encryptStorage & load encrypted storage works', async () => { assert.ok(isEncrypted); loadResult = await Storage2.loadFromDisk('password'); assert.ok(loadResult); - assert.strictEqual(Storage2.wallets.length, 1); - assert.strictEqual(Storage2.wallets[0].getLabel(), 'testlabel'); + assert.equal(Storage2.wallets.length, 1); + assert.equal(Storage2.wallets[0].getLabel(), 'testlabel'); w = new SegwitP2SHWallet(); w.setLabel('testlabel2'); await w.generate(); Storage2.wallets.push(w); - assert.strictEqual(Storage2.wallets.length, 2); - assert.strictEqual(Storage2.wallets[1].getLabel(), 'testlabel2'); + assert.equal(Storage2.wallets.length, 2); + assert.equal(Storage2.wallets[1].getLabel(), 'testlabel2'); await Storage2.saveToDisk(); // saved to encrypted storage after load. next load should be successfull Storage2 = new AppStorage(); @@ -191,15 +191,15 @@ it('Appstorage - encryptStorage & load encrypted storage works', async () => { assert.ok(isEncrypted); loadResult = await Storage2.loadFromDisk('password'); assert.ok(loadResult); - assert.strictEqual(Storage2.wallets.length, 2); - assert.strictEqual(Storage2.wallets[0].getLabel(), 'testlabel'); - assert.strictEqual(Storage2.wallets[1].getLabel(), 'testlabel2'); + assert.equal(Storage2.wallets.length, 2); + assert.equal(Storage2.wallets[0].getLabel(), 'testlabel'); + assert.equal(Storage2.wallets[1].getLabel(), 'testlabel2'); // next, adding new `fake` storage which should be unlocked with `fake` password let createFakeStorageResult = await Storage2.createFakeStorage('fakePassword'); assert.ok(createFakeStorageResult); - assert.strictEqual(Storage2.wallets.length, 0); - assert.strictEqual(Storage2.cachedPassword, 'fakePassword'); + assert.equal(Storage2.wallets.length, 0); + assert.equal(Storage2.cachedPassword, 'fakePassword'); w = new SegwitP2SHWallet(); w.setLabel('fakewallet'); await w.generate(); @@ -210,14 +210,14 @@ it('Appstorage - encryptStorage & load encrypted storage works', async () => { let Storage3 = new AppStorage(); loadResult = await Storage3.loadFromDisk('password'); assert.ok(loadResult); - assert.strictEqual(Storage3.wallets.length, 2); - assert.strictEqual(Storage3.wallets[0].getLabel(), 'testlabel'); + assert.equal(Storage3.wallets.length, 2); + assert.equal(Storage3.wallets[0].getLabel(), 'testlabel'); // fake: Storage3 = new AppStorage(); loadResult = await Storage3.loadFromDisk('fakePassword'); assert.ok(loadResult); - assert.strictEqual(Storage3.wallets.length, 1); - assert.strictEqual(Storage3.wallets[0].getLabel(), 'fakewallet'); + assert.equal(Storage3.wallets.length, 1); + assert.equal(Storage3.wallets[0].getLabel(), 'fakewallet'); }); it('Wallet can fetch UTXO', async () => { @@ -245,7 +245,7 @@ it('Wallet can fetch TXs', async () => { let w = new LegacyWallet(); w._address = '12eQ9m4sgAwTSQoNXkRABKhCXCsjm2jdVG'; await w.fetchTransactions(); - assert.strictEqual(w.getTransactions().length, 2); + assert.equal(w.getTransactions().length, 2); let tx0 = w.getTransactions()[0]; let txExpected = { @@ -296,7 +296,7 @@ it('Wallet can fetch TXs', async () => { delete txExpected.confirmations; delete tx0.preference; // that bs is not always the same delete txExpected.preference; - assert.deepStrictEqual(tx0, txExpected); + assert.deepEqual(tx0, txExpected); }); describe('currency', () => { @@ -321,7 +321,7 @@ describe('currency', () => { await currency.setPrefferedCurrency(FiatUnit.EUR); await currency.startUpdater(); let preferred = await currency.getPreferredCurrency(); - assert.strictEqual(preferred.endPointKey, 'EUR'); + assert.equal(preferred.endPointKey, 'EUR'); cur = JSON.parse(AsyncStorage.storageCache[AppStorage.EXCHANGE_RATES]); assert.ok(cur['BTC_EUR'] > 0); }); diff --git a/App2.test.js b/App2.test.js index a817d57b4..90f7695d3 100644 --- a/App2.test.js +++ b/App2.test.js @@ -14,10 +14,7 @@ it('bip38 decodes', async () => { { N: 1, r: 8, p: 8 }, // using non-default parameters to speed it up (not-bip38 compliant) ); - assert.strictEqual( - wif.encode(0x80, decryptedKey.privateKey, decryptedKey.compressed), - '5KN7MzqK5wt2TP1fQCYyHBtDrXdJuXbUzm4A9rKAteGu3Qi5CVR', - ); + assert.equal(wif.encode(0x80, decryptedKey.privateKey, decryptedKey.compressed), '5KN7MzqK5wt2TP1fQCYyHBtDrXdJuXbUzm4A9rKAteGu3Qi5CVR'); }); it('bip38 decodes slow', async () => { @@ -32,10 +29,7 @@ it('bip38 decodes slow', async () => { let encryptedKey = '6PnU5voARjBBykwSddwCdcn6Eu9EcsK24Gs5zWxbJbPZYW7eiYQP8XgKbN'; let decryptedKey = await bip38.decrypt(encryptedKey, 'qwerty', status => process.stdout.write(parseInt(status.percent) + '%\r')); - assert.strictEqual( - wif.encode(0x80, decryptedKey.privateKey, decryptedKey.compressed), - 'KxqRtpd9vFju297ACPKHrGkgXuberTveZPXbRDiQ3MXZycSQYtjc', - ); + assert.equal(wif.encode(0x80, decryptedKey.privateKey, decryptedKey.compressed), 'KxqRtpd9vFju297ACPKHrGkgXuberTveZPXbRDiQ3MXZycSQYtjc'); }); describe('Watch only wallet', () => { @@ -52,16 +46,16 @@ describe('Watch only wallet', () => { w.setSecret('167zK5iZrs1U6piDqubD3FjRqUTM2CZnb8'); await w.fetchTransactions(); - assert.strictEqual(w.getTransactions().length, 233); + assert.equal(w.getTransactions().length, 233); w = new WatchOnlyWallet(); w.setSecret('1BiJW1jyUaxcJp2JWwbPLPzB1toPNWTFJV'); await w.fetchTransactions(); - assert.strictEqual(w.getTransactions().length, 2); + assert.equal(w.getTransactions().length, 2); // fetch again and make sure no duplicates await w.fetchTransactions(); - assert.strictEqual(w.getTransactions().length, 2); + assert.equal(w.getTransactions().length, 2); }); it('can fetch complex TXs', async () => { diff --git a/BlueComponents.js b/BlueComponents.js index 2964bd325..f00a51ab8 100644 --- a/BlueComponents.js +++ b/BlueComponents.js @@ -16,7 +16,6 @@ import { SafeAreaView, Clipboard, Platform, - LayoutAnimation, TextInput, } from 'react-native'; import LinearGradient from 'react-native-linear-gradient'; @@ -194,55 +193,6 @@ export const BlueCopyToClipboardButton = ({ stringToCopy }) => { ); }; -export class BlueCopyTextToClipboard extends Component { - static propTypes = { - text: PropTypes.string, - }; - - static defaultProps = { - text: '', - }; - - state = { hasTappedText: false }; - - copyToClipboard = () => { - LayoutAnimation.configureNext(LayoutAnimation.Presets.spring, () => { - Clipboard.setString(this.props.text); - setTimeout(() => { - LayoutAnimation.configureNext(LayoutAnimation.Presets.spring); - this.setState({ hasTappedText: false }); - }, 1000); - }); - this.setState({ hasTappedText: true }); - }; - - render() { - return ( - - - - {this.props.text} - - {this.state.hasTappedText && ( - - {loc.wallets.xpub.copiedToClipboard} - - )} - - - ); - } -} - -const styleCopyTextToClipboard = StyleSheet.create({ - address: { - marginVertical: 32, - fontSize: 15, - color: '#9aa0aa', - textAlign: 'center', - }, -}); - export class SafeBlueArea extends Component { render() { return ( diff --git a/HDWallet.test.js b/HDWallet.test.js index c60f73f31..880cbcf0c 100644 --- a/HDWallet.test.js +++ b/HDWallet.test.js @@ -6,13 +6,13 @@ let bitcoin = require('bitcoinjs-lib'); it('can convert witness to address', () => { let address = SegwitP2SHWallet.witnessToAddress('035c618df829af694cb99e664ce1b34f80ad2c3b49bcd0d9c0b1836c66b2d25fd8'); - assert.strictEqual(address, '34ZVGb3gT8xMLT6fpqC6dNVqJtJmvdjbD7'); + assert.equal(address, '34ZVGb3gT8xMLT6fpqC6dNVqJtJmvdjbD7'); address = SegwitBech32Wallet.witnessToAddress('035c618df829af694cb99e664ce1b34f80ad2c3b49bcd0d9c0b1836c66b2d25fd8'); - assert.strictEqual(address, 'bc1quhnve8q4tk3unhmjts7ymxv8cd6w9xv8wy29uv'); + assert.equal(address, 'bc1quhnve8q4tk3unhmjts7ymxv8cd6w9xv8wy29uv'); address = SegwitBech32Wallet.scriptPubKeyToAddress('00144d757460da5fcaf84cc22f3847faaa1078e84f6a'); - assert.strictEqual(address, 'bc1qf46hgcx6tl90snxz9uuy0742zpuwsnm27ysdh7'); + assert.equal(address, 'bc1qf46hgcx6tl90snxz9uuy0742zpuwsnm27ysdh7'); }); it('can create a Segwit HD (BIP49)', async function() { @@ -21,39 +21,39 @@ it('can create a Segwit HD (BIP49)', async function() { 'honey risk juice trip orient galaxy win situate shoot anchor bounce remind horse traffic exotic since escape mimic ramp skin judge owner topple erode'; let hd = new HDSegwitP2SHWallet(); hd.setSecret(mnemonic); - assert.strictEqual('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', hd._getExternalAddressByIndex(0)); - assert.strictEqual('35p5LwCAE7mH2css7onyQ1VuS1jgWtQ4U3', hd._getExternalAddressByIndex(1)); - assert.strictEqual('32yn5CdevZQLk3ckuZuA8fEKBco8mEkLei', hd._getInternalAddressByIndex(0)); - assert.strictEqual(true, hd.validateMnemonic()); + assert.equal('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', hd._getExternalAddressByIndex(0)); + assert.equal('35p5LwCAE7mH2css7onyQ1VuS1jgWtQ4U3', hd._getExternalAddressByIndex(1)); + assert.equal('32yn5CdevZQLk3ckuZuA8fEKBco8mEkLei', hd._getInternalAddressByIndex(0)); + assert.equal(true, hd.validateMnemonic()); await hd.fetchBalance(); - assert.strictEqual(hd.getBalance(), 0); + assert.equal(hd.getBalance(), 0); assert.ok(hd._lastTxFetch === 0); await hd.fetchTransactions(); assert.ok(hd._lastTxFetch > 0); - assert.strictEqual(hd.transactions.length, 4); + assert.equal(hd.transactions.length, 4); - assert.strictEqual('L4MqtwJm6hkbACLG4ho5DF8GhcXdLEbbvpJnbzA9abfD6RDpbr2m', hd._getExternalWIFByIndex(0)); - assert.strictEqual( + assert.equal('L4MqtwJm6hkbACLG4ho5DF8GhcXdLEbbvpJnbzA9abfD6RDpbr2m', hd._getExternalWIFByIndex(0)); + assert.equal( 'ypub6WhHmKBmHNjcrUVNCa3sXduH9yxutMipDcwiKW31vWjcMbfhQHjXdyx4rqXbEtVgzdbhFJ5mZJWmfWwnP4Vjzx97admTUYKQt6b9D7jjSCp', hd.getXpub(), ); // checking that internal pointer and async address getter return the same address let freeAddress = await hd.getAddressAsync(); - assert.strictEqual(hd._getExternalAddressByIndex(hd.next_free_address_index), freeAddress); + assert.equal(hd._getExternalAddressByIndex(hd.next_free_address_index), freeAddress); let freeChangeAddress = await hd.getChangeAddressAsync(); - assert.strictEqual(hd._getInternalAddressByIndex(hd.next_free_change_address_index), freeChangeAddress); + assert.equal(hd._getInternalAddressByIndex(hd.next_free_change_address_index), freeChangeAddress); }); it('Segwit HD (BIP49) can generate addressess only via ypub', async function() { let ypub = 'ypub6WhHmKBmHNjcrUVNCa3sXduH9yxutMipDcwiKW31vWjcMbfhQHjXdyx4rqXbEtVgzdbhFJ5mZJWmfWwnP4Vjzx97admTUYKQt6b9D7jjSCp'; let hd = new HDSegwitP2SHWallet(); hd._xpub = ypub; - assert.strictEqual('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', hd._getExternalAddressByIndex(0)); - assert.strictEqual('35p5LwCAE7mH2css7onyQ1VuS1jgWtQ4U3', hd._getExternalAddressByIndex(1)); - assert.strictEqual('32yn5CdevZQLk3ckuZuA8fEKBco8mEkLei', hd._getInternalAddressByIndex(0)); + assert.equal('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', hd._getExternalAddressByIndex(0)); + assert.equal('35p5LwCAE7mH2css7onyQ1VuS1jgWtQ4U3', hd._getExternalAddressByIndex(1)); + assert.equal('32yn5CdevZQLk3ckuZuA8fEKBco8mEkLei', hd._getInternalAddressByIndex(0)); }); it('can generate Segwit HD (BIP49)', async () => { @@ -88,56 +88,56 @@ it('HD (BIP49) can create TX', async () => { await hd.getChangeAddressAsync(); // to refresh internal pointer to next free address await hd.getAddressAsync(); // to refresh internal pointer to next free address let txhex = hd.createTx(hd.utxo, 0.000014, 0.000001, '3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK'); - assert.strictEqual( + assert.equal( txhex, '010000000001029d98d81fe2b596fd79e845fa9f38d7e0b6fb73303c40fac604d04df1fa137aee00000000171600142f18e8406c9d210f30c901b24e5feeae78784eb7ffffffff67fb86f310df24e508d40fce9511c7fde4dd4ee91305fd08a074279a70e2cd22000000001716001468dde644410cc789d91a7f36b823f38369755a1cffffffff02780500000000000017a914a3a65daca3064280ae072b9d6773c027b30abace87dc0500000000000017a914850f4dbc255654de2c12c6f6d79cf9cb756cad038702483045022100dc8390a9fd34c31259fa47f9fc182f20d991110ecfd5b58af1cf542fe8de257a022004c2d110da7b8c4127675beccc63b46fd65c706951f090fd381fa3b21d3c5c08012102edd141c5a27a726dda66be10a38b0fd3ccbb40e7c380034aaa43a1656d5f4dd60247304402207c0aef8313d55e72474247daad955979f62e56d1cbac5f2d14b8b022c6ce112602205d9aa3804f04624b12ab8a5ab0214b529c531c2f71c27c6f18aba6502a6ea0a80121030db3c49461a5e539e97bab62ab2b8f88151d1c2376493cf73ef1d02ef60637fd00000000', ); txhex = hd.createTx(hd.utxo, 0.000005, 0.000001, '3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK'); var tx = bitcoin.Transaction.fromHex(txhex); - assert.strictEqual(tx.ins.length, 1); - assert.strictEqual(tx.outs.length, 2); - assert.strictEqual(tx.outs[0].value, 500); - assert.strictEqual(tx.outs[1].value, 400); + assert.equal(tx.ins.length, 1); + assert.equal(tx.outs.length, 2); + assert.equal(tx.outs[0].value, 500); + assert.equal(tx.outs[1].value, 400); let chunksIn = bitcoin.script.decompile(tx.outs[0].script); let toAddress = bitcoin.address.fromOutputScript(chunksIn); chunksIn = bitcoin.script.decompile(tx.outs[1].script); let changeAddress = bitcoin.address.fromOutputScript(chunksIn); - assert.strictEqual('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', toAddress); - assert.strictEqual(hd._getInternalAddressByIndex(hd.next_free_change_address_index), changeAddress); + assert.equal('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', toAddress); + assert.equal(hd._getInternalAddressByIndex(hd.next_free_change_address_index), changeAddress); // txhex = hd.createTx(hd.utxo, 0.000015, 0.000001, '3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK'); tx = bitcoin.Transaction.fromHex(txhex); - assert.strictEqual(tx.ins.length, 2); - assert.strictEqual(tx.outs.length, 2); + assert.equal(tx.ins.length, 2); + assert.equal(tx.outs.length, 2); // txhex = hd.createTx(hd.utxo, 0.00025, 0.00001, '3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK'); tx = bitcoin.Transaction.fromHex(txhex); - assert.strictEqual(tx.ins.length, 7); - assert.strictEqual(tx.outs.length, 1); + assert.equal(tx.ins.length, 7); + assert.equal(tx.outs.length, 1); chunksIn = bitcoin.script.decompile(tx.outs[0].script); toAddress = bitcoin.address.fromOutputScript(chunksIn); - assert.strictEqual('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', toAddress); + assert.equal('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', toAddress); // checking that change amount is at least 3x of fee, otherwise screw the change, just add it to fee. // theres 0.00003 on UTXOs, lets transfer (0.00003 - 100sat), soo fee is equal to change (100 sat) // which throws @dust error if broadcasted txhex = hd.createTx(hd.utxo, 0.000028, 0.000001, '3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK'); tx = bitcoin.Transaction.fromHex(txhex); - assert.strictEqual(tx.ins.length, 2); - assert.strictEqual(tx.outs.length, 1); // only 1 output, which means change is neglected - assert.strictEqual(tx.outs[0].value, 2800); + assert.equal(tx.ins.length, 2); + assert.equal(tx.outs.length, 1); // only 1 output, which means change is neglected + assert.equal(tx.outs[0].value, 2800); }); it('Segwit HD (BIP49) can fetch UTXO', async function() { let hd = new HDSegwitP2SHWallet(); hd.usedAddresses = ['1Ez69SnzzmePmZX3WpEzMKTrcBF2gpNQ55', '1BiTCHeYzJNMxBLFCMkwYXNdFEdPJP53ZV']; // hacking internals await hd.fetchUtxo(); - assert.strictEqual(hd.utxo.length, 11); + assert.equal(hd.utxo.length, 11); assert.ok(typeof hd.utxo[0].confirmations === 'number'); assert.ok(hd.utxo[0].txid); assert.ok(hd.utxo[0].vout); @@ -168,7 +168,7 @@ it('can work with malformed mnemonic', () => { hd = new HDSegwitP2SHWallet(); hd.setSecret(mnemonic); let seed2 = hd.getMnemonicToSeedHex(); - assert.strictEqual(seed1, seed2); + assert.equal(seed1, seed2); assert.ok(hd.validateMnemonic()); }); @@ -182,28 +182,28 @@ it('can create a Legacy HD (BIP44)', async function() { let mnemonic = process.env.HD_MNEMONIC_BREAD; let hd = new HDLegacyP2PKHWallet(); hd.setSecret(mnemonic); - assert.strictEqual(hd.validateMnemonic(), true); - assert.strictEqual(hd._getExternalAddressByIndex(0), '12eQ9m4sgAwTSQoNXkRABKhCXCsjm2jdVG'); - assert.strictEqual(hd._getExternalAddressByIndex(1), '1QDCFcpnrZ4yrAQxmbvSgeUC9iZZ8ehcR5'); - assert.strictEqual(hd._getInternalAddressByIndex(0), '1KZjqYHm7a1DjhjcdcjfQvYfF2h6PqatjX'); - assert.strictEqual(hd._getInternalAddressByIndex(1), '13CW9WWBsWpDUvLtbFqYziWBWTYUoQb4nU'); - assert.strictEqual( + assert.equal(hd.validateMnemonic(), true); + assert.equal(hd._getExternalAddressByIndex(0), '12eQ9m4sgAwTSQoNXkRABKhCXCsjm2jdVG'); + assert.equal(hd._getExternalAddressByIndex(1), '1QDCFcpnrZ4yrAQxmbvSgeUC9iZZ8ehcR5'); + assert.equal(hd._getInternalAddressByIndex(0), '1KZjqYHm7a1DjhjcdcjfQvYfF2h6PqatjX'); + assert.equal(hd._getInternalAddressByIndex(1), '13CW9WWBsWpDUvLtbFqYziWBWTYUoQb4nU'); + assert.equal( hd.getXpub(), 'xpub6CQdfC3v9gU86eaSn7AhUFcBVxiGhdtYxdC5Cw2vLmFkfth2KXCMmYcPpvZviA89X6DXDs4PJDk5QVL2G2xaVjv7SM4roWHr1gR4xB3Z7Ps', ); - assert.strictEqual(hd._getExternalWIFByIndex(0), 'L1hqNoJ26YuCdujMBJfWBNfgf4Jo7AcKFvcNcKLoMtoJDdDtRq7Q'); - assert.strictEqual(hd._getExternalWIFByIndex(1), 'KyyH4h59iatJWwFfiYPnYkw39SP7cBwydC3xzszsBBXHpfwz9cKb'); - assert.strictEqual(hd._getInternalWIFByIndex(0), 'Kx3QkrfemEEV49Mj5oWfb4bsWymboPdstta7eN3kAzop9apxYEFP'); - assert.strictEqual(hd._getInternalWIFByIndex(1), 'Kwfg1EDjFapN9hgwafdNPEH22z3vkd4gtG785vXXjJ6uvVWAJGtr'); + assert.equal(hd._getExternalWIFByIndex(0), 'L1hqNoJ26YuCdujMBJfWBNfgf4Jo7AcKFvcNcKLoMtoJDdDtRq7Q'); + assert.equal(hd._getExternalWIFByIndex(1), 'KyyH4h59iatJWwFfiYPnYkw39SP7cBwydC3xzszsBBXHpfwz9cKb'); + assert.equal(hd._getInternalWIFByIndex(0), 'Kx3QkrfemEEV49Mj5oWfb4bsWymboPdstta7eN3kAzop9apxYEFP'); + assert.equal(hd._getInternalWIFByIndex(1), 'Kwfg1EDjFapN9hgwafdNPEH22z3vkd4gtG785vXXjJ6uvVWAJGtr'); await hd.fetchBalance(); - assert.strictEqual(hd.balance, 0); + assert.equal(hd.balance, 0); assert.ok(hd._lastTxFetch === 0); await hd.fetchTransactions(); assert.ok(hd._lastTxFetch > 0); - assert.strictEqual(hd.transactions.length, 4); - assert.strictEqual(hd.next_free_address_index, 1); - assert.strictEqual(hd.next_free_change_address_index, 1); + assert.equal(hd.transactions.length, 4); + assert.equal(hd.next_free_address_index, 1); + assert.equal(hd.next_free_change_address_index, 1); for (let tx of hd.getTransactions()) { assert.ok(tx.value === 1000 || tx.value === 1377 || tx.value === -1377 || tx.value === -1000); @@ -211,17 +211,17 @@ it('can create a Legacy HD (BIP44)', async function() { // checking that internal pointer and async address getter return the same address let freeAddress = await hd.getAddressAsync(); - assert.strictEqual(hd._getExternalAddressByIndex(hd.next_free_address_index), freeAddress); + assert.equal(hd._getExternalAddressByIndex(hd.next_free_address_index), freeAddress); }); it('Legacy HD (BIP44) can generate addressess based on xpub', async function() { let xpub = 'xpub6CQdfC3v9gU86eaSn7AhUFcBVxiGhdtYxdC5Cw2vLmFkfth2KXCMmYcPpvZviA89X6DXDs4PJDk5QVL2G2xaVjv7SM4roWHr1gR4xB3Z7Ps'; let hd = new HDLegacyP2PKHWallet(); hd._xpub = xpub; - assert.strictEqual(hd._getExternalAddressByIndex(0), '12eQ9m4sgAwTSQoNXkRABKhCXCsjm2jdVG'); - assert.strictEqual(hd._getInternalAddressByIndex(0), '1KZjqYHm7a1DjhjcdcjfQvYfF2h6PqatjX'); - assert.strictEqual(hd._getExternalAddressByIndex(1), '1QDCFcpnrZ4yrAQxmbvSgeUC9iZZ8ehcR5'); - assert.strictEqual(hd._getInternalAddressByIndex(1), '13CW9WWBsWpDUvLtbFqYziWBWTYUoQb4nU'); + assert.equal(hd._getExternalAddressByIndex(0), '12eQ9m4sgAwTSQoNXkRABKhCXCsjm2jdVG'); + assert.equal(hd._getInternalAddressByIndex(0), '1KZjqYHm7a1DjhjcdcjfQvYfF2h6PqatjX'); + assert.equal(hd._getExternalAddressByIndex(1), '1QDCFcpnrZ4yrAQxmbvSgeUC9iZZ8ehcR5'); + assert.equal(hd._getInternalAddressByIndex(1), '13CW9WWBsWpDUvLtbFqYziWBWTYUoQb4nU'); }); it('Legacy HD (BIP44) can create TX', async () => { @@ -239,38 +239,38 @@ it('Legacy HD (BIP44) can create TX', async () => { await hd.getAddressAsync(); // to refresh internal pointer to next free address let txhex = hd.createTx(hd.utxo, 0.0008, 0.000005, '3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK'); - assert.strictEqual( + assert.equal( txhex, '01000000045fbc74110c2d6fcf4d1161a59913fbcd2b6ab3c5a9eb4d0dc0859515cbc8654f030000006b4830450221009be5dbe37db5a8409ddce3570140c95d162a07651b1e48cf39a6a741892adc53022061a25b8024d8f3cb1b94f264245de0c6e9a103ea557ddeb66245b40ec8e9384b012102ad7b2216f3a2b38d56db8a7ee5c540fd12c4bbb7013106eff78cc2ace65aa002ffffffff5fbc74110c2d6fcf4d1161a59913fbcd2b6ab3c5a9eb4d0dc0859515cbc8654f000000006a47304402207106e9fa4e2e35d351fbccc9c0fad3356d85d0cd35a9d7e9cbcefce5440da1e5022073c1905b5927447378c0f660e62900c1d4b2691730799458889fb87d86f5159101210316e84a2556f30a199541633f5dda6787710ccab26771b7084f4c9e1104f47667ffffffff5fbc74110c2d6fcf4d1161a59913fbcd2b6ab3c5a9eb4d0dc0859515cbc8654f020000006a4730440220250b15094096c4d4fe6793da8e45fa118ed057cc2759a480c115e76e23590791022079cdbdc9e630d713395602071e2837ecc1d192a36a24d8ec71bc51d5e62b203b01210316e84a2556f30a199541633f5dda6787710ccab26771b7084f4c9e1104f47667ffffffff5fbc74110c2d6fcf4d1161a59913fbcd2b6ab3c5a9eb4d0dc0859515cbc8654f010000006b483045022100879da610e6ed12c84d55f12baf3bf6222d59b5282502b3c7f4db1d22152c16900220759a1c88583cbdaf7fde21c273ad985dfdf94a2fa85e42ee41dcea2fd69136fd012102ad7b2216f3a2b38d56db8a7ee5c540fd12c4bbb7013106eff78cc2ace65aa002ffffffff02803801000000000017a914a3a65daca3064280ae072b9d6773c027b30abace872c4c0000000000001976a9146ee5e3e66dc73587a3a2d77a1a6c8554fae21b8a88ac00000000', ); var tx = bitcoin.Transaction.fromHex(txhex); - assert.strictEqual(tx.ins.length, 4); - assert.strictEqual(tx.outs.length, 2); - assert.strictEqual(tx.outs[0].value, 80000); // payee - assert.strictEqual(tx.outs[1].value, 19500); // change + assert.equal(tx.ins.length, 4); + assert.equal(tx.outs.length, 2); + assert.equal(tx.outs[0].value, 80000); // payee + assert.equal(tx.outs[1].value, 19500); // change let chunksIn = bitcoin.script.decompile(tx.outs[0].script); let toAddress = bitcoin.address.fromOutputScript(chunksIn); chunksIn = bitcoin.script.decompile(tx.outs[1].script); let changeAddress = bitcoin.address.fromOutputScript(chunksIn); - assert.strictEqual('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', toAddress); - assert.strictEqual(hd._getInternalAddressByIndex(hd.next_free_change_address_index), changeAddress); + assert.equal('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', toAddress); + assert.equal(hd._getInternalAddressByIndex(hd.next_free_change_address_index), changeAddress); // checking that change amount is at least 3x of fee, otherwise screw the change, just add it to fee. // theres 0.001 on UTXOs, lets transfer (0.001 - 100sat), soo fee is equal to change (100 sat) // which throws @dust error if broadcasted txhex = hd.createTx(hd.utxo, 0.000998, 0.000001, '3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK'); tx = bitcoin.Transaction.fromHex(txhex); - assert.strictEqual(tx.ins.length, 4); - assert.strictEqual(tx.outs.length, 1); // only 1 output, which means change is neglected - assert.strictEqual(tx.outs[0].value, 99800); + assert.equal(tx.ins.length, 4); + assert.equal(tx.outs.length, 1); // only 1 output, which means change is neglected + assert.equal(tx.outs[0].value, 99800); }); it('Legacy HD (BIP44) can fetch UTXO', async function() { let hd = new HDLegacyP2PKHWallet(); hd.usedAddresses = ['1Ez69SnzzmePmZX3WpEzMKTrcBF2gpNQ55', '1BiTCHeYzJNMxBLFCMkwYXNdFEdPJP53ZV']; // hacking internals await hd.fetchUtxo(); - assert.strictEqual(hd.utxo.length, 11); + assert.equal(hd.utxo.length, 11); assert.ok(typeof hd.utxo[0].confirmations === 'number'); assert.ok(hd.utxo[0].txid); assert.ok(hd.utxo[0].vout); @@ -290,31 +290,31 @@ it('HD breadwallet works', async function() { let hdBread = new HDLegacyBreadwalletWallet(); hdBread.setSecret(process.env.HD_MNEMONIC_BREAD); - assert.strictEqual(hdBread.validateMnemonic(), true); - assert.strictEqual(hdBread._getExternalAddressByIndex(0), '1ARGkNMdsBE36fJhddSwf8PqBXG3s4d2KU'); - assert.strictEqual(hdBread._getInternalAddressByIndex(0), '1JLvA5D7RpWgChb4A5sFcLNrfxYbyZdw3V'); + assert.equal(hdBread.validateMnemonic(), true); + assert.equal(hdBread._getExternalAddressByIndex(0), '1ARGkNMdsBE36fJhddSwf8PqBXG3s4d2KU'); + assert.equal(hdBread._getInternalAddressByIndex(0), '1JLvA5D7RpWgChb4A5sFcLNrfxYbyZdw3V'); - assert.strictEqual( + assert.equal( hdBread.getXpub(), 'xpub68nLLEi3KERQY7jyznC9PQSpSjmekrEmN8324YRCXayMXaavbdEJsK4gEcX2bNf9vGzT4xRks9utZ7ot1CTHLtdyCn9udvv1NWvtY7HXroh', ); await hdBread.fetchBalance(); - assert.strictEqual(hdBread.balance, 0); + assert.equal(hdBread.balance, 0); assert.ok(hdBread._lastTxFetch === 0); await hdBread.fetchTransactions(); assert.ok(hdBread._lastTxFetch > 0); - assert.strictEqual(hdBread.transactions.length, 177); + assert.equal(hdBread.transactions.length, 177); for (let tx of hdBread.getTransactions()) { assert.ok(tx.confirmations); } - assert.strictEqual(hdBread.next_free_address_index, 10); - assert.strictEqual(hdBread.next_free_change_address_index, 118); + assert.equal(hdBread.next_free_address_index, 10); + assert.equal(hdBread.next_free_change_address_index, 118); // checking that internal pointer and async address getter return the same address let freeAddress = await hdBread.getAddressAsync(); - assert.strictEqual(hdBread._getExternalAddressByIndex(hdBread.next_free_address_index), freeAddress); + assert.equal(hdBread._getExternalAddressByIndex(hdBread.next_free_address_index), freeAddress); }); it('can convert blockchain.info TX to blockcypher TX format', () => { diff --git a/LightningCustodianWallet.test.js b/LightningCustodianWallet.test.js index e997b28a6..d6623868c 100644 --- a/LightningCustodianWallet.test.js +++ b/LightningCustodianWallet.test.js @@ -152,7 +152,7 @@ describe('LightningCustodianWallet', () => { } await l2.fetchTransactions(); - assert.strictEqual(l2.transactions_raw.length, txLen + 1); + assert.equal(l2.transactions_raw.length, txLen + 1); // transactions became more after paying an invoice // now, trying to pay duplicate invoice @@ -165,7 +165,7 @@ describe('LightningCustodianWallet', () => { } assert.ok(caughtError); await l2.fetchTransactions(); - assert.strictEqual(l2.transactions_raw.length, txLen + 1); + assert.equal(l2.transactions_raw.length, txLen + 1); // havent changed since last time end = +new Date(); if ((end - start) / 1000 > 9) { @@ -191,21 +191,21 @@ describe('LightningCustodianWallet', () => { await lNew.createAccount(true); await lNew.authorize(); await lNew.fetchBalance(); - assert.strictEqual(lNew.balance, 0); + assert.equal(lNew.balance, 0); let invoices = await lNew.getUserInvoices(); let invoice = await lNew.addInvoice(1, 'test memo'); let invoices2 = await lNew.getUserInvoices(); - assert.strictEqual(invoices2.length, invoices.length + 1); + assert.equal(invoices2.length, invoices.length + 1); assert.ok(invoices2[0].ispaid === false); assert.ok(invoices2[0].description); - assert.strictEqual(invoices2[0].description, 'test memo'); + assert.equal(invoices2[0].description, 'test memo'); assert.ok(invoices2[0].payment_request); assert.ok(invoices2[0].timestamp); assert.ok(invoices2[0].expire_time); - assert.strictEqual(invoices2[0].amt, 1); + assert.equal(invoices2[0].amt, 1); for (let inv of invoices2) { - assert.strictEqual(inv.type, 'user_invoice'); + assert.equal(inv.type, 'user_invoice'); } await lOld.fetchBalance(); @@ -225,11 +225,11 @@ describe('LightningCustodianWallet', () => { await lOld.fetchBalance(); await lNew.fetchBalance(); - assert.strictEqual(oldBalance - lOld.balance, 1); - assert.strictEqual(lNew.balance, 1); + assert.equal(oldBalance - lOld.balance, 1); + assert.equal(lNew.balance, 1); await lOld.fetchTransactions(); - assert.strictEqual(lOld.transactions_raw.length, txLen + 1, 'internal invoice should also produce record in payer`s tx list'); + assert.equal(lOld.transactions_raw.length, txLen + 1, 'internal invoice should also produce record in payer`s tx list'); let newTx = lOld.transactions_raw.slice().pop(); assert.ok(typeof newTx.fee !== 'undefined'); assert.ok(newTx.value); @@ -244,8 +244,8 @@ describe('LightningCustodianWallet', () => { await lNew.payInvoice(invoice); await lOld.fetchBalance(); await lNew.fetchBalance(); - assert.strictEqual(lOld.balance - oldBalance, 1); - assert.strictEqual(lNew.balance, 0); + assert.equal(lOld.balance - oldBalance, 1); + assert.equal(lNew.balance, 0); // now, paying same internal invoice. should fail: @@ -261,16 +261,16 @@ describe('LightningCustodianWallet', () => { assert.ok(coughtError); await lOld.fetchTransactions(); - assert.strictEqual(txLen, lOld.transactions_raw.length, 'tx count should not be changed'); - assert.strictEqual(invLen, (await lNew.getUserInvoices()).length, 'invoices count should not be changed'); + assert.equal(txLen, lOld.transactions_raw.length, 'tx count should not be changed'); + assert.equal(invLen, (await lNew.getUserInvoices()).length, 'invoices count should not be changed'); // testing how limiting works: - assert.strictEqual(lNew.user_invoices_raw.length, 1); + assert.equal(lNew.user_invoices_raw.length, 1); await lNew.addInvoice(666, 'test memo 2'); invoices = await lNew.getUserInvoices(1); - assert.strictEqual(invoices.length, 2); - assert.strictEqual(invoices[0].amt, 1); - assert.strictEqual(invoices[1].amt, 666); + assert.equal(invoices.length, 2); + assert.equal(invoices[0].amt, 1); + assert.equal(invoices[1].amt, 666); }); it('can pay free amount (tip) invoice', async function() { @@ -319,7 +319,7 @@ describe('LightningCustodianWallet', () => { let decoded = await l2.decodeInvoice(invoice); assert.ok(decoded.payment_hash); assert.ok(decoded.description); - assert.strictEqual(+decoded.num_satoshis, 0); + assert.equal(+decoded.num_satoshis, 0); await l2.checkRouteInvoice(invoice); @@ -342,10 +342,10 @@ describe('LightningCustodianWallet', () => { } await l2.fetchTransactions(); - assert.strictEqual(l2.transactions_raw.length, txLen + 1); + assert.equal(l2.transactions_raw.length, txLen + 1); // transactions became more after paying an invoice await l2.fetchBalance(); - assert.strictEqual(oldBalance - l2.balance, 3); + assert.equal(oldBalance - l2.balance, 3); }); }); diff --git a/android/app/src/main/java/io/bluewallet/bluewallet/MainActivity.java b/android/app/src/main/java/io/bluewallet/bluewallet/MainActivity.java index 8b6c6b507..323c5b832 100644 --- a/android/app/src/main/java/io/bluewallet/bluewallet/MainActivity.java +++ b/android/app/src/main/java/io/bluewallet/bluewallet/MainActivity.java @@ -1,4 +1,4 @@ -package com.bluewallet; +package io.bluewallet.bluewallet; import com.facebook.react.ReactActivity; import com.facebook.react.ReactActivityDelegate; diff --git a/android/app/src/main/java/io/bluewallet/bluewallet/MainApplication.java b/android/app/src/main/java/io/bluewallet/bluewallet/MainApplication.java index 2f8ffaf88..fa9fefd35 100644 --- a/android/app/src/main/java/io/bluewallet/bluewallet/MainApplication.java +++ b/android/app/src/main/java/io/bluewallet/bluewallet/MainApplication.java @@ -3,14 +3,19 @@ package io.bluewallet.bluewallet; import android.app.Application; import com.facebook.react.ReactApplication; +import com.reactnativecommunity.webview.RNCWebViewPackage; +import com.oblador.vectoricons.VectorIconsPackage; +import org.reactnative.camera.RNCameraPackage; import io.sentry.RNSentryPackage; import com.bitgo.randombytes.RandomBytesPackage; import im.shimo.react.prompt.RNPromptPackage; import com.BV.LinearGradient.LinearGradientPackage; import com.mkuczera.RNReactNativeHapticFeedbackPackage; import com.idehub.GoogleAnalyticsBridge.GoogleAnalyticsBridgePackage; -import com.reactnativecommunity.webview.RNCWebViewPackage; -import com.oblador.vectoricons.VectorIconsPackage; +import com.swmansion.gesturehandler.react.RNGestureHandlerPackage; +import com.rnfs.RNFSPackage; +import com.learnium.RNDeviceInfo.RNDeviceInfo; +import org.reactnative.camera.RNCameraPackage; import com.horcrux.svg.SvgPackage; import io.sentry.RNSentryPackage; import com.bitgo.randombytes.RandomBytesPackage; @@ -23,7 +28,6 @@ import com.facebook.react.ReactNativeHost; import com.facebook.react.ReactPackage; import com.facebook.react.shell.MainReactPackage; import com.facebook.soloader.SoLoader; -import org.reactnative.camera.RNCameraPackage; import com.swmansion.gesturehandler.react.RNGestureHandlerPackage; import com.rnfs.RNFSPackage; @@ -42,24 +46,18 @@ public class MainApplication extends Application implements ReactApplication { protected List getPackages() { return Arrays.asList( new MainReactPackage(), - new RNSentryPackage(), - new RandomBytesPackage(), - new RNPromptPackage(), - new LinearGradientPackage(), - new RNReactNativeHapticFeedbackPackage(), - new GoogleAnalyticsBridgePackage(), new RNCWebViewPackage(), - new RNFSPackage() , - new VectorIconsPackage(), new SvgPackage(), + new RNCameraPackage(), new RNSentryPackage(), new RandomBytesPackage(), + new GoogleAnalyticsBridgePackage(), + new RNFSPackage(), + new RNDeviceInfo(), + new VectorIconsPackage(), new RNPromptPackage(), new LinearGradientPackage(), new RNReactNativeHapticFeedbackPackage(), - new GoogleAnalyticsBridgePackage(), - new RNDeviceInfo(), - new RNCameraPackage(), new RNGestureHandlerPackage() ); } diff --git a/android/build.gradle b/android/build.gradle index b6d4c5bb4..cfbb2b746 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -2,7 +2,7 @@ buildscript { ext { - buildToolsVersion = "28.0.3" + buildToolsVersion = "27.0.3" minSdkVersion = 16 compileSdkVersion = 27 targetSdkVersion = 26 diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index e9b9ac74b..e4a6127b9 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,4 +1,4 @@ -#Wed Jan 16 14:12:19 EST 2019 +#Sat Jan 19 02:29:20 GMT 2019 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME diff --git a/android/settings.gradle b/android/settings.gradle index 85befb1c6..3e900d60d 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -1,26 +1,4 @@ rootProject.name = 'BlueWallet' -include ':react-native-sentry' -project(':react-native-sentry').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-sentry/android') -include ':react-native-randombytes' -project(':react-native-randombytes').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-randombytes/android') -include ':react-native-prompt-android' -project(':react-native-prompt-android').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-prompt-android/android') -include ':react-native-linear-gradient' -project(':react-native-linear-gradient').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-linear-gradient/android') -include ':react-native-haptic-feedback' -project(':react-native-haptic-feedback').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-haptic-feedback/android') -include ':react-native-google-analytics-bridge' -project(':react-native-google-analytics-bridge').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-google-analytics-bridge/android') -include ':react-native-gesture-handler' -project(':react-native-gesture-handler').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-gesture-handler/android') -include ':react-native-fs' -project(':react-native-fs').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-fs/android') -include ':react-native-webview' -project(':react-native-webview').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-webview/android') -include ':react-native-device-info' -project(':react-native-device-info').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-device-info/android') -include ':react-native-camera' -project(':react-native-camera').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-camera/android') include ':react-native-webview' project(':react-native-webview').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-webview/android') include ':react-native-svg' diff --git a/ios/BlueWallet.xcodeproj/project.pbxproj b/ios/BlueWallet.xcodeproj/project.pbxproj index afd890b11..891a6f9f6 100644 --- a/ios/BlueWallet.xcodeproj/project.pbxproj +++ b/ios/BlueWallet.xcodeproj/project.pbxproj @@ -499,13 +499,6 @@ remoteGlobalIDString = 0974579A1D2A440A000D9368; remoteInfo = RCTWKWebView; }; - B4DA894521F6056C00A3CB6C /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5F3DCC24027F4B1EAACBAE3C /* RNCWebView.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 134814201AA4EA6300B7C361; - remoteInfo = RNCWebView; - }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ @@ -1039,14 +1032,6 @@ name = Products; sourceTree = ""; }; - B4DA891821F6056C00A3CB6C /* Products */ = { - isa = PBXGroup; - children = ( - B4DA894621F6056C00A3CB6C /* libRNCWebView.a */, - ); - name = Products; - sourceTree = ""; - }; FC7D399B1A1043C49023DC79 /* Resources */ = { isa = PBXGroup; children = ( @@ -1252,10 +1237,6 @@ ProductGroup = B4C5B8E121F2DF3000A845C4 /* Products */; ProjectRef = 3853DFD4C6D44BB8B17AEDF0 /* RNCamera.xcodeproj */; }, - { - ProductGroup = B4DA891821F6056C00A3CB6C /* Products */; - ProjectRef = 5F3DCC24027F4B1EAACBAE3C /* RNCWebView.xcodeproj */; - }, { ProductGroup = B4C5B8E521F2DF3000A845C4 /* Products */; ProjectRef = 03D541ACCDD2451D9971158E /* RNDeviceInfo.xcodeproj */; @@ -1710,13 +1691,6 @@ remoteRef = B4C5BAB521F3708C00A845C4 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - B4DA894621F6056C00A3CB6C /* libRNCWebView.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libRNCWebView.a; - remoteRef = B4DA894521F6056C00A3CB6C /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; /* End PBXReferenceProxy section */ /* Begin PBXResourcesBuildPhase section */ diff --git a/package-lock.json b/package-lock.json index 585ee2b6b..53b6411e3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "BlueWallet", - "version": "3.6.0", + "version": "3.6.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -1316,15 +1316,15 @@ } }, "ajv": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz", - "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==", + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "dev": true, "requires": { - "fast-deep-equal": "^2.0.1", + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "json-schema-traverse": "^0.3.0" } }, "ajv-keywords": { @@ -2012,17 +2012,137 @@ } }, "babel-eslint": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.1.tgz", - "integrity": "sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ==", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-8.2.6.tgz", + "integrity": "sha512-aCdHjhzcILdP8c9lej7hvXKvQieyRt20SF102SIGyY4cUIiw6UaAtK4j2o3dXX74jEmy0TJ0CEhv4fTIM3SzcA==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", + "@babel/code-frame": "7.0.0-beta.44", + "@babel/traverse": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44", + "babylon": "7.0.0-beta.44", "eslint-scope": "3.7.1", "eslint-visitor-keys": "^1.0.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz", + "integrity": "sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g==", + "dev": true, + "requires": { + "@babel/highlight": "7.0.0-beta.44" + } + }, + "@babel/generator": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.44.tgz", + "integrity": "sha512-5xVb7hlhjGcdkKpMXgicAVgx8syK5VJz193k0i/0sLP6DzE6lRrU1K3B/rFefgdo9LPGMAOOOAWW4jycj07ShQ==", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.44", + "jsesc": "^2.5.1", + "lodash": "^4.2.0", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" + } + }, + "@babel/helper-function-name": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz", + "integrity": "sha512-MHRG2qZMKMFaBavX0LWpfZ2e+hLloT++N7rfM3DYOMUOGCD8cVjqZpwiL8a0bOX3IYcQev1ruciT0gdFFRTxzg==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "7.0.0-beta.44", + "@babel/template": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz", + "integrity": "sha512-w0YjWVwrM2HwP6/H3sEgrSQdkCaxppqFeJtAnB23pRiJB5E/O9Yp7JAAeWBl+gGEgmBFinnTyOv2RN7rcSmMiw==", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.44" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz", + "integrity": "sha512-aQ7QowtkgKKzPGf0j6u77kBMdUFVBKNHw2p/3HX/POt5/oz8ec5cs0GwlgM8Hz7ui5EwJnzyfRmkNF1Nx1N7aA==", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.44" + } + }, + "@babel/highlight": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.44.tgz", + "integrity": "sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^3.0.0" + } + }, + "@babel/template": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.44.tgz", + "integrity": "sha512-w750Sloq0UNifLx1rUqwfbnC6uSUk0mfwwgGRfdLiaUzfAOiH0tHJE6ILQIUi3KYkjiCDTskoIsnfqZvWLBDng==", + "dev": true, + "requires": { + "@babel/code-frame": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44", + "babylon": "7.0.0-beta.44", + "lodash": "^4.2.0" + } + }, + "@babel/traverse": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.44.tgz", + "integrity": "sha512-UHuDz8ukQkJCDASKHf+oDt3FVUzFd+QYfuBIsiNu/4+/ix6pP/C+uQZJ6K1oEfbCMv/IKWbgDEh7fcsnIE5AtA==", + "dev": true, + "requires": { + "@babel/code-frame": "7.0.0-beta.44", + "@babel/generator": "7.0.0-beta.44", + "@babel/helper-function-name": "7.0.0-beta.44", + "@babel/helper-split-export-declaration": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44", + "babylon": "7.0.0-beta.44", + "debug": "^3.1.0", + "globals": "^11.1.0", + "invariant": "^2.2.0", + "lodash": "^4.2.0" + } + }, + "@babel/types": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.44.tgz", + "integrity": "sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.2.0", + "to-fast-properties": "^2.0.0" + } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + } } }, "babel-generator": { @@ -2300,6 +2420,12 @@ } } }, + "babylon": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", + "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==", + "dev": true + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -3750,173 +3876,66 @@ } }, "eslint": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.12.1.tgz", - "integrity": "sha512-54NV+JkTpTu0d8+UYSA8mMKAG4XAsaOrozA9rCW7tgneg1mevcL7wIotPC+fZ0SkWwdhNqoXoxnQCTBp7UvTsg==", + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", + "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.5.3", + "ajv": "^5.3.0", + "babel-code-frame": "^6.22.0", "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", + "concat-stream": "^1.6.0", + "cross-spawn": "^5.1.0", + "debug": "^3.1.0", "doctrine": "^2.1.0", - "eslint-scope": "^4.0.0", - "eslint-utils": "^1.3.1", + "eslint-scope": "^3.7.1", "eslint-visitor-keys": "^1.0.0", - "espree": "^5.0.0", - "esquery": "^1.0.1", + "espree": "^3.5.4", + "esquery": "^1.0.0", "esutils": "^2.0.2", "file-entry-cache": "^2.0.0", "functional-red-black-tree": "^1.0.1", "glob": "^7.1.2", - "globals": "^11.7.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", + "globals": "^11.0.1", + "ignore": "^3.3.3", "imurmurhash": "^0.1.4", - "inquirer": "^6.1.0", - "js-yaml": "^3.12.0", + "inquirer": "^3.0.6", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.9.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.3.0", - "lodash": "^4.17.5", - "minimatch": "^3.0.4", + "lodash": "^4.17.4", + "minimatch": "^3.0.2", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", "optionator": "^0.8.2", "path-is-inside": "^1.0.2", "pluralize": "^7.0.0", "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^5.5.1", + "regexpp": "^1.0.1", + "require-uncached": "^1.0.3", + "semver": "^5.3.0", "strip-ansi": "^4.0.0", - "strip-json-comments": "^2.0.1", - "table": "^5.0.2", - "text-table": "^0.2.0" + "strip-json-comments": "~2.0.1", + "table": "4.0.2", + "text-table": "~0.2.0" }, "dependencies": { - "acorn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.5.tgz", - "integrity": "sha512-i33Zgp3XWtmZBMNvCr4azvOFeWVw1Rk6p3hfi3LUDvIFraOMywb1kAtrbi+med14m4Xfpqm3zRZMT+c0FNE7kg==", - "dev": true - }, - "acorn-jsx": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", - "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", - "dev": true - }, "ansi-regex": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", - "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==", - "dev": true - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "eslint-scope": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", - "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "espree": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.0.tgz", - "integrity": "sha512-1MpUfwsdS9MMoN7ZXqAr9e9UKdVHDcvrJpyx7mm1WuQlx/ygErEQBzgi5Nh5qBHIoYweprhtMkTCb9GhcAIcsA==", - "dev": true, - "requires": { - "acorn": "^6.0.2", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" - } - }, - "external-editor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", - "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "import-fresh": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", - "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "inquirer": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.1.tgz", - "integrity": "sha512-088kl3DRT2dLU5riVMKKr1DlImd6X7smDhpXUCkJDCKvTEJeRiXh0G132HG9u5a+6Ylw9plFRY7RuTnwohYSpg==", - "dev": true, - "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.0", - "figures": "^2.0.0", - "lodash": "^4.17.10", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.1.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "strip-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", - "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", - "dev": true, - "requires": { - "ansi-regex": "^4.0.0" - } - } - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -3924,14 +3943,6 @@ "dev": true, "requires": { "ansi-regex": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - } } } } @@ -4045,23 +4056,10 @@ } }, "eslint-plugin-babel": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-babel/-/eslint-plugin-babel-5.3.0.tgz", - "integrity": "sha512-HPuNzSPE75O+SnxHIafbW5QB45r2w78fxqwK3HmjqIUoPfPzVrq6rD+CINU3yzoDSzEhUkX07VUphbF73Lth/w==", - "dev": true, - "requires": { - "eslint-rule-composer": "^0.3.0" - } - }, - "eslint-plugin-es": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-1.4.0.tgz", - "integrity": "sha512-XfFmgFdIUDgvaRAlaXUkxrRg5JSADoRC8IkKLc/cISeR3yHVMefFHQZpcyXXEUUPHfy5DwviBcrfqlyqEwlQVw==", - "dev": true, - "requires": { - "eslint-utils": "^1.3.0", - "regexpp": "^2.0.1" - } + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-babel/-/eslint-plugin-babel-4.1.2.tgz", + "integrity": "sha1-eSAqDjV1fdkngJGbIzbx+i/lPB4=", + "dev": true }, "eslint-plugin-import": { "version": "2.14.0", @@ -4109,25 +4107,15 @@ } }, "eslint-plugin-node": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-8.0.1.tgz", - "integrity": "sha512-ZjOjbjEi6jd82rIpFSgagv4CHWzG9xsQAVp1ZPlhRnnYxcTgENUVBvhYmkQ7GvT1QFijUSo69RaiOJKhMu6i8w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-6.0.1.tgz", + "integrity": "sha512-Q/Cc2sW1OAISDS+Ji6lZS2KV4b7ueA/WydVWd1BECTQwVvfQy5JAi3glhINoKzoMnfnuRgNP+ZWKrGAbp3QDxw==", "dev": true, "requires": { - "eslint-plugin-es": "^1.3.1", - "eslint-utils": "^1.3.1", - "ignore": "^5.0.2", + "ignore": "^3.3.6", "minimatch": "^3.0.4", - "resolve": "^1.8.1", - "semver": "^5.5.0" - }, - "dependencies": { - "ignore": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.0.4.tgz", - "integrity": "sha512-WLsTMEhsQuXpCiG173+f3aymI43SXa+fB1rSfbzyP4GkPP+ZFVuO0/3sFUGNBtifisPeDcl/uD/Y2NxZ7xFq4g==", - "dev": true - } + "resolve": "^1.3.3", + "semver": "^5.4.1" } }, "eslint-plugin-prettier": { @@ -4140,9 +4128,9 @@ } }, "eslint-plugin-promise": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.0.1.tgz", - "integrity": "sha512-Si16O0+Hqz1gDHsys6RtFRrW7cCTB6P7p3OJmKp3Y3dxpQE2qwOA7d3xnV+0mBmrPoi0RBnxlCKvqu70te6wjg==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.8.0.tgz", + "integrity": "sha512-JiFL9UFR15NKpHyGii1ZcvmtIqa3UTwiDAGb8atSffe43qJ3+1czVGN6UtkklpcJ2DVnqvTMzEKRaJdBkAL2aQ==", "dev": true }, "eslint-plugin-react": { @@ -4165,12 +4153,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.0.0.tgz", "integrity": "sha512-OwxJkR6TQiYMmt1EsNRMe5qG3GsbjlcOhbGUBY4LtavF9DsLaTcoR+j2Tdjqi23oUwKNUqX7qcn5fPStafMdlA==" }, - "eslint-rule-composer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", - "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", - "dev": true - }, "eslint-scope": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", @@ -4181,12 +4163,6 @@ "estraverse": "^4.1.1" } }, - "eslint-utils": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", - "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", - "dev": true - }, "eslint-visitor-keys": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", @@ -4374,9 +4350,9 @@ } }, "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", "dev": true }, "fast-diff": { @@ -6510,9 +6486,9 @@ "dev": true }, "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", "dev": true }, "json-stable-stringify": { @@ -7352,9 +7328,9 @@ } }, "metro-react-native-babel-preset": { - "version": "0.51.1", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.51.1.tgz", - "integrity": "sha512-e9tsYDFhU70gar0jQWcZXRPJVCv4k7tEs6Pm74wXO2OO/T1MEumbvniDIGwGG8bG8RUnYdHhjcaiub2Vc5BRWw==", + "version": "0.49.2", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.49.2.tgz", + "integrity": "sha512-N0+4ramShYCHSAVEPUNWIZuKZskWj8/RDSoinhadHpdpHORMbMxLkexSOVHLluB+XFQ+DENLEx5oVPYwOlENBA==", "dev": true, "requires": { "@babel/plugin-proposal-class-properties": "^7.0.0", @@ -7390,14 +7366,14 @@ "@babel/plugin-transform-typescript": "^7.0.0", "@babel/plugin-transform-unicode-regex": "^7.0.0", "@babel/template": "^7.0.0", - "metro-babel7-plugin-react-transform": "0.51.1", + "metro-babel7-plugin-react-transform": "0.49.2", "react-transform-hmr": "^1.0.4" }, "dependencies": { "metro-babel7-plugin-react-transform": { - "version": "0.51.1", - "resolved": "https://registry.npmjs.org/metro-babel7-plugin-react-transform/-/metro-babel7-plugin-react-transform-0.51.1.tgz", - "integrity": "sha512-wzn4X9KgmAMZ7Bi6v9KxA7dw+AHGL0RODPxU5NDJ3A6d0yERvzfZ3qkzWhz8jbFkVBK12cu5DTho3HBazKQDOw==", + "version": "0.49.2", + "resolved": "https://registry.npmjs.org/metro-babel7-plugin-react-transform/-/metro-babel7-plugin-react-transform-0.49.2.tgz", + "integrity": "sha512-LpJT8UvqF/tvVqEwiLUTMjRPhEGdI8e2dr3424XaRANba3j0nqmrbKdJQsPE8TrcqMWR4RHmfsXk0ti5QrEvJg==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.0.0" @@ -7820,14 +7796,6 @@ } } } - }, - "util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", - "requires": { - "inherits": "2.0.3" - } } } }, @@ -8328,23 +8296,6 @@ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.8.tgz", "integrity": "sha512-6i0HVbUfcKaTv+EG8ZTr75az7GFXcLYk9UyLEg7Notv/Ma+z/UG3TCoz6GiNeOrn1E/e63I0X/Hpw18jHOTUnA==" }, - "parent-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.0.tgz", - "integrity": "sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - }, - "dependencies": { - "callsites": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", - "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==", - "dev": true - } - } - }, "parse-asn1": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.2.tgz", @@ -8465,6 +8416,11 @@ "sha.js": "^2.4.8" } }, + "pegjs": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/pegjs/-/pegjs-0.10.0.tgz", + "integrity": "sha1-z4uvrm7d/0tafvsYUmnqr0YQ3b0=" + }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -8556,9 +8512,9 @@ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" }, "prettier": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.0.tgz", - "integrity": "sha512-MCBCYeAuZfejUPdEpkleLWvpRBwLii/Sp5jQs0eb8Ul/drGIDjkL6tAU24tk6yCGf0KPV5rhPPPlczfBmN2pWQ==" + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.15.3.tgz", + "integrity": "sha512-gAU9AGAPMaKb3NNSUUuhhFAS7SCO4ALTN4nRIn6PJ075Qd28Yn2Ig2ahEJWdJwJmlEBTUfC7mMUSFy8MwsOCfg==" }, "prettier-eslint": { "version": "8.8.2", @@ -8581,91 +8537,12 @@ "vue-eslint-parser": "^2.0.2" }, "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "eslint": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", - "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", - "dev": true, - "requires": { - "ajv": "^5.3.0", - "babel-code-frame": "^6.22.0", - "chalk": "^2.1.0", - "concat-stream": "^1.6.0", - "cross-spawn": "^5.1.0", - "debug": "^3.1.0", - "doctrine": "^2.1.0", - "eslint-scope": "^3.7.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^3.5.4", - "esquery": "^1.0.0", - "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.0.1", - "ignore": "^3.3.3", - "imurmurhash": "^0.1.4", - "inquirer": "^3.0.6", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.9.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.4", - "minimatch": "^3.0.2", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", - "progress": "^2.0.0", - "regexpp": "^1.0.1", - "require-uncached": "^1.0.3", - "semver": "^5.3.0", - "strip-ansi": "^4.0.0", - "strip-json-comments": "~2.0.1", - "table": "4.0.2", - "text-table": "~0.2.0" - } - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, "pretty-format": { "version": "23.6.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz", @@ -8675,44 +8552,6 @@ "ansi-regex": "^3.0.0", "ansi-styles": "^3.2.0" } - }, - "regexpp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", - "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", - "dev": true - }, - "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "table": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", - "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", - "dev": true, - "requires": { - "ajv": "^5.2.3", - "ajv-keywords": "^2.1.0", - "chalk": "^2.1.0", - "lodash": "^4.17.4", - "slice-ansi": "1.0.0", - "string-width": "^2.1.1" - } } } }, @@ -8742,24 +8581,6 @@ "yargs": "10.0.3" }, "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, "chalk": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", @@ -8771,85 +8592,12 @@ "supports-color": "^4.0.0" } }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "eslint": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", - "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", - "dev": true, - "requires": { - "ajv": "^5.3.0", - "babel-code-frame": "^6.22.0", - "chalk": "^2.1.0", - "concat-stream": "^1.6.0", - "cross-spawn": "^5.1.0", - "debug": "^3.1.0", - "doctrine": "^2.1.0", - "eslint-scope": "^3.7.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^3.5.4", - "esquery": "^1.0.0", - "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.0.1", - "ignore": "^3.3.3", - "imurmurhash": "^0.1.4", - "inquirer": "^3.0.6", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.9.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.4", - "minimatch": "^3.0.2", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", - "progress": "^2.0.0", - "regexpp": "^1.0.1", - "require-uncached": "^1.0.3", - "semver": "^5.3.0", - "strip-ansi": "^4.0.0", - "strip-json-comments": "~2.0.1", - "table": "4.0.2", - "text-table": "~0.2.0" - } - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true - }, "has-flag": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", "dev": true }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, - "regexpp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", - "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", - "dev": true - }, "rxjs": { "version": "5.5.12", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", @@ -8859,24 +8607,6 @@ "symbol-observable": "1.0.1" } }, - "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, "supports-color": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", @@ -8886,20 +8616,6 @@ "has-flag": "^2.0.0" } }, - "table": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", - "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", - "dev": true, - "requires": { - "ajv": "^5.2.3", - "ajv-keywords": "^2.1.0", - "chalk": "^2.1.0", - "lodash": "^4.17.4", - "slice-ansi": "1.0.0", - "string-width": "^2.1.1" - } - }, "yargs": { "version": "10.0.3", "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.0.3.tgz", @@ -9366,9 +9082,9 @@ } }, "react-native-camera": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/react-native-camera/-/react-native-camera-1.9.0.tgz", - "integrity": "sha512-stvA9rWmN95DRr7a+eNr7LQlQLxP2Z7AJEoR8ctjcYx1EUMoL7qPFdz2JKmqZ/DEsW3ZKOC+ZCx68tscj9gDbQ==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/react-native-camera/-/react-native-camera-1.8.0.tgz", + "integrity": "sha512-fJPSbCZ4ZWI+1kQ2Y41ed0fr3Bnw+qo6eb8uv3HcTkGzBJ1OCzLIcAhpXLhizyiyY9nwSuMy9asQKS3Tun8eXA==", "requires": { "prop-types": "^15.6.2" } @@ -9408,9 +9124,9 @@ } }, "react-native-device-info": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-0.25.1.tgz", - "integrity": "sha512-KW4Mf0CVEy10sbWsrnP7dMiB+FhFa46r11+JPdXWu1hHoSy8B/DR5Cb29kHHZSCPftHPzEhfMDflRe4IOgHrVw==" + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-0.25.0.tgz", + "integrity": "sha512-5egYoRhO6OE4VHC2RZtjNYxuXtwR2oexoI1GwvAiYzyGEc2pkMaC59xN2W0NX0mDxhkfaDsMzc+WArLqSg62xA==" }, "react-native-elements": { "version": "0.19.1", @@ -9448,9 +9164,9 @@ } }, "react-native-google-analytics-bridge": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/react-native-google-analytics-bridge/-/react-native-google-analytics-bridge-7.0.0.tgz", - "integrity": "sha512-PifW2VXYqH92u6GyJfEZAiZQYHmXuJvN7eouuC9ZWadfz+m4MFJbsVFAAsTQ1JzMiuo8B5KwK97hpY0cp7HD9w==" + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/react-native-google-analytics-bridge/-/react-native-google-analytics-bridge-6.1.2.tgz", + "integrity": "sha512-QhBvtQb6/5ao0ubgjMRkJMnsAo05UYwTMJHPesMUT6GD9W0zneAUiCC3HtV8IsHZMSZ0HJxytLhnLtQhWzN7PQ==" }, "react-native-haptic-feedback": { "version": "1.4.2", @@ -9566,11 +9282,13 @@ } }, "react-native-svg": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-9.0.0.tgz", - "integrity": "sha512-HOmQ94XNdvo19SQp60MgEmF4scyhtR/78Oqr5vsMxNgnVRt9oaEfJygtfdhiUslYs4zHbCvKvPo4k+BJhh0pfA==", + "version": "8.0.10", + "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-8.0.10.tgz", + "integrity": "sha512-gsG5GUdvlox67+ohLnq3tZSqiYBmz4M5lKKeUfnJZ8EPrMMS5ZgaVj7Zcccee1VvINS5xQaoenUJdha/GEo34w==", "requires": { - "color": "^2.0.1" + "color": "^2.0.1", + "lodash": "^4.16.6", + "pegjs": "^0.10.0" } }, "react-native-tab-view": { @@ -9894,9 +9612,9 @@ } }, "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", + "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", "dev": true }, "regexpu-core": { @@ -10790,13 +10508,11 @@ "dev": true }, "slice-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.0.0.tgz", - "integrity": "sha512-4j2WTWjp3GsZ+AOagyzVbzp4vWGtZ0hEZ/gDY/uTvm6MTxUfTUIsnMIFb1bn8o0RuXiqUw15H1bue8f22Vw2oQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", "is-fullwidth-code-point": "^2.0.0" } }, @@ -11243,14 +10959,16 @@ "dev": true }, "table": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/table/-/table-5.2.1.tgz", - "integrity": "sha512-qmhNs2GEHNqY5fd2Mo+8N1r2sw/rvTAAvBZTaTx+Y7PHLypqyrxr1MdIu0pLw6Xvl/Gi4ONu/sdceP8vvUjkyA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", + "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", "dev": true, "requires": { - "ajv": "^6.6.1", - "lodash": "^4.17.11", - "slice-ansi": "2.0.0", + "ajv": "^5.2.3", + "ajv-keywords": "^2.1.0", + "chalk": "^2.1.0", + "lodash": "^4.17.4", + "slice-ansi": "1.0.0", "string-width": "^2.1.1" } }, @@ -11839,9 +11557,9 @@ "integrity": "sha1-H6DZJw6b6FDZsFAn9jUZv0ZFfZY=" }, "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", "requires": { "inherits": "2.0.3" } diff --git a/package.json b/package.json index 9a1e92b80..7c89d2278 100644 --- a/package.json +++ b/package.json @@ -1,17 +1,17 @@ { "name": "BlueWallet", - "version": "3.6.0", + "version": "3.6.2", "devDependencies": { - "babel-eslint": "^10.0.1", + "babel-eslint": "^8.2.6", "babel-jest": "23.6.0", - "eslint": "^5.12.1", - "eslint-plugin-babel": "^5.3.0", + "eslint": "^4.19.1", + "eslint-plugin-babel": "^4.1.2", "eslint-plugin-import": "^2.14.0", - "eslint-plugin-node": "^8.0.1", - "eslint-plugin-promise": "^4.0.1", + "eslint-plugin-node": "^6.0.1", + "eslint-plugin-promise": "^3.8.0", "eslint-plugin-react": "^7.12.3", "jest": "23.6.0", - "metro-react-native-babel-preset": "^0.51.1", + "metro-react-native-babel-preset": "^0.49.1", "prettier-eslint-cli": "^4.7.1", "react-test-renderer": "^16.7.0", "rn-nodeify": "github:tradle/rn-nodeify" @@ -54,20 +54,20 @@ "mocha": "^5.2.0", "node-libs-react-native": "^1.0.1", "path-browserify": "0.0.0", - "prettier": "^1.16.0", + "prettier": "^1.14.2", "process": "^0.11.10", "prop-types": "^15.6.2", "react": "^16.7.0", "react-localization": "^1.0.10", "react-native": "^0.57.8", - "react-native-camera": "^1.9.0", + "react-native-camera": "^1.8.0", "react-native-custom-qr-codes": "^2.0.0", - "react-native-device-info": "^0.25.1", + "react-native-device-info": "^0.25.0", "react-native-elements": "^0.19.0", "react-native-flexi-radio-button": "^0.2.2", "react-native-fs": "^2.13.3", "react-native-gesture-handler": "^1.0.12", - "react-native-google-analytics-bridge": "^7.0.0", + "react-native-google-analytics-bridge": "^6.1.2", "react-native-haptic-feedback": "^1.4.2", "react-native-level-fs": "^3.0.1", "react-native-linear-gradient": "^2.5.3", @@ -80,7 +80,7 @@ "react-native-sentry": "^0.40.2", "react-native-snap-carousel": "^3.7.4", "react-native-sortable-list": "0.0.22", - "react-native-svg": "^9.0.0", + "react-native-svg": "^8.0.10", "react-native-vector-icons": "^6.0.2", "react-native-webview": "2.8.0", "react-native-wkwebview-reborn": "^2.0.0", @@ -90,7 +90,6 @@ "request-promise-native": "^1.0.5", "secure-random": "^1.1.1", "stream-browserify": "^1.0.0", - "util": "^0.11.1", "wif": "^2.0.1" }, "react-native": { diff --git a/screen/lnd/lndViewAdditionalInvoiceInformation.js b/screen/lnd/lndViewAdditionalInvoiceInformation.js index 3b8ec1ecb..02fffe7f1 100644 --- a/screen/lnd/lndViewAdditionalInvoiceInformation.js +++ b/screen/lnd/lndViewAdditionalInvoiceInformation.js @@ -1,15 +1,7 @@ /* global alert */ import React, { Component } from 'react'; -import { View, Share } from 'react-native'; -import { - BlueLoading, - BlueCopyTextToClipboard, - SafeBlueArea, - BlueButton, - BlueNavigationStyle, - BlueText, - BlueSpacing20, -} from '../../BlueComponents'; +import { Animated, StyleSheet, View, TouchableOpacity, Clipboard, Share } from 'react-native'; +import { BlueLoading, SafeBlueArea, BlueButton, BlueNavigationStyle, BlueText, BlueSpacing20 } from '../../BlueComponents'; import PropTypes from 'prop-types'; import { QRCode } from 'react-native-custom-qr-codes'; /** @type {AppStorage} */ @@ -24,6 +16,13 @@ export default class LNDViewAdditionalInvoiceInformation extends Component { state = { walletInfo: undefined }; + copyToClipboard = () => { + this.setState({ addressText: loc.receive.details.copiedToClipboard }, () => { + Clipboard.setString(this.state.walletInfo.uris[0]); + setTimeout(() => this.setState({ addressText: this.state.walletInfo.uris[0] }), 1000); + }); + }; + async componentDidMount() { const fromWallet = this.props.navigation.getParam('fromWallet'); try { @@ -57,7 +56,11 @@ export default class LNDViewAdditionalInvoiceInformation extends Component { /> Open direct channel with this node: - + + + {this.state.addressText} + + { + this.setState({ addressText: loc.receive.details.copiedToClipboard }, () => { + Clipboard.setString(this.state.invoice.payment_request); + setTimeout(() => this.setState({ addressText: this.state.invoice.payment_request }), 1000); + }); + }; + onLayout = () => { const { height } = Dimensions.get('window'); this.setState({ qrCodeHeight: height > width ? width - 20 : width / 2 }); @@ -183,11 +181,12 @@ export default class LNDViewInvoice extends Component { flex: 1, alignItems: 'center', marginTop: 8, + paddingHorizontal: 16, justifyContent: 'space-between', }} onLayout={this.onLayout} > - + {invoice && invoice.amt && Please pay {invoice.amt} sats} {invoice && invoice.description && For: {invoice.description}} - + + + {this.state.addressText} + + { + this.setState({ addressText: loc.receive.details.copiedToClipboard }, () => { + Clipboard.setString(this.state.address); + setTimeout(() => this.setState({ addressText: this.state.address }), 1000); + }); + }; + render() { console.log('render() receive/details, address,secret=', this.state.address, ',', this.state.secret); if (this.state.isLoading) { @@ -95,7 +94,11 @@ export default class ReceiveDetails extends Component { backgroundColor={BlueApp.settings.brandingColor} logo={require('../../img/qr-code.png')} /> - + + + {this.state.addressText} + + { + this.setState({ addressText: loc.receive.details.copiedToClipboard }, () => { + Clipboard.setString(this.state.bip21); + setTimeout(() => this.setState({ addressText: this.state.address }), 1000); + }); + }; + determineSize = () => { if (width > 312) { return width - 48; @@ -114,7 +133,11 @@ export default class ReceiveAmount extends Component { )} - + + + {this.state.bip21} + + ); @@ -158,3 +181,12 @@ export default class ReceiveAmount extends Component { ); } } + +const styles = StyleSheet.create({ + address: { + marginVertical: 32, + fontSize: 15, + color: '#9aa0aa', + textAlign: 'center', + }, +}); diff --git a/screen/settings/about.js b/screen/settings/about.js index 50e9de08a..dc373da87 100644 --- a/screen/settings/about.js +++ b/screen/settings/about.js @@ -109,7 +109,7 @@ export default class About extends Component { }; Rate.rate(options, success => { if (success) { - console.log('User Rated.'); + console.warn('User Rated.'); } }); }} diff --git a/screen/wallets/buyBitcoin.js b/screen/wallets/buyBitcoin.js index ef299d1b2..5fea92290 100644 --- a/screen/wallets/buyBitcoin.js +++ b/screen/wallets/buyBitcoin.js @@ -1,14 +1,6 @@ import React, { Component } from 'react'; -import { Linking, View } from 'react-native'; -import { - BlueNavigationStyle, - BlueCopyTextToClipboard, - BlueLoading, - SafeBlueArea, - BlueButton, - BlueText, - BlueSpacing40, -} from '../../BlueComponents'; +import { Animated, Linking, StyleSheet, View, TouchableOpacity, Clipboard } from 'react-native'; +import { BlueNavigationStyle, BlueLoading, SafeBlueArea, BlueButton, BlueText, BlueSpacing40 } from '../../BlueComponents'; import PropTypes from 'prop-types'; /** @type {AppStorage} */ let BlueApp = require('../../BlueApp'); @@ -66,6 +58,13 @@ export default class BuyBitcoin extends Component { } } + copyToClipboard = () => { + this.setState({ addressText: loc.buyBitcoin.copied }, () => { + Clipboard.setString(this.state.address); + setTimeout(() => this.setState({ addressText: this.state.address }), 1000); + }); + }; + render() { console.log('render() receive/details, address,secret=', this.state.address, ',', this.state.secret); if (this.state.isLoading) { @@ -78,7 +77,11 @@ export default class BuyBitcoin extends Component { {loc.buyBitcoin.tap_your_address} - + + + {this.state.addressText} + + { + this.setState({ xpubText: loc.wallets.xpub.copiedToClipboard }, () => { + Clipboard.setString(this.state.xpub); + setTimeout(() => this.setState({ xpubText: this.state.xpub }), 1000); + }); + }; + onLayout = () => { const { height } = Dimensions.get('window'); this.setState({ qrCodeHeight: height > width ? width - 40 : width / 2 }); @@ -103,7 +110,11 @@ export default class WalletXpub extends Component { } })()} - + + + {this.state.xpubText} + + );