Browse Source

Merge branch 'develop' into bump/live-common-new-errors

gre-patch-1
Gaëtan Renaudeau 6 years ago
committed by GitHub
parent
commit
ba5b66653e
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      package.json
  2. 2
      src/api/Ethereum.js
  3. 2
      src/api/Fees.js
  4. 6
      src/api/network.js
  5. 2
      src/bridge/EthereumJSBridge.js
  6. 2
      src/bridge/LibcoreBridge.js
  7. 2
      src/bridge/RippleJSBridge.js
  8. 7
      src/commands/firmwareRepair.js
  9. 2
      src/commands/libcoreGetFees.js
  10. 2
      src/commands/libcoreSignAndBroadcast.js
  11. 6
      src/components/EnsureDeviceApp.js
  12. 2
      src/components/FeesField/BitcoinKind.js
  13. 2
      src/components/FeesField/EthereumKind.js
  14. 2
      src/components/FeesField/RippleKind.js
  15. 2
      src/components/GenuineCheck.js
  16. 2
      src/components/IsUnlocked.js
  17. 2
      src/components/SettingsPage/DisablePasswordModal.js
  18. 2
      src/components/SettingsPage/PasswordForm.js
  19. 2
      src/components/SettingsPage/PasswordModal.js
  20. 7
      src/components/SettingsPage/RepairDeviceButton.js
  21. 5
      src/components/SettingsPage/sections/Help.js
  22. 61
      src/components/base/Modal/RepairModal.js
  23. 2
      src/components/modals/AccountSettingRenderBody.js
  24. 2
      src/components/modals/Receive/steps/04-step-receive-funds.js
  25. 4
      src/components/modals/Send/fields/RecipientField.js
  26. 2
      src/components/modals/Send/index.js
  27. 2
      src/helpers/db/index.js
  28. 2
      src/helpers/init-libcore.js
  29. 2
      src/helpers/ipc.js
  30. 4
      src/helpers/libcore.js
  31. 2
      src/helpers/live-common-setup-internal-hw.js
  32. 2
      src/helpers/promise.js
  33. 2
      src/helpers/reset.js
  34. 2
      src/internals/index.js
  35. 2
      src/main/bridge.js
  36. 4
      src/reducers/currenciesStatus.js
  37. 16
      static/i18n/en/app.json
  38. 15
      yarn.lock

4
package.json

@ -41,7 +41,7 @@
"@ledgerhq/hw-transport": "^4.32.0", "@ledgerhq/hw-transport": "^4.32.0",
"@ledgerhq/hw-transport-node-hid": "^4.32.0", "@ledgerhq/hw-transport-node-hid": "^4.32.0",
"@ledgerhq/ledger-core": "2.0.0-rc.14", "@ledgerhq/ledger-core": "2.0.0-rc.14",
"@ledgerhq/live-common": "4.9.1", "@ledgerhq/live-common": "4.12.0",
"animated": "^0.2.2", "animated": "^0.2.2",
"async": "^2.6.1", "async": "^2.6.1",
"axios": "^0.18.0", "axios": "^0.18.0",
@ -185,7 +185,7 @@
"yaml-loader": "^0.5.0" "yaml-loader": "^0.5.0"
}, },
"engines": { "engines": {
"node": ">=8.9.0 <=8.14.0", "node": ">=8.9.0 <=8.15.0",
"yarn": "^1.10.1" "yarn": "^1.10.1"
}, },
"private": true "private": true

2
src/api/Ethereum.js

@ -1,7 +1,7 @@
// @flow // @flow
import type { CryptoCurrency } from '@ledgerhq/live-common/lib/types' import type { CryptoCurrency } from '@ledgerhq/live-common/lib/types'
import { BigNumber } from 'bignumber.js' import { BigNumber } from 'bignumber.js'
import { LedgerAPINotAvailable } from '@ledgerhq/live-common/lib/errors' import { LedgerAPINotAvailable } from '@ledgerhq/errors'
import network from './network' import network from './network'
import { blockchainBaseURL } from './Ledger' import { blockchainBaseURL } from './Ledger'

2
src/api/Fees.js

@ -2,7 +2,7 @@
import invariant from 'invariant' import invariant from 'invariant'
import LRU from 'lru-cache' import LRU from 'lru-cache'
import type { Currency } from '@ledgerhq/live-common/lib/types' import type { Currency } from '@ledgerhq/live-common/lib/types'
import { FeeEstimationFailed } from '@ledgerhq/live-common/lib/errors' import { FeeEstimationFailed } from '@ledgerhq/errors'
import { blockchainBaseURL } from './Ledger' import { blockchainBaseURL } from './Ledger'
import network from './network' import network from './network'

