diff --git a/package.json b/package.json index 45796e16..20b9d6ab 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "@ledgerhq/hw-app-eth": "^4.7.3", "@ledgerhq/hw-transport": "^4.7.3", "@ledgerhq/hw-transport-node-hid": "^4.7.6", - "@ledgerhq/wallet-common": "^0.13.2", + "@ledgerhq/wallet-common": "^1.2.0", "axios": "^0.18.0", "babel-runtime": "^6.26.0", "bcryptjs": "^2.4.3", diff --git a/src/components/OperationsList/Operation.js b/src/components/OperationsList/Operation.js new file mode 100644 index 00000000..f417188e --- /dev/null +++ b/src/components/OperationsList/Operation.js @@ -0,0 +1,209 @@ +// @flow + +import React, { PureComponent } from 'react' +import { connect } from 'react-redux' +import styled from 'styled-components' +import moment from 'moment' +import noop from 'lodash/noop' +import { getIconByCoinType } from '@ledgerhq/currencies/react' + +import type { Account, Operation as OperationType } from '@ledgerhq/wallet-common/lib/types' + +import type { T } from 'types/common' + +import { currencySettingsSelector, marketIndicatorSelector } from 'reducers/settings' +import { rgba, getMarketColor } from 'styles/helpers' + +import Box from 'components/base/Box' +import Text from 'components/base/Text' +import CounterValue from 'components/CounterValue' +import FormattedVal from 'components/base/FormattedVal' + +import ConfirmationCheck from './ConfirmationCheck' + +const mapStateToProps = (state, props) => ({ + minConfirmations: currencySettingsSelector(state, props.account.currency).confirmationsNb, + marketIndicator: marketIndicatorSelector(state), +}) + +const DATE_COL_SIZE = 100 +const ACCOUNT_COL_SIZE = 150 +const AMOUNT_COL_SIZE = 150 +const CONFIRMATION_COL_SIZE = 44 + +const OperationRaw = styled(Box).attrs({ + horizontal: true, + alignItems: 'center', +})` + cursor: pointer; + border-bottom: 1px solid ${p => p.theme.colors.lightGrey}; + height: 68px; + + &:last-child { + border-bottom: 0; + } + + &:hover { + background: ${p => rgba(p.theme.colors.wallet, 0.04)}; + } +` + +const Address = ({ value }: { value: string }) => { + const addrSize = value.length / 2 + + const left = value.slice(0, 10) + const right = value.slice(-addrSize) + const middle = value.slice(10, -addrSize) + + return ( + +
{left}
+ {middle} +
{right}
+
+ ) +} + +const AddressEllipsis = styled.div` + display: block; + flex-shrink: 1; + min-width: 20px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +` + +const Day = styled(Text).attrs({ + color: 'dark', + fontSize: 3, + ff: 'Open Sans', +})` + letter-spacing: 0.3px; + text-transform: uppercase; +` + +const Hour = styled(Day).attrs({ + color: 'grey', +})`` + +const Cell = styled(Box).attrs({ + px: 4, + horizontal: true, + alignItems: 'center', +})` + width: ${p => (p.size ? `${p.size}px` : '')}; + overflow: ${p => (p.noOverflow ? 'hidden' : '')}; +` + +type Props = { + account: Account, + minConfirmations: number, + onAccountClick: Function, + onOperationClick: Function, + marketIndicator: string, + t: T, + op: OperationType, + withAccount?: boolean, +} + +class Operation extends PureComponent { + static defaultProps = { + onAccountClick: noop, + onOperationClick: noop, + withAccount: false, + } + + render() { + const { + account, + minConfirmations, + onAccountClick, + onOperationClick, + t, + op, + withAccount, + marketIndicator, + } = this.props + const { unit, currency } = account + const time = moment(op.date) + const Icon = getIconByCoinType(account.currency.coinType) + const isNegative = op.amount < 0 + const type = !isNegative ? 'from' : 'to' + + const marketColor = getMarketColor({ + marketIndicator, + isNegative, + }) + + return ( + onOperationClick({ operation: op, account, type, marketColor })}> + + + + + + + {t(`operationsList:${type}`)} + + {time.format('HH:mm')} + + + {withAccount && + account && ( + { + e.stopPropagation() + onAccountClick(account) + }} + > + + {Icon && } + + + {account.name} + + + )} + +
+ + + + + + + + + ) + } +} + +export default connect(mapStateToProps)(Operation) diff --git a/src/components/OperationsList/index.js b/src/components/OperationsList/index.js index c36ae15b..4d31a567 100644 --- a/src/components/OperationsList/index.js +++ b/src/components/OperationsList/index.js @@ -6,19 +6,17 @@ import moment from 'moment' import { connect } from 'react-redux' import { compose } from 'redux' import { translate } from 'react-i18next' -import { getIconByCoinType } from '@ledgerhq/currencies/react' import { groupAccountOperationsByDay, groupAccountsOperationsByDay, } from '@ledgerhq/wallet-common/lib/helpers/account' -import type { Account, Operation as OperationType } from '@ledgerhq/wallet-common/lib/types' + +import type { Account } from '@ledgerhq/wallet-common/lib/types' import noop from 'lodash/noop' import keyBy from 'lodash/keyBy' -import { getMarketColor, rgba } from 'styles/helpers' - -import type { Settings, T } from 'types/common' +import type { T } from 'types/common' import { MODAL_OPERATION_DETAILS } from 'config/constants' @@ -27,17 +25,10 @@ import { openModal } from 'reducers/modals' import IconAngleDown from 'icons/AngleDown' import Box, { Card } from 'components/base/Box' -import CounterValue from 'components/CounterValue' -import FormattedVal from 'components/base/FormattedVal' import Text from 'components/base/Text' import Defer from 'components/base/Defer' -import ConfirmationCheck from './ConfirmationCheck' - -const DATE_COL_SIZE = 100 -const ACCOUNT_COL_SIZE = 150 -const AMOUNT_COL_SIZE = 150 -const CONFIRMATION_COL_SIZE = 44 +import Operation from './Operation' const calendarOpts = { sameDay: 'LL – [Today]', @@ -47,45 +38,6 @@ const calendarOpts = { sameElse: 'LL', } -const Day = styled(Text).attrs({ - color: 'dark', - fontSize: 3, - ff: 'Open Sans', -})` - letter-spacing: 0.3px; - text-transform: uppercase; -` - -const Hour = styled(Day).attrs({ - color: 'grey', -})`` - -const OperationRaw = styled(Box).attrs({ - horizontal: true, - alignItems: 'center', -})` - cursor: pointer; - border-bottom: 1px solid ${p => p.theme.colors.lightGrey}; - height: 68px; - - &:last-child { - border-bottom: 0; - } - - &:hover { - background: ${p => rgba(p.theme.colors.wallet, 0.04)}; - } -` - -const Cell = styled(Box).attrs({ - px: 4, - horizontal: true, - alignItems: 'center', -})` - width: ${p => (p.size ? `${p.size}px` : '')}; - overflow: ${p => (p.noOverflow ? 'hidden' : '')}; -` - const ShowMore = styled(Box).attrs({ horizontal: true, flow: 1, @@ -102,141 +54,6 @@ const ShowMore = styled(Box).attrs({ } ` -const AddressEllipsis = styled.div` - display: block; - flex-shrink: 1; - min-width: 20px; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -` - -const Address = ({ value }: { value: string }) => { - const addrSize = value.length / 2 - - const left = value.slice(0, 10) - const right = value.slice(-addrSize) - const middle = value.slice(10, -addrSize) - - return ( - -
{left}
- {middle} -
{right}
-
- ) -} - -const Operation = ({ - account, - minConfirmations, - onAccountClick, - onOperationClick, - t, - op, - withAccount, - marketIndicator, -}: { - account: Account, - minConfirmations: number, - onAccountClick: Function, - onOperationClick: Function, - t: T, - op: OperationType, - withAccount?: boolean, - marketIndicator: string, -}) => { - const { unit, currency } = account - const time = moment(op.date) - const Icon = getIconByCoinType(account.currency.coinType) - const isNegative = op.amount < 0 - const type = !isNegative ? 'from' : 'to' - - const marketColor = getMarketColor({ - marketIndicator, - isNegative, - }) - - return ( - onOperationClick({ operation: op, account, type, marketColor })}> - - - - - - - {t(`operationsList:${type}`)} - - {time.format('HH:mm')} - - - {withAccount && - account && ( - { - e.stopPropagation() - onAccountClick(account) - }} - > - - {Icon && } - - - {account.name} - - - )} - -
- - - - - - - - - ) -} - -Operation.defaultProps = { - onAccountClick: noop, - onOperationClick: noop, - withAccount: false, -} - -const mapStateToProps = state => ({ - settings: state.settings, -}) - const mapDispatchToProps = { openModal, } @@ -251,7 +68,6 @@ type Props = { withAccount?: boolean, nbToShow: number, title?: string, - settings: Settings, } export class OperationsList extends PureComponent { @@ -271,7 +87,6 @@ export class OperationsList extends PureComponent { canShowMore, nbToShow, onAccountClick, - settings, t, title, withAccount, @@ -295,7 +110,7 @@ export class OperationsList extends PureComponent { {title} )} - {groupedOperations.map(group => { + {groupedOperations.sections.map(group => { const d = moment(group.day) return ( @@ -312,8 +127,6 @@ export class OperationsList extends PureComponent { { } } -export default compose(translate(), connect(mapStateToProps, mapDispatchToProps))(OperationsList) +export default compose(translate(), connect(null, mapDispatchToProps))(OperationsList) diff --git a/src/components/SettingsPage/sections/Currencies.js b/src/components/SettingsPage/sections/Currencies.js index 22e6f72d..1f71fbdf 100644 --- a/src/components/SettingsPage/sections/Currencies.js +++ b/src/components/SettingsPage/sections/Currencies.js @@ -25,9 +25,6 @@ import { // instead of using same default for all. // const CURRENCY_DEFAULTS_SETTINGS: CurrencySettings = { - // will be overwritten - coinType: 0, - confirmationsToSpend: 10, minConfirmationsToSpend: 10, maxConfirmationsToSpend: 50, @@ -57,7 +54,7 @@ class TabCurrencies extends PureComponent { getCurrencySettings() { const { settings } = this.props const { currency } = this.state - return settings.currencies.find(c => c.coinType === currency.coinType) + return settings.currenciesSettings[currency.coinType] } handleChangeCurrency = (currency: Currency) => this.setState({ currency }) @@ -73,23 +70,23 @@ class TabCurrencies extends PureComponent { const currencySettings = this.getCurrencySettings() let newCurrenciesSettings = [] if (!currencySettings) { - newCurrenciesSettings = [ - ...settings.currencies, - { + newCurrenciesSettings = { + ...settings.currenciesSettings, + [currency.coinType]: { ...CURRENCY_DEFAULTS_SETTINGS, - coinType: currency.coinType, [key]: val, }, - ] + } } else { - newCurrenciesSettings = settings.currencies.map(c => { - if (c.coinType !== currency.coinType) { - return c - } - return { ...c, [key]: val } - }) + newCurrenciesSettings = { + ...settings.currenciesSettings, + [currency.coinType]: { + ...currencySettings, + [key]: val, + }, + } } - saveSettings({ currencies: newCurrenciesSettings }) + saveSettings({ currenciesSettings: newCurrenciesSettings }) } render() { diff --git a/src/components/modals/OperationDetails.js b/src/components/modals/OperationDetails.js index 89da1583..ccbbc8db 100644 --- a/src/components/modals/OperationDetails.js +++ b/src/components/modals/OperationDetails.js @@ -1,11 +1,13 @@ // @flow import React from 'react' +import { connect } from 'react-redux' import { shell } from 'electron' import { translate } from 'react-i18next' import styled from 'styled-components' import moment from 'moment' +import type { Account, Operation } from '@ledgerhq/wallet-common/lib/types' import type { T } from 'types/common' import { MODAL_OPERATION_DETAILS } from 'config/constants' @@ -16,6 +18,8 @@ import Bar from 'components/base/Bar' import FormattedVal from 'components/base/FormattedVal' import Modal, { ModalBody, ModalTitle, ModalFooter, ModalContent } from 'components/base/Modal' +import { currencySettingsSelector } from 'reducers/settings' + import CounterValue from 'components/CounterValue' import ConfirmationCheck from 'components/OperationsList/ConfirmationCheck' @@ -48,116 +52,155 @@ const B = styled(Bar).attrs({ size: 1, })`` -const OperationDetails = ({ t }: { t: T }) => ( - { - const { marketColor, operation, account, type } = data +const mapStateToProps = (state, props) => ({ + minConfirmations: currencySettingsSelector(state, props.account.currency).confirmationsNb, +}) - const { name, unit, currency, minConfirmations } = account - const { id, amount, confirmations, date, from, to } = operation +type Props = { + t: T, + operation: Operation, + account: Account, + type: 'from' | 'to', + onClose: Function, + minConfirmations: number, + marketColor: string, +} - const isConfirmed = confirmations >= minConfirmations +const OperationDetails = connect(mapStateToProps)((props: Props) => { + const { t, type, onClose, minConfirmations, operation, account, marketColor } = props + const { id, amount, date } = operation - return ( - - Operation details - - - = minConfirmations + return ( + + Operation details + + + + + + + + + - - - - - - - - - - Acccount - {name} - - - - Date - {moment(date).format('LLL')} - - - - Status - - - {isConfirmed - ? t('operationDetails:confirmed') - : t('operationDetails:notConfirmed')} - - ({confirmations}) - - - - - From - - {from.map((v, i) => ( - - {v} - - ))} - - - - - To - - {to.map((v, i) => ( - - {v} - - ))} - - - - - Identifier - - {id} - - - - - - - - + + + + Acccount + {name} + + + + Date + {moment(date).format('LLL')} + + + + Status + + + {isConfirmed ? t('operationDetails:confirmed') : t('operationDetails:notConfirmed')} + + {`(${confirmations})`} + + + + + From + + {from.map((v, i) => ( + + {v} + + ))} + + + + + To + + {to.map((v, i) => ( + + {v} + + ))} + + + + + Identifier + + {id} + + + + + + + + + ) +}) + +type ModalRenderProps = { + data: { + account: Account, + operation: Operation, + type: 'from' | 'to', + marketColor: string, + }, + onClose: Function, +} + +const OperationDetailsWrapper = ({ t }: { t: T }) => ( + { + const { data, onClose } = props + const { operation, account, type, marketColor } = data + return ( + ) }} /> ) -export default translate()(OperationDetails) +export default translate()(OperationDetailsWrapper) diff --git a/src/helpers/btc.js b/src/helpers/btc.js index 4ec15342..796525e0 100644 --- a/src/helpers/btc.js +++ b/src/helpers/btc.js @@ -2,6 +2,7 @@ import ledger from 'ledger-test-library' import bitcoin from 'bitcoinjs-lib' +import axios from 'axios' import type { OperationRaw } from '@ledgerhq/wallet-common/lib/types' import groupBy from 'lodash/groupBy' @@ -40,7 +41,7 @@ export function computeOperation(addresses: Array, accountId: string) { confirmations: t.confirmations, date: t.received_at, accountId, - blockHeight: 0, + blockHeight: t.block.height, } } } @@ -196,6 +197,11 @@ export async function getAccount({ }) : getAddress({ type: 'external', index: 0 }) + // TODO: in the future, it should be done with the libc call + const { + data: { height: blockHeight }, + } = await axios.get('https://api.ledgerwallet.com/blockchain/v2/btc_testnet/blocks/current') + const account = { ...nextAddress, coinType, @@ -204,6 +210,8 @@ export async function getAccount({ balanceByDay: getBalanceByDay(operations), rootPath, operations, + lastSyncDate: new Date(), + blockHeight, } onProgress({ diff --git a/src/reducers/accounts.js b/src/reducers/accounts.js index 49c9633a..13c75218 100644 --- a/src/reducers/accounts.js +++ b/src/reducers/accounts.js @@ -101,7 +101,16 @@ export function serializeAccounts(accounts: any): Account[] { } export function deserializeAccounts(accounts: Account[]) { - return accounts.map(accountModel.encode) + return accounts.map(account => { + // as account can be passed by main process, the Date types + // can be converted to string. we ensure here that we have real + // date + if (typeof account.lastSyncDate === 'string') { + account.lastSyncDate = new Date(account.lastSyncDate) + } + + return accountModel.encode(account) + }) } export default handleActions(handlers, state) diff --git a/src/reducers/settings.js b/src/reducers/settings.js index 03d049e3..27e2953f 100644 --- a/src/reducers/settings.js +++ b/src/reducers/settings.js @@ -2,10 +2,12 @@ import { handleActions } from 'redux-actions' import { getFiatUnit } from '@ledgerhq/currencies' +import type { Currency } from '@ledgerhq/currencies' import get from 'lodash/get' -import type { Settings } from 'types/common' +import type { Settings, CurrencySettings } from 'types/common' +import type { State } from 'reducers' export type SettingsState = Object @@ -18,8 +20,20 @@ const defaultState: SettingsState = { isEnabled: false, value: '', }, - currencies: [], marketIndicator: 'eastern', + currenciesSettings: {}, +} + +const CURRENCY_DEFAULTS_SETTINGS: CurrencySettings = { + confirmationsToSpend: 10, + minConfirmationsToSpend: 10, + maxConfirmationsToSpend: 50, + + confirmationsNb: 10, + minConfirmationsNb: 10, + maxConfirmationsNb: 50, + + transactionFees: 10, } const state: SettingsState = { @@ -50,4 +64,11 @@ export const getLanguage = (state: Object) => get(state.settings, 'language', de export const getOrderAccounts = (state: Object) => get(state.settings, 'orderAccounts', defaultState.orderAccounts) +export const currencySettingsSelector = (state: State, currency: Currency): CurrencySettings => { + const currencySettings = state.settings.currenciesSettings[currency.coinType] + return currencySettings || CURRENCY_DEFAULTS_SETTINGS +} + +export const marketIndicatorSelector = (state: State) => state.settings.marketIndicator + export default handleActions(handlers, state) diff --git a/src/types/common.js b/src/types/common.js index a6944484..5435fd60 100644 --- a/src/types/common.js +++ b/src/types/common.js @@ -13,8 +13,6 @@ export type Devices = Array // -------------------- Settings export type CurrencySettings = { - coinType: number, - confirmationsToSpend: number, minConfirmationsToSpend: number, maxConfirmationsToSpend: number, @@ -26,16 +24,21 @@ export type CurrencySettings = { transactionFees: number, } +export type CurrenciesSettings = { + [coinType: number]: CurrencySettings, +} + export type Settings = { language: string, + orderAccounts: string, username: string, counterValue: string, password: { isEnabled: boolean, value: string, }, - currencies: CurrencySettings[], marketIndicator: 'eastern' | 'western', + currenciesSettings: CurrenciesSettings, } export type T = (?string, ?Object) => string diff --git a/yarn.lock b/yarn.lock index 8396a3d4..3c9de45b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -983,9 +983,9 @@ dependencies: events "^2.0.0" -"@ledgerhq/wallet-common@^0.13.2": - version "0.13.2" - resolved "https://registry.yarnpkg.com/@ledgerhq/wallet-common/-/wallet-common-0.13.2.tgz#55bff35179acb8e4c12836eeea7885ebaa85e6c4" +"@ledgerhq/wallet-common@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/wallet-common/-/wallet-common-1.2.0.tgz#5e648829b6dff0fe33f31da2ee4a974df405642e" dependencies: "@ledgerhq/currencies" "^4.10.1" axios "^0.18.0" @@ -1419,38 +1419,18 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -app-builder-bin-linux@1.8.4: - version "1.8.4" - resolved "https://registry.yarnpkg.com/app-builder-bin-linux/-/app-builder-bin-linux-1.8.4.tgz#9fa4f4f6af21f147cdedc69279940134c77d297f" - app-builder-bin-linux@1.8.5: version "1.8.5" resolved "https://registry.yarnpkg.com/app-builder-bin-linux/-/app-builder-bin-linux-1.8.5.tgz#bf001d3ef347e1179680a1760fea83d0832fc344" -app-builder-bin-mac@1.8.4: - version "1.8.4" - resolved "https://registry.yarnpkg.com/app-builder-bin-mac/-/app-builder-bin-mac-1.8.4.tgz#abd35353167b037a15353fe44c84b0b17045d12f" - app-builder-bin-mac@1.8.5: version "1.8.5" resolved "https://registry.yarnpkg.com/app-builder-bin-mac/-/app-builder-bin-mac-1.8.5.tgz#31282504d232081a9de94d377736bf904bbfbd53" -app-builder-bin-win@1.8.4: - version "1.8.4" - resolved "https://registry.yarnpkg.com/app-builder-bin-win/-/app-builder-bin-win-1.8.4.tgz#ba5f7a7d8ae48d32c400691b3c45f6f746c27748" - app-builder-bin-win@1.8.5: version "1.8.5" resolved "https://registry.yarnpkg.com/app-builder-bin-win/-/app-builder-bin-win-1.8.5.tgz#d7eefc1dff6052e137a3c5d68cd6e68ba862054b" -app-builder-bin@1.8.4: - version "1.8.4" - resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-1.8.4.tgz#ca8fd02209c2e0681de97fdb4c559d93381cc812" - optionalDependencies: - app-builder-bin-linux "1.8.4" - app-builder-bin-mac "1.8.4" - app-builder-bin-win "1.8.4" - app-builder-bin@1.8.5: version "1.8.5" resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-1.8.5.tgz#ac0c0fad3c348ff3bde367e49b25cf5edc414407" @@ -3131,26 +3111,7 @@ builder-util-runtime@4.2.0, builder-util-runtime@^4.2.0, builder-util-runtime@~4 fs-extra-p "^4.5.2" sax "^1.2.4" -builder-util@5.7.5: - version "5.7.5" - resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-5.7.5.tgz#58f8d2b7a35445c5fb45bff50b39bbed554c9863" - dependencies: - "7zip-bin" "~3.1.0" - app-builder-bin "1.8.4" - bluebird-lst "^1.0.5" - builder-util-runtime "^4.2.0" - chalk "^2.3.2" - debug "^3.1.0" - fs-extra-p "^4.5.2" - is-ci "^1.1.0" - js-yaml "^3.11.0" - lazy-val "^1.0.3" - semver "^5.5.0" - source-map-support "^0.5.4" - stat-mode "^0.2.2" - temp-file "^3.1.1" - -builder-util@5.7.6, builder-util@^5.7.4, builder-util@^5.7.5, builder-util@^5.7.6: +builder-util@5.7.6, builder-util@^5.7.6: version "5.7.6" resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-5.7.6.tgz#2480c8a233ab7ab05a4f1689892cc39819e768bb" dependencies: @@ -4565,19 +4526,6 @@ dijkstrajs@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/dijkstrajs/-/dijkstrajs-1.0.1.tgz#d3cd81221e3ea40742cfcde556d4e99e98ddc71b" -dmg-builder@4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-4.1.4.tgz#bca05298febebca81eb5a4686c222d1ef72b3542" - dependencies: - bluebird-lst "^1.0.5" - builder-util "^5.7.5" - electron-builder-lib "~20.8.2" - fs-extra-p "^4.5.2" - iconv-lite "^0.4.19" - js-yaml "^3.11.0" - parse-color "^1.0.0" - sanitize-filename "^1.6.1" - dmg-builder@4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-4.1.5.tgz#f8dc24cd911e0e4a8cdcf9c8a2c829317403985a" @@ -4768,35 +4716,6 @@ ejs@^2.5.7: version "2.5.7" resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.7.tgz#cc872c168880ae3c7189762fd5ffc00896c9518a" -electron-builder-lib@20.8.2, electron-builder-lib@~20.8.2: - version "20.8.2" - resolved "https://registry.yarnpkg.com/electron-builder-lib/-/electron-builder-lib-20.8.2.tgz#c080cc9bf04cb3a55771b36a958680d59cfffbe5" - dependencies: - "7zip-bin" "~3.1.0" - app-builder-bin "1.8.4" - async-exit-hook "^2.0.1" - bluebird-lst "^1.0.5" - builder-util "5.7.5" - builder-util-runtime "4.2.0" - chromium-pickle-js "^0.2.0" - debug "^3.1.0" - ejs "^2.5.8" - electron-osx-sign "0.4.10" - electron-publish "20.8.1" - fs-extra-p "^4.5.2" - hosted-git-info "^2.6.0" - is-ci "^1.1.0" - isbinaryfile "^3.0.2" - js-yaml "^3.11.0" - lazy-val "^1.0.3" - minimatch "^3.0.4" - normalize-package-data "^2.4.0" - plist "^3.0.1" - read-config-file "3.0.0" - sanitize-filename "^1.6.1" - semver "^5.5.0" - temp-file "^3.1.1" - electron-builder-lib@20.9.0, electron-builder-lib@~20.9.0: version "20.9.0" resolved "https://registry.yarnpkg.com/electron-builder-lib/-/electron-builder-lib-20.9.0.tgz#bb4725a796e80d15c5512e50a1ed0be08fea0e4f" @@ -4826,25 +4745,6 @@ electron-builder-lib@20.9.0, electron-builder-lib@~20.9.0: semver "^5.5.0" temp-file "^3.1.1" -electron-builder@^20.0.4: - version "20.8.2" - resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-20.8.2.tgz#0b5d0596997023329a7dddcebe167c5f773818cc" - dependencies: - bluebird-lst "^1.0.5" - builder-util "5.7.5" - builder-util-runtime "4.2.0" - chalk "^2.3.2" - dmg-builder "4.1.4" - electron-builder-lib "20.8.2" - electron-download-tf "4.3.4" - fs-extra-p "^4.5.2" - is-ci "^1.1.0" - lazy-val "^1.0.3" - read-config-file "3.0.0" - sanitize-filename "^1.6.1" - update-notifier "^2.4.0" - yargs "^11.0.0" - electron-builder@^20.9.0: version "20.9.0" resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-20.9.0.tgz#3010d5fbd927c0e1d5c4db6984d797f4b87cd239" @@ -4916,18 +4816,6 @@ electron-osx-sign@0.4.10: minimist "^1.2.0" plist "^2.1.0" -electron-publish@20.8.1: - version "20.8.1" - resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-20.8.1.tgz#ec5730efbda88c6566a47395d433d7b122782675" - dependencies: - bluebird-lst "^1.0.5" - builder-util "^5.7.4" - builder-util-runtime "^4.2.0" - chalk "^2.3.2" - fs-extra-p "^4.5.2" - lazy-val "^1.0.3" - mime "^2.2.0" - electron-publish@20.9.0: version "20.9.0" resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-20.9.0.tgz#095c02fe39674079d90a29eb404dbc894188ca16" @@ -5025,7 +4913,7 @@ electron-webpack@^2.0.1: webpack-merge "^4.1.2" yargs "^11.1.0" -electron@1.8.4, electron@^1.8.2: +electron@1.8.4: version "1.8.4" resolved "https://registry.yarnpkg.com/electron/-/electron-1.8.4.tgz#cca8d0e6889f238f55b414ad224f03e03b226a38" dependencies: @@ -6783,7 +6671,7 @@ iconv-lite@0.4, iconv-lite@0.4.19, iconv-lite@^0.4.17, iconv-lite@~0.4.13: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" -iconv-lite@^0.4.19, iconv-lite@^0.4.21: +iconv-lite@^0.4.21: version "0.4.21" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.21.tgz#c47f8733d02171189ebc4a400f3218d348094798" dependencies: @@ -8050,9 +7938,6 @@ ledger-test-library@KhalilBellakrid/ledger-test-library-nodejs#7d37482: dependencies: axios "^0.17.1" bindings "^1.3.0" - electron "^1.8.2" - electron-builder "^20.0.4" - electron-rebuild "^1.7.3" nan "^2.6.2" prebuild-install "^2.2.2" @@ -8559,7 +8444,7 @@ mime@^2.0.3, mime@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/mime/-/mime-2.2.0.tgz#161e541965551d3b549fa1114391e3a3d55b923b" -mime@^2.2.0, mime@^2.3.1: +mime@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/mime/-/mime-2.3.1.tgz#b1621c54d63b97c47d3cfe7f7215f7d64517c369" @@ -12345,7 +12230,7 @@ upath@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/upath/-/upath-1.0.4.tgz#ee2321ba0a786c50973db043a50b7bcba822361d" -update-notifier@^2.4.0, update-notifier@^2.5.0: +update-notifier@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" dependencies: