diff --git a/.env b/.env index f55115a8..0f6ffe65 100644 --- a/.env +++ b/.env @@ -1,7 +1,8 @@ -LOCAL_TESTING=http://localhost:8081/ -#LOCAL_TESTING= +#LOCAL_TESTING=http://localhost:8081/ +LOCAL_TESTING= -WEB_HOST=https://embed.get-scatter.com/ +#WEB_HOST=https://embed.get-scatter.com/ +WEB_HOST=http://staging.embed.get-scatter.com/ WEB_HOST_SIMPLE_MODE=https://bridge.get-scatter.com/ PROOF_KEYS=EOS57fs1Mi7RrMChZ9GsxsCYqG22y9PjnmCnakLMALuA8qM3qKcwG,EOS6LrPgvoncmV8azzm16s4cT3tawiZsTpkDZy7Yeivdqtppgronh,EOS88H35pzmYqi2AAeXbnYbXwCzZUkYRji9wmSncKvbYxMDBSU8PU,EOS8ic3RkEmn1KFsAFrHq2662fawiQasmxjN24XLHVV77S2odfBu4,EOS6b63XTiiuZ8YE7Yd5yqpTzsd9CqThV7M2Qn1DMPkPaiYwvo9e2,EOS6jreFpkGLNMMPpwkkJ2x8weNQozqUxEB8BoCanRCHaLnPM7i8X,EOS8gNGX6xPqo9qdWRWf3wi7ixCUetFZgWq43hNXfht2CdHWJ8NCz,EOS69ccoRaQ19ibtiSsyDVWsajfCQjXK3pGP53YUXaqfPeHWEaRwj,EOS6tpa7TJ5JCeDQrnFk6stZYhEHSw92nCkXzoZQ1pHDdukL6Eo2t,EOS7jpensVjpvKDLPmVa7JMuv6X8o6PxrthkqBMLP4zfpAYQkc8dm,EOS6bctfcYDzxo8HvngwxuPrepcTrcftnGLF31ebRiq8Ji2FyfUWi,EOS7BSUXLdoreHYusGpWiBmUJELkHaEDiQ7NR1HApbEgavKSC4nwJ,EOS6QgW56mNXTMKGiVyV68Qi5E4GBDVFF3fhP5sGR93Hmn5pCM4iA,EOS7R9PD5xMUSPCWXTzF4NoQD6ivCUFKHaix9P4DD5BsRzuMzsPff,EOS76KSWE2zQcuUWNLox3xVtQzJDSggusbvW7gTh9Fa9eXUqpC95y,EOS6jCUTQudKK8CiKxTiXPgrM61UAodxEDzmWG7AUy4SZxPApK8qh,EOS5pxccDZrjQJpJbjihKG9Dejjy2ejdcZSeUZ85ZRZ1dT5JBSZiP,EOS5Je9YXCGrrfqdB7k6trvKEaCfNFeJbGi2JhnRJyCnRNEKWD6Sm,EOS7CQMi5gu6BU99eyWoEmegevE2HVXXn6D422mnoTkdegh8JmkBN,EOS7KpdNqJCJg4eGksxqdvnrRpFRqkEph98vTJ5v7kDUuG6gcgjx5,EOS5repNL375YX1coUEv3bqeX5Q4YWspbCEvcrtgvTDFRydjYjs4C,EOS85VAaCWWSa8p68abyPyYzsHeiTCijSfDm5cGUyStEjcstSbSMw diff --git a/electron/app.js b/electron/app.js index 28cf39e9..db0702c8 100644 --- a/electron/app.js +++ b/electron/app.js @@ -107,6 +107,7 @@ const createScatterInstance = async () => { Embedder.init( + require('../package').version, process.env.LOCAL_TESTING ? process.env.LOCAL_TESTING : process.env.WEB_HOST, process.env.PROOF_KEYS.split(','), files, diff --git a/electron/services/files.js b/electron/services/files.js index dbfcc926..9346d777 100644 --- a/electron/services/files.js +++ b/electron/services/files.js @@ -53,6 +53,22 @@ const openFile = (path, encoding = 'utf-8') => { }) }; +const removeFile = path => { + if(path.indexOf(getDefaultPath()) !== 0) return console.error('Cannot remove files from outside the default directory'); + return new Promise(resolve => { + try { + fs.unlink(path, (err) => { + if(err) return resolve(null); + resolve(true); + }); + } + catch(e) { + console.error('Error removing file', e); + resolve(null); + } + }); +} + const exists = path => { return fs.existsSync(path); } @@ -75,5 +91,6 @@ module.exports = { existsOrMkdir, saveFile, openFile, - getFilesForDirectory + getFilesForDirectory, + removeFile } diff --git a/electron/services/sockets.js b/electron/services/sockets.js index c0e089ba..886b24ed 100644 --- a/electron/services/sockets.js +++ b/electron/services/sockets.js @@ -60,7 +60,7 @@ class LowLevelSocketService { if(msg.indexOf('42/scatter') === -1) return false; const [type, request] = JSON.parse(msg.replace('42/scatter,', '')); - const killRequest = () => this.emitSocket(socket, 'api', {id:request.id, result:null}); + const killRequest = () => this.emitSocket(socket, 'api', {id:request.data.id, result:null}); if(!request.plugin || request.plugin.length > 100) return killRequest(); request.plugin = request.plugin.replace(/\s/g, "").trim(); diff --git a/electron/services/wallet.js b/electron/services/wallet.js index 6e75c097..937b7907 100644 --- a/electron/services/wallet.js +++ b/electron/services/wallet.js @@ -134,7 +134,7 @@ const reloading = () => { }; const getPrivateKey = async (keypairId, blockchain) => { - if(!await prompt.accepted( + if(!process.env.TESTING && !await prompt.accepted( `Exporting a private key.`, `Something has requested a private key. Are you currently exporting the private key from Scatter?` )) return null; @@ -143,15 +143,50 @@ const getPrivateKey = async (keypairId, blockchain) => { } const getPrivateKeyForSigning = async (keypairId, blockchain) => { - let keypair = scatter.keychain.keypairs.find(x => x.id === keypairId); + let keypair = getKeypairByID(keypairId); if(!keypair) return; const encryptedKey = JSON.parse(JSON.stringify(keypair.privateKey)); - const decryptedKey = AES.decrypt(encryptedKey, seed); + let decryptedKey = AES.decrypt(encryptedKey, seed); + + // Legacy scatters held private keys for identities in hex format already. + if(typeof decryptedKey === 'string') return decryptedKey; return plugins[blockchain].bufferToHexPrivate(decryptedKey); } +const getKeypair = (publicKey, blockchain) => { + const keypair = scatter.keychain.keypairs + .filter(x => x.blockchains.includes(blockchain)) + .find(x => x.publicKeys.find(k => k.key === publicKey)); + if(keypair) return JSON.parse(JSON.stringify(keypair)); + + const identity = scatter.keychain.identities.find(x => x.publicKey === publicKey); + if(identity) return { + id:identity.id, + name:identity.name, + publicKeys:[{blockchain:'eos', key:publicKey}], + privateKey:identity.privateKey + } + + return null; +} + +const getKeypairByID = id => { + const keypair = scatter.keychain.keypairs.find(x => x.id === id); + if(keypair) return JSON.parse(JSON.stringify(keypair)); + + const identity = scatter.keychain.identities.find(x => x.id === id); + if(identity) return { + id:identity.id, + name:identity.name, + publicKeys:[{blockchain:'eos', key:identity.publicKey}], + privateKey:identity.privateKey + } + + return null; +} + const lock = () => { seed = null; scatter = storage.getScatter(); @@ -196,11 +231,10 @@ const unlock = async (password, isNew = false, _salt = null) => { const sign = async (network, publicKey, payload, arbitrary = false, isHash = false) => { try { - const plugin = plugins[network.blockchain]; if(!plugin) return false; - const keypair = scatter.keychain.keypairs.find(x => x.publicKeys.find(k => k.key === publicKey)) + const keypair = getKeypair(publicKey, network.blockchain); if(!keypair) return Error.signatureError('no_keypair', 'This keypair could not be found'); if(keypair.external) return signWithHardware(keypair, network, publicKey, payload, arbitrary, isHash); @@ -264,7 +298,7 @@ const availableBlockchains = () => ({ BTC:'btc', }); -module.exports = { +const EXPORTS = { setStorage, init, exists, @@ -286,4 +320,12 @@ module.exports = { getSeed, availableBlockchains, + } + +if(process.env.TESTING){ + EXPORTS.getKeypair = getKeypair; + EXPORTS.getKeypairByID = getKeypairByID; +} + +module.exports = EXPORTS; diff --git a/package.json b/package.json index e5995ef4..696ad021 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "scatter", - "version": "12.0.0", + "version": "12.0.1", "private": true, "buttonText": "Scatter Desktop Companion", "author": { @@ -18,14 +18,13 @@ "test": "npm run testfile \"test/**/*.spec.js\" --timeout 1000000" }, "dependencies": { - "embedder":"git+https://git@github.com/GetScatter/Scatter-Embedder.git#master", "@ledgerhq/hw-app-eth": "^4.68.4", "@ledgerhq/hw-transport-node-hid": "^4.55.0", - "@walletpack/bitcoin": "1.0.29", - "@walletpack/core": "1.0.26", - "@walletpack/eosio": "0.0.30", - "@walletpack/ethereum": "0.0.29", - "@walletpack/tron": "0.0.29", + "@walletpack/bitcoin": "file:../../Libraries/walletpack/packages/bitcoin", + "@walletpack/core": "file:../../Libraries/walletpack/packages/core", + "@walletpack/eosio": "file:../../Libraries/walletpack/packages/eosio", + "@walletpack/ethereum": "file:../../Libraries/walletpack/packages/ethereum", + "@walletpack/tron": "file:../../Libraries/walletpack/packages/tron", "aes-oop": "^1.0.4", "asn1-ber": "^1.0.9", "bip32-path": "^0.4.2", @@ -34,6 +33,7 @@ "dotenv": "^8.1.0", "electron-store": "^3.2.0", "elliptic": "^6.5.1", + "embedder": "git+https://git@github.com/GetScatter/Scatter-Embedder.git#master", "eosjs": "^20.0.0", "eosjs-ecc": "^4.0.7", "ethereumjs-tx": "^2.1.0", @@ -131,7 +131,7 @@ ] } ], - "certificateSubjectName":"GetScatter Ltd." + "certificateSubjectName": "GetScatter Ltd." }, "linux": { "category": "Network", diff --git a/preload.js b/preload.js index 9816e263..9a6d567f 100644 --- a/preload.js +++ b/preload.js @@ -2,8 +2,6 @@ const { ipcRenderer, remote } = require('electron'); const wallet = remote.getGlobal('wallet'); const getHost = require('./electron/services/getHost'); -console.log('getHost', getHost()); - const loadStyles = (tries = 0) => { if(tries >= 20) return console.error('Could not load styles!'); if(typeof window.loadStyles === 'function'){ diff --git a/scripts/walletpack.js b/scripts/walletpack.js new file mode 100644 index 00000000..8b562669 --- /dev/null +++ b/scripts/walletpack.js @@ -0,0 +1,25 @@ +const childProcess = require('child_process'); + + +const packages = [ + 'core', + 'eosio', + 'tron', + 'bitcoin', + 'ethereum', +]; + +const args = process.argv.slice(2); +const isLocal = args[0] || false; + +let installString = `yarn add `; + +packages.map(pack => { + installString += `${isLocal ? 'file:../../Libraries/walletpack/packages/' : '@walletpack/'}${pack} ` +}); + +console.log(installString); +const p = childProcess.exec(installString); +p.on('error', function (err) { console.error(err); }); +p.on('exit', function (code) { console.log('exited', code); }); + diff --git a/test/unit/wallet.spec.js b/test/unit/wallet.spec.js index 845fa45a..b141b80c 100644 --- a/test/unit/wallet.spec.js +++ b/test/unit/wallet.spec.js @@ -49,48 +49,60 @@ describe('wallet', () => { const scatter = await wallet.getScatter(); const keypair = scatter.keychain.keypairs[0]; const privateKey = await wallet.getPrivateKey(keypair.id, 'eos'); + console.log('privateKey', privateKey); assert(privateKey && typeof privateKey === 'string' && privateKey.length === 51, 'Private key is invalid'); done(); }) }) - it('should be able to sign using a private key', done => { + it('should be able to get an identity private key', done => { new Promise(async() => { const scatter = await wallet.getScatter(); - const keypair = scatter.keychain.keypairs[0]; - const publicKey = keypair.publicKeys[0].key; - - const hash = ecc.sha256('test'); - - const signature = await wallet.sign( - {blockchain:'eos'}, - publicKey, - {data:hash}, - true, - true - ) - - assert(ecc.verifyHash(signature, hash, publicKey), 'Signature could not be verified'); - done(); - }) - }) - - it('should be able to lock', done => { - new Promise(async() => { - await wallet.lock(); - assert(!wallet.getSeed(), 'Wallet was not locked') + const keypair = await wallet.getKeypair(scatter.keychain.identities[0].publicKey, 'eos'); + const privateKey = await wallet.getPrivateKey(keypair.id, 'eos'); + console.log('privateKey', privateKey); + assert(privateKey && typeof privateKey === 'string' && privateKey.length === 51, 'Private key is invalid'); done(); }) }) - it('should be able to unlock again', done => { - new Promise(async() => { - await wallet.unlock(PASSWORD); - assert(wallet.getSeed(), 'Wallet was not unlocked [seed]') - assert(wallet.getScatter(), 'Wallet was not unlocked [data]') - done(); - }) - }) + // it('should be able to sign using a private key', done => { + // new Promise(async() => { + // const scatter = await wallet.getScatter(); + // const keypair = scatter.keychain.keypairs[0]; + // const publicKey = keypair.publicKeys[0].key; + // + // const hash = ecc.sha256('test'); + // + // const signature = await wallet.sign( + // {blockchain:'eos'}, + // publicKey, + // {data:hash}, + // true, + // true + // ) + // + // assert(ecc.verifyHash(signature, hash, publicKey), 'Signature could not be verified'); + // done(); + // }) + // }) + // + // it('should be able to lock', done => { + // new Promise(async() => { + // await wallet.lock(); + // assert(!wallet.getSeed(), 'Wallet was not locked') + // done(); + // }) + // }) + // + // it('should be able to unlock again', done => { + // new Promise(async() => { + // await wallet.unlock(PASSWORD); + // assert(wallet.getSeed(), 'Wallet was not unlocked [seed]') + // assert(wallet.getScatter(), 'Wallet was not unlocked [data]') + // done(); + // }) + // }) }); diff --git a/yarn.lock b/yarn.lock index 06719bfc..c0a34624 100644 --- a/yarn.lock +++ b/yarn.lock @@ -164,18 +164,16 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.13.tgz#ac786d623860adf39a3f51d629480aacd6a6eec7" integrity sha512-yN/FNNW1UYsRR1wwAoyOwqvDuLDtVXnaJTZ898XIw/Q5cCaeVAlVwvsmXLX5PuiScBYwZsZU4JYSHB3TvfdwvQ== -"@walletpack/bitcoin@1.0.29": - version "1.0.29" - resolved "https://registry.yarnpkg.com/@walletpack/bitcoin/-/bitcoin-1.0.29.tgz#d085a2a3a389f9056d14848c121b5b12b5d7d28c" - integrity sha512-ag3OaHklZZUkp0oguMS2ebU8NMakPW6j5zsgx9NHC3OLxfUC49HdAo++LtB2E+osJODgG1jWy4RW2F6z3n7JlA== +"@walletpack/bitcoin@file:../../Libraries/walletpack/packages/bitcoin": + version "1.0.34" dependencies: - "@walletpack/core" "^1.0.26" + "@walletpack/core" "^1.0.31" bitcoinjs-lib "^5.1.2" -"@walletpack/core@1.0.26", "@walletpack/core@^1.0.26": - version "1.0.26" - resolved "https://registry.yarnpkg.com/@walletpack/core/-/core-1.0.26.tgz#51fdec4854536a9e957dc5e5166a65569b9c244e" - integrity sha512-7bS/yEoFjf5T1PXjIOKoAypC5cd1CyAJNTV+apPtWSult165achF6WaP5XVIxJZsVnVyVRLCdEjjfpbk36kc4Q== +"@walletpack/core@^1.0.31": + version "1.0.31" + resolved "https://registry.yarnpkg.com/@walletpack/core/-/core-1.0.31.tgz#6ddea7201b481cab9c1b34a33a7fbe508a649b15" + integrity sha512-LxZU2CFA72H7Uk2cTow98dR9D5iL9yiMZfg/daA6K0vrRGNST21A1ct3MihLzjdqDlgVAlgcNt5GEpYw0y8ACg== dependencies: aes-oop "^1.0.4" bignumber.js "^9.0.0" @@ -184,34 +182,38 @@ qrcode "^1.4.1" scrypt-async "^2.0.1" -"@walletpack/eosio@0.0.30": - version "0.0.30" - resolved "https://registry.yarnpkg.com/@walletpack/eosio/-/eosio-0.0.30.tgz#0b720c1bf1ead231c9befbc114fc4cec4125003e" - integrity sha512-H6l4lYgXUYpwsz0zliRDW+fTS0ktWa3hNPMOoYJ6vpBfcCHQMXBRV8gRuug6KSBwLWYy/1drG1EulaTFxJ4x+A== +"@walletpack/core@file:../../Libraries/walletpack/packages/core": + version "1.0.31" dependencies: - "@walletpack/core" "^1.0.26" + aes-oop "^1.0.4" + bignumber.js "^9.0.0" + bip39 "^2.6.0" + eosjs-ecc "^4.0.4" + qrcode "^1.4.1" + scrypt-async "^2.0.1" + +"@walletpack/eosio@file:../../Libraries/walletpack/packages/eosio": + version "0.0.38" + dependencies: + "@walletpack/core" "^1.0.31" eosjs "^20.0.0" eosjs-ecc "^4.0.4" -"@walletpack/ethereum@0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@walletpack/ethereum/-/ethereum-0.0.29.tgz#aab5a9ac55b5b29a102231fdc71c6ac3eca1b87b" - integrity sha512-FN0vTksa2M5zd6cppR/x1qK635BSFF0zerLt0Ep8dp+H4LQ9bE5+sz4a4g6ohjd+/iq+HGU33eploKGYPNm+CQ== +"@walletpack/ethereum@file:../../Libraries/walletpack/packages/ethereum": + version "0.0.37" dependencies: - "@walletpack/core" "^1.0.26" + "@walletpack/core" "^1.0.31" ethereumjs-tx "^2.1.0" ethereumjs-util "^6.1.0" web3 "^1.2.0" - web3-provider-engine "^15.0.0" + web3-provider-engine "^15.0.4" -"@walletpack/tron@0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@walletpack/tron/-/tron-0.0.29.tgz#be65cd75e8dfc8ca49db3681ba9b311fd782d3a8" - integrity sha512-011IYk2qA/GfdmHsKePYpnYN2pw9r3KIAEuAxTs9eh8POufDqn/21wRVi0Kng5dsLYiqFR6aedZQJ3FwRnWkEA== +"@walletpack/tron@file:../../Libraries/walletpack/packages/tron": + version "0.0.40" dependencies: - "@walletpack/core" "^1.0.26" + "@walletpack/core" "^1.0.31" ethereumjs-util "^6.1.0" - tronweb "^2.6.4" + tronweb "^2.8.0" abbrev@1: version "1.1.1" @@ -1800,7 +1802,7 @@ elliptic@^6.4.0, elliptic@^6.4.1: "embedder@git+https://git@github.com/GetScatter/Scatter-Embedder.git#master": version "1.0.0" - resolved "git+https://git@github.com/GetScatter/Scatter-Embedder.git#ab3545a6a2a1a6f873094eea6bcedc48646dc575" + resolved "git+https://git@github.com/GetScatter/Scatter-Embedder.git#92860148e9b690538bb2d817f29b92ee79cee481" emoji-regex@^7.0.1: version "7.0.3" @@ -1994,10 +1996,10 @@ eth-json-rpc-errors@^1.0.1, eth-json-rpc-errors@^1.1.0: dependencies: fast-safe-stringify "^2.0.6" -eth-json-rpc-filters@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/eth-json-rpc-filters/-/eth-json-rpc-filters-4.1.0.tgz#e7357a38983cde29858818dc55d394b9cf47c0f0" - integrity sha512-r/Zk0Tvx3BNYOCPCSEXxe2BeZJpKlA+E+76kYo8g95cHGXRP4uXKDnoTkFaRc/mamabmRhfyCoOjhDDx8iA3eA== +eth-json-rpc-filters@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/eth-json-rpc-filters/-/eth-json-rpc-filters-4.1.1.tgz#15277c66790236d85f798f4d7dc6bab99a798cd2" + integrity sha512-GkXb2h6STznD+AmMzblwXgm1JMvjdK9PTIXG7BvIkTlXQ9g0QOxuU1iQRYHoslF9S30BYBSoLSisAYPdLggW+A== dependencies: await-semaphore "^0.1.3" eth-json-rpc-middleware "^4.1.4" @@ -2950,6 +2952,11 @@ ini@^1.3.4, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== +injectpromise@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/injectpromise/-/injectpromise-1.0.0.tgz#c621f7df2bbfc1164d714f1fb229adec2079da39" + integrity sha512-qNq5wy4qX4uWHcVFOEU+RqZkoVG65FhvGkyDWbuBxILMjK6A1LFf5A1mgXZkD4nRx5FCorD81X/XvPKp/zVfPA== + invert-kv@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" @@ -5410,10 +5417,10 @@ trim-newlines@^1.0.0: resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= -tronweb@^2.6.4: - version "2.7.2" - resolved "https://registry.yarnpkg.com/tronweb/-/tronweb-2.7.2.tgz#65ef246822325ab6e5182acecaba756019fa1d47" - integrity sha512-bm6PK/LG5Flnm7EmMe599NZtNPlDJfAvJRNan92HGTRc3rC6GjMnQCqFNXHcekt7kROX9DjuQeOttp9tYpPjAg== +tronweb@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/tronweb/-/tronweb-2.8.0.tgz#e70247486590376a4ee3497d4c5dd66aa5f312d6" + integrity sha512-B5vn2TsH8hV9z7jvxlmMlIcKjd+qq7TS4p5E1w4422FJ1tBVe3cQqQZ0YP09aj/9k6eJQsGdWfBB1WYQQb0d5Q== dependencies: "@babel/runtime" "^7.0.0" axios "^0.19.0" @@ -5422,6 +5429,7 @@ tronweb@^2.6.4: elliptic "^6.4.1" ethers "^4.0.7" eventemitter3 "^3.1.0" + injectpromise "^1.0.0" lodash "^4.17.14" semver "^5.6.0" validator "^10.7.1" @@ -6009,10 +6017,10 @@ web3-net@1.2.1: web3-core-method "1.2.1" web3-utils "1.2.1" -web3-provider-engine@^15.0.0: - version "15.0.3" - resolved "https://registry.yarnpkg.com/web3-provider-engine/-/web3-provider-engine-15.0.3.tgz#462d2439dafa6fdc3550696be8cdb80c44593c96" - integrity sha512-E2/j0iEA1JJVijV84bPpiFKZPA6jFkcCKJtzDCl/CUn8CeqtkGykpjP55pnQtzxszzmpGgSZlThMEFUzBU7X2g== +web3-provider-engine@^15.0.4: + version "15.0.4" + resolved "https://registry.yarnpkg.com/web3-provider-engine/-/web3-provider-engine-15.0.4.tgz#5c336bcad2274dff5218bc8db003fa4e9e464c24" + integrity sha512-Ob9oK0TUZfVC7NXkB7CQSWAiCdCD/Xnlh2zTnV8NdJR8LCrMAy2i6JedU70JHaxw59y7mM4GnsYOTTGkquFnNQ== dependencies: async "^2.5.0" backoff "^2.5.0" @@ -6020,7 +6028,7 @@ web3-provider-engine@^15.0.0: cross-fetch "^2.1.0" eth-block-tracker "^4.4.2" eth-json-rpc-errors "^1.0.1" - eth-json-rpc-filters "^4.1.0" + eth-json-rpc-filters "^4.1.1" eth-json-rpc-infura "^4.0.1" eth-json-rpc-middleware "^4.1.5" eth-sig-util "^1.4.2"