6
src/api/network.js

@ -3,11 +3,7 @@ import axios from 'axios'
import { GET_CALLS_RETRY, GET_CALLS_TIMEOUT } from 'config/constants' import { GET_CALLS_RETRY, GET_CALLS_TIMEOUT } from 'config/constants'
import { retry } from 'helpers/promise' import { retry } from 'helpers/promise'
import logger from 'logger' import logger from 'logger'
import { import { LedgerAPIErrorWithMessage, LedgerAPIError, NetworkDown } from '@ledgerhq/errors'
LedgerAPIErrorWithMessage,
LedgerAPIError,
NetworkDown,
} from '@ledgerhq/live-common/lib/errors'
import anonymizer from 'helpers/anonymizer' import anonymizer from 'helpers/anonymizer'
const userFriendlyError = <A>(p: Promise<A>, { url, method, startTime, ...rest }): Promise<A> => const userFriendlyError = <A>(p: Promise<A>, { url, method, startTime, ...rest }): Promise<A> =>

2
src/bridge/EthereumJSBridge.js

@ -25,7 +25,7 @@ import { apiForCurrency } from 'api/Ethereum'
import type { Tx } from 'api/Ethereum' import type { Tx } from 'api/Ethereum'
import getAddressCommand from 'commands/getAddress' import getAddressCommand from 'commands/getAddress'
import signTransactionCommand from 'commands/signTransaction' import signTransactionCommand from 'commands/signTransaction'
import { NotEnoughBalance, FeeNotLoaded, ETHAddressNonEIP } from '@ledgerhq/live-common/lib/errors' import { NotEnoughBalance, FeeNotLoaded, ETHAddressNonEIP } from '@ledgerhq/errors'
import type { EditProps, WalletBridge } from './types' import type { EditProps, WalletBridge } from './types'
type Transaction = { type Transaction = {

2
src/bridge/LibcoreBridge.js

@ -11,7 +11,7 @@ import libcoreSyncAccount from 'commands/libcoreSyncAccount'
import libcoreSignAndBroadcast from 'commands/libcoreSignAndBroadcast' import libcoreSignAndBroadcast from 'commands/libcoreSignAndBroadcast'
import libcoreGetFees, { extractGetFeesInputFromAccount } from 'commands/libcoreGetFees' import libcoreGetFees, { extractGetFeesInputFromAccount } from 'commands/libcoreGetFees'
import libcoreValidAddress from 'commands/libcoreValidAddress' import libcoreValidAddress from 'commands/libcoreValidAddress'
import { NotEnoughBalance, FeeNotLoaded } from '@ledgerhq/live-common/lib/errors' import { NotEnoughBalance, FeeNotLoaded } from '@ledgerhq/errors'
import type { WalletBridge, EditProps } from './types' import type { WalletBridge, EditProps } from './types'
const NOT_ENOUGH_FUNDS = 52 const NOT_ENOUGH_FUNDS = 52

2
src/bridge/RippleJSBridge.js

@ -32,7 +32,7 @@ import {
NotEnoughBalance, NotEnoughBalance,
FeeNotLoaded, FeeNotLoaded,
NotEnoughBalanceBecauseDestinationNotCreated, NotEnoughBalanceBecauseDestinationNotCreated,
} from '@ledgerhq/live-common/lib/errors' } from '@ledgerhq/errors'
import type { WalletBridge, EditProps } from './types' import type { WalletBridge, EditProps } from './types'
type Transaction = { type Transaction = {

7
src/commands/firmwareRepair.js

@ -3,12 +3,15 @@
import repair from '@ledgerhq/live-common/lib/hw/firmwareUpdate-repair' import repair from '@ledgerhq/live-common/lib/hw/firmwareUpdate-repair'
import { createCommand, Command } from 'helpers/ipc' import { createCommand, Command } from 'helpers/ipc'
type Input = void type Input = {
version: ?string,
}
type Result = { progress: number } type Result = { progress: number }
const cmd: Command<Input, Result> = createCommand( const cmd: Command<Input, Result> = createCommand(
'firmwareRepair', 'firmwareRepair',
() => repair(''), // devicePath='' HACK to not depend on a devicePath because it's dynamic ({ version }) => repair('', version), // devicePath='' HACK to not depend on a devicePath because it's dynamic
) )
export default cmd export default cmd

2
src/commands/libcoreGetFees.js

@ -13,7 +13,7 @@ import {
bigNumberToLibcoreAmount, bigNumberToLibcoreAmount,
getOrCreateWallet, getOrCreateWallet,
} from 'helpers/libcore' } from 'helpers/libcore'
import { InvalidAddress } from '@ledgerhq/live-common/lib/errors' import { InvalidAddress } from '@ledgerhq/errors'
type BitcoinLikeTransaction = { type BitcoinLikeTransaction = {
// TODO we rename this Transaction concept into transactionInput // TODO we rename this Transaction concept into transactionInput

2
src/commands/libcoreSignAndBroadcast.js

@ -14,7 +14,7 @@ import {
bigNumberToLibcoreAmount, bigNumberToLibcoreAmount,
getOrCreateWallet, getOrCreateWallet,
} from 'helpers/libcore' } from 'helpers/libcore'
import { UpdateYourApp } from '@ledgerhq/live-common/lib/errors' import { UpdateYourApp } from '@ledgerhq/errors'
import withLibcore from 'helpers/withLibcore' import withLibcore from 'helpers/withLibcore'
import { createCommand, Command } from 'helpers/ipc' import { createCommand, Command } from 'helpers/ipc'

6
src/components/EnsureDeviceApp.js

@ -23,11 +23,7 @@ import IconUsb from 'icons/Usb'
import type { Device } from 'types/common' import type { Device } from 'types/common'
import { import { WrongDeviceForAccount, CantOpenDevice, UpdateYourApp } from '@ledgerhq/errors'
WrongDeviceForAccount,
CantOpenDevice,
UpdateYourApp,
} from '@ledgerhq/live-common/lib/errors'
import { getCurrentDevice } from 'reducers/devices' import { getCurrentDevice } from 'reducers/devices'
const usbIcon = <IconUsb size={16} /> const usbIcon = <IconUsb size={16} />

2
src/components/FeesField/BitcoinKind.js

@ -8,7 +8,7 @@ import { translate } from 'react-i18next'
import type { T } from 'types/common' import type { T } from 'types/common'
import { FeeNotLoaded } from '@ledgerhq/live-common/lib/errors' import { FeeNotLoaded } from '@ledgerhq/errors'
import InputCurrency from 'components/base/InputCurrency' import InputCurrency from 'components/base/InputCurrency'
import Select from 'components/base/Select' import Select from 'components/base/Select'
import type { Fees } from 'api/Fees' import type { Fees } from 'api/Fees'

2
src/components/FeesField/EthereumKind.js

@ -4,7 +4,7 @@ import React, { Component } from 'react'
import { BigNumber } from 'bignumber.js' import { BigNumber } from 'bignumber.js'
import type { Account } from '@ledgerhq/live-common/lib/types' import type { Account } from '@ledgerhq/live-common/lib/types'
import { FeeNotLoaded } from '@ledgerhq/live-common/lib/errors' import { FeeNotLoaded } from '@ledgerhq/errors'
import InputCurrency from 'components/base/InputCurrency' import InputCurrency from 'components/base/InputCurrency'
import type { Fees } from 'api/Fees' import type { Fees } from 'api/Fees'
import WithFeesAPI from '../WithFeesAPI' import WithFeesAPI from '../WithFeesAPI'

2
src/components/FeesField/RippleKind.js

@ -4,7 +4,7 @@ import React, { Component } from 'react'
import type { BigNumber } from 'bignumber.js' import type { BigNumber } from 'bignumber.js'
import type { Account } from '@ledgerhq/live-common/lib/types' import type { Account } from '@ledgerhq/live-common/lib/types'
import { apiForEndpointConfig, parseAPIValue } from 'api/Ripple' import { apiForEndpointConfig, parseAPIValue } from 'api/Ripple'
import { FeeNotLoaded } from '@ledgerhq/live-common/lib/errors' import { FeeNotLoaded } from '@ledgerhq/errors'
import InputCurrency from 'components/base/InputCurrency' import InputCurrency from 'components/base/InputCurrency'
import GenericContainer from './GenericContainer' import GenericContainer from './GenericContainer'

2
src/components/GenuineCheck.js

@ -20,7 +20,7 @@ import {
DeviceNotGenuineError, DeviceNotGenuineError,
DeviceGenuineSocketEarlyClose, DeviceGenuineSocketEarlyClose,
UnexpectedBootloader, UnexpectedBootloader,
} from '@ledgerhq/live-common/lib/errors' } from '@ledgerhq/errors'
import getDeviceInfo from 'commands/getDeviceInfo' import getDeviceInfo from 'commands/getDeviceInfo'
import getIsGenuine from 'commands/getIsGenuine' import getIsGenuine from 'commands/getIsGenuine'

2
src/components/IsUnlocked.js

@ -17,7 +17,7 @@ import { hardReset } from 'helpers/reset'
import { fetchAccounts } from 'actions/accounts' import { fetchAccounts } from 'actions/accounts'
import { isLocked, unlock } from 'reducers/application' import { isLocked, unlock } from 'reducers/application'
import { PasswordIncorrectError } from '@ledgerhq/live-common/lib/errors' import { PasswordIncorrectError } from '@ledgerhq/errors'
import Box from 'components/base/Box' import Box from 'components/base/Box'
import InputPassword from 'components/base/InputPassword' import InputPassword from 'components/base/InputPassword'

2
src/components/SettingsPage/DisablePasswordModal.js

@ -1,7 +1,7 @@
// @flow // @flow
import React, { PureComponent } from 'react' import React, { PureComponent } from 'react'
import { PasswordIncorrectError } from '@ledgerhq/live-common/lib/errors' import { PasswordIncorrectError } from '@ledgerhq/errors'
import db from 'helpers/db' import db from 'helpers/db'
import Box from 'components/base/Box' import Box from 'components/base/Box'

2
src/components/SettingsPage/PasswordForm.js

@ -6,7 +6,7 @@ import Box from 'components/base/Box'
import InputPassword from 'components/base/InputPassword' import InputPassword from 'components/base/InputPassword'
import Label from 'components/base/Label' import Label from 'components/base/Label'
import { PasswordsDontMatchError } from '@ledgerhq/live-common/lib/errors' import { PasswordsDontMatchError } from '@ledgerhq/errors'
import type { T } from 'types/common' import type { T } from 'types/common'

2
src/components/SettingsPage/PasswordModal.js

@ -5,7 +5,7 @@ import React, { PureComponent } from 'react'
import type { T } from 'types/common' import type { T } from 'types/common'
import db from 'helpers/db' import db from 'helpers/db'
import { PasswordIncorrectError } from '@ledgerhq/live-common/lib/errors' import { PasswordIncorrectError } from '@ledgerhq/errors'
import Box from 'components/base/Box' import Box from 'components/base/Box'
import Button from 'components/base/Button' import Button from 'components/base/Button'
import { Modal, ModalContent, ModalBody, ModalTitle, ModalFooter } from 'components/base/Modal' import { Modal, ModalContent, ModalBody, ModalTitle, ModalFooter } from 'components/base/Modal'

7
src/components/SettingsPage/RepairDeviceButton.js

@ -41,11 +41,11 @@ class RepairDeviceButton extends PureComponent<Props, State> {
this.setState({ opened: false, isLoading: false, error: null, progress: 0 }) this.setState({ opened: false, isLoading: false, error: null, progress: 0 })
} }
action = () => { repair = (version = null) => {
if (this.state.isLoading) return if (this.state.isLoading) return
const { push } = this.props const { push } = this.props
this.setState({ isLoading: true }) this.setState({ isLoading: true })
this.sub = firmwareRepair.send().subscribe({ this.sub = firmwareRepair.send({ version }).subscribe({
next: patch => { next: patch => {
this.setState(patch) this.setState(patch)
}, },
@ -76,11 +76,10 @@ class RepairDeviceButton extends PureComponent<Props, State> {
isOpened={opened} isOpened={opened}
onClose={this.close} onClose={this.close}
onReject={this.close} onReject={this.close}
onConfirm={this.action} repair={this.repair}
isLoading={isLoading} isLoading={isLoading}
title={t('settings.repairDevice.title')} title={t('settings.repairDevice.title')}
desc={t('settings.repairDevice.desc')} desc={t('settings.repairDevice.desc')}
confirmText={t('settings.repairDevice.button')}
progress={progress} progress={progress}
error={error} error={error}
/> />

5
src/components/SettingsPage/sections/Help.js

@ -73,7 +73,10 @@ class SectionHelp extends PureComponent<Props> {
> >
<ResetButton /> <ResetButton />
</Row> </Row>
<Row title={t('settings.repairDevice.title')} desc={t('settings.repairDevice.desc')}> <Row
title={t('settings.repairDevice.title')}
desc={t('settings.repairDevice.descSettings')}
>
<RepairDeviceButton /> <RepairDeviceButton />
</Row> </Row>
</Body> </Body>

61
src/components/base/Modal/RepairModal.js

@ -3,6 +3,7 @@
import React, { PureComponent } from 'react' import React, { PureComponent } from 'react'
import { translate } from 'react-i18next' import { translate } from 'react-i18next'
import styled from 'styled-components' import styled from 'styled-components'
import { forceRepairChoices } from '@ledgerhq/live-common/lib/hw/firmwareUpdate-repair'
import type { T } from 'types/common' import type { T } from 'types/common'
@ -11,6 +12,7 @@ import TrackPage from 'analytics/TrackPage'
import Button from 'components/base/Button' import Button from 'components/base/Button'
import Box from 'components/base/Box' import Box from 'components/base/Box'
import Text from 'components/base/Text' import Text from 'components/base/Text'
import Select from 'components/base/Select'
import ProgressCircle from 'components/ProgressCircle' import ProgressCircle from 'components/ProgressCircle'
import TranslatedError from 'components/TranslatedError' import TranslatedError from 'components/TranslatedError'
import ExclamationCircleThin from 'icons/ExclamationCircleThin' import ExclamationCircleThin from 'icons/ExclamationCircleThin'
@ -129,7 +131,7 @@ type Props = {
confirmText?: string, confirmText?: string,
cancelText?: string, cancelText?: string,
onReject: Function, onReject: Function,
onConfirm: Function, repair: (?string) => *,
t: T, t: T,
isLoading?: boolean, isLoading?: boolean,
analyticsName: string, analyticsName: string,
@ -138,7 +140,20 @@ type Props = {
error?: Error, error?: Error,
} }
class RepairModal extends PureComponent<Props> { class RepairModal extends PureComponent<Props, *> {
state = {
selectedOption: forceRepairChoices[0],
}
onChange = selectedOption => {
this.setState({ selectedOption: selectedOption || forceRepairChoices[0] })
}
renderOption = option => (option && this.props.t(`settings.repairDevice.${option.label}`)) || null
renderValue = option =>
(option && this.props.t(`settings.repairDevice.${option.data.label}`)) || null
render() { render() {
const { const {
cancellable, cancellable,
@ -148,7 +163,7 @@ class RepairModal extends PureComponent<Props> {
confirmText, confirmText,
isDanger, isDanger,
onReject, onReject,
onConfirm, repair,
isLoading, isLoading,
renderIcon, renderIcon,
t, t,
@ -157,8 +172,7 @@ class RepairModal extends PureComponent<Props> {
error, error,
...props ...props
} = this.props } = this.props
const { selectedOption } = this.state
const realConfirmText = confirmText || t('common.confirm')
return ( return (
<Modal <Modal
@ -177,19 +191,36 @@ class RepairModal extends PureComponent<Props> {
<DisclaimerStep desc={desc} /> <DisclaimerStep desc={desc} />
)} )}
{!isLoading && !error ? (
<Box py={2} px={5}>
<Select
isSearchable={false}
isClearable={false}
value={selectedOption}
onChange={this.onChange}
autoFocus
options={forceRepairChoices}
renderOption={this.renderOption}
renderValue={this.renderValue}
/>
</Box>
) : null}
{!isLoading ? ( {!isLoading ? (
<ModalFooter horizontal align="center" justify="flex-end" flow={2}> <ModalFooter horizontal align="center" justify="flex-end" flow={2}>
<Button onClick={onReject}>{t(`common.${error ? 'close' : 'cancel'}`)}</Button> {error ? <Button onClick={onReject}>{t(`common.close`)}</Button> : null}
{error ? null : ( {error ? null : (
<Button <>
onClick={onConfirm} <Button
primary={!isDanger} onClick={() => repair(selectedOption.value)}
danger={isDanger} primary={!isDanger}
isLoading={isLoading} danger={isDanger}
disabled={isLoading} isLoading={isLoading}
> disabled={isLoading}
{realConfirmText} >
</Button> {t('settings.repairDevice.button')}
</Button>
</>
)} )}
</ModalFooter> </ModalFooter>
) : null} ) : null}

2
src/components/modals/AccountSettingRenderBody.js

@ -17,7 +17,7 @@ import { setDataModal } from 'reducers/modals'
import { getBridgeForCurrency } from 'bridge' import { getBridgeForCurrency } from 'bridge'
import { AccountNameRequiredError, EnpointConfigError } from '@ledgerhq/live-common/lib/errors' import { AccountNameRequiredError, EnpointConfigError } from '@ledgerhq/errors'
import TrackPage from 'analytics/TrackPage' import TrackPage from 'analytics/TrackPage'
import Spoiler from 'components/base/Spoiler' import Spoiler from 'components/base/Spoiler'

2
src/components/modals/Receive/steps/04-step-receive-funds.js

@ -7,7 +7,7 @@ import TrackPage from 'analytics/TrackPage'
import getAddress from 'commands/getAddress' import getAddress from 'commands/getAddress'
import Box from 'components/base/Box' import Box from 'components/base/Box'
import CurrentAddressForAccount from 'components/CurrentAddressForAccount' import CurrentAddressForAccount from 'components/CurrentAddressForAccount'
import { DisconnectedDevice, WrongDeviceForAccount } from '@ledgerhq/live-common/lib/errors' import { DisconnectedDevice, WrongDeviceForAccount } from '@ledgerhq/errors'
import type { StepProps } from '..' import type { StepProps } from '..'

4
src/components/modals/Send/fields/RecipientField.js

@ -9,8 +9,8 @@ import Box from 'components/base/Box'
import LabelWithExternalIcon from 'components/base/LabelWithExternalIcon' import LabelWithExternalIcon from 'components/base/LabelWithExternalIcon'
import RecipientAddress from 'components/RecipientAddress' import RecipientAddress from 'components/RecipientAddress'
import { track } from 'analytics/segment' import { track } from 'analytics/segment'
import { createCustomErrorClass } from '@ledgerhq/live-common/lib/errors/helpers' import { createCustomErrorClass } from '@ledgerhq/errors/lib/helpers'
import { CantScanQRCode } from '@ledgerhq/live-common/lib/errors' import { CantScanQRCode } from '@ledgerhq/errors'
type Props<Transaction> = { type Props<Transaction> = {
t: T, t: T,

2
src/components/modals/Send/index.js

@ -20,7 +20,7 @@ import type { StepProps as DefaultStepProps } from 'components/base/Stepper'
import { getCurrentDevice } from 'reducers/devices' import { getCurrentDevice } from 'reducers/devices'
import { accountsSelector } from 'reducers/accounts' import { accountsSelector } from 'reducers/accounts'
import { closeModal, openModal } from 'reducers/modals' import { closeModal, openModal } from 'reducers/modals'
import { DisconnectedDevice, UserRefusedOnDevice } from '@ledgerhq/live-common/lib/errors' import { DisconnectedDevice, UserRefusedOnDevice } from '@ledgerhq/errors'
import Modal from 'components/base/Modal' import Modal from 'components/base/Modal'
import Stepper from 'components/base/Stepper' import Stepper from 'components/base/Stepper'

2
src/helpers/db/index.js

@ -11,7 +11,7 @@ import logger from 'logger'
import { fsReadFile, fsUnlink } from 'helpers/fs' import { fsReadFile, fsUnlink } from 'helpers/fs'
import { promisify, debounce } from 'helpers/promise' import { promisify, debounce } from 'helpers/promise'
import { NoDBPathGiven, DBWrongPassword } from '@ledgerhq/live-common/lib/errors' import { NoDBPathGiven, DBWrongPassword } from '@ledgerhq/errors'
type Transform = { type Transform = {
get: any => any, get: any => any,

2
src/helpers/init-libcore.js

@ -3,7 +3,7 @@
import logger from 'logger' import logger from 'logger'
import invariant from 'invariant' import invariant from 'invariant'
import network from 'api/network' import network from 'api/network'
import { serializeError } from '@ledgerhq/live-common/lib/errors/helpers' import { serializeError } from '@ledgerhq/errors/lib/helpers'
const lib = require('@ledgerhq/ledger-core') const lib = require('@ledgerhq/ledger-core')

2
src/helpers/ipc.js

@ -2,7 +2,7 @@
import logger from 'logger' import logger from 'logger'
import { Observable } from 'rxjs' import { Observable } from 'rxjs'
import uuidv4 from 'uuid/v4' import uuidv4 from 'uuid/v4'
import { deserializeError } from '@ledgerhq/live-common/lib/errors/helpers' import { deserializeError } from '@ledgerhq/errors/lib/helpers'
export function createCommand<In, A>(id: string, impl: In => Observable<A>): Command<In, A> { export function createCommand<In, A>(id: string, impl: In => Observable<A>): Command<In, A> {
return new Command(id, impl) return new Command(id, impl)

4
src/helpers/libcore.js

@ -32,8 +32,8 @@ import type {
} from '@ledgerhq/live-common/lib/types' } from '@ledgerhq/live-common/lib/types'
import type { NJSAccount, NJSOperation } from '@ledgerhq/ledger-core/src/ledgercore_doc' import type { NJSAccount, NJSOperation } from '@ledgerhq/ledger-core/src/ledgercore_doc'
import { NoAddressesFound } from '@ledgerhq/live-common/lib/errors' import { NoAddressesFound } from '@ledgerhq/errors'
import { deserializeError } from '@ledgerhq/live-common/lib/errors/helpers' import { deserializeError } from '@ledgerhq/errors/lib/helpers'
import { timeoutTagged } from './promise' import { timeoutTagged } from './promise'
export function isValidAddress(core: *, currency: *, address: string): boolean { export function isValidAddress(core: *, currency: *, address: string): boolean {

2
src/helpers/live-common-setup-internal-hw.js

@ -5,7 +5,7 @@ import { registerTransportModule } from '@ledgerhq/live-common/lib/hw'
import { addAccessHook, setErrorRemapping } from '@ledgerhq/live-common/lib/hw/deviceAccess' import { addAccessHook, setErrorRemapping } from '@ledgerhq/live-common/lib/hw/deviceAccess'
import throttle from 'lodash/throttle' import throttle from 'lodash/throttle'
import TransportNodeHid from '@ledgerhq/hw-transport-node-hid' import TransportNodeHid from '@ledgerhq/hw-transport-node-hid'
import { DisconnectedDevice } from '@ledgerhq/live-common/lib/errors' import { DisconnectedDevice } from '@ledgerhq/errors'
import { retry } from './promise' import { retry } from './promise'
let busy = false let busy = false

2
src/helpers/promise.js

@ -2,7 +2,7 @@
// small utilities for Promises // small utilities for Promises
import logger from 'logger' import logger from 'logger'
import { TimeoutTagged } from '@ledgerhq/live-common/lib/errors' import { TimeoutTagged } from '@ledgerhq/errors'
export const delay = (ms: number): Promise<void> => new Promise(f => setTimeout(f, ms)) export const delay = (ms: number): Promise<void> => new Promise(f => setTimeout(f, ms))

2
src/helpers/reset.js

@ -9,7 +9,7 @@ import { disable as disableDBMiddleware } from 'middlewares/db'
import db from 'helpers/db' import db from 'helpers/db'
import { delay } from 'helpers/promise' import { delay } from 'helpers/promise'
import killInternalProcess from 'commands/killInternalProcess' import killInternalProcess from 'commands/killInternalProcess'
import { DBNotReset } from '@ledgerhq/live-common/lib/errors' import { DBNotReset } from '@ledgerhq/errors'
async function resetLibcoreDatabase() { async function resetLibcoreDatabase() {
await killInternalProcess.send().toPromise() await killInternalProcess.send().toPromise()

2
src/internals/index.js

@ -10,7 +10,7 @@ import uuid from 'uuid/v4'
import { setImplementation } from 'api/network' import { setImplementation } from 'api/network'
import sentry from 'sentry/node' import sentry from 'sentry/node'
import { EXPERIMENTAL_HTTP_ON_RENDERER } from 'config/constants' import { EXPERIMENTAL_HTTP_ON_RENDERER } from 'config/constants'
import { serializeError } from '@ledgerhq/live-common/lib/errors/helpers' import { serializeError } from '@ledgerhq/errors/lib/helpers'
require('../env') require('../env')

2
src/main/bridge.js

@ -11,7 +11,7 @@ import LoggerTransport from 'logger/logger-transport-main'
import sentry, { captureException } from 'sentry/node' import sentry, { captureException } from 'sentry/node'
import user from 'helpers/user' import user from 'helpers/user'
import { cleanUpBeforeClosingSync } from 'helpers/log' import { cleanUpBeforeClosingSync } from 'helpers/log'
import { deserializeError } from '@ledgerhq/live-common/lib/errors/helpers' import { deserializeError } from '@ledgerhq/errors/lib/helpers'
import setupAutoUpdater, { quitAndInstall } from './autoUpdate' import setupAutoUpdater, { quitAndInstall } from './autoUpdate'
import { setInternalProcessPID } from './terminator' import { setInternalProcessPID } from './terminator'

4
src/reducers/currenciesStatus.js

@ -37,7 +37,9 @@ export const fetchCurrenciesStatus = () => async (dispatch: *) => {
method: 'GET', method: 'GET',
url: process.env.LL_STATUS_ENDPOINT || urls.currenciesStatus, url: process.env.LL_STATUS_ENDPOINT || urls.currenciesStatus,
}) })
dispatch(setCurrenciesStatus(data)) if (Array.isArray(data)) {
dispatch(setCurrenciesStatus(data))
}
} catch (err) { } catch (err) {
logger.error(err) logger.error(err)
} }

16
static/i18n/en/app.json

@ -451,8 +451,12 @@
}, },
"repairDevice": { "repairDevice": {
"title": "Repair your Ledger device", "title": "Repair your Ledger device",
"desc": "If you encountered some issue while updating your device and cannot resume the update process, you can try this option to repair your device.", "descSettings": "Use this tool to restore your Ledger device if it has become stuck during a firmware update.",
"button": "Repair" "desc": "Please select the state of your Ledger device.",
"button": "Repair",
"generic": "Bootloader",
"mcuNotGenuine": "MCU not genuine",
"followDeviceRepair": "Follow device repair instructions"
}, },
"exportLogs": { "exportLogs": {
"title": "Export logs", "title": "Export logs",
@ -851,7 +855,7 @@
"description": "{{message}}" "description": "{{message}}"
}, },
"UnexpectedBootloader": { "UnexpectedBootloader": {
"title": "Opps, your device should not be in Bootloader mode", "title": "Oops, your device should not be in Bootloader mode",
"description": "Please restart your device or contact us" "description": "Please restart your device or contact us"
}, },
"UserRefusedFirmwareUpdate": { "UserRefusedFirmwareUpdate": {
@ -906,6 +910,10 @@
}, },
"FeeNotLoaded": { "FeeNotLoaded": {
"title": "Couldn’t load fee rates, please set manual fees" "title": "Couldn’t load fee rates, please set manual fees"
},
"UnknownMCU": {
"title": "Unknown MCU version",
"description": "Please contact Ledger Support"
} }
} }
} }

15
yarn.lock

@ -1677,6 +1677,11 @@
camelcase "^5.0.0" camelcase "^5.0.0"
prettier "^1.13.7" prettier "^1.13.7"
"@ledgerhq/errors@^4.32.0":
version "4.33.7"
resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-4.33.7.tgz#b78becd20e8a68f7115ad0986fa357a8adddf6b7"
integrity sha512-1vKWcttI5NHpT6rMKKuxWPAjfwDgfgUTf/AyNAT5KXHlhiLvqnA3NDCdNUVadajVNKSa/s1u1ZWKismtbfePzg==
"@ledgerhq/hw-app-btc@^4.32.0": "@ledgerhq/hw-app-btc@^4.32.0":
version "4.32.0" version "4.32.0"
resolved "https://registry.yarnpkg.com/@ledgerhq/hw-app-btc/-/hw-app-btc-4.32.0.tgz#e883dcaa3ebb4aca1e2cb27acfc47b8db4e85f3f" resolved "https://registry.yarnpkg.com/@ledgerhq/hw-app-btc/-/hw-app-btc-4.32.0.tgz#e883dcaa3ebb4aca1e2cb27acfc47b8db4e85f3f"
@ -1725,12 +1730,14 @@
bindings "^1.3.0" bindings "^1.3.0"
nan "^2.6.2" nan "^2.6.2"
"@ledgerhq/live-common@4.9.1": "@ledgerhq/live-common@4.12.0":
version "4.9.1" version "4.12.0"
resolved "https://registry.yarnpkg.com/@ledgerhq/live-common/-/live-common-4.9.1.tgz#031a1b626c03f4f3dac8eb53b7bce9ceff2f5276" resolved "https://registry.yarnpkg.com/@ledgerhq/live-common/-/live-common-4.12.0.tgz#7956564236f30460916bf61667fac4ea7ab5d814"
integrity sha512-KvQ4cqEr1CGwce8ch3U2IHK7uw131DR74bncmS++KKwr1MxAIa4UbLTvN7w5id9eTCP67ioM7S/xsNQqtgdG9Q== integrity sha512-7EH/hvZiaYzOjNd/dMZif1ydFABRxR/zc5U13XhRMutL5ru4cbyDOKW6zC97FZNNaC35RJwhT7MFkhu2hwMvLA==
dependencies: dependencies:
"@aeternity/ledger-app-api" "0.0.4" "@aeternity/ledger-app-api" "0.0.4"
"@ledgerhq/errors" "^4.32.0"
"@ledgerhq/hw-app-btc" "^4.32.0" "@ledgerhq/hw-app-btc" "^4.32.0"
"@ledgerhq/hw-app-eth" "^4.32.0" "@ledgerhq/hw-app-eth" "^4.32.0"
"@ledgerhq/hw-app-xrp" "^4.32.0" "@ledgerhq/hw-app-xrp" "^4.32.0"

Loading…
Cancel
Save