diff --git a/package.json b/package.json index 50e44823b..5a73336ac 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bnc-onboard", - "version": "1.27.0-0.0.2", + "version": "1.27.0-0.1.2", "description": "Onboard users to web3 by allowing them to select a wallet, get that wallet ready to transact and have access to synced wallet state.", "keywords": [ "ethereum", @@ -59,6 +59,9 @@ "@ledgerhq/hw-transport-u2f": "^5.21.0", "@ledgerhq/hw-transport-webusb": "5.53.0", "@portis/web3": "^4.0.0", + "@shapeshiftoss/hdwallet-core": "^1.15.2", + "@shapeshiftoss/hdwallet-keepkey": "^1.15.2", + "@shapeshiftoss/hdwallet-keepkey-webusb": "^1.15.2", "@toruslabs/torus-embed": "^1.10.11", "@walletconnect/web3-provider": "^1.4.1", "authereum": "^0.1.12", diff --git a/rollup.config.js b/rollup.config.js index 441298a21..8ac8a04e0 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -85,6 +85,9 @@ export default { 'web3-provider-engine/subproviders/subscriptions', 'web3-provider-engine/subproviders/filters', 'eth-provider', + '@shapeshiftoss/hdwallet-keepkey', + '@shapeshiftoss/hdwallet-keepkey-webusb', + '@shapeshiftoss/hdwallet-core', '@gnosis.pm/safe-apps-sdk', '@gnosis.pm/safe-apps-provider' ] diff --git a/src/@types/index.d.ts b/src/@types/index.d.ts index f307d6f89..2e69be91e 100644 --- a/src/@types/index.d.ts +++ b/src/@types/index.d.ts @@ -17,5 +17,8 @@ declare module '@ledgerhq/hw-transport-u2f' declare module '@ledgerhq/hw-transport-webusb' declare module 'eth-provider' +declare module '@shapeshiftoss/hdwallet-core' +declare module '@shapeshiftoss/hdwallet-keepkey-webusb' + declare module '*.png' declare module '*.svg' diff --git a/src/modules/check/connect.ts b/src/modules/check/connect.ts index 8d391da72..4a4cfb508 100644 --- a/src/modules/check/connect.ts +++ b/src/modules/check/connect.ts @@ -22,7 +22,7 @@ function connect(options: WalletCheckCustomOptions = {}): WalletCheckModule { setTimeout(() => { if (address === null) { // if prom isn't resolving after 500ms, then stop waiting - resolve() + resolve(undefined) } }, 500) }) diff --git a/src/modules/check/derivation-path.ts b/src/modules/check/derivation-path.ts index 4ee889a7c..9f73dd995 100644 --- a/src/modules/check/derivation-path.ts +++ b/src/modules/check/derivation-path.ts @@ -11,7 +11,8 @@ const derivationPaths: DerivationPaths = { { path: `m/44'/60'`, label: 'Ethereum Ledger Live' } ], Trezor: [{ path: `m/44'/60'/0'/0`, label: 'Ethereum' }], - Lattice: [{ path: `m/44'/60'/0'/0`, label: 'Ethereum' }] + Lattice: [{ path: `m/44'/60'/0'/0`, label: 'Ethereum' }], + KeepKey: [{ path: `m/44'/60'/0'/0/0`, label: 'Ethereum' }] } const styles = ` diff --git a/src/modules/select/index.ts b/src/modules/select/index.ts index 8a6c4116b..a7c6e0b26 100644 --- a/src/modules/select/index.ts +++ b/src/modules/select/index.ts @@ -140,6 +140,8 @@ function getModule(name: string): Promise<{ return import('./wallets/alphawallet') case 'ownbit': return import('./wallets/ownbit') + case 'keepkey': + return import('./wallets/keepkey/') case 'bitpie': return import('./wallets/bitpie') case 'gnosis': diff --git a/src/modules/select/wallet-icons/icon-keepkey.png b/src/modules/select/wallet-icons/icon-keepkey.png new file mode 100644 index 000000000..e31b42e24 Binary files /dev/null and b/src/modules/select/wallet-icons/icon-keepkey.png differ diff --git a/src/modules/select/wallets/keepkey/entryModal.ts b/src/modules/select/wallets/keepkey/entryModal.ts new file mode 100644 index 000000000..4b1619b7f --- /dev/null +++ b/src/modules/select/wallets/keepkey/entryModal.ts @@ -0,0 +1,307 @@ +import type { KeepKeyHDWallet } from '@shapeshiftoss/hdwallet-keepkey' +import { detach, insert, noop, SvelteComponentDev } from 'svelte/internal' + +import Modal from '../../../../components/Modal.svelte' +import Button from '../../../../elements/Button.svelte' + +const HANDLE_PIN_PRESS = 'handlePinPress' +const BUTTON_COLOR = `#EBEBED` +const BUTTON_DOT_COLOR = `#33394B` + +export enum ModalType { + Pin, + Passphrase +} + +interface Slot { + (): { + c: () => void + m: (target: any, anchor: any) => void + d: (detaching: any) => void + l: () => void + } +} + +interface Slots { + default: Slot[] +} + +const pinButton = ( + value: number, + slot?: string, + width = '64px', + height = '64px' +) => ` + +` + +const pinButtons = ` +
+ ${[7, 8, 9, 4, 5, 6, 1, 2, 3].map(val => pinButton(val)).join('')} +
+` + +const delButtonIcon = `` + +const pinPhraseInput = (modalType: ModalType) => ` +
+ + ${ + modalType === ModalType.Pin + ? `
+ ${pinButton(-1, delButtonIcon, '38px', '38px')} +
` + : '' + } +
+` + +// Contains styles used by both the pin entry modal and the passphrase entry modal +const baseStyles = ` + .keepkey-modal { + max-width: 22rem; + padding: 20px 10px; + } + .pin-phrase-input-container { + display: flex; + position: relative; + align-items: center; + margin: 20px 0; + width: 100%; + } + #pin-phrase-input { + background: inherit; + font-size: 0.889em; + font-family: inherit; + border-width: 1px; + border-style: solid; + border-color: #242835; + border-radius: 4px; + padding-left: 0.5rem; + padding-right: 4.1rem; + transition: opacity 150ms ease-in-out; + height: 42px; + width: 100%; + opacity: 0.6; + outline: none; + } + #pin-phrase-input:hover, #pin-phrase-input:focus { + opacity: 1; + } + .unlock-button { + height: 26px; + display: flex; + align-items: center; + width: 100%; + justify-content: center; + } + + /* Overrides the branding on the modal*/ + .keepkey-modal + .bn-branding { visibility: hidden !important; } + .keepkey-modal .bn-onboard-prepare-button { + width: 100%; + } +` + +const pinModalStyles = ` + #entry { + align-items: center; + display: flex; + flex-flow: column; + padding: 20px; + } + .pin-pad-buttons { + display: grid; + grid-template-columns: repeat(3, 75px); + grid-template-rows: repeat(3, 75px); + align-items: center; + justify-items: center; + margin-bottom: 15px; + } + .pin-button { + align-items: center; + border-radius: 6px; + border: 1px solid ${BUTTON_COLOR}; + cursor: pointer; + display: flex; + justify-content: center; + font-size: 18px; + overflow: hidden; + padding: 0; + background-color: unset; + overflow: hidden; + } + .pin-button-bg { + width: 100%; + height: 100%; + display: flex; + overflow: hidden; + background-color: ${BUTTON_COLOR}; + transition: opacity 100ms ease-in; + } + .pin-button-bg:hover { + opacity: .2; + } + .pin-button-dot { + fill: ${BUTTON_DOT_COLOR}; + position: absolute; + pointer-events: none; + z-index: 2; + } + .del-button-wrapper { + position: absolute; + height: 42px; + width: 42px; + right: 2px; + display: flex; + align-items: center; + justify-content: center; + } + .del-button-wrapper > .pin-button { + border: none; + } + .del-button-icon { + position: absolute; + width: 20px; + z-index: 2; + pointer-events: none; + } + .del-button-icon + div { + opacity: .5; + } + .del-button-icon + div:hover { + opacity: 1; + } +` + +const passphraseModalStyles = ` + .keepkey-modal { + padding: 40px 30px; + } +` + +const pinHTML = ` + +

