diff --git a/app/app-dev.html b/app/app-dev.html index a27ce38..4e31c5a 100644 --- a/app/app-dev.html +++ b/app/app-dev.html @@ -9,9 +9,8 @@
diff --git a/app/components/home/transaction-list/transaction-list-context-menu.ts b/app/components/home/transaction-list/transaction-list-context-menu.ts index 7f19e9e..7e9f214 100644 --- a/app/components/home/transaction-list/transaction-list-context-menu.ts +++ b/app/components/home/transaction-list/transaction-list-context-menu.ts @@ -1,4 +1,4 @@ -import { remote } from 'electron'; +// import { remote } from 'electron'; import { useClipboard } from '@blockstack/ui'; import { Transaction } from '@blockstack/stacks-blockchain-api-types'; @@ -29,50 +29,46 @@ interface TxListContextMenu { } export function createTxListContextMenu(event: Event, { tx, copy }: TxListContextMenu) { - event.preventDefault(); - const { Menu, MenuItem } = remote; - const menu = new Menu(); - - const menuItems: Electron.MenuItemConstructorOptions[] = [ - { - label: 'Copy to clipboard', - enabled: false, - }, - { type: 'separator' }, - { - label: 'Transaction ID', - click: () => copy.txid.onCopy(), - }, - { - label: 'Recipient address', - visible: !!getRecipientAddress(tx), - click: () => copy.recipientAddress.onCopy(), - }, - { - label: 'Memo', - visible: hasMemo(tx), - click: () => copy.memo.onCopy(), - }, - { - label: 'Timestamp', - click: () => copy.date.onCopy(), - }, - { - label: 'Transaction (as JSON)', - click: () => copy.txDetails.onCopy(), - }, - { - label: 'Explorer link', - click: () => copy.explorerLink.onCopy(), - }, - ]; - - menuItems.forEach(item => menu.append(new MenuItem(item))); - - menu.popup({ window: remote.getCurrentWindow() }); - - menu.once('menu-will-close', () => { - // `destroy` call untyped - (menu as any).destroy(); - }); + // event.preventDefault(); + // const { Menu, MenuItem } = remote; + // const menu = new Menu(); + // const menuItems: Electron.MenuItemConstructorOptions[] = [ + // { + // label: 'Copy to clipboard', + // enabled: false, + // }, + // { type: 'separator' }, + // { + // label: 'Transaction ID', + // click: () => copy.txid.onCopy(), + // }, + // { + // label: 'Recipient address', + // visible: !!getRecipientAddress(tx), + // click: () => copy.recipientAddress.onCopy(), + // }, + // { + // label: 'Memo', + // visible: hasMemo(tx), + // click: () => copy.memo.onCopy(), + // }, + // { + // label: 'Timestamp', + // click: () => copy.date.onCopy(), + // }, + // { + // label: 'Transaction (as JSON)', + // click: () => copy.txDetails.onCopy(), + // }, + // { + // label: 'Explorer link', + // click: () => copy.explorerLink.onCopy(), + // }, + // ]; + // menuItems.forEach(item => menu.append(new MenuItem(item))); + // menu.popup({ window: remote.getCurrentWindow() }); + // menu.once('menu-will-close', () => { + // // `destroy` call untyped + // (menu as any).destroy(); + // }); } diff --git a/app/crypto/key-generation.ts b/app/crypto/key-generation.ts index 7a673fd..e2d9699 100644 --- a/app/crypto/key-generation.ts +++ b/app/crypto/key-generation.ts @@ -1,12 +1,7 @@ import { memoizeWith, identity } from 'ramda'; import argon2, { ArgonType } from 'argon2-browser'; -import { delay } from '@utils/delay'; - export async function deriveKey({ pass, salt }: { pass: string; salt: string }) { - // Without this additional delay of 1ms, an odd behaviour with the argon2 library - // causes the promise to be render blocking - await delay(1); const result = await argon2.hash({ pass, salt, diff --git a/app/hooks/use-ledger.ts b/app/hooks/use-ledger.ts index b229cf0..193b7a3 100644 --- a/app/hooks/use-ledger.ts +++ b/app/hooks/use-ledger.ts @@ -14,89 +14,80 @@ export enum LedgerConnectStep { } export function useLedger() { - const [step, setStep] = useState(LedgerConnectStep.Disconnected); - const [usbError, setUsbError] = useState(null); - - const transport = useRef(null); - const disconnectTimeouts = useRef(0); - const listeningForAddEvent = useRef(true); - - const SAFE_ASSUME_REAL_DEVICE_DISCONNECT_TIME = 1000; - const POLL_LEDGER_INTERVAL = 250; - - const createListener = useCallback(() => { - const tHid = TransportNodeHid.listen({ - next: async event => { - if (event.type === 'add') { - clearTimeout(disconnectTimeouts.current); - tHid.unsubscribe(); - - const [error, t] = await safeAwait(TransportNodeHid.open(event.descriptor)); - - if (error) { - setUsbError('Unable to connect to device. You may need to configure your udev rules.'); - return; - } - - if (t) { - setUsbError(null); - t.on('disconnect', async () => { - listeningForAddEvent.current = true; - transport.current = null; - await t.close(); - const timer = setTimeout(() => { - setStep(LedgerConnectStep.Disconnected); - }, SAFE_ASSUME_REAL_DEVICE_DISCONNECT_TIME); - disconnectTimeouts.current = (timer as unknown) as number; - createListener(); - }); - - listeningForAddEvent.current = false; - transport.current = t; - } - } - }, - error: () => ({}), - complete: () => ({}), - }); - return tHid; - }, []); - - useEffect(() => { - const subscription = createListener(); - return () => { - subscription.unsubscribe(); - if (transport.current) { - void transport.current.close(); - transport.current = null; - } - }; - }, [createListener]); - - useInterval(() => { - if ( - transport.current && - step !== LedgerConnectStep.HasAddress && - !listeningForAddEvent.current - ) { - // There's a bug with the node-hid library where it doesn't - // fire disconnect event until next time an operation using it is called. - // Here we poll a request to ensure the event is fired - void new BlockstackApp(transport.current) - .getVersion() - .then(resp => { - if (resp.returnCode === LedgerError.AppDoesNotSeemToBeOpen) - return setStep(LedgerConnectStep.ConnectedAppClosed); - if (resp.returnCode === LedgerError.NoErrors) - return setStep(LedgerConnectStep.ConnectedAppOpen); - }) - .catch(() => ({})); - } - }, POLL_LEDGER_INTERVAL); - - return { - transport: transport.current, - step, - error: usbError, - }; + // const [step, setStep] = useState(LedgerConnectStep.Disconnected); + // const [usbError, setUsbError] = useState(null); + // const transport = useRef(null); + // const disconnectTimeouts = useRef(0); + // const listeningForAddEvent = useRef(true); + // const SAFE_ASSUME_REAL_DEVICE_DISCONNECT_TIME = 1000; + // const POLL_LEDGER_INTERVAL = 250; + // const createListener = useCallback(() => { + // const tHid = TransportNodeHid.listen({ + // next: async event => { + // if (event.type === 'add') { + // clearTimeout(disconnectTimeouts.current); + // tHid.unsubscribe(); + // const [error, t] = await safeAwait(TransportNodeHid.open(event.descriptor)); + // if (error) { + // console.log(error); + // setUsbError('Unable to connect to device. You may need to configure your udev rules.'); + // return; + // } + // if (t) { + // setUsbError(null); + // t.on('disconnect', async () => { + // listeningForAddEvent.current = true; + // transport.current = null; + // await t.close(); + // const timer = setTimeout(() => { + // setStep(LedgerConnectStep.Disconnected); + // }, SAFE_ASSUME_REAL_DEVICE_DISCONNECT_TIME); + // disconnectTimeouts.current = (timer as unknown) as number; + // createListener(); + // }); + // listeningForAddEvent.current = false; + // transport.current = t; + // } + // } + // }, + // error: () => ({}), + // complete: () => ({}), + // }); + // return tHid; + // }, []); + // useEffect(() => { + // const subscription = createListener(); + // return () => { + // subscription.unsubscribe(); + // if (transport.current) { + // void transport.current.close(); + // transport.current = null; + // } + // }; + // }, [createListener]); + // useInterval(() => { + // if ( + // transport.current && + // step !== LedgerConnectStep.HasAddress && + // !listeningForAddEvent.current + // ) { + // // There's a bug with the node-hid library where it doesn't + // // fire disconnect event until next time an operation using it is called. + // // Here we poll a request to ensure the event is fired + // void new BlockstackApp(transport.current) + // .getVersion() + // .then(resp => { + // if (resp.returnCode === LedgerError.AppDoesNotSeemToBeOpen) + // return setStep(LedgerConnectStep.ConnectedAppClosed); + // if (resp.returnCode === LedgerError.NoErrors) + // return setStep(LedgerConnectStep.ConnectedAppOpen); + // }) + // .catch(() => ({})); + // } + // }, POLL_LEDGER_INTERVAL); + // return { + // transport: transport.current, + // step, + // error: usbError, + // }; } diff --git a/app/hooks/use-window-focus.ts b/app/hooks/use-window-focus.ts index ca8f3b0..08bff51 100644 --- a/app/hooks/use-window-focus.ts +++ b/app/hooks/use-window-focus.ts @@ -1,30 +1,26 @@ -import { remote } from 'electron'; +// import { remote } from 'electron'; import { useState, useEffect, useCallback } from 'react'; export type WindowActiveState = 'focused' | 'blurred'; export function useWindowFocus() { - const [win] = remote.BrowserWindow.getAllWindows(); - const [windowState, setWindowState] = useState( - win.isFocused() ? 'focused' : 'blurred' - ); - - const focusHandler = useCallback(() => setWindowState('focused'), []); - const blurHandler = useCallback(() => setWindowState('blurred'), []); - - useEffect(() => { - win.on('focus', focusHandler); - win.on('blur', blurHandler); - - window.addEventListener('beforeunload', () => { - win.removeListener('focus', focusHandler); - win.removeListener('blur', blurHandler); - }); - - return () => { - win.removeListener('focus', focusHandler); - win.removeListener('blur', blurHandler); - }; - }, [blurHandler, focusHandler, win]); - return windowState; + // const [win] = remote.BrowserWindow.getAllWindows(); + // const [windowState, setWindowState] = useState( + // win.isFocused() ? 'focused' : 'blurred' + // ); + // const focusHandler = useCallback(() => setWindowState('focused'), []); + // const blurHandler = useCallback(() => setWindowState('blurred'), []); + // useEffect(() => { + // win.on('focus', focusHandler); + // win.on('blur', blurHandler); + // window.addEventListener('beforeunload', () => { + // win.removeListener('focus', focusHandler); + // win.removeListener('blur', blurHandler); + // }); + // return () => { + // win.removeListener('focus', focusHandler); + // win.removeListener('blur', blurHandler); + // }; + // }, [blurHandler, focusHandler, win]); + // return windowState; } diff --git a/app/index.tsx b/app/index.tsx index 7481e30..264e01c 100644 --- a/app/index.tsx +++ b/app/index.tsx @@ -4,19 +4,11 @@ import { render } from 'react-dom'; import { AppContainer as ReactHotAppContainer } from 'react-hot-loader'; import { configureStore, history } from './store/configureStore'; -import { ipcRenderer, contextBridge } from 'electron'; const { store, persistor } = configureStore(); const AppContainer = process.env.PLAIN_HMR ? Fragment : ReactHotAppContainer; -// contextBridge.exposeInMainWorld('api', { -// xxx: 123, -// }); - -// console.log('dddddddddd', require('safe-buffer')); -// (window as any).Buffer = require('safe-buffer').Buffer; - document.addEventListener('DOMContentLoaded', () => { // eslint-disable-next-line @typescript-eslint/no-var-requires const Root = require('./pages/root').default; diff --git a/app/main.dev.ts b/app/main.dev.ts index 4e03640..970c62b 100644 --- a/app/main.dev.ts +++ b/app/main.dev.ts @@ -13,13 +13,19 @@ * When running `yarn build` or `yarn build-main`, this file is compiled to * `./app/main.prod.js` using webpack. This gives us some performance wins. */ +import 'core-js/stable'; +import 'regenerator-runtime/runtime'; import path from 'path'; -import { app, BrowserWindow } from 'electron'; +import { app, BrowserWindow, ipcMain } from 'electron'; import { autoUpdater } from 'electron-updater'; import log from 'electron-log'; import windowState from 'electron-window-state'; import contextMenu from 'electron-context-menu'; import MenuBuilder from './menu'; +import { deriveKey } from './crypto/key-generation'; +import Store from 'secure-electron-store'; +import StoreElectron from 'electron-store'; +// import fs from 'fs'; // CSP enabled in production mode, don't warn in development delete process.env.ELECTRON_ENABLE_SECURITY_WARNINGS; @@ -81,11 +87,12 @@ const createWindow = async () => { contextIsolation: true, // SECURITY: disable this module for production enableRemoteModule: true, + additionalArguments: [`storePath:${app.getPath('userData')}`], preload: path.join(__dirname, 'preload.js'), ...(process.env.NODE_ENV === 'development' || process.env.E2E_BUILD === 'true' ? { - nodeIntegration: true, + nodeIntegration: false, } : { nodeIntegration: false, @@ -97,6 +104,15 @@ const createWindow = async () => { if (process.platform === 'darwin') mainWindow.setTrafficLightPosition({ x: 10, y: 28 }); + // + // Set up electron-secure-store + // const store = new Store({ + // path: app.getPath('userData'), + // unprotectedFilename: 'config', + // encrypt: false, + // }); + // store.mainBindings(ipcMain, mainWindow, fs); + mainWindowState.manage(mainWindow); if (process.env.NODE_ENV === 'development' && process.env.DEBUG_PROD !== 'true') { @@ -160,3 +176,13 @@ app.on('activate', () => { // dock icon is clicked and there are no other windows open. if (mainWindow === null) void createWindow(); }); + +const store = new StoreElectron(); + +setTimeout(() => store.set('test', '123132132'), 1000); + +ipcMain.handle('store-get', (e, { key, value }: any) => store.set(key, value)); + +ipcMain.handle('derive-key', async (e, args) => { + return deriveKey(args); +}); diff --git a/app/modals/reset-wallet/reset-wallet-modal.tsx b/app/modals/reset-wallet/reset-wallet-modal.tsx index 583fa5c..d7df998 100644 --- a/app/modals/reset-wallet/reset-wallet-modal.tsx +++ b/app/modals/reset-wallet/reset-wallet-modal.tsx @@ -1,7 +1,7 @@ import React, { FC, useState, useRef } from 'react'; import { Modal, ButtonGroup, Button, Box } from '@blockstack/ui'; import { TxModalHeader, TxModalFooter } from '../transaction/transaction-modal-layout'; -import { remote } from 'electron'; +// import { remote } from 'electron'; import { clearDiskStorage } from '@utils/disk-store'; import { useHotkeys } from 'react-hotkeys-hook'; @@ -32,7 +32,7 @@ export const ResetWalletModal: FC = ({ isOpen, onClose }) cancelBtnRef.current?.focus(); timer.current = setTimeout(() => { clearDiskStorage(); - remote.getCurrentWindow().reload(); + // remote.getCurrentWindow().reload(); }, PANIC_CANCEL_TIME); }; diff --git a/app/modals/stacking/stacking-modal.tsx b/app/modals/stacking/stacking-modal.tsx index add9ace..0196905 100644 --- a/app/modals/stacking/stacking-modal.tsx +++ b/app/modals/stacking/stacking-modal.tsx @@ -2,7 +2,7 @@ import React, { FC, useState, useCallback } from 'react'; import { useSelector, useDispatch } from 'react-redux'; import { Modal } from '@blockstack/ui'; import { useHistory } from 'react-router-dom'; -import log from 'electron-log'; +// import log from 'electron-log'; import BlockstackApp, { LedgerError, ResponseSign } from '@zondax/ledger-blockstack'; import { useHotkeys } from 'react-hotkeys-hook'; import { BigNumber } from 'bignumber.js'; diff --git a/app/modals/transaction/transaction-modal.tsx b/app/modals/transaction/transaction-modal.tsx index 3aa13c1..782686d 100644 --- a/app/modals/transaction/transaction-modal.tsx +++ b/app/modals/transaction/transaction-modal.tsx @@ -1,6 +1,6 @@ import React, { FC, useState, useRef, useCallback } from 'react'; import { useSelector, useDispatch } from 'react-redux'; -import log from 'electron-log'; +// import log from 'electron-log'; import { useFormik } from 'formik'; import * as yup from 'yup'; import BN from 'bn.js'; diff --git a/app/package-lock.json b/app/package-lock.json new file mode 100644 index 0000000..57a23e4 --- /dev/null +++ b/app/package-lock.json @@ -0,0 +1,1669 @@ +{ + "name": "stacks-wallet", + "version": "4.0.0-beta.7", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@blockstack/rpc-client": { + "version": "0.3.0-alpha.22", + "resolved": "https://registry.npmjs.org/@blockstack/rpc-client/-/rpc-client-0.3.0-alpha.22.tgz", + "integrity": "sha512-pfIg0WYkCUZ/fbM9ic3dMf9n9dU3NAJrGLMHTXgxndQRktf8fWBSXOxA4PUuBFzVh4aDlfEGh0PWS4WPe/FRnA==", + "requires": { + "@blockstack/stacks-transactions": "0.5.1", + "cross-fetch": "^3.0.4" + }, + "dependencies": { + "@blockstack/stacks-transactions": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@blockstack/stacks-transactions/-/stacks-transactions-0.5.1.tgz", + "integrity": "sha512-szzDyRBHnPDE7hoqm6TJbKvUPE5aHRapS4gqiDetOwZzq/aDqIrFVHSgU1GM7m1d2q2jlN1knW4IiRJUeCxw0Q==", + "requires": { + "@types/bn.js": "^4.11.6", + "@types/elliptic": "^6.4.12", + "@types/lodash": "^4.14.149", + "@types/randombytes": "^2.0.0", + "@types/ripemd160": "^2.0.0", + "@types/sha.js": "^2.4.0", + "bn.js": "^4.11.8", + "c32check": "^1.0.1", + "cross-fetch": "^3.0.4", + "elliptic": "^6.5.2", + "lodash": "^4.17.15", + "randombytes": "^2.1.0", + "ripemd160": "^2.0.2", + "sha.js": "^2.4.11", + "smart-buffer": "^4.1.0" + } + }, + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } + } + }, + "@blockstack/stacks-transactions": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@blockstack/stacks-transactions/-/stacks-transactions-0.7.0.tgz", + "integrity": "sha512-9IUR641PJpigYDCWdtKFgBIk0Oxyoc2M2XVdyaEOEcRhI+4lcacDhsuseAmGbkB9FhJgJcNicWPujUPNFl1XCw==", + "requires": { + "@types/bn.js": "^4.11.6", + "@types/elliptic": "^6.4.12", + "@types/randombytes": "^2.0.0", + "@types/sha.js": "^2.4.0", + "bn.js": "^4.11.9", + "c32check": "^1.1.1", + "cross-fetch": "^3.0.5", + "elliptic": "^6.5.2", + "lodash": "^4.17.20", + "randombytes": "^2.1.0", + "ripemd160-min": "^0.0.6", + "sha.js": "^2.4.11", + "smart-buffer": "^4.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } + } + }, + "@ledgerhq/devices": { + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/@ledgerhq/devices/-/devices-5.28.0.tgz", + "integrity": "sha512-Tkygc1nfioxfv4YWF5VGHito3ZHQAiNM7YV+Kqr3n/gz4meT5f9DfvqvikTF5XxX+mXpCMc4IlzwbUAoeNOHiQ==", + "requires": { + "@ledgerhq/errors": "^5.28.0", + "@ledgerhq/logs": "^5.28.0", + "rxjs": "^6.6.3" + } + }, + "@ledgerhq/errors": { + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/@ledgerhq/errors/-/errors-5.28.0.tgz", + "integrity": "sha512-dNBVriJbdiTerT7I102sAMBxuJqmuMCQSfIdQ+3euvb+2Fx7UPM/w9RHZ0HZGsz/SdeBblWAH0aIQmtDX/vW9g==" + }, + "@ledgerhq/hw-transport": { + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-5.28.0.tgz", + "integrity": "sha512-dQm45axzWSJhiaDB2csBCFPH/PGjE8kB+3uSeoUJ752FqgndZgrN9UKOPPxcmaf69jnQeTZAFEWc8g63yMPYOg==", + "requires": { + "@ledgerhq/devices": "^5.28.0", + "@ledgerhq/errors": "^5.28.0", + "events": "^3.2.0" + } + }, + "@ledgerhq/hw-transport-node-hid": { + "version": "5.23.2", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-5.23.2.tgz", + "integrity": "sha512-u0oBoKFltMk05T5ySnemLKoUtUXmB25196PuDe8C+vdA34usoESiNZb49Ookp1vAw7BHzImZYo1moF+IlLGVZQ==", + "requires": { + "@ledgerhq/devices": "^5.23.0", + "@ledgerhq/errors": "^5.23.0", + "@ledgerhq/hw-transport": "^5.23.0", + "@ledgerhq/hw-transport-node-hid-noevents": "^5.23.2", + "@ledgerhq/logs": "^5.23.0", + "lodash": "^4.17.20", + "node-hid": "1.3.0", + "usb": "^1.6.3" + } + }, + "@ledgerhq/hw-transport-node-hid-noevents": { + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-5.28.0.tgz", + "integrity": "sha512-NPxrY0YLfT9fDL5KXY4jIwKPXjpOOS5XEUDYuvfRQLg7yGeDsn9tJbbkP/8FKOap+oKFXCkgOl9rs0VU2khYqg==", + "requires": { + "@ledgerhq/devices": "^5.28.0", + "@ledgerhq/errors": "^5.28.0", + "@ledgerhq/hw-transport": "^5.28.0", + "@ledgerhq/logs": "^5.28.0", + "node-hid": "1.3.0" + } + }, + "@ledgerhq/logs": { + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/@ledgerhq/logs/-/logs-5.28.0.tgz", + "integrity": "sha512-O+p30yQCJVMHkYRt4mEy2My61JNTyqg9FEs9ZmXXPvXbod85snD6oGaKtDtcvbWCYjiaQt4alD+w/J56hkNBWQ==" + }, + "@stacks/common": { + "version": "1.0.0-beta.9", + "resolved": "https://registry.npmjs.org/@stacks/common/-/common-1.0.0-beta.9.tgz", + "integrity": "sha512-YpY0/0BwEDfFR/n96nAhNn3Rpeket+ArxHzsscorhx0WpxccT3um/SjJj4yXJHyqR/BhRpIuU+ngQCfrSP6hww==", + "requires": { + "cross-fetch": "^3.0.5" + } + }, + "@stacks/keychain": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@stacks/keychain/-/keychain-0.16.1.tgz", + "integrity": "sha512-odohv3/ZCLRzdPlPEGzUYvN1HrwJd8K88yUG/sTEjUOS09oD2/OwvXR/aA9O1OmgxkVkAFN9i0/a3psVKsMMYA==", + "requires": { + "@blockstack/rpc-client": "^0.3.0-alpha.21", + "@blockstack/stacks-transactions": "0.7.0", + "bip39": "^3.0.2", + "bitcoinjs-lib": "^5.1.6", + "blockstack": "21.0.0", + "bn.js": "^5.1.1", + "c32check": "^1.0.1", + "jsontokens": "^3.0.0", + "prettier": "^2.0.5", + "triplesec": "^3.0.27", + "zone-file": "^1.0.0" + } + }, + "@stacks/network": { + "version": "1.0.0-beta.9", + "resolved": "https://registry.npmjs.org/@stacks/network/-/network-1.0.0-beta.9.tgz", + "integrity": "sha512-cmqznzjtyRDoBibbw+B1h3esZ/2StsnjAMZyqxvH856fVSGVSgxIk5HycA+zGqOUQewjfgHKIiZ9gzaMsETnow==", + "requires": { + "@stacks/common": "^1.0.0-beta.9" + } + }, + "@stacks/transactions": { + "version": "1.0.0-beta.9", + "resolved": "https://registry.npmjs.org/@stacks/transactions/-/transactions-1.0.0-beta.9.tgz", + "integrity": "sha512-QBRcWJV69E4st5IceU0XE/9tif2MSnvEOOOv5B44lRtBlHpEOPkot7QbfPIa5QqgCcDRB+9tb5S69mmd5QYdLw==", + "requires": { + "@stacks/common": "^1.0.0-beta.9", + "@stacks/network": "^1.0.0-beta.9", + "@types/bn.js": "^4.11.6", + "@types/elliptic": "^6.4.12", + "@types/randombytes": "^2.0.0", + "@types/sha.js": "^2.4.0", + "bn.js": "^4.11.9", + "c32check": "^1.1.1", + "cross-fetch": "^3.0.5", + "elliptic": "^6.5.3", + "lodash": "^4.17.20", + "randombytes": "^2.1.0", + "ripemd160-min": "^0.0.6", + "sha.js": "^2.4.11", + "smart-buffer": "^4.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } + } + }, + "@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "requires": { + "@types/node": "*" + } + }, + "@types/cheerio": { + "version": "0.22.22", + "resolved": "https://registry.npmjs.org/@types/cheerio/-/cheerio-0.22.22.tgz", + "integrity": "sha512-05DYX4zU96IBfZFY+t3Mh88nlwSMtmmzSYaQkKN48T495VV1dkHSah6qYyDTN5ngaS0i0VonH37m+RuzSM0YiA==", + "requires": { + "@types/node": "*" + } + }, + "@types/elliptic": { + "version": "6.4.12", + "resolved": "https://registry.npmjs.org/@types/elliptic/-/elliptic-6.4.12.tgz", + "integrity": "sha512-gP1KsqoouLJGH6IJa28x7PXb3cRqh83X8HCLezd2dF+XcAIMKYv53KV+9Zn6QA561E120uOqZBQ+Jy/cl+fviw==", + "requires": { + "@types/bn.js": "*" + } + }, + "@types/lodash": { + "version": "4.14.165", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.165.tgz", + "integrity": "sha512-tjSSOTHhI5mCHTy/OOXYIhi2Wt1qcbHmuXD1Ha7q70CgI/I71afO4XtLb/cVexki1oVYchpul/TOuu3Arcdxrg==" + }, + "@types/node": { + "version": "14.14.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.7.tgz", + "integrity": "sha512-Zw1vhUSQZYw+7u5dAwNbIA9TuTotpzY/OF7sJM9FqPOF3SPjKnxrjoTktXDZgUjybf4cWVBP7O8wvKdSaGHweg==" + }, + "@types/randombytes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/randombytes/-/randombytes-2.0.0.tgz", + "integrity": "sha512-bz8PhAVlwN72vqefzxa14DKNT8jK/mV66CSjwdVQM/k3Th3EPKfUtdMniwZgMedQTFuywAsfjnZsg+pEnltaMA==", + "requires": { + "@types/node": "*" + } + }, + "@types/ripemd160": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/ripemd160/-/ripemd160-2.0.0.tgz", + "integrity": "sha512-LD6AO/+8cAa1ghXax9NG9iPDLPUEGB2WWPjd//04KYfXxTwHvlDEfL0NRjrM5z9XWBi6WbKw75Are0rDyn3PSA==", + "requires": { + "@types/node": "*" + } + }, + "@types/sha.js": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/sha.js/-/sha.js-2.4.0.tgz", + "integrity": "sha512-amxKgPy6WJTKuw8mpUwjX2BSxuBtBmZfRwIUDIuPJKNwGN8CWDli8JTg5ONTWOtcTkHIstvT7oAhhYXqEjStHQ==", + "requires": { + "@types/node": "*" + } + }, + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "requires": { + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "requires": { + "lodash": "^4.17.14" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + }, + "base-x": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz", + "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "base64-js": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.0.tgz", + "integrity": "sha512-Jrdy04F2EKcNggUDfubMUPNAZg2vMquLQSm8sKLYJvz40ClFL1S8GKyDshGkNsbNNE5Z+fQavzU7nSK1I9JUGA==" + }, + "base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bip174": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bip174/-/bip174-2.0.1.tgz", + "integrity": "sha512-i3X26uKJOkDTAalYAp0Er+qGMDhrbbh2o93/xiPyAN2s25KrClSpe3VXo/7mNJoqA5qfko8rLS2l3RWZgYmjKQ==" + }, + "bip32": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/bip32/-/bip32-2.0.6.tgz", + "integrity": "sha512-HpV5OMLLGTjSVblmrtYRfFFKuQB+GArM0+XP8HGWfJ5vxYBqo+DesvJwOdC2WJ3bCkZShGf0QIfoIpeomVzVdA==", + "requires": { + "@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" + }, + "dependencies": { + "@types/node": { + "version": "10.12.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.18.tgz", + "integrity": "sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==" + } + } + }, + "bip39": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.0.2.tgz", + "integrity": "sha512-J4E1r2N0tUylTKt07ibXvhpT2c5pyAFgvuA5q1H9uDy6dEGpjV8jmymh3MTYJDLCNbIVClSB9FbND49I6N24MQ==", + "requires": { + "@types/node": "11.11.6", + "create-hash": "^1.1.0", + "pbkdf2": "^3.0.9", + "randombytes": "^2.0.1" + }, + "dependencies": { + "@types/node": { + "version": "11.11.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.6.tgz", + "integrity": "sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==" + } + } + }, + "bip66": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", + "integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "bitcoin-ops": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/bitcoin-ops/-/bitcoin-ops-1.4.1.tgz", + "integrity": "sha512-pef6gxZFztEhaE9RY9HmWVmiIHqCb2OyS4HPKkpc6CIiiOa3Qmuoylxc5P2EkU3w+5eTSifI9SEZC88idAIGow==" + }, + "bitcoinjs-lib": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-5.2.0.tgz", + "integrity": "sha512-5DcLxGUDejgNBYcieMIUfjORtUeNWl828VWLHJGVKZCb4zIS1oOySTUr0LGmcqJBQgTBz3bGbRQla4FgrdQEIQ==", + "requires": { + "bech32": "^1.1.2", + "bip174": "^2.0.1", + "bip32": "^2.0.4", + "bip66": "^1.1.0", + "bitcoin-ops": "^1.4.0", + "bs58check": "^2.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.3", + "merkle-lib": "^2.0.10", + "pushdata-bitcoin": "^1.0.1", + "randombytes": "^2.0.1", + "tiny-secp256k1": "^1.1.1", + "typeforce": "^1.11.3", + "varuint-bitcoin": "^1.0.4", + "wif": "^2.0.1" + } + }, + "bl": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", + "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "blockstack": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/blockstack/-/blockstack-21.0.0.tgz", + "integrity": "sha512-KH/eg3vlMZc93T4+rIjGwnSROqye/WOr46cDCrcnmkKdeUd2D2i/g5L6S9zTzIWQGQ7HWWLS1FZ9Xk8GcJdBKg==", + "requires": { + "@types/bn.js": "^4.11.6", + "@types/cheerio": "^0.22.13", + "@types/elliptic": "^6.4.10", + "@types/node": "^12.7.12", + "@types/randombytes": "^2.0.0", + "ajv": "^4.11.5", + "bip39": "^3.0.2", + "bitcoinjs-lib": "^5.1.6", + "bn.js": "^4.11.8", + "cross-fetch": "^3.0.4", + "elliptic": "^6.5.1", + "form-data": "^2.5.1", + "jsontokens": "3.0.0", + "query-string": "^6.8.3", + "randombytes": "^2.1.0", + "request": "^2.88.0", + "ripemd160-min": "0.0.5", + "schema-inspector": "^1.6.8", + "sha.js": "^2.4.11", + "tslib": "^1.10.0", + "uuid": "^3.3.3", + "zone-file": "^1.0.0" + }, + "dependencies": { + "@types/node": { + "version": "12.19.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.19.4.tgz", + "integrity": "sha512-o3oj1bETk8kBwzz1WlO6JWL/AfAA3Vm6J1B3C9CsdxHYp7XgPiH7OEXPUbZTndHlRaIElrANkQfe6ZmfJb3H2w==" + }, + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + }, + "ripemd160-min": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/ripemd160-min/-/ripemd160-min-0.0.5.tgz", + "integrity": "sha512-lcz1Gkecuq0zvAeRZUIWE8bJA2PE8F7VfdmRUcIWhXuDtvLQJJJStHi9ZrDlb4mH8JPGDbNDBdDLtIsNrEYARg==" + } + } + }, + "bn.js": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", + "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==" + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "requires": { + "base-x": "^3.0.2" + } + }, + "bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "requires": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "c32check": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/c32check/-/c32check-1.1.2.tgz", + "integrity": "sha512-YgmbvOQ9HfoH7ptW80JP6WJdgoHJFGqFjxaFYvwD+bU5i3dJ44a1LI0yxdiA2n/tVKq9W92tYcFjTP5hGlvhcg==", + "requires": { + "base-x": "^3.0.8", + "buffer": "^5.6.0", + "cross-sha256": "^1.1.2" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-fetch": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.0.6.tgz", + "integrity": "sha512-KBPUbqgFjzWlVcURG+Svp9TlhA5uliYtiNx/0r8nv0pdypeQCRJ9IaSIc3q/x3q8t3F75cHuwxVql1HFGHCNJQ==", + "requires": { + "node-fetch": "2.6.1" + } + }, + "cross-sha256": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/cross-sha256/-/cross-sha256-1.1.2.tgz", + "integrity": "sha512-ZMGqJvPZQY/hmFvTJyM4LGVZIvEqD58GrCWA28goaDdo6wGzjgxWKEDxVfahkNCF/ryxBNfHe3Ql/BMSwPPbcg==", + "requires": { + "@types/node": "^8.0.0", + "buffer": "^5.6.0" + }, + "dependencies": { + "@types/node": { + "version": "8.10.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", + "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==" + } + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "requires": { + "mimic-response": "^2.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "elliptic": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", + "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } + } + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "events": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", + "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==" + }, + "expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + } + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "iced-error": { + "version": "0.0.13", + "resolved": "https://registry.npmjs.org/iced-error/-/iced-error-0.0.13.tgz", + "integrity": "sha512-yEEaG8QfyyRL0SsbNNDw3rVgTyqwHFMCuV6jDvD43f/2shmdaFXkqvFLGhDlsYNSolzYHwVLM/CrXt9GygYopA==" + }, + "iced-lock": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/iced-lock/-/iced-lock-1.1.0.tgz", + "integrity": "sha1-YRbvHKs6zW5rEIk7snumIv0/3nI=", + "requires": { + "iced-runtime": "^1.0.0" + } + }, + "iced-runtime": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/iced-runtime/-/iced-runtime-1.0.4.tgz", + "integrity": "sha512-rgiJXNF6ZgF2Clh/TKUlBDW3q51YPDJUXmxGQXx1b8tbZpVpTn+1RX9q1sjNkujXIIaVxZByQzPHHORg7KV51g==" + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "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==" + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "requires": { + "jsonify": "~0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" + }, + "jsontokens": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsontokens/-/jsontokens-3.0.0.tgz", + "integrity": "sha512-P0QZC5AjOkn3t1ej6OuI7+XqoEctYj83UK4pw0WpHY4/z6a5PpZCJSpp5NZodq94GFkw2PfB9DPFoDM5qpyp/g==", + "requires": { + "@types/elliptic": "^6.4.9", + "asn1.js": "^5.0.1", + "base64url": "^3.0.1", + "ecdsa-sig-formatter": "^1.0.11", + "elliptic": "^6.4.1", + "sha.js": "^2.4.11" + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "merkle-lib": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/merkle-lib/-/merkle-lib-2.0.10.tgz", + "integrity": "sha1-grjbrnXieneFOItz+ddyXQ9vMyY=" + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "requires": { + "mime-db": "1.44.0" + } + }, + "mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, + "more-entropy": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/more-entropy/-/more-entropy-0.0.7.tgz", + "integrity": "sha1-Z7/G96hvJvvDeqyD/UbYjGHRCbU=", + "requires": { + "iced-runtime": ">=0.0.1" + } + }, + "nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==" + }, + "napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + }, + "node-abi": { + "version": "2.19.1", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.19.1.tgz", + "integrity": "sha512-HbtmIuByq44yhAzK7b9j/FelKlHYISKQn0mtvcBrU5QBkhoCMp5bu8Hv5AI34DcKfOAcJBcOEMwLlwO62FFu9A==", + "requires": { + "semver": "^5.4.1" + } + }, + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + }, + "node-hid": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/node-hid/-/node-hid-1.3.0.tgz", + "integrity": "sha512-BA6G4V84kiNd1uAChub/Z/5s/xS3EHBCxotQ0nyYrUG65mXewUDHE1tWOSqA2dp3N+mV0Ffq9wo2AW9t4p/G7g==", + "requires": { + "bindings": "^1.5.0", + "nan": "^2.14.0", + "node-abi": "^2.18.0", + "prebuild-install": "^5.3.4" + } + }, + "noop-logger": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", + "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "pbkdf2": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", + "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "prebuild-install": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.6.tgz", + "integrity": "sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg==", + "requires": { + "detect-libc": "^1.0.3", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^2.7.0", + "noop-logger": "^0.1.1", + "npmlog": "^4.0.1", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^3.0.3", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0", + "which-pm-runs": "^1.0.0" + } + }, + "prettier": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.1.2.tgz", + "integrity": "sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg==" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=" + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "pushdata-bitcoin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pushdata-bitcoin/-/pushdata-bitcoin-1.0.1.tgz", + "integrity": "sha1-FZMdPNlnreUiBvUjqnMxrvfUOvc=", + "requires": { + "bitcoin-ops": "^1.3.0" + } + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "query-string": { + "version": "6.13.7", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.13.7.tgz", + "integrity": "sha512-CsGs8ZYb39zu0WLkeOhe0NMePqgYdAuCqxOYKDR5LVCytDZYMGx3Bb+xypvQvPHVPijRXB0HZNFllCzHRe4gEA==", + "requires": { + "decode-uri-component": "^0.2.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + } + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + } + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "ripemd160-min": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/ripemd160-min/-/ripemd160-min-0.0.6.tgz", + "integrity": "sha512-+GcJgQivhs6S9qvLogusiTcS9kQUfgR75whKuy5jIhuiOfQuJ8fjqxV6EGD5duH1Y/FawFUMtMhyeq3Fbnib8A==" + }, + "rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "requires": { + "tslib": "^1.9.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "schema-inspector": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/schema-inspector/-/schema-inspector-1.7.0.tgz", + "integrity": "sha512-Cj4XP6O3QfDhOq7bIPpz3Ev+sjR++nqFsIggBVIk/8axqFc2p+XSwNBWih9Ut/p8k36f1uCyXB+TzumZUsxVBQ==", + "requires": { + "async": "~2.6.3" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" + }, + "simple-get": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", + "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", + "requires": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "smart-buffer": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", + "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==" + }, + "split-on-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", + "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==" + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=" + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "tar-stream": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.4.tgz", + "integrity": "sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==", + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "tiny-secp256k1": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-1.1.5.tgz", + "integrity": "sha512-duE2hSLSQIpHGzmK48OgRrGTi+4OTkXLC6aa86uOYQ6LLCYZSarVKIAvEtY7MoXjoL6bOXMSerEGMzrvW4SkDw==", + "requires": { + "bindings": "^1.3.0", + "bn.js": "^4.11.8", + "create-hmac": "^1.1.7", + "elliptic": "^6.4.0", + "nan": "^2.13.2" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } + } + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "triplesec": { + "version": "3.0.27", + "resolved": "https://registry.npmjs.org/triplesec/-/triplesec-3.0.27.tgz", + "integrity": "sha512-FDhkxa3JYnPOerOd+8k+SBmm7cb7KkyX+xXwNFV3XV6dsQgHuRvjtbnzWfPJ2kimeR8ErjZfPd/6r7RH6epHDw==", + "requires": { + "iced-error": ">=0.0.9", + "iced-lock": "^1.0.1", + "iced-runtime": "^1.0.2", + "more-entropy": ">=0.0.7", + "progress": "~1.1.2", + "uglify-js": "^3.1.9" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "typeforce": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/typeforce/-/typeforce-1.18.0.tgz", + "integrity": "sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==" + }, + "uglify-js": { + "version": "3.11.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.11.5.tgz", + "integrity": "sha512-btvv/baMqe7HxP7zJSF7Uc16h1mSfuuSplT0/qdjxseesDU+yYzH33eHBH+eMdeRXwujXspaCTooWHQVVBh09w==" + }, + "uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "requires": { + "punycode": "^2.1.0" + } + }, + "usb": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/usb/-/usb-1.6.3.tgz", + "integrity": "sha512-23KYMjaWydACd8wgGKMQ4MNwFspAT6Xeim4/9Onqe5Rz/nMb4TM/WHL+qPT0KNFxzNKzAs63n1xQWGEtgaQ2uw==", + "requires": { + "bindings": "^1.4.0", + "nan": "2.13.2", + "prebuild-install": "^5.3.3" + }, + "dependencies": { + "nan": { + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", + "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==" + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + }, + "varuint-bitcoin": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/varuint-bitcoin/-/varuint-bitcoin-1.1.2.tgz", + "integrity": "sha512-4EVb+w4rx+YfVM32HQX42AbbT7/1f5zwAYhIujKXKk8NQK+JfRVl3pqT3hjNn/L+RstigmGGKVwHA/P0wgITZw==", + "requires": { + "safe-buffer": "^5.1.1" + } + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "which-pm-runs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", + "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=" + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wif": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/wif/-/wif-2.0.6.tgz", + "integrity": "sha1-CNP1IFbGZnkplyb63g1DKudLRwQ=", + "requires": { + "bs58check": "<3.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "zone-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/zone-file/-/zone-file-1.0.0.tgz", + "integrity": "sha512-dJynTf/5XCobE6diQBpNWQQRBzXE8d1QhHKemzrkffrZ36F9uKlbBVyIXXbG2CJoaTGZGh8zt2AHX/mG4txtqA==" + } + } +} diff --git a/app/pages/onboarding/01-welcome/welcome.tsx b/app/pages/onboarding/01-welcome/welcome.tsx index f232fdf..dc1c9e2 100644 --- a/app/pages/onboarding/01-welcome/welcome.tsx +++ b/app/pages/onboarding/01-welcome/welcome.tsx @@ -1,5 +1,6 @@ -import React from 'react'; +import React, { useEffect } from 'react'; import { useHistory } from 'react-router-dom'; +import { writeUnprotectedConfigRequest, readUnprotectedConfigRequest } from 'secure-electron-store'; import routes from '@constants/routes.json'; import { @@ -9,10 +10,29 @@ import { OnboardingText, } from '@components/onboarding'; import { useBackButton } from '@hooks/use-back-url'; +import { useInterval } from '../../../hooks/use-interval'; export const Welcome: React.FC = () => { const history = useHistory(); useBackButton(null); + + // useInterval(() => { + // function run() { + // api.store.send( + // writeUnprotectedConfigRequest, + // (Math.random() * 100).toString(), + // (Math.random() * 100).toString() + // ); + // } + // void run(); + // }, 5000); + + useEffect(() => { + console.log('running once '); + + console.log(api.store.initial()); + }, []); + return ( Stacks Wallet diff --git a/app/pages/onboarding/05-secret-key/secret-key.tsx b/app/pages/onboarding/05-secret-key/secret-key.tsx index 9a7d66c..aa4f341 100644 --- a/app/pages/onboarding/05-secret-key/secret-key.tsx +++ b/app/pages/onboarding/05-secret-key/secret-key.tsx @@ -1,7 +1,7 @@ import React, { useState } from 'react'; import { useSelector } from 'react-redux'; import { useHistory } from 'react-router-dom'; -import log from 'electron-log'; +// import log from 'electron-log'; import { Box, useClipboard, Text, Button } from '@blockstack/ui'; import routes from '@constants/routes.json'; diff --git a/app/preload.js b/app/preload.js index f2a6edb..34fc207 100644 --- a/app/preload.js +++ b/app/preload.js @@ -1,9 +1,9 @@ /* eslint-disable @typescript-eslint/no-var-requires */ console.log('preload'); -const fs = require('fs'); -const { ChainID } = require('@blockstack/stacks-transactions'); const { contextBridge, ipcRenderer, app } = require('electron'); +const fs = require('fs'); +const Store = require('secure-electron-store').default; const scriptsToLoad = []; @@ -20,11 +20,24 @@ if (process.env.START_HOT) { scriptsToLoad.push('./dist/renderer.prod.js'); } +// Create the electron store to be made available in the renderer process +const store = new Store(); + contextBridge.exposeInMainWorld('electron', { scriptsToLoad, __dirname, + __filename, }); + contextBridge.exposeInMainWorld('process', { ...process }); -contextBridge.exposeInMainWorld('fs', fs); -contextBridge.exposeInMainWorld('Buffer', Buffer); +contextBridge.exposeInMainWorld('api', { + // Expose protected methods that allow the renderer process to use + // the ipcRenderer without exposing the entire object + store: store.preloadBindings(ipcRenderer, fs), + + deriveKey: async args => { + console.log('deriveKey', args); + return ipcRenderer.invoke('derive-key', args); + }, +}); diff --git a/app/routes.tsx b/app/routes.tsx index d3a0ce3..d31d7cb 100644 --- a/app/routes.tsx +++ b/app/routes.tsx @@ -3,30 +3,30 @@ import { Switch, Route, Redirect } from 'react-router-dom'; import { useStore } from 'react-redux'; import routes from './constants/routes.json'; -// import { Home } from './pages/home/home'; +import { Home } from './pages/home/home'; import { selectAddress } from './store/keys/keys.reducer'; import { Terms, Welcome, - // CreateWallet, - // RestoreWallet, - // GeneratingSecret, - // ConnectLedger, - // SecretKey, - // VerifyKey, - // SetPassword, + CreateWallet, + RestoreWallet, + GeneratingSecret, + ConnectLedger, + SecretKey, + VerifyKey, + SetPassword, } from './pages/onboarding'; import { App } from './pages/app'; -// import { Settings } from './pages/settings/settings'; -// import { Stacking } from './pages/stacking/stacking'; +import { Settings } from './pages/settings/settings'; +import { Stacking } from './pages/stacking/stacking'; export const routerConfig = [ - // { - // path: routes.HOME, - // component: Home, - // }, + { + path: routes.HOME, + component: Home, + }, { path: routes.TERMS, component: Terms, @@ -35,46 +35,46 @@ export const routerConfig = [ path: routes.WELCOME, component: Welcome, }, - // { - // path: routes.CREATE, - // component: CreateWallet, - // }, - // { - // path: routes.RESTORE, - // component: RestoreWallet, - // }, - // { - // path: routes.GENERATING, - // component: GeneratingSecret, - // }, - // { - // path: routes.CONNECT_LEDGER, - // component: ConnectLedger, - // }, - // { - // path: routes.SECRET_KEY, - // component: SecretKey, - // }, - // { - // path: routes.VERIFY_KEY, - // component: VerifyKey, - // }, - // { - // path: routes.SET_PASSWORD, - // component: SetPassword, - // }, - // { - // path: routes.SET_PASSWORD, - // component: SetPassword, - // }, - // { - // path: routes.SETTINGS, - // component: Settings, - // }, - // { - // path: routes.STACKING, - // component: Stacking, - // }, + { + path: routes.CREATE, + component: CreateWallet, + }, + { + path: routes.RESTORE, + component: RestoreWallet, + }, + { + path: routes.GENERATING, + component: GeneratingSecret, + }, + { + path: routes.CONNECT_LEDGER, + component: ConnectLedger, + }, + { + path: routes.SECRET_KEY, + component: SecretKey, + }, + { + path: routes.VERIFY_KEY, + component: VerifyKey, + }, + { + path: routes.SET_PASSWORD, + component: SetPassword, + }, + { + path: routes.SET_PASSWORD, + component: SetPassword, + }, + { + path: routes.SETTINGS, + component: Settings, + }, + { + path: routes.STACKING, + component: Stacking, + }, ]; const getAppStartingRoute = (address?: string) => (!!address ? routes.HOME : routes.TERMS); diff --git a/app/store/index.ts b/app/store/index.ts index 82f40db..b609bbd 100644 --- a/app/store/index.ts +++ b/app/store/index.ts @@ -31,7 +31,7 @@ export type Store = ReduxStore>; export const persistConfig: PersistConfig = { key: 'root', - // storage: reduxPersistElectronStore(), + storage: reduxPersistElectronStore(), whitelist: ['stacksNode'], }; diff --git a/app/store/keys/keys.actions.ts b/app/store/keys/keys.actions.ts index 1374a7d..46878de 100644 --- a/app/store/keys/keys.actions.ts +++ b/app/store/keys/keys.actions.ts @@ -1,7 +1,7 @@ import { useHistory } from 'react-router'; import { push } from 'connected-react-router'; import { createAction, Dispatch } from '@reduxjs/toolkit'; -import log from 'electron-log'; +// import log from 'electron-log'; import { generateMnemonicRootKeychain, deriveRootKeychainFromMnemonic } from '@stacks/keychain'; import { RootState } from '..'; @@ -14,7 +14,7 @@ import { persistWalletType, persistPublicKey, } from '@utils/disk-store'; -import { generateSalt, deriveKey } from '../../crypto/key-generation'; +import { generateSalt } from '../../crypto/key-generation'; import { deriveStxAddressKeychain } from '../../crypto/derive-address-keychain'; import { encryptMnemonic, decryptMnemonic } from '../../crypto/key-encryption'; @@ -74,7 +74,7 @@ export function setSoftwareWallet({ password, history }: SetSoftwareWallet) { return async (dispatch: Dispatch, getState: () => RootState) => { const mnemonic = selectMnemonic(getState()); const salt = generateSalt(); - const { derivedKeyHash } = await deriveKey({ pass: password, salt }); + const { derivedKeyHash } = await api.deriveKey({ pass: password, salt }); if (!mnemonic) { // log.error('Cannot derive encryption key unless a mnemonic has been generated'); @@ -99,7 +99,7 @@ interface DecryptSoftwareWalletArgs { } export async function decryptSoftwareWallet(args: DecryptSoftwareWalletArgs) { const { password, salt, ciphertextMnemonic } = args; - const { derivedKeyHash } = await deriveKey({ pass: password, salt }); + const { derivedKeyHash } = await api.deriveKey({ pass: password, salt }); const plaintextMnemonic = await decryptMnemonic({ encryptedMnemonic: ciphertextMnemonic, derivedKeyHash, diff --git a/app/store/keys/keys.reducer.ts b/app/store/keys/keys.reducer.ts index f34ced5..6586dbc 100644 --- a/app/store/keys/keys.reducer.ts +++ b/app/store/keys/keys.reducer.ts @@ -1,5 +1,5 @@ import { createReducer, createSelector } from '@reduxjs/toolkit'; -import log from 'electron-log'; +// import log from 'electron-log'; import { RootState } from '..'; import { WalletType } from '../../types/wallet-type'; diff --git a/app/types/index.ts b/app/types/index.ts index 8b65dbc..d51a54c 100644 --- a/app/types/index.ts +++ b/app/types/index.ts @@ -9,3 +9,40 @@ declare module '*.woff2' { // eslint-disable-next-line import/no-default-export export default content; } + +declare module 'secure-electron-store' { + const content: { + new (x: any): any; + }; + const readConfigRequest: any; + const readConfigResponse: any; + const writeConfigRequest: any; + const clearRendererBindings: any; + const readUnprotectedConfigRequest: any; + const writeUnprotectedConfigRequest: any; + export { + readConfigRequest, + readConfigResponse, + writeConfigRequest, + writeUnprotectedConfigRequest, + readUnprotectedConfigRequest, + clearRendererBindings, + }; + // eslint-disable-next-line import/no-default-export + export default content; +} + +declare const api: { + deriveKey: ({ + pass, + salt, + }: { + pass: string; + salt: string; + }) => Promise<{ derivedKeyHash: Uint8Array }>; + store: { + send(readOrWriteConfig: any, key: string, value?: any): void; + onReceive(readOrWriteConfig: any, key: (val: any) => void): void; + initial(): any; + }; +}; diff --git a/app/utils/external-links.ts b/app/utils/external-links.ts index 4c585bf..e3ccc85 100644 --- a/app/utils/external-links.ts +++ b/app/utils/external-links.ts @@ -7,9 +7,9 @@ export async function openExternalLink(url: string) { } export function makeExplorerLink(txId: string) { - return `https://testnet-explorer.blockstack.org/txid/${txId}?w`; + // return `https://testnet-explorer.blockstack.org/txid/${txId}?w`; } export async function openInExplorer(txid: string) { - return openExternalLink(makeExplorerLink(txid)); + // return openExternalLink(makeExplorerLink(txid)); } diff --git a/configs/webpack.config.base.js b/configs/webpack.config.base.js index 6a92302..8bb3292 100644 --- a/configs/webpack.config.base.js +++ b/configs/webpack.config.base.js @@ -4,15 +4,17 @@ import path from 'path'; import webpack from 'webpack'; -import { dependencies as externals } from '../app/package.json'; import TsconfigPathsPlugin from 'tsconfig-paths-webpack-plugin'; +import { dependencies as externals } from '../app/package.json'; // eslint-disable-next-line import/no-default-export export default { - externals: [...Object.keys(externals || {})], + target: 'web', + + // externals: [...Object.keys(externals || {})], module: { - noParse: /\.wasm$/, + noParse: [/\.wasm$/], rules: [ { test: /\.tsx?$/, @@ -49,7 +51,7 @@ export default { output: { path: path.join(__dirname, '..', 'app'), // https://github.com/webpack/webpack/issues/1114 - libraryTarget: 'commonjs2', + // libraryTarget: 'commonjs2', }, /** @@ -61,12 +63,14 @@ export default { plugins: [new TsconfigPathsPlugin()], }, + optimization: { + namedModules: true, + }, + plugins: [ new webpack.EnvironmentPlugin({ NODE_ENV: 'production', SHA: '', }), - - new webpack.NamedModulesPlugin(), ], }; diff --git a/configs/webpack.config.main.prod.babel.js b/configs/webpack.config.main.prod.babel.js index 288de50..2dda25a 100644 --- a/configs/webpack.config.main.prod.babel.js +++ b/configs/webpack.config.main.prod.babel.js @@ -6,7 +6,7 @@ import path from 'path'; import webpack from 'webpack'; -import merge from 'webpack-merge'; +import { merge } from 'webpack-merge'; import TerserPlugin from 'terser-webpack-plugin'; import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer'; import baseConfig from './webpack.config.base'; @@ -17,7 +17,7 @@ CheckNodeEnv('production'); DeleteSourceMaps(); // eslint-disable-next-line import/no-default-export -export default merge.smart(baseConfig, { +export default merge(baseConfig, { devtool: process.env.DEBUG_PROD === 'true' ? 'source-map' : 'none', mode: 'production', @@ -31,18 +31,18 @@ export default merge.smart(baseConfig, { filename: './app/main.prod.js', }, - optimization: { - minimizer: process.env.E2E_BUILD - ? [] - : [ - // eslint-disable-next-line @typescript-eslint/no-unsafe-call - new TerserPlugin({ - parallel: true, - sourceMap: true, - cache: true, - }), - ], - }, + // optimization: { + // minimizer: process.env.E2E_BUILD + // ? [] + // : [ + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + // new TerserPlugin({ + // parallel: true, + // sourceMap: true, + // cache: true, + // }), + // ], + // }, plugins: [ // eslint-disable-next-line @typescript-eslint/no-unsafe-call diff --git a/configs/webpack.config.renderer.dev.babel.js b/configs/webpack.config.renderer.dev.babel.js index b0948f9..9391e35 100644 --- a/configs/webpack.config.renderer.dev.babel.js +++ b/configs/webpack.config.renderer.dev.babel.js @@ -10,7 +10,7 @@ import fs from 'fs'; import webpack from 'webpack'; import chalk from 'chalk'; import CopyPlugin from 'copy-webpack-plugin'; -import merge from 'webpack-merge'; +import { merge } from 'webpack-merge'; import { spawn, execSync } from 'child_process'; import baseConfig from './webpack.config.base'; import CheckNodeEnv from '../internals/scripts/CheckNodeEnv'; @@ -40,14 +40,16 @@ if (!requiredByDLLConfig && !(fs.existsSync(dll) && fs.existsSync(manifest))) { } // eslint-disable-next-line import/no-default-export -export default merge.smart(baseConfig, { - devtool: 'source-map', +export default merge(baseConfig, { + devtool: 'inline-source-map', mode: 'development', // target: 'electron-renderer', entry: [ + 'core-js', + 'regenerator-runtime/runtime', ...(process.env.PLAIN_HMR ? [] : ['react-hot-loader/patch']), `webpack-dev-server/client?http://localhost:${port}/`, 'webpack/hot/only-dev-server', @@ -57,7 +59,6 @@ export default merge.smart(baseConfig, { output: { publicPath: `http://localhost:${port}/dist/`, filename: 'renderer.dev.js', - libraryTarget: 'var', }, module: { @@ -105,7 +106,6 @@ export default merge.smart(baseConfig, { resolve: { alias: { 'react-dom': '@hot-loader/react-dom', - // buffer: }, }, plugins: [ @@ -145,6 +145,10 @@ export default merge.smart(baseConfig, { debug: true, }), + new webpack.ProvidePlugin({ + Buffer: ['buffer', 'Buffer'], + }), + new CopyPlugin({ patterns: [{ from: 'node_modules/argon2-browser/dist/argon2.wasm', to: '.' }], }), @@ -159,7 +163,7 @@ export default merge.smart(baseConfig, { port, publicPath, compress: true, - noInfo: true, + noInfo: false, stats: 'errors-only', inline: true, lazy: false, diff --git a/configs/webpack.config.renderer.dev.dll.babel.js b/configs/webpack.config.renderer.dev.dll.babel.js index 4e6b5de..e5c32da 100644 --- a/configs/webpack.config.renderer.dev.dll.babel.js +++ b/configs/webpack.config.renderer.dev.dll.babel.js @@ -4,7 +4,7 @@ import webpack from 'webpack'; import path from 'path'; -import merge from 'webpack-merge'; +import { merge } from 'webpack-merge'; import baseConfig from './webpack.config.base'; import { dependencies } from '../package.json'; import CheckNodeEnv from '../internals/scripts/CheckNodeEnv'; @@ -14,10 +14,10 @@ CheckNodeEnv('development'); const dist = path.join(__dirname, '..', 'dll'); // eslint-disable-next-line import/no-default-export -export default merge.smart(baseConfig, { +export default merge(baseConfig, { context: path.join(__dirname, '..'), - devtool: 'inline-source-map', + devtool: 'eval', mode: 'development', @@ -36,10 +36,10 @@ export default merge.smart(baseConfig, { }, output: { - // library: 'renderer', + library: 'renderer', path: dist, filename: '[name].dev.dll.js', - libraryTarget: 'window', + libraryTarget: 'var', }, plugins: [ diff --git a/configs/webpack.config.renderer.prod.babel.js b/configs/webpack.config.renderer.prod.babel.js index 1712609..5fa76ac 100644 --- a/configs/webpack.config.renderer.prod.babel.js +++ b/configs/webpack.config.renderer.prod.babel.js @@ -5,7 +5,7 @@ import path from 'path'; import webpack from 'webpack'; import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer'; -import merge from 'webpack-merge'; +import { merge } from 'webpack-merge'; import CopyPlugin from 'copy-webpack-plugin'; import TerserPlugin from 'terser-webpack-plugin'; import baseConfig from './webpack.config.base'; @@ -16,12 +16,13 @@ CheckNodeEnv('production'); DeleteSourceMaps(); // eslint-disable-next-line import/no-default-export -export default merge.smart(baseConfig, { +export default merge(baseConfig, { devtool: process.env.DEBUG_PROD === 'true' ? 'source-map' : 'none', - mode: 'production', + mode: 'development', - target: 'electron-renderer', + // target: 'electron-renderer', + target: 'web', entry: ['core-js', 'regenerator-runtime/runtime', path.join(__dirname, '..', 'app/index.tsx')], @@ -29,6 +30,7 @@ export default merge.smart(baseConfig, { path: path.join(__dirname, '..', 'app/dist'), publicPath: './dist/', filename: 'renderer.prod.js', + libraryTarget: 'var', }, module: { @@ -124,8 +126,13 @@ export default merge.smart(baseConfig, { openAnalyzer: process.env.OPEN_ANALYZER === 'true', }), + new webpack.ProvidePlugin({ + Buffer: ['buffer', 'Buffer'], + }), + new CopyPlugin({ patterns: [{ from: 'node_modules/argon2-browser/dist/argon2.wasm', to: '.' }], + patterns: [{ from: 'app/preload.js', to: '.' }], }), ], }); diff --git a/package.json b/package.json index 1a061b8..e91ea6a 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,8 @@ "app.html", "main.prod.js", "main.prod.js.map", - "package.json" + "package.json", + "preload.js" ], "dmg": { "contents": [ @@ -278,12 +279,11 @@ "ts-jest": "26.4.3", "tsconfig-paths-webpack-plugin": "3.3.0", "url-loader": "4.1.1", - "webpack": "4.44.1", - "webpack-bundle-analyzer": "3.8.0", - "webpack-cli": "3.3.12", - "webpack-dev-server": "3.11.0", - "webpack-merge": "4.2.2", - "yarn": "1.22.5" + "webpack": "^4.43.0", + "webpack-bundle-analyzer": "^3.8.0", + "webpack-cli": "^3.3.12", + "webpack-dev-server": "^3.11.0", + "webpack-merge": "^5.0.9" }, "dependencies": { "@blockstack/rpc-client": "0.3.0-alpha.22", @@ -312,7 +312,7 @@ "electron-context-menu": "2.3.0", "electron-debug": "3.1.0", "electron-log": "4.2.2", - "electron-store": "6.0.0", + "electron-store": "6.0.1", "electron-updater": "4.3.1", "electron-window-state": "5.0.3", "formik": "2.2.1", @@ -334,6 +334,7 @@ "redux-persist-transform-encrypt": "2.0.1", "redux-thunk": "2.3.0", "rpc-websocket-client": "1.1.4", + "secure-electron-store": "1.3.3", "source-map-support": "0.5.19", "styled-components": "5.1.1", "typescript": "4.0.2", diff --git a/yarn.lock b/yarn.lock index 25613ae..4871ae4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2057,6 +2057,11 @@ resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-5.26.0.tgz#171bd471265259663520abb02a0eed80e949e3a1" integrity sha512-/3EKvS9eHzKl9Om+t//SPnzJaahIoVIUlozLMSarINyO7SSh174kxl3jTNHBl7dLxvkQyDDs5imLvP04ohlQaw== +"@msgpack/msgpack@^2.1.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@msgpack/msgpack/-/msgpack-2.3.0.tgz#a9043b920837b2dd63482e7bf6b8345813e9816b" + integrity sha512-xxRejzNpiVQ2lzxMG/yo2ocfZSk+cKo2THq54AimaubMucg66DpQm9Yj7ESMr/l2EqDkmF2Dx4r0F/cbsitAaw== + "@nodelib/fs.scandir@2.1.3": version "2.1.3" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" @@ -3321,7 +3326,7 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.0, ajv@^6.12.2, ajv@^6.12.3, ajv@^6.12.4: +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.0, ajv@^6.12.3, ajv@^6.12.4: version "6.12.4" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.4.tgz#0614facc4522127fa713445c6bfd3ebd376e2234" integrity sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ== @@ -3331,7 +3336,7 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.0, ajv@^6.12.2, ajv@^6.12.3, ajv json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^6.12.5: +ajv@^6.12.2, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -3724,9 +3729,9 @@ atob@^2.1.2: integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== atomically@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/atomically/-/atomically-1.3.2.tgz#721156e5c4f03e768ab54f3e6c9dc550d4690761" - integrity sha512-MAiqx5ir1nOoMeG2vLXJnj4oFROJYB1hMqa2aAo6GQVIkPdkIcrq9W9SR0OaRtvEowO7Y2bsXqKFuDMTO4iOAQ== + version "1.7.0" + resolved "https://registry.yarnpkg.com/atomically/-/atomically-1.7.0.tgz#c07a0458432ea6dbc9a3506fffa424b48bccaafe" + integrity sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w== aws-sign2@~0.7.0: version "0.7.0" @@ -4639,6 +4644,15 @@ cliui@^6.0.0: strip-ansi "^6.0.0" wrap-ansi "^6.2.0" +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + clone-response@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" @@ -4814,7 +4828,7 @@ concurrently@5.3.0: tree-kill "^1.2.2" yargs "^13.3.0" -conf@^7.1.1: +conf@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/conf/-/conf-7.1.2.tgz#d9678a9d8f04de8bf5cd475105da8fdae49c2ec4" integrity sha512-r8/HEoWPFn4CztjhMJaWNAe5n+gPUCSaJ0oufbqDLFKsA1V8JjAG7G+p0pgoDFAws9Bpk2VtVLLXqOBA7WxLeg== @@ -5790,12 +5804,12 @@ electron-rebuild@1.11.0: spawn-rx "^3.0.0" yargs "^14.2.0" -electron-store@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/electron-store/-/electron-store-6.0.0.tgz#92a5f8295a326f074281ae0d6a307454e6f68243" - integrity sha512-ujb0a/6gxMxb9vOQ2BjOehK9VCyq5OKvttekd9v/tohA9oBHnAdV+Vxu4eoRh+/F9ShPFhcvDZkMdqO5i+TXUw== +electron-store@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/electron-store/-/electron-store-6.0.1.tgz#2178b9dc37aeb749d99cf9d1d1bc090890b922dc" + integrity sha512-8rdM0XEmDGsLuZM2oRABzsLX+XmD5x3rwxPMEPv0MrN9/BWanyy3ilb2v+tCrKtIZVF3MxUiZ9Bfqe8e0popKQ== dependencies: - conf "^7.1.1" + conf "^7.1.2" type-fest "^0.16.0" electron-to-chromium@^1.3.562: @@ -11440,6 +11454,13 @@ schema-utils@^3.0.0: ajv "^6.12.5" ajv-keywords "^3.5.2" +secure-electron-store@1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/secure-electron-store/-/secure-electron-store-1.3.3.tgz#f9d24ee3a597a179473b398e00c15f1c75115d3f" + integrity sha512-mlhqmJqjMbLWKUIFTxHNQlAaRq+7Mzqs96z3nJq1p1qKN/YLTTjqOLrAd+S8Jfau49SE5kSW2qzv831o1AZpfg== + dependencies: + "@msgpack/msgpack" "^2.1.0" + select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" @@ -11600,6 +11621,13 @@ sha.js@^2.4.0, sha.js@^2.4.11, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + shallowequal@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" @@ -13084,23 +13112,23 @@ warning@^4.0.2, warning@^4.0.3: dependencies: loose-envify "^1.0.0" -watchpack-chokidar2@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0" - integrity sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA== +watchpack-chokidar2@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" + integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== dependencies: chokidar "^2.1.8" watchpack@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.4.tgz#6e9da53b3c80bb2d6508188f5b200410866cd30b" - integrity sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg== + version "1.7.5" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" + integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== dependencies: graceful-fs "^4.1.2" neo-async "^2.5.0" optionalDependencies: chokidar "^3.4.1" - watchpack-chokidar2 "^2.0.0" + watchpack-chokidar2 "^2.0.1" wbuf@^1.1.0, wbuf@^1.7.3: version "1.7.3" @@ -13126,10 +13154,10 @@ webidl-conversions@^6.1.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== -webpack-bundle-analyzer@3.8.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.8.0.tgz#ce6b3f908daf069fd1f7266f692cbb3bded9ba16" - integrity sha512-PODQhAYVEourCcOuU+NiYI7WdR8QyELZGgPvB1y2tjbUpbmcQOt5Q7jEK+ttd5se0KSBKD9SXHCEozS++Wllmw== +webpack-bundle-analyzer@^3.8.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz#f6f94db108fb574e415ad313de41a2707d33ef3c" + integrity sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA== dependencies: acorn "^7.1.1" acorn-walk "^7.1.1" @@ -13140,12 +13168,12 @@ webpack-bundle-analyzer@3.8.0: express "^4.16.3" filesize "^3.6.1" gzip-size "^5.0.0" - lodash "^4.17.15" + lodash "^4.17.19" mkdirp "^0.5.1" opener "^1.5.1" ws "^6.0.0" -webpack-cli@3.3.12: +webpack-cli@^3.3.12: version "3.3.12" resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.12.tgz#94e9ada081453cd0aa609c99e500012fd3ad2d4a" integrity sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag== @@ -13173,7 +13201,7 @@ webpack-dev-middleware@^3.7.2: range-parser "^1.2.1" webpack-log "^2.0.0" -webpack-dev-server@3.11.0: +webpack-dev-server@^3.11.0: version "3.11.0" resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz#8f154a3bce1bcfd1cc618ef4e703278855e7ff8c" integrity sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg== @@ -13220,12 +13248,13 @@ webpack-log@^2.0.0: ansi-colors "^3.0.0" uuid "^3.3.2" -webpack-merge@4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d" - integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== +webpack-merge@^5.0.9: + version "5.3.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.3.0.tgz#a80df44d35fabace680bf430a19fda9ec49ed8eb" + integrity sha512-4PtsBAWnmJULIJYviiPq4BxwAykbAgGMheyEVaemj2bJI54h+p/gnlbXZEH2EM0IYC3blOE1Qm6kzKlc06N1UQ== dependencies: - lodash "^4.17.15" + clone-deep "^4.0.1" + wildcard "^2.0.0" webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: version "1.4.3" @@ -13235,10 +13264,10 @@ webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: source-list-map "^2.0.0" source-map "~0.6.1" -webpack@4.44.1: - version "4.44.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.1.tgz#17e69fff9f321b8f117d1fda714edfc0b939cc21" - integrity sha512-4UOGAohv/VGUNQJstzEywwNxqX417FnjZgZJpJQegddzPmTvph37eBIRbRTfdySXzVtJXLJfbMN3mMYhM6GdmQ== +webpack@^4.43.0: + version "4.44.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.2.tgz#6bfe2b0af055c8b2d1e90ed2cd9363f841266b72" + integrity sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q== dependencies: "@webassemblyjs/ast" "1.9.0" "@webassemblyjs/helper-module-context" "1.9.0" @@ -13349,6 +13378,11 @@ widest-line@^3.1.0: dependencies: string-width "^4.0.0" +wildcard@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" + integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== + word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" @@ -13547,11 +13581,6 @@ yargs@^15.1.0, yargs@^15.3.1, yargs@^15.4.1: y18n "^4.0.0" yargs-parser "^18.1.2" -yarn@1.22.5: - version "1.22.5" - resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.5.tgz#1933b7635429ca00847222dd9d38f05646e2df23" - integrity sha512-5uzKXwdMc++mYktXqkfpNYT9tY8ViWegU58Hgbo+KXzrzzhEyP1Ip+BTtXloLrXNcNlxFJbLiFKGaS9vK9ym6Q== - yauzl@^2.10.0: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"