Enter Your Pin

+

+ Use PIN layout shown on your device to find the location to press on this pin pad. +

+
+ ${pinButtons} + ${pinPhraseInput(ModalType.Pin)} +
+ ` + +const passphraseHTML = ` + +

Enter Your Passphrase

+
+ ${pinPhraseInput(ModalType.Passphrase)} +
+` + +export const renderModal = (wallet: KeepKeyHDWallet, modalType: ModalType) => { + const modalHtml = modalType === ModalType.Pin ? pinHTML : passphraseHTML + + const getInput = () => + document.getElementById('pin-phrase-input') as HTMLInputElement + + const deleteWindowProperties = () => { + delete (window as any)[HANDLE_PIN_PRESS] + } + + if (modalType === ModalType.Pin) { + ;(window as any)[HANDLE_PIN_PRESS] = (value: number) => { + const input = getInput() + // A value of -1 signals a backspace e.g. we delete the last char from the input + input.value = + value === -1 ? input.value.slice(0, -1) : input.value + value + } + } + + // Creates a modal component which gets mounted to the body and is passed the pin html into it's slot + const div = document.createElement('div') + div.innerHTML = modalHtml + div.className = 'keepkey-modal' + const pinModal = new Modal({ + target: document.body, + props: { + closeModal: () => { + // Cancels any action that the keepkey wallet may be doing + wallet.cancel() + deleteWindowProperties() + pinModal.$destroy() + }, + $$slots: createSlot(div), + $$scope: {} + } + } as SvelteComponentDev['new']) + + // Creates a new Button component used to trigger sending the pin to Keepkey + const entryEl = document.getElementById('entry') + if (entryEl) { + const span = document.createElement('span') + span.innerHTML = `Unlock` + span.className = `unlock-button` + new Button({ + target: entryEl, + props: { + onclick: async () => { + const value = getInput().value + + modalType === ModalType.Pin + ? await wallet.sendPin(value) + : await wallet.sendPassphrase(value) + + pinModal.$destroy() + deleteWindowProperties() + }, + $$slots: createSlot(span), + $$scope: {} + } + } as SvelteComponentDev['new']) + } +} + +/** + * createSlot - creates the necessary object needed to pass + * arbitrary html into a component's default slot + * @param element The html element which is inserted into the components slot + */ +function createSlot(element: HTMLElement): Slots { + return { + default: [ + function () { + return { + c: noop, + m: function mount(target: any, anchor: any) { + insert(target, element, anchor) + }, + d: function destroy(detaching: any) { + if (detaching) { + detach(element) + } + }, + l: noop + } + } + ] + } +} diff --git a/src/modules/select/wallets/keepkey/index.ts b/src/modules/select/wallets/keepkey/index.ts new file mode 100644 index 000000000..ef38d0514 --- /dev/null +++ b/src/modules/select/wallets/keepkey/index.ts @@ -0,0 +1,417 @@ +/* eslint-disable @typescript-eslint/camelcase */ +import { + CommonWalletOptions, + Helpers, + WalletModule +} from '../../../../interfaces' +import { ModalType, renderModal } from './entryModal' + +import keepKeyIcon from '../../wallet-icons/icon-keepkey.png' + +/* -= CONSTANTS =- */ + +const ACCOUNTS_TO_GET = 5 +const WALLET_NAME = 'KeepKey' +const ERROR_BUSY: ErrorCode = 'busy' +const ERROR_PAIRING: ErrorCode = 'pairing' + +const errorMessages = { + [ERROR_BUSY]: `Your KeepKey is currently connected to another application. + Please close any other browser tabs or applications that may be connected to your device and try again.`, + [ERROR_PAIRING]: + 'There was an error pairing the device. Please disconnect and reconnect the device and try again.' +} + +/* -= TYPES =- */ + +type ErrorCode = 'busy' | 'pairing' + +type Balance = { + address: string + balance: string +} + +interface KeepProviderOptions { + BigNumber: Helpers['BigNumber'] + rpcUrl: string + resetWalletState: Helpers['resetWalletState'] + networkId: number +} + +function keepkey( + options: CommonWalletOptions & { rpcUrl: string; networkId: number } +): WalletModule { + const { label, iconSrc, rpcUrl, networkId } = options + + // Used to signal if the keep key could not be paired or if the keep key is already paired with another app + let installMessage: string + return { + name: label || WALLET_NAME, + iconSrc: iconSrc || keepKeyIcon, + wallet: async ({ BigNumber, resetWalletState }: Helpers) => { + const { provider, error } = await createKeepKeyProvider({ + resetWalletState, + BigNumber, + rpcUrl, + networkId + }) + + installMessage = errorMessages[error as ErrorCode] || '' + return { + provider, + interface: !error + ? { + name: WALLET_NAME, + connect: provider.enable, + disconnect: provider.disconnect, + address: { + get: async () => provider.getPrimaryAddress() + }, + network: { + get: async () => networkId + }, + balance: { + get: async () => { + const address = provider.getPrimaryAddress() + return address && provider.getBalance(address) + } + } + } + : null + } + }, + // The style tag here is used to hide the 'Open KeepKey button' + installMessage: () => + installMessage + ? ` +

+ ${installMessage} +

` + : '', + type: 'hardware', + mobile: false, + desktop: true + } +} + +async function createKeepKeyProvider({ + BigNumber, + rpcUrl, + resetWalletState, + networkId +}: KeepProviderOptions): Promise<{ provider: any; error?: ErrorCode }> { + const { WebUSBKeepKeyAdapter } = await import( + '@shapeshiftoss/hdwallet-keepkey-webusb' + ) + + const { Keyring, Events, bip32ToAddressNList, HDWalletErrorType } = + await import('@shapeshiftoss/hdwallet-core') + + const { default: createProvider } = await import('../providerEngine') + const { isValidPath } = await import('../hd-wallet') + + // Initialize the adapter and pair the device + const keyring = new Keyring() + const keepKeyAdapter = WebUSBKeepKeyAdapter.useKeyring(keyring) + let keepKeyWallet: import('@shapeshiftoss/hdwallet-keepkey').KeepKeyHDWallet + + try { + keepKeyWallet = + (await keepKeyAdapter.pairDevice()) as import('@shapeshiftoss/hdwallet-keepkey').KeepKeyHDWallet + } catch (error) { + // This error indicates that the keepkey is paired with another app + if (error.name === HDWalletErrorType.ConflictingApp) { + return { provider: undefined, error: ERROR_BUSY } + // This error indicates that for some reason we can't claim the usb device + } else if (error.name === HDWalletErrorType.WebUSBCouldNotPair) { + return { provider: undefined, error: ERROR_PAIRING } + } + } + + const DEFAULT_DERIVATION_PATH = "m/44'/60'/0'/0/0" + + // The currently selected derivation path + let dPath = '' + let addressToPath = new Map() + let enabled = false + let customPath = false + + const provider = createProvider({ + getAccounts: (callback: any) => { + getAccounts() + .then((res: Array) => callback(null, res)) + .catch((err: any) => callback(err, null)) + }, + signTransaction: (transactionData: any, callback: any) => { + signTransaction(transactionData) + .then((res: string) => callback(null, res)) + .catch(err => callback(err, null)) + }, + processMessage: (messageData: any, callback: any) => { + signMessage(messageData) + .then((res: string) => callback(null, res)) + .catch(err => callback(err, null)) + }, + processPersonalMessage: (messageData: any, callback: any) => { + signMessage(messageData) + .then((res: string) => callback(null, res)) + .catch(err => callback(err, null)) + }, + signMessage: (messageData: any, callback: any) => { + signMessage(messageData) + .then((res: string) => callback(null, res)) + .catch(err => callback(err, null)) + }, + signPersonalMessage: (messageData: any, callback: any) => { + signMessage(messageData) + .then((res: string) => callback(null, res)) + .catch(err => callback(err, null)) + }, + rpcUrl + }) + + keyring.on(['*', '*', Events.DISCONNECT], async () => { + resetWalletState({ disconnected: true, walletName: WALLET_NAME }) + }) + + // If the wallet asks for a PIN, open the PIN modal + keyring.on(['*', '*', Events.PIN_REQUEST], () => { + renderModal(keepKeyWallet, ModalType.Pin) + }) + + // If the wallet asks for a PIN, open the PIN modal + keyring.on(['*', '*', Events.PASSPHRASE_REQUEST], () => { + renderModal(keepKeyWallet, ModalType.Passphrase) + }) + + provider.setPath = setPath + provider.dPath = dPath + provider.enable = enable + provider.setPrimaryAccount = setPrimaryAccount + provider.getPrimaryAddress = getPrimaryAddress + provider.getAccounts = getAccounts + provider.getMoreAccounts = getMoreAccounts + provider.getBalance = getBalance + provider.getBalances = getBalances + provider.send = provider.sendAsync + provider.disconnect = disconnect + provider.isCustomPath = isCustomPath + + async function enable(): Promise> { + // Cancel any user prompt that may be displayed on the keepkey i.e. the pin matrix + keepKeyWallet.cancel().catch(err => err) + + enabled = true + return getAccounts().catch((error: any) => { + // If the error.message is an object, then the error message originated from keepkey + // So we grab the string and rethrow so the walletcheck can capture and display + if (error?.message?.message) { + throw new Error(error?.message?.message) + } + return [] + }) + } + + function disconnect() { + dPath = '' + addressToPath = new Map() + enabled = false + keepKeyWallet.clearSession() + provider.stop() + } + + async function setPath(path: string, custom?: boolean): Promise { + if (!isValidPath(path)) { + return false + } + + if (path !== dPath) { + // clear any existing addresses if different path + addressToPath = new Map() + } + + if (custom) { + try { + // Convert the path to the addressNList which is what is used by keepkey for signing + const addressNList = bip32ToAddressNList(path) + const address = await getAddress(addressNList, path) + addressToPath.set(address, addressNList) + dPath = path + customPath = true + + return true + } catch (error) { + throw new Error( + `There was a problem deriving an address from path ${path}` + ) + } + } + + customPath = false + dPath = path + + return true + } + + function isCustomPath(): boolean { + return customPath + } + + async function getAddress( + addressNList: number[], + path: string + ): Promise { + try { + return keepKeyWallet.ethGetAddress({ + addressNList + }) + } catch (error) { + throw new Error(`Unable to derive address from path ${path}`) + } + } + + function addresses(): string[] { + return Array.from(addressToPath.keys()) + } + + function setPrimaryAccount(address: string) { + // make a copy and put in an array + const accounts = [...addressToPath.entries()] + const accountIndex = accounts.findIndex( + ([accountAddress]) => accountAddress === address + ) + // pull the item at the account index out of the array and place at the front + accounts.unshift(accounts.splice(accountIndex, 1)[0]) + // reassign addressToPath to new ordered accounts + addressToPath = new Map(accounts) + } + + function getPrimaryAddress(): string | undefined { + return enabled ? addresses()[0] : undefined + } + + async function getMoreAccounts() { + const accounts = await getAccounts(true) + return accounts && getBalances(accounts) + } + + async function getAccounts(getMore?: boolean): Promise> { + if (!enabled) return [] + if (addressToPath.size > 0 && !getMore) return addresses() + + dPath = dPath || DEFAULT_DERIVATION_PATH + + // Get the account index from the derivation path + const { accountIdx } = keepKeyWallet.describePath({ + path: bip32ToAddressNList(dPath), + coin: 'Ethereum' + }) + + // This would only happen if the user provides an invalid dPath and it wasn't caught by the setPath method + if (accountIdx === undefined) + throw new Error(`Could not derive account from path: ${dPath}`) + + // Calculate the index to start from based on the dPath index and the current number of generated addresses + const startingIndex = accountIdx + addressToPath.size + for (let i = startingIndex; i < ACCOUNTS_TO_GET + startingIndex; i++) { + // Retrieve the array form of the derivation path for a given account index + const { addressNList } = keepKeyWallet.ethGetAccountPaths({ + coin: 'Ethereum', + accountIdx: i + })[0] + + // Retrieve the address associated with the given account index + const address = await keepKeyWallet.ethGetAddress({ + addressNList, + showDisplay: false + }) + + // Store the address in our set of generated addresses + addressToPath.set(address, addressNList) + } + return addresses() + } + + function getBalances( + addresses: Array + ): Promise { + return Promise.all( + addresses.map( + address => + new Promise(async resolve => { + const balance = await getBalance(address) + resolve({ address, balance }) + }) + ) + ) + } + + function getBalance(address: string): Promise { + return new Promise((resolve, reject) => { + provider.sendAsync( + { + jsonrpc: '2.0', + method: 'eth_getBalance', + params: [address, 'latest'], + id: 42 + }, + (e: any, res: any) => { + e && reject(e) + const result = res && res.result + + if (result != null) { + resolve(new BigNumber(result).toString(10)) + } else { + resolve(null) + } + } + ) + }) + } + + async function signTransaction(transactionData: any) { + if (addressToPath.size === 0) { + await enable() + } + + const addressNList = [...addressToPath.values()][0] + + const { nonce, gasPrice, gas, to, value, data } = transactionData + + const { serialized } = await keepKeyWallet.ethSignTx({ + addressNList, + nonce, + gasPrice, + gasLimit: gas, + to, + value: value || '', + data: data || '', + chainId: networkId + }) + + return serialized + } + + async function signMessage({ + data: message + }: { + data: string + }): Promise { + if (addressToPath.size === 0) { + await enable() + } + + const addressNList = [...addressToPath.values()][0] + + const { signature } = await keepKeyWallet.ethSignMessage({ + addressNList, + message + }) + + return signature + } + + return { provider } +} + +export default keepkey diff --git a/yarn.lock b/yarn.lock index fb6f61b0a..96e88c39b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1335,6 +1335,14 @@ dependencies: "@json-rpc-tools/types" "^1.6.1" +"@keepkey/device-protocol@^7.2.1": + version "7.2.1" + resolved "https://registry.yarnpkg.com/@keepkey/device-protocol/-/device-protocol-7.2.1.tgz#3e040644ec61ad725387da55d1dab0aada11191e" + integrity sha512-ZWGCxKjMFawYxZLrnv5lzNsk20Lq4HREgeQoYs/uRy2hXYGqAUOM25KUhKz8VontgGdc6m+zy6MN0pV5KCm8Vg== + dependencies: + google-protobuf "^3.7.0-rc.2" + pbjs "^0.0.5" + "@ledgerhq/cryptoassets@^5.53.0": version "5.53.0" resolved "https://registry.yarnpkg.com/@ledgerhq/cryptoassets/-/cryptoassets-5.53.0.tgz#11dcc93211960c6fd6620392e4dd91896aaabe58" @@ -1499,6 +1507,40 @@ estree-walker "^1.0.1" picomatch "^2.2.2" +"@shapeshiftoss/hdwallet-core@^1.15.2": + version "1.15.2" + resolved "https://registry.yarnpkg.com/@shapeshiftoss/hdwallet-core/-/hdwallet-core-1.15.2.tgz#8efec681dbcd4fc39cefd68ecaaed57514c247e3" + integrity sha512-PTOfuOp7w2YmY62/JOgxKCWaaKqylirBMV4ALdqGCPAbjMia/mqYxwQuFBK0qSEBmpzo2hidn6DGLydvuyXxsA== + dependencies: + eventemitter2 "^5.0.1" + lodash "^4.17.21" + rxjs "^6.4.0" + +"@shapeshiftoss/hdwallet-keepkey-webusb@^1.15.2": + version "1.15.2" + resolved "https://registry.yarnpkg.com/@shapeshiftoss/hdwallet-keepkey-webusb/-/hdwallet-keepkey-webusb-1.15.2.tgz#24db0473fc6854d5700c680d5258786ac32fca63" + integrity sha512-wmdV59jO64PfFy5iy2XSEqKN+gHAnmdIlhUPQ7f6P6IuwjKN0/+UVFgV1uBy3M8NU3QZ/Ls4WQOrGFAoMzJF3g== + dependencies: + "@shapeshiftoss/hdwallet-core" "^1.15.2" + "@shapeshiftoss/hdwallet-keepkey" "^1.15.2" + +"@shapeshiftoss/hdwallet-keepkey@^1.15.2": + version "1.15.2" + resolved "https://registry.yarnpkg.com/@shapeshiftoss/hdwallet-keepkey/-/hdwallet-keepkey-1.15.2.tgz#6102c116731731d554245a20ad5fe667cc41413c" + integrity sha512-3xFWthHRZRQCegDvwPHCuxeMHUstzZkY9H2OeZMk3Zo5QkEttA69nLn2/T6jI4p+GYBg9HASnyYcxGWcJW0UXA== + dependencies: + "@keepkey/device-protocol" "^7.2.1" + "@shapeshiftoss/hdwallet-core" "^1.15.2" + bignumber.js "^9.0.1" + bnb-javascript-sdk-nobroadcast "^2.16.14" + crypto-js "^4.0.0" + eip55 "^2.1.0" + ethereumjs-tx "^1.3.7" + google-protobuf "^3.15.8" + lodash "^4.17.21" + semver "^6.3.0" + tiny-secp256k1 "^1.1.6" + "@toruslabs/eccrypto@^1.1.6": version "1.1.6" resolved "https://registry.yarnpkg.com/@toruslabs/eccrypto/-/eccrypto-1.1.6.tgz#ce877cf00d6f9cf7ab3daa6ac4d6d540110b813b" @@ -1602,6 +1644,16 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-15.12.2.tgz#1f2b42c4be7156ff4a6f914b2fb03d05fa84e38d" integrity sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww== +"@types/node@10.12.18": + version "10.12.18" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.18.tgz#1d3ca764718915584fcd9f6344621b7672665c67" + integrity sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ== + +"@types/node@11.11.6": + version "11.11.6" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.6.tgz#df929d1bb2eee5afdda598a41930fe50b43eaa6a" + integrity sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ== + "@types/node@^12.12.6": version "12.20.15" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.15.tgz#10ee6a6a3f971966fddfa3f6e89ef7a73ec622df" @@ -1962,6 +2014,16 @@ arrify@^1.0.1: resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" + asn1@~0.2.3: version "0.2.4" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" @@ -2077,6 +2139,13 @@ axios@^0.18.0, axios@^0.21.1: dependencies: follow-redirects "^1.10.0" +axios@^0.19.0: + version "0.19.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" + integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== + dependencies: + follow-redirects "1.5.10" + babel-plugin-dynamic-import-node@^2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" @@ -2167,11 +2236,21 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" -bech32@1.1.4: +bech32@1.1.4, bech32@^1.1.3: version "1.1.4" resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== +bech32@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-2.0.0.tgz#078d3686535075c8c79709f054b1b226a133b355" + integrity sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg== + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + bignumber.js@^9.0.0, bignumber.js@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.1.tgz#8d7ba124c882bfd8e43260c67475518d0689e4e5" @@ -2192,13 +2271,36 @@ bind-decorator@^1.0.11: resolved "https://registry.yarnpkg.com/bind-decorator/-/bind-decorator-1.0.11.tgz#e41bc06a1f65dd9cec476c91c5daf3978488252f" integrity sha1-5BvAah9l3ZzsR2yRxdrzl4SIJS8= -bindings@^1.2.1, bindings@^1.5.0: +bindings@^1.2.1, bindings@^1.3.0, bindings@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== dependencies: file-uri-to-path "1.0.0" +bip32@^2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/bip32/-/bip32-2.0.6.tgz#6a81d9f98c4cd57d05150c60d8f9e75121635134" + integrity sha512-HpV5OMLLGTjSVblmrtYRfFFKuQB+GArM0+XP8HGWfJ5vxYBqo+DesvJwOdC2WJ3bCkZShGf0QIfoIpeomVzVdA== + dependencies: + "@types/node" "10.12.18" + bs58check "^2.1.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + tiny-secp256k1 "^1.1.3" + typeforce "^1.11.5" + wif "^2.0.6" + +bip39@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/bip39/-/bip39-3.0.4.tgz#5b11fed966840b5e1b8539f0f54ab6392969b2a0" + integrity sha512-YZKQlb752TrUWqHWj7XAwCSjYEgGAk+/Aas3V7NyjQeZYsztO8JnQUaCWhcnL4T+jL8nvB8typ2jRPzTlgugNw== + dependencies: + "@types/node" "11.11.6" + create-hash "^1.1.0" + pbkdf2 "^3.0.9" + randombytes "^2.0.1" + bip66@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/bip66/-/bip66-1.1.5.tgz#01fa8748785ca70955d5011217d1b3139969ca22" @@ -2231,16 +2333,45 @@ bn.js@5.1.2: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.2.tgz#c9686902d3c9a27729f43ab10f9d79c2004da7b0" integrity sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA== -bn.js@^4.11.0, bn.js@^4.11.1, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.11.9, bn.js@^4.4.0: +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.0, bn.js@^4.11.1, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.11.9, bn.js@^4.4.0: version "4.12.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== -bn.js@^5.1.1, bn.js@^5.1.2, bn.js@^5.2.0: +bn.js@^5.0.0, bn.js@^5.1.1, bn.js@^5.1.2, bn.js@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== +bnb-javascript-sdk-nobroadcast@^2.16.14: + version "2.16.14" + resolved "https://registry.yarnpkg.com/bnb-javascript-sdk-nobroadcast/-/bnb-javascript-sdk-nobroadcast-2.16.14.tgz#779ea8a50031d9a3fa3d701836228f6267319ccf" + integrity sha512-Mp3Oz1z/c7ZatrQ9LCICUYqqobVjIFLOIOH3a2u3vONaSp8ZDzpduTI5m7K2mhV/P4BoKFYhCedW3B0q7cRCHw== + dependencies: + axios "^0.19.0" + bech32 "^1.1.3" + big.js "^5.2.2" + bip32 "^2.0.5" + bip39 "^3.0.2" + bn.js "^4.11.8" + camelcase "^5.3.1" + crypto-browserify "^3.12.0" + crypto-js "^3.1.9-1" + elliptic "^6.0.0" + eslint-utils "^1.4.2" + events "^3.0.0" + is_js "^0.9.0" + lodash "^4.17.19" + minimist "^1.2.5" + ndjson "^1.5.0" + protocol-buffers-encodings "^1.1.0" + pumpify "^2.0.1" + secure-random "^1.1.2" + tiny-secp256k1 "^1.1.3" + url "^0.11.0" + uuid "^3.3.2" + websocket-stream "^5.5.0" + bnc-sdk@^3.3.4: version "3.4.0" resolved "https://registry.yarnpkg.com/bnc-sdk/-/bnc-sdk-3.4.0.tgz#402874a4a794ccf5dd8ba8fba6925e24b38f772e" @@ -2299,12 +2430,12 @@ braces@~3.0.2: dependencies: fill-range "^7.0.1" -brorand@^1.1.0: +brorand@^1.0.1, brorand@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= -browserify-aes@^1.0.6, browserify-aes@^1.2.0: +browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.0.6, browserify-aes@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== @@ -2316,6 +2447,48 @@ browserify-aes@^1.0.6, browserify-aes@^1.2.0: inherits "^2.0.1" safe-buffer "^5.0.1" +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" + integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== + dependencies: + bn.js "^5.0.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + browserslist@^4.16.6: version "4.16.6" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" @@ -2327,14 +2500,14 @@ browserslist@^4.16.6: escalade "^3.1.1" node-releases "^1.1.71" -bs58@^4.0.0, bs58@^4.0.1: +bs58@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" integrity sha1-vhYedsNU9veIrkBx9j806MTwpCo= dependencies: base-x "^3.0.2" -bs58check@^2.1.2: +bs58check@<3.0.0, bs58check@^2.1.1, bs58check@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== @@ -2401,6 +2574,13 @@ builtin-modules@^3.1.0: resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== +bytebuffer@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/bytebuffer/-/bytebuffer-5.0.1.tgz#582eea4b1a873b6d020a48d58df85f0bba6cfddd" + integrity sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0= + dependencies: + long "~3" + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -2443,7 +2623,7 @@ camelcase@^4.1.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= -camelcase@^5.0.0: +camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== @@ -2595,6 +2775,13 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" +commander@2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" + integrity sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q= + dependencies: + graceful-readlink ">= 1.0.0" + commander@^2.15.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -2658,6 +2845,14 @@ crc-32@^1.2.0: exit-on-epipe "~1.0.1" printj "~1.1.0" +create-ecdh@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== + dependencies: + bn.js "^4.1.0" + elliptic "^6.5.3" + create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" @@ -2669,7 +2864,7 @@ create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: ripemd160 "^2.0.1" sha.js "^2.4.0" -create-hmac@^1.1.4, create-hmac@^1.1.7: +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== @@ -2700,11 +2895,38 @@ cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" +crypto-browserify@^3.12.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + crypto-es@^1.2.2: version "1.2.7" resolved "https://registry.yarnpkg.com/crypto-es/-/crypto-es-1.2.7.tgz#754a6d52319a94fb4eb1f119297f17196b360f88" integrity sha512-UUqiVJ2gUuZFmbFsKmud3uuLcNP2+Opt+5ysmljycFCyhA0+T16XJmo1ev/t5kMChMqWh7IEvURNCqsg+SjZGQ== +crypto-js@^3.1.9-1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-3.3.0.tgz#846dd1cce2f68aacfa156c8578f926a609b7976b" + integrity sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q== + +crypto-js@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.0.0.tgz#2904ab2677a9d042856a2ea2ef80de92e4a36dcc" + integrity sha512-bzHZN8Pn+gS7DQA6n+iUmBfl0hO5DJq++QP3U6uTucDtk/0iGpXd/Gg7CGR0p8tJhofJyaKoWBuJI4eAO00BBg== + csstype@^3.0.2: version "3.0.8" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.8.tgz#d2266a792729fb227cd216fb572f43728e1ad340" @@ -2732,6 +2954,13 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" +debug@=3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + debug@^2.2.0, debug@^2.3.3: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -2834,11 +3063,28 @@ delimit-stream@0.1.0: resolved "https://registry.yarnpkg.com/delimit-stream/-/delimit-stream-0.1.0.tgz#9b8319477c0e5f8aeb3ce357ae305fc25ea1cd2b" integrity sha1-m4MZR3wOX4rrPONXrjBfwl6hzSs= +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + detect-browser@5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/detect-browser/-/detect-browser-5.2.0.tgz#c9cd5afa96a6a19fda0bbe9e9be48a6b6e1e9c97" integrity sha512-tr7XntDAu50BVENgQfajMLzacmSe34D+qZc4zjnniz0ZVuw/TZcLcyxHQjYpJTM36sGEkZZlYLnIM1hH7alTMA== +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + dijkstrajs@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/dijkstrajs/-/dijkstrajs-1.0.2.tgz#2e48c0d3b825462afe75ab4ad5e829c8ece36257" @@ -2865,6 +3111,26 @@ drbg.js@^1.0.1: create-hash "^1.1.2" create-hmac "^1.1.4" +duplexify@^3.5.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +duplexify@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.1.tgz#7027dc374f157b122a8ae08c2d3ea4d2d953aa61" + integrity sha512-DY3xVEmVHTv1wSzKNbwoU6nVjzI369Y6sPoqfYr0/xlx3IdX2n94xIszTcjPO8W8ZIv0Wb0PXNcjuZyT4wiICA== + dependencies: + end-of-stream "^1.4.1" + inherits "^2.0.3" + readable-stream "^3.1.1" + stream-shift "^1.0.0" + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -2873,12 +3139,19 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" +eip55@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eip55/-/eip55-2.1.0.tgz#a1e870cc6e15fb9ec8d338b68317f3db546728f1" + integrity sha512-jtOfFne69XvSYz58oBXqfKHk1cJwwHcAzKm9jbzOKsedKEaulMPCA4fq2UXS9NaxkdVOdbSG0kg7fM09+K4gjw== + dependencies: + keccak "^1.3.0" + electron-to-chromium@^1.3.723: version "1.3.750" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.750.tgz#7e5ef6f478316b0bd656af5942fe502610e97eaf" integrity sha512-Eqy9eHNepZxJXT+Pc5++zvEi5nQ6AGikwFYDCYwXUFBr+ynJ6pDG7MzZmwGYCIuXShLJM0n4bq+aoKDmvSGJ8A== -elliptic@6.5.2, elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5.4: +elliptic@6.5.2, elliptic@6.5.4, elliptic@^6.0.0, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== @@ -2916,7 +3189,7 @@ encoding@^0.1.11: dependencies: iconv-lite "^0.6.2" -end-of-stream@^1.1.0, end-of-stream@^1.4.0: +end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -3014,13 +3287,6 @@ eslint-config-prettier@^8.3.0: resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== -eslint-plugin-prettier@^3.1.3: - version "3.4.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz#cdbad3bf1dbd2b177e9825737fe63b476a08f0c7" - integrity sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw== - dependencies: - prettier-linter-helpers "^1.0.0" - eslint-scope@^5.0.0: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" @@ -3029,7 +3295,7 @@ eslint-scope@^5.0.0: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-utils@^1.4.3: +eslint-utils@^1.4.2, eslint-utils@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== @@ -3605,6 +3871,11 @@ ethjs-util@0.1.6, ethjs-util@^0.1.3: is-hex-prefixed "1.0.0" strip-hex-prefix "1.0.0" +eventemitter2@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-5.0.1.tgz#6197a095d5fb6b57e8942f6fd7eaad63a09c9452" + integrity sha1-YZegldX7a1folC9v1+qtY6CclFI= + eventemitter3@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" @@ -3630,7 +3901,7 @@ events@^3.0.0, events@^3.2.0, events@^3.3.0: resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== -evp_bytestokey@^1.0.3: +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== @@ -3733,11 +4004,6 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-diff@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== - fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -3824,6 +4090,13 @@ flatted@^2.0.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== +follow-redirects@1.5.10: + version "1.5.10" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" + integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== + dependencies: + debug "=3.1.0" + follow-redirects@^1.10.0: version "1.14.1" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43" @@ -3991,21 +4264,36 @@ globals@^12.1.0: dependencies: type-fest "^0.8.1" +google-protobuf@^3.15.8: + version "3.17.3" + resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.17.3.tgz#f87595073545a77946c8f0b67c302c5f7646d700" + integrity sha512-OVPzcSWIAJ+d5yiHyeaLrdufQtrvaBrF4JQg+z8ynTkbO3uFcujqXszTumqg1cGsAsjkWnI+M5B1xZ19yR4Wyg== + +google-protobuf@^3.7.0-rc.2: + version "3.17.0" + resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.17.0.tgz#5623215f9d0345649720ae5e5e9713491e2456fc" + integrity sha512-xuxzzx6FXmkmddRZci2SmGeZcx+vykmqG60yJf/Rz+NEKaUs+nLhaiUQAWa7Z00a7bHfRjRxSIX9FcELaxWIVA== + graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: version "4.2.6" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== +"graceful-readlink@>= 1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU= + gridplus-sdk@^0.7.16: - version "0.7.20" - resolved "https://registry.yarnpkg.com/gridplus-sdk/-/gridplus-sdk-0.7.20.tgz#a44924835b0906be7b73df10b633460171a3acbf" - integrity sha512-TIMIMz2QIvJkbQa0o0bGFiR9U2SG4t1LUVvzT/6OrNI8yZRZ+KdLwShGmdPjGYfX3yjftqsAsBkvIFS+fK+4/Q== + version "0.7.21" + resolved "https://registry.yarnpkg.com/gridplus-sdk/-/gridplus-sdk-0.7.21.tgz#52066a5c117fc71311bcdf54d148f98ae8482df5" + integrity sha512-aXIv8odGCSV/UhVq151Ga1c0VsqtxljVLok40eljenviDC5okTJq07M2thE1qcUV2R3CqVA1BKbh9jOI8B0A3A== dependencies: aes-js "^3.1.1" + bech32 "^2.0.0" bignumber.js "^9.0.1" bitwise "^2.0.4" borc "^2.1.2" - bs58 "^4.0.1" bs58check "^2.1.2" buffer "^5.6.0" crc-32 "^1.2.0" @@ -4518,6 +4806,11 @@ is-windows@^1.0.2: resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== +is_js@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/is_js/-/is_js-0.9.0.tgz#0ab94540502ba7afa24c856aa985561669e9c52d" + integrity sha1-CrlFQFArp6+iTIVqqYVWFmnpxS0= + isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" @@ -4654,7 +4947,7 @@ json-stable-stringify@^1.0.1: dependencies: jsonify "~0.0.0" -json-stringify-safe@~5.0.1: +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= @@ -4708,7 +5001,7 @@ keccak256@^1.0.0: bn.js "^4.11.8" keccak "^3.0.1" -keccak@^1.0.2: +keccak@^1.0.2, keccak@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/keccak/-/keccak-1.4.0.tgz#572f8a6dbee8e7b3aa421550f9e6408ca2186f80" integrity sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw== @@ -4849,7 +5142,7 @@ lodash.defaults@^4.2.0: resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= -lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19: +lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -4859,6 +5152,11 @@ loglevel@^1.7.1: resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== +long@~3: + version "3.2.0" + resolved "https://registry.yarnpkg.com/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b" + integrity sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s= + loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -5000,6 +5298,14 @@ micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + mime-db@1.48.0: version "1.48.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d" @@ -5064,7 +5370,7 @@ minimist-options@^3.0.1: arrify "^1.0.1" is-plain-obj "^1.1.0" -minimist@^1.2.5: +minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== @@ -5104,7 +5410,7 @@ mute-stream@0.0.8: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -nan@^2.14.0, nan@^2.14.1, nan@^2.2.1: +nan@^2.13.2, nan@^2.14.0, nan@^2.14.1, nan@^2.2.1: version "2.14.2" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== @@ -5131,6 +5437,16 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= +ndjson@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/ndjson/-/ndjson-1.5.0.tgz#ae603b36b134bcec347b452422b0bf98d5832ec8" + integrity sha1-rmA7NrE0vOw0e0UkIrC/mNWDLsg= + dependencies: + json-stringify-safe "^5.0.1" + minimist "^1.2.0" + split2 "^2.1.0" + through2 "^2.0.3" + next-tick@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" @@ -5376,6 +5692,17 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" + integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== + dependencies: + asn1.js "^5.2.0" + browserify-aes "^1.0.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + parse-headers@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.3.tgz#5e8e7512383d140ba02f0c7aa9f49b4399c92515" @@ -5426,7 +5753,16 @@ path-type@^3.0.0: dependencies: pify "^3.0.0" -pbkdf2@^3.0.17: +pbjs@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/pbjs/-/pbjs-0.0.5.tgz#b4c88e15aac4552ca0922aa64cd5338efd3447bf" + integrity sha1-tMiOFarEVSygkiqmTNUzjv00R78= + dependencies: + bytebuffer "5.0.1" + commander "2.9.0" + protocol-buffers-schema "3.1.0" + +pbkdf2@^3.0.17, pbkdf2@^3.0.3, pbkdf2@^3.0.9: version "3.1.2" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== @@ -5516,13 +5852,6 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -prettier-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" - integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== - dependencies: - fast-diff "^1.1.2" - prettier-plugin-svelte@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/prettier-plugin-svelte/-/prettier-plugin-svelte-2.3.0.tgz#9956a39d18b217557ab8766c264d8cd003983608" @@ -5570,6 +5899,19 @@ prop-types@^15.6.0, prop-types@^15.7.2: object-assign "^4.1.1" react-is "^16.8.1" +protocol-buffers-encodings@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/protocol-buffers-encodings/-/protocol-buffers-encodings-1.1.1.tgz#f1e4a386711823137330171d2c82b49d062e75d3" + integrity sha512-5aFshI9SbhtcMiDiZZu3g2tMlZeS5lhni//AGJ7V34PQLU5JA91Cva7TIs6inZhYikS3OpnUzAUuL6YtS0CyDA== + dependencies: + signed-varint "^2.0.1" + varint "5.0.0" + +protocol-buffers-schema@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/protocol-buffers-schema/-/protocol-buffers-schema-3.1.0.tgz#d8a819549ead3e6bd189ebe9e50e96636bbc5cc7" + integrity sha1-2KgZVJ6tPmvRievp5Q6WY2u8XMc= + prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" @@ -5580,6 +5922,18 @@ psl@^1.1.28: resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" @@ -5588,6 +5942,20 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" +pumpify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-2.0.1.tgz#abfc7b5a621307c728b551decbbefb51f0e4aa1e" + integrity sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw== + dependencies: + duplexify "^4.1.1" + inherits "^2.0.3" + pump "^3.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" @@ -5660,13 +6028,21 @@ quick-lru@^1.0.0: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= -randombytes@^2.1.0: +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + randomhex@0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/randomhex/-/randomhex-0.1.5.tgz#baceef982329091400f2a2912c6cd02f1094f585" @@ -5758,7 +6134,7 @@ readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.1.4, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.6.0: +readable-stream@^3.1.1, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -6062,7 +6438,7 @@ rustbn.js@~0.2.0: resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== -rxjs@6, rxjs@^6.6.0, rxjs@^6.6.3: +rxjs@6, rxjs@^6.4.0, rxjs@^6.6.0, rxjs@^6.6.3: version "6.6.7" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== @@ -6149,6 +6525,11 @@ secp256k1@^3.0.1, secp256k1@^3.7.1, secp256k1@^3.8.0: nan "^2.14.0" safe-buffer "^5.1.2" +secure-random@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/secure-random/-/secure-random-1.1.2.tgz#ed103b460a851632d420d46448b2a900a41e7f7c" + integrity sha512-H2bdSKERKdBV1SwoqYm6C0y+9EA94v6SUBOWO8kDndc4NoUih7Dv6Tsgma7zO1lv27wIvjlD0ZpMQk7um5dheQ== + semaphore@>=1.0.1, semaphore@^1.0.3: version "1.1.0" resolved "https://registry.yarnpkg.com/semaphore/-/semaphore-1.1.0.tgz#aaad8b86b20fe8e9b32b16dc2ee682a8cd26a8aa" @@ -6245,6 +6626,13 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== +signed-varint@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/signed-varint/-/signed-varint-2.0.1.tgz#50a9989da7c98c2c61dad119bc97470ef8528129" + integrity sha1-UKmYnafJjCxh2tEZvJdHDvhSgSk= + dependencies: + varint "~5.0.0" + simple-concat@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" @@ -6367,6 +6755,13 @@ split-string@^3.0.1, split-string@^3.0.2: dependencies: extend-shallow "^3.0.0" +split2@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" + integrity sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw== + dependencies: + through2 "^2.0.2" + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -6400,6 +6795,11 @@ store@2.0.12: resolved "https://registry.yarnpkg.com/store/-/store-2.0.12.tgz#8c534e2a0b831f72b75fc5f1119857c44ef5d593" integrity sha1-jFNOKguDH3K3X8XxEZhXxE711ZM= +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" @@ -6565,7 +6965,7 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -through2@^2.0.3: +through2@^2.0.2, through2@^2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== @@ -6583,6 +6983,17 @@ timed-out@^4.0.1: resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= +tiny-secp256k1@^1.1.3, tiny-secp256k1@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/tiny-secp256k1/-/tiny-secp256k1-1.1.6.tgz#7e224d2bee8ab8283f284e40e6b4acb74ffe047c" + integrity sha512-FmqJZGduTyvsr2cF3375fqGHUovSwDi/QytexX1Se4BPuPZpTE5Ftp5fg+EFSuEf3lhZqgCRjEG3ydUQ/aNiwA== + dependencies: + bindings "^1.3.0" + bn.js "^4.11.8" + create-hmac "^1.1.7" + elliptic "^6.4.0" + nan "^2.13.2" + tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -6734,6 +7145,11 @@ typedarray-to-buffer@3.1.5, typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" +typeforce@^1.11.5: + version "1.18.0" + resolved "https://registry.yarnpkg.com/typeforce/-/typeforce-1.18.0.tgz#d7416a2c5845e085034d70fcc5b6cc4a90edbfdc" + integrity sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g== + typescript@^3.6.4: version "3.9.9" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.9.tgz#e69905c54bc0681d0518bd4d587cc6f2d0b1a674" @@ -6744,6 +7160,11 @@ u2f-api@0.2.7: resolved "https://registry.yarnpkg.com/u2f-api/-/u2f-api-0.2.7.tgz#17bf196b242f6bf72353d9858e6a7566cc192720" integrity sha512-fqLNg8vpvLOD5J/z4B6wpPg4Lvowz1nJ9xdHcCzdUPKcFE/qNCceV2gNZxSJd5vhAZemHr/K/hbzVA0zxB5mkg== +ultron@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" + integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== + unbox-primitive@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" @@ -6832,6 +7253,14 @@ url-set-query@^1.0.0: resolved "https://registry.yarnpkg.com/url-set-query/-/url-set-query-1.0.0.tgz#016e8cfd7c20ee05cafe7795e892bd0702faa339" integrity sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk= +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" @@ -6906,6 +7335,16 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +varint@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.0.tgz#d826b89f7490732fabc0c0ed693ed475dcb29ebf" + integrity sha1-2Ca4n3SQcy+rwMDtaT7Uddyynr8= + +varint@~5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4" + integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow== + verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" @@ -7178,6 +7617,18 @@ webrtc-adapter@^7.2.1: rtcpeerconnection-shim "^1.2.15" sdp "^2.12.0" +websocket-stream@^5.5.0: + version "5.5.2" + resolved "https://registry.yarnpkg.com/websocket-stream/-/websocket-stream-5.5.2.tgz#49d87083d96839f0648f5513bbddd581f496b8a2" + integrity sha512-8z49MKIHbGk3C4HtuHWDtYX8mYej1wWabjthC/RupM9ngeukU4IWoM46dgth1UOS/T4/IqgEdCDJuMe2039OQQ== + dependencies: + duplexify "^3.5.1" + inherits "^2.0.1" + readable-stream "^2.3.3" + safe-buffer "^5.1.2" + ws "^3.2.0" + xtend "^4.0.0" + websocket@^1.0.32: version "1.0.34" resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" @@ -7236,6 +7687,13 @@ which@^1.2.9: dependencies: isexe "^2.0.0" +wif@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/wif/-/wif-2.0.6.tgz#08d3f52056c66679299726fade0d432ae74b4704" + integrity sha1-CNP1IFbGZnkplyb63g1DKudLRwQ= + dependencies: + bs58check "<3.0.0" + window-getters@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/window-getters/-/window-getters-1.0.0.tgz#b5b264538c4c79cead027f9997850222bf6d0852" @@ -7294,6 +7752,15 @@ ws@7.4.6: resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== +ws@^3.2.0: + version "3.3.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" + integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + ultron "~1.1.0" + ws@^5.1.1: version "5.2.3" resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.3.tgz#05541053414921bc29c63bee14b8b0dd50b07b3d"