diff --git a/config/default.js b/config/default.js
index bdda23acda4..288102ae1f9 100644
--- a/config/default.js
+++ b/config/default.js
@@ -21,6 +21,9 @@ module.exports = {
currency: 'USD',
locale: 'en',
+ // Default time dipslay mode (12hour|24hour).
+ timeDisplayMode: '12hour',
+
autoupdate: {
active: true,
channel: 'beta',
diff --git a/electron/main.js b/electron/main.js
index c26e1b6dcd6..d3db71814e6 100644
--- a/electron/main.js
+++ b/electron/main.js
@@ -6,7 +6,7 @@
* When running `npm run build` or `npm run build-main`, this file is compiled to
* `/dist/main.js` using webpack. This gives us some performance wins.
*/
-import { app, BrowserWindow } from 'electron'
+import { app, session, BrowserWindow } from 'electron'
import isDev from 'electron-is-dev'
import installExtension, {
REACT_DEVELOPER_TOOLS,
@@ -397,8 +397,8 @@ app.on('ready', async () => {
*/
if (process.env.NODE_ENV === 'development' || process.env.DEBUG_PROD) {
if (process.env.REINSTALL_DEVTOOLS) {
- BrowserWindow.removeDevToolsExtension(REACT_DEVELOPER_TOOLS)
- BrowserWindow.removeDevToolsExtension(REDUX_DEVTOOLS)
+ session.removeExtension(REACT_DEVELOPER_TOOLS)
+ session.removeExtension(REDUX_DEVTOOLS)
}
installExtension(REACT_DEVELOPER_TOOLS)
diff --git a/package.json b/package.json
index 91bcd852a53..5b294caaa33 100644
--- a/package.json
+++ b/package.json
@@ -44,12 +44,12 @@
},
"config": {
"lnd-binary": {
- "binaryVersion": "0.11.1-beta-3-g9fc02c041",
+ "binaryVersion": "0.12.0-beta-2-g2dd779205",
"binarySite": "https://github.com/LN-Zap/lnd/releases/download"
}
},
"browserslist": [
- "electron 8.4.0"
+ "electron 9.3.4"
],
"engines": {
"node": ">=12.0.0",
@@ -154,7 +154,7 @@
],
"desktop": {
"Comment": "Zap - Lightning wallet",
- "Icon": "zap",
+ "Icon": "zap-desktop.png",
"Name": "Zap",
"StartupNotify": "true",
"Terminal": "false",
@@ -247,7 +247,7 @@
"babel-plugin-styled-components": "1.10.7",
"babel-plugin-transform-react-pure-class-to-function": "1.0.1",
"babel-plugin-transform-react-remove-prop-types": "0.4.24",
- "browserslist": "4.14.5",
+ "browserslist": "4.16.5",
"circular-dependency-plugin": "5.2.0",
"clean-webpack-plugin": "3.0.0",
"copy-webpack-plugin": "5.1.1",
@@ -255,7 +255,7 @@
"cross-env": "7.0.2",
"cross-spawn": "7.0.3",
"csp-html-webpack-plugin": "4.0.0",
- "electron": "8.4.0",
+ "electron": "9.3.4",
"electron-builder": "22.9.1",
"electron-devtools-installer": "3.1.1",
"electron-notarize": "1.0.0",
@@ -321,6 +321,7 @@
},
"dependencies": {
"@hot-loader/react-dom": "16.13.0",
+ "@ln-zap/bolt11": "1.2.8-beta.3",
"@rebass/forms": "4.0.6",
"@styled-system/theme-get": "5.1.2",
"axios": "0.19.2",
@@ -351,7 +352,7 @@
"is-electron-renderer": "2.0.1",
"jstimezonedetect": "1.0.7",
"keytar": "5.6.0",
- "lnd-grpc": "0.4.6",
+ "lnd-grpc": "0.4.8",
"lndconnect": "0.2.10",
"lodash": "4.17.20",
"new-github-issue-url": "0.2.1",
diff --git a/renderer/components/Activity/Invoice/Invoice.js b/renderer/components/Activity/Invoice/Invoice.js
index aac56f90e72..4c1cfa74246 100644
--- a/renderer/components/Activity/Invoice/Invoice.js
+++ b/renderer/components/Activity/Invoice/Invoice.js
@@ -1,11 +1,11 @@
import React from 'react'
import PropTypes from 'prop-types'
-import { FormattedTime, FormattedMessage, injectIntl } from 'react-intl'
+import { FormattedMessage, injectIntl } from 'react-intl'
import { Box, Flex } from 'rebass/styled-components'
import { intlShape } from '@zap/i18n'
import { Text } from 'components/UI'
import Zap from 'components/Icon/Zap'
-import { CryptoValue, FiatValue } from 'containers/UI'
+import { CryptoValue, FiatValue, FormattedDateTime } from 'containers/UI'
import messages from './messages'
import Clock from 'components/Icon/Clock'
@@ -33,7 +33,8 @@ const Invoice = ({ activity, showActivityModal, cryptoUnitName, intl, ...rest })
-
diff --git a/renderer/components/Activity/Payment/Payment.js b/renderer/components/Activity/Payment/Payment.js
index 6edcc84d257..fff7e392f98 100644
--- a/renderer/components/Activity/Payment/Payment.js
+++ b/renderer/components/Activity/Payment/Payment.js
@@ -1,12 +1,12 @@
import React from 'react'
import PropTypes from 'prop-types'
-import { FormattedMessage, FormattedTime, injectIntl } from 'react-intl'
+import { FormattedMessage, injectIntl } from 'react-intl'
import { Box, Flex } from 'rebass/styled-components'
import { intlShape } from '@zap/i18n'
import { getDisplayNodeName } from 'reducers/payment/utils'
import { Message, Text } from 'components/UI'
import Zap from 'components/Icon/Zap'
-import { CryptoValue, FiatValue } from 'containers/UI'
+import { CryptoValue, FiatValue, FormattedDateTime } from 'containers/UI'
import ErrorLink from '../ErrorLink'
import messages from './messages'
@@ -57,7 +57,7 @@ const Payment = ({
>
) : (
-
+
)}
diff --git a/renderer/components/Activity/PaymentModal/PaymentModal.js b/renderer/components/Activity/PaymentModal/PaymentModal.js
index e0f8e8cdaec..649b45bd5cc 100644
--- a/renderer/components/Activity/PaymentModal/PaymentModal.js
+++ b/renderer/components/Activity/PaymentModal/PaymentModal.js
@@ -1,12 +1,19 @@
import React from 'react'
import PropTypes from 'prop-types'
-import { FormattedDate, FormattedTime, FormattedMessage, injectIntl } from 'react-intl'
+import { FormattedMessage, injectIntl } from 'react-intl'
import { Flex } from 'rebass/styled-components'
import { intlShape } from '@zap/i18n'
import { getDisplayNodeName } from 'reducers/payment/utils'
import { Bar, DataRow, Header, Panel, Text } from 'components/UI'
import { getTag } from '@zap/utils/crypto'
-import { CopyButton, CryptoSelector, CryptoValue, FiatSelector, FiatValue } from 'containers/UI'
+import {
+ CopyButton,
+ CryptoSelector,
+ CryptoValue,
+ FiatSelector,
+ FiatValue,
+ FormattedDateTime,
+} from 'containers/UI'
import { Truncate } from 'components/Util'
import Lightning from 'components/Icon/Lightning'
import Route from './Route'
@@ -78,15 +85,10 @@ class PaymentModal extends React.PureComponent {
right={
<>
-
+
-
+
>
}
diff --git a/renderer/components/Activity/Row.js b/renderer/components/Activity/Row.js
index c1930ddcc74..09f6bbb1bba 100644
--- a/renderer/components/Activity/Row.js
+++ b/renderer/components/Activity/Row.js
@@ -1,15 +1,15 @@
import React from 'react'
import PropTypes from 'prop-types'
-import { FormattedDate } from 'react-intl'
import { Box } from 'rebass/styled-components'
import { Bar, Heading } from 'components/UI'
+import { FormattedDateTime } from 'containers/UI'
const Row = ({ style, item, RowComponent }) => (
{item.title ? (
-
+
diff --git a/renderer/components/Activity/Transaction/Transaction.js b/renderer/components/Activity/Transaction/Transaction.js
index cd6018f7c65..8018f1311af 100644
--- a/renderer/components/Activity/Transaction/Transaction.js
+++ b/renderer/components/Activity/Transaction/Transaction.js
@@ -1,14 +1,14 @@
import React from 'react'
import PropTypes from 'prop-types'
import findLast from 'lodash/findLast'
-import { FormattedTime, FormattedMessage, injectIntl } from 'react-intl'
+import { FormattedMessage, injectIntl } from 'react-intl'
import { Box, Flex } from 'rebass/styled-components'
import config from 'config'
import { intlShape } from '@zap/i18n'
import { CoinBig } from '@zap/utils/coin'
import { Message, Text } from 'components/UI'
import ChainLink from 'components/Icon/ChainLink'
-import { CryptoValue, FiatValue } from 'containers/UI'
+import { CryptoValue, FiatValue, FormattedDateTime } from 'containers/UI'
import ErrorLink from '../ErrorLink'
import messages from './messages'
@@ -45,7 +45,7 @@ const Transaction = ({
if (CoinBig(numConfirmations).gt(confirmed)) {
return (
-
+
)
}
diff --git a/renderer/components/Activity/TransactionModal/TransactionModal.js b/renderer/components/Activity/TransactionModal/TransactionModal.js
index c1d97f577b1..8743de83154 100644
--- a/renderer/components/Activity/TransactionModal/TransactionModal.js
+++ b/renderer/components/Activity/TransactionModal/TransactionModal.js
@@ -1,19 +1,20 @@
import React from 'react'
import PropTypes from 'prop-types'
import get from 'lodash/get'
-import {
- FormattedDate,
- FormattedTime,
- FormattedMessage,
- FormattedNumber,
- injectIntl,
-} from 'react-intl'
+import { FormattedMessage, FormattedNumber, injectIntl } from 'react-intl'
import { Flex } from 'rebass/styled-components'
import { CoinBig } from '@zap/utils/coin'
import { intlShape } from '@zap/i18n'
import blockExplorer from '@zap/utils/blockExplorer'
import { Bar, DataRow, Header, Link, Panel, Span, Text, Button } from 'components/UI'
-import { CopyButton, CryptoSelector, CryptoValue, FiatSelector, FiatValue } from 'containers/UI'
+import {
+ CopyButton,
+ CryptoSelector,
+ CryptoValue,
+ FiatSelector,
+ FiatValue,
+ FormattedDateTime,
+} from 'containers/UI'
import { Truncate } from 'components/Util'
import Onchain from 'components/Icon/Onchain'
import Padlock from 'components/Icon/Padlock'
@@ -127,15 +128,14 @@ class TransactionModal extends React.PureComponent {
item.numConfirmations ? (
<>
-
-
+
>
) : (
diff --git a/renderer/components/Channels/ChannelCreateForm.js b/renderer/components/Channels/ChannelCreateForm.js
index c2eb83a3ca3..7676e3acf0d 100644
--- a/renderer/components/Channels/ChannelCreateForm.js
+++ b/renderer/components/Channels/ChannelCreateForm.js
@@ -14,7 +14,7 @@ import {
Label,
Toggle,
TransactionFeeInput,
- IntegerInput,
+ // IntegerInput,
} from 'components/Form'
import { CryptoValue } from 'containers/UI'
import { CurrencyFieldGroup } from 'containers/Form'
@@ -313,7 +313,7 @@ class ChannelCreateForm extends React.Component {
>
)}
-
+ {/*
@@ -333,7 +333,7 @@ class ChannelCreateForm extends React.Component {
variant="thin"
width={80}
/>
-
+ */}
)
}
diff --git a/renderer/components/Channels/ChannelData.js b/renderer/components/Channels/ChannelData.js
index 9898878c69e..0dd2eb63e1f 100644
--- a/renderer/components/Channels/ChannelData.js
+++ b/renderer/components/Channels/ChannelData.js
@@ -1,6 +1,6 @@
import React from 'react'
import PropTypes from 'prop-types'
-import { FormattedDate, FormattedTime, FormattedMessage, injectIntl } from 'react-intl'
+import { FormattedMessage, injectIntl } from 'react-intl'
import styled from 'styled-components'
import { opacity } from 'styled-system'
import { Box as BaseBox, Flex } from 'rebass/styled-components'
@@ -8,7 +8,7 @@ import { intlShape } from '@zap/i18n'
import blockExplorer from '@zap/utils/blockExplorer'
import { Bar, DataRow, Link, Text } from 'components/UI'
import { Truncate } from 'components/Util'
-import { CopyButton, CryptoValue } from 'containers/UI'
+import { CopyButton, CryptoValue, FormattedDateTime } from 'containers/UI'
import { CHANNEL_DATA_VIEW_MODE_BASIC, CHANNEL_DATA_VIEW_MODE_FULL } from './constants'
import messages from './messages'
@@ -62,13 +62,7 @@ const ChannelData = ({ channel, cryptoUnitName, intl, networkInfo, viewMode, ...
body: ,
value: (
- {' '}
-
+
),
}),
diff --git a/renderer/components/Onboarding/Steps/ConnectionConfirm.js b/renderer/components/Onboarding/Steps/ConnectionConfirm.js
index 73f65f75843..916de253815 100644
--- a/renderer/components/Onboarding/Steps/ConnectionConfirm.js
+++ b/renderer/components/Onboarding/Steps/ConnectionConfirm.js
@@ -18,6 +18,7 @@ class ConnectionConfirm extends React.Component {
isLightningGrpcActive: PropTypes.bool,
isWalletUnlockerGrpcActive: PropTypes.bool,
lndConnect: PropTypes.string,
+ name: PropTypes.string,
startLnd: PropTypes.func.isRequired,
startLndCertError: PropTypes.string,
startLndHostError: PropTypes.string,
@@ -40,10 +41,11 @@ class ConnectionConfirm extends React.Component {
handleSubmit = async () => {
const {
- connectionHost,
connectionCert,
+ connectionHost,
connectionMacaroon,
connectionString,
+ name,
startLnd,
} = this.props
const cleanConnectionString = connectionString && connectionString.trim()
@@ -57,6 +59,7 @@ class ConnectionConfirm extends React.Component {
cert: connectionCert,
macaroon: connectionMacaroon,
}),
+ name,
})
}
@@ -78,6 +81,7 @@ class ConnectionConfirm extends React.Component {
type: 'custom',
decoder: 'lnd.lndconnect.v1',
lndconnectUri,
+ name,
})
}
@@ -93,6 +97,7 @@ class ConnectionConfirm extends React.Component {
type: 'custom',
decoder: 'lnd.lndconnect.v1',
lndconnectUri,
+ name,
})
}
@@ -106,6 +111,7 @@ class ConnectionConfirm extends React.Component {
connectionMacaroon,
connectionString,
lndConnect,
+ name,
isLightningGrpcActive,
isWalletUnlockerGrpcActive,
startLndHostError,
diff --git a/renderer/components/Onboarding/Steps/ConnectionDetails.js b/renderer/components/Onboarding/Steps/ConnectionDetails.js
index 6c2b09cb38e..48535ba0fcd 100644
--- a/renderer/components/Onboarding/Steps/ConnectionDetails.js
+++ b/renderer/components/Onboarding/Steps/ConnectionDetails.js
@@ -18,11 +18,13 @@ class ConnectionDetails extends React.Component {
connectionMacaroon: PropTypes.string,
connectionString: PropTypes.string,
lndConnect: PropTypes.string,
+ name: PropTypes.string,
setConnectionCert: PropTypes.func.isRequired,
setConnectionHost: PropTypes.func.isRequired,
setConnectionMacaroon: PropTypes.func.isRequired,
setConnectionString: PropTypes.func.isRequired,
setLndconnect: PropTypes.func.isRequired,
+ setName: PropTypes.func.isRequired,
startLndCertError: PropTypes.string,
startLndHostError: PropTypes.string,
startLndMacaroonError: PropTypes.string,
@@ -46,22 +48,25 @@ class ConnectionDetails extends React.Component {
componentDidUpdate(prevProps, prevState) {
const {
lndConnect,
- setConnectionHost,
setConnectionCert,
+ setConnectionHost,
setConnectionMacaroon,
setConnectionString,
+ setName,
} = this.props
const { formType } = this.state
if (formType && formType !== prevState.formType && prevState.formType) {
switch (formType) {
case FORM_TYPE_CONNECTION_STRING:
- setConnectionHost(null)
setConnectionCert(null)
+ setConnectionHost(null)
setConnectionMacaroon(null)
+ setName(null)
break
case FORM_TYPE_MANUAL:
setConnectionString(null)
+ setName(null)
break
default:
@@ -79,25 +84,27 @@ class ConnectionDetails extends React.Component {
render() {
const {
- wizardApi,
- wizardState,
- connectionHost,
+ clearStartLndError,
connectionCert,
+ connectionHost,
connectionMacaroon,
connectionString,
- startLndHostError,
- startLndCertError,
- startLndMacaroonError,
lndConnect,
- setLndconnect,
- setConnectionHost,
+ name,
setConnectionCert,
+ setConnectionHost,
setConnectionMacaroon,
setConnectionString,
- clearStartLndError,
- validateHost,
+ setLndconnect,
+ setName,
+ startLndCertError,
+ startLndHostError,
+ startLndMacaroonError,
validateCert,
+ validateHost,
validateMacaroon,
+ wizardApi,
+ wizardState,
} = this.props
const { formType } = this.state
@@ -123,8 +130,10 @@ class ConnectionDetails extends React.Component {
clearStartLndError={clearStartLndError}
connectionString={connectionString}
lndConnect={lndConnect}
+ name={name}
setConnectionString={setConnectionString}
setLndconnect={setLndconnect}
+ setName={setName}
startLndCertError={startLndCertError}
startLndHostError={startLndHostError}
startLndMacaroonError={startLndMacaroonError}
@@ -139,10 +148,12 @@ class ConnectionDetails extends React.Component {
connectionMacaroon={connectionMacaroon}
connectionString={connectionString}
lndConnect={lndConnect}
+ name={name}
setConnectionCert={setConnectionCert}
setConnectionHost={setConnectionHost}
setConnectionMacaroon={setConnectionMacaroon}
setLndconnect={setLndconnect}
+ setName={setName}
startLndCertError={startLndCertError}
startLndHostError={startLndHostError}
startLndMacaroonError={startLndMacaroonError}
diff --git a/renderer/components/Onboarding/Steps/ConnectionDetailsManual.js b/renderer/components/Onboarding/Steps/ConnectionDetailsManual.js
index 972c9e4d59e..eec4836ed19 100644
--- a/renderer/components/Onboarding/Steps/ConnectionDetailsManual.js
+++ b/renderer/components/Onboarding/Steps/ConnectionDetailsManual.js
@@ -14,10 +14,12 @@ class ConnectionDetailsManual extends React.Component {
connectionMacaroon: PropTypes.string,
connectionString: PropTypes.string,
lndConnect: PropTypes.string,
+ name: PropTypes.string,
setConnectionCert: PropTypes.func.isRequired,
setConnectionHost: PropTypes.func.isRequired,
setConnectionMacaroon: PropTypes.func.isRequired,
setLndconnect: PropTypes.func.isRequired,
+ setName: PropTypes.func.isRequired,
startLndCertError: PropTypes.string,
startLndHostError: PropTypes.string,
@@ -32,6 +34,7 @@ class ConnectionDetailsManual extends React.Component {
static defaultProps = {
wizardApi: {},
wizardState: {},
+ name: null,
}
componentDidMount() {
@@ -90,10 +93,11 @@ class ConnectionDetailsManual extends React.Component {
}
handleSubmit = values => {
- const { setConnectionHost, setConnectionCert, setConnectionMacaroon } = this.props
+ const { setConnectionHost, setConnectionCert, setConnectionMacaroon, setName } = this.props
setConnectionHost(values.connectionHost)
setConnectionCert(values.connectionCert)
setConnectionMacaroon(values.connectionMacaroon)
+ setName(values.name)
}
validateHost = () => {
@@ -124,10 +128,12 @@ class ConnectionDetailsManual extends React.Component {
connectionMacaroon,
connectionString,
lndConnect,
+ name,
setConnectionHost,
setConnectionCert,
setConnectionMacaroon,
setLndconnect,
+ setName,
startLndHostError,
startLndCertError,
startLndMacaroonError,
@@ -211,12 +217,22 @@ class ConnectionDetailsManual extends React.Component {
initialValue={connectionMacaroon}
isRequired
label="Macaroon"
+ mb={3}
name="connectionMacaroon"
onBlur={this.validateMacaroon}
validateOnBlur={willValidateInline}
validateOnChange={willValidateInline}
width={1}
/>
+
+ }
+ field="name"
+ initialValue={name}
+ label={}
+ maxLength={30}
+ name="name"
+ />
>
)
}}
diff --git a/renderer/components/Onboarding/Steps/ConnectionDetailsString.js b/renderer/components/Onboarding/Steps/ConnectionDetailsString.js
index b692a8b26a7..971f636ee65 100644
--- a/renderer/components/Onboarding/Steps/ConnectionDetailsString.js
+++ b/renderer/components/Onboarding/Steps/ConnectionDetailsString.js
@@ -3,7 +3,7 @@ import PropTypes from 'prop-types'
import { FormattedMessage, injectIntl } from 'react-intl'
import { Box } from 'rebass/styled-components'
import { Bar, Header } from 'components/UI'
-import { Form, LndConnectionStringInput } from 'components/Form'
+import { Form, Input, LndConnectionStringInput } from 'components/Form'
import ConnectionDetailsTabs from './ConnectionDetailsTabs'
import messages from './messages'
@@ -12,8 +12,10 @@ class ConnectionDetailsString extends React.Component {
clearStartLndError: PropTypes.func.isRequired,
connectionString: PropTypes.string,
lndConnect: PropTypes.string,
+ name: PropTypes.string,
setConnectionString: PropTypes.func.isRequired,
setLndconnect: PropTypes.func.isRequired,
+ setName: PropTypes.func.isRequired,
startLndCertError: PropTypes.string,
startLndHostError: PropTypes.string,
@@ -25,6 +27,7 @@ class ConnectionDetailsString extends React.Component {
static defaultProps = {
wizardApi: {},
wizardState: {},
+ name: null,
}
componentDidMount() {
@@ -85,8 +88,9 @@ class ConnectionDetailsString extends React.Component {
}
handleSubmit = values => {
- const { setConnectionString } = this.props
+ const { setConnectionString, setName } = this.props
setConnectionString(values.connectionString)
+ setName(values.name)
}
render() {
@@ -98,8 +102,10 @@ class ConnectionDetailsString extends React.Component {
startLndCertError,
startLndMacaroonError,
lndConnect,
+ name,
setLndconnect,
setConnectionString,
+ setName,
clearStartLndError,
...rest
} = this.props
@@ -158,11 +164,21 @@ class ConnectionDetailsString extends React.Component {
field="connectionString"
initialValue={connectionString}
isRequired
+ mb={3}
rows="12"
validateOnBlur={willValidateInline}
validateOnChange={willValidateInline}
willAutoFocus
/>
+
+ }
+ field="name"
+ initialValue={name}
+ label={}
+ maxLength={30}
+ name="name"
+ />
>
)
}}
diff --git a/renderer/components/Onboarding/Steps/Name.js b/renderer/components/Onboarding/Steps/Name.js
index dfb259f1c1f..c56155db9fa 100644
--- a/renderer/components/Onboarding/Steps/Name.js
+++ b/renderer/components/Onboarding/Steps/Name.js
@@ -19,7 +19,7 @@ class Name extends React.Component {
static defaultProps = {
wizardApi: {},
wizardState: {},
- name: '',
+ name: null,
}
setFormApi = formApi => {
diff --git a/renderer/components/Request/RequestSummary.js b/renderer/components/Request/RequestSummary.js
index 1dfcdb261f6..d9e1719b641 100644
--- a/renderer/components/Request/RequestSummary.js
+++ b/renderer/components/Request/RequestSummary.js
@@ -1,10 +1,16 @@
import React, { useState } from 'react'
import PropTypes from 'prop-types'
import { Box, Flex } from 'rebass/styled-components'
-import { FormattedMessage, FormattedTime, useIntl } from 'react-intl'
+import { FormattedMessage, useIntl } from 'react-intl'
import copy from 'copy-to-clipboard'
import { Bar, DataRow, Button, QRCode, Text, Countdown } from 'components/UI'
-import { CryptoSelector, CryptoValue, FiatSelector, FiatValue } from 'containers/UI'
+import {
+ CryptoSelector,
+ CryptoValue,
+ FiatSelector,
+ FiatValue,
+ FormattedDateTime,
+} from 'containers/UI'
import { Truncate } from 'components/Util'
import RequestSettlePrompt from './RequestSettlePrompt'
import messages from './messages'
@@ -99,9 +105,7 @@ const RequestSummary = ({
}
- right={
-
- }
+ right={}
/>
@@ -213,12 +217,7 @@ const RequestSummary = ({
>
-
+
) : (
diff --git a/renderer/components/Settings/SettingsFieldsGeneral.js b/renderer/components/Settings/SettingsFieldsGeneral.js
index 83af5d48873..7cb9d36a43b 100644
--- a/renderer/components/Settings/SettingsFieldsGeneral.js
+++ b/renderer/components/Settings/SettingsFieldsGeneral.js
@@ -26,6 +26,15 @@ const themeMessageMapper = key => {
return filters[key]
}
+const displayModeItems = [{ key: '12hour' }, { key: '24hour' }]
+const displayModeMessageMapper = key => {
+ const filters = {
+ '12hour': messages.timeDisplayMode_option_12hour,
+ '24hour': messages.timeDisplayMode_option_24hour,
+ }
+ return filters[key]
+}
+
const SettingsFieldsGeneral = ({ currentConfig }) => {
return (
<>
@@ -72,6 +81,21 @@ const SettingsFieldsGeneral = ({ currentConfig }) => {
+ }
+ right={
+
+ }
+ />
+
+
+
}
right={}
diff --git a/renderer/components/Settings/messages.js b/renderer/components/Settings/messages.js
index f545a5c3725..d6f7be00534 100644
--- a/renderer/components/Settings/messages.js
+++ b/renderer/components/Settings/messages.js
@@ -63,4 +63,8 @@ export default defineMessages({
payments_maxParts_label: 'Payment parts',
payments_maxParts_description:
'Maximum number of partial payments that may be used to send a payment.',
+ timeDisplayMode_label: 'Time display mode',
+ timeDisplayMode_description: 'Your preferred time display mode.',
+ timeDisplayMode_option_12hour: '12 Hour',
+ timeDisplayMode_option_24hour: '24 Hour',
})
diff --git a/renderer/containers/Onboarding/Steps/ConnectionConfirm.js b/renderer/containers/Onboarding/Steps/ConnectionConfirm.js
index 4ae458ad3e4..185971df236 100644
--- a/renderer/containers/Onboarding/Steps/ConnectionConfirm.js
+++ b/renderer/containers/Onboarding/Steps/ConnectionConfirm.js
@@ -11,6 +11,7 @@ const mapStateToProps = state => ({
isLightningGrpcActive: state.lnd.isLightningGrpcActive,
isWalletUnlockerGrpcActive: state.lnd.isWalletUnlockerGrpcActive,
lndConnect: state.onboarding.lndConnect,
+ name: state.onboarding.name,
startLndHostError: lndSelectors.startLndHostError(state),
startLndCertError: lndSelectors.startLndCertError(state),
startLndMacaroonError: lndSelectors.startLndMacaroonError(state),
diff --git a/renderer/containers/Onboarding/Steps/ConnectionDetails.js b/renderer/containers/Onboarding/Steps/ConnectionDetails.js
index 47414ff2a53..816e4459623 100644
--- a/renderer/containers/Onboarding/Steps/ConnectionDetails.js
+++ b/renderer/containers/Onboarding/Steps/ConnectionDetails.js
@@ -10,6 +10,7 @@ import {
setConnectionMacaroon,
setConnectionString,
setLndconnect,
+ setName,
} from 'reducers/onboarding'
const mapStateToProps = state => ({
@@ -19,6 +20,7 @@ const mapStateToProps = state => ({
connectionHost: state.onboarding.connectionHost,
connectionCert: state.onboarding.connectionCert,
lndConnect: state.onboarding.lndConnect,
+ name: state.onboarding.name,
startLndHostError: lndSelectors.startLndHostError(state),
startLndCertError: lndSelectors.startLndCertError(state),
startLndMacaroonError: lndSelectors.startLndMacaroonError(state),
@@ -33,6 +35,7 @@ const mapDispatchToProps = {
setConnectionMacaroon,
setConnectionString,
setLndconnect,
+ setName,
clearStartLndError,
}
diff --git a/renderer/containers/Onboarding/Steps/ConnectionDetailsManual.js b/renderer/containers/Onboarding/Steps/ConnectionDetailsManual.js
index 024e3800b6a..968779bdf20 100644
--- a/renderer/containers/Onboarding/Steps/ConnectionDetailsManual.js
+++ b/renderer/containers/Onboarding/Steps/ConnectionDetailsManual.js
@@ -10,6 +10,7 @@ import {
setConnectionMacaroon,
setConnectionString,
setLndconnect,
+ setName,
} from 'reducers/onboarding'
const mapStateToProps = state => ({
@@ -19,6 +20,7 @@ const mapStateToProps = state => ({
connectionHost: state.onboarding.connectionHost,
connectionCert: state.onboarding.connectionCert,
lndConnect: state.onboarding.lndConnect,
+ name: state.onboarding.name,
startLndHostError: lndSelectors.startLndHostError(state),
startLndCertError: lndSelectors.startLndCertError(state),
startLndMacaroonError: lndSelectors.startLndMacaroonError(state),
@@ -33,6 +35,7 @@ const mapDispatchToProps = {
setConnectionMacaroon,
setConnectionString,
setLndconnect,
+ setName,
clearStartLndError,
}
diff --git a/renderer/containers/UI/FormattedDateTime.js b/renderer/containers/UI/FormattedDateTime.js
new file mode 100644
index 00000000000..fe94af1be11
--- /dev/null
+++ b/renderer/containers/UI/FormattedDateTime.js
@@ -0,0 +1,42 @@
+import React from 'react'
+import PropTypes from 'prop-types'
+import { connect } from 'react-redux'
+import { FormattedDate, FormattedTime } from 'react-intl'
+import { settingsSelectors } from 'reducers/settings'
+
+const mapStateToProps = state => ({
+ timeDisplayMode: settingsSelectors.currentConfig(state).timeDisplayMode,
+})
+
+const FormattedDateTime = ({ timeDisplayMode = '12hour', format, month = 'long', value }) => {
+ const is12Hour = timeDisplayMode === '12hour'
+
+ switch (format) {
+ case 'date':
+ return
+ case 'time':
+ return
+ default:
+ return (
+
+ )
+ }
+}
+
+FormattedDateTime.propTypes = {
+ format: PropTypes.oneOf(['date', 'time']),
+ month: PropTypes.string,
+ timeDisplayMode: PropTypes.oneOf(['12hour', '24hour']),
+ value: PropTypes.oneOfType([PropTypes.number, PropTypes.string, PropTypes.instanceOf(Date)])
+ .isRequired,
+}
+
+export default connect(mapStateToProps)(FormattedDateTime)
diff --git a/renderer/containers/UI/index.js b/renderer/containers/UI/index.js
index 80f04b19c4e..94fbc44910c 100644
--- a/renderer/containers/UI/index.js
+++ b/renderer/containers/UI/index.js
@@ -1,6 +1,7 @@
export CopyButton from './CopyButton'
export CryptoSelector from './CryptoSelector'
export CryptoValue from './CryptoValue'
+export FormattedDateTime from './FormattedDateTime'
export FiatSelector from './FiatSelector'
export FiatValue from './FiatValue'
export CryptoValueSelector from './CryptoValueSelector'
diff --git a/renderer/reducers/payment/reducer.js b/renderer/reducers/payment/reducer.js
index 0e578159627..0fd6472a0c7 100644
--- a/renderer/reducers/payment/reducer.js
+++ b/renderer/reducers/payment/reducer.js
@@ -4,8 +4,9 @@ import pick from 'lodash/pick'
import defaults from 'lodash/defaults'
import omitBy from 'lodash/omitBy'
import isNil from 'lodash/isNil'
+import cloneDeep from 'lodash/cloneDeep'
import createReducer from '@zap/utils/createReducer'
-import { isPubkey } from '@zap/utils/crypto'
+import { isPubkey, getTag } from '@zap/utils/crypto'
import delay from '@zap/utils/delay'
import genId from '@zap/utils/genId'
import { mainLog } from '@zap/utils/log'
@@ -316,13 +317,25 @@ export const payInvoice = ({
if (route && route.isExact) {
let result = {}
try {
- const routeToUse = { ...route }
+ const routeToUse = cloneDeep(route)
delete routeToUse.isExact
delete routeToUse.paymentHash
- result = await grpc.services.Router.sendToRoute({
+
+ // Add payment secret into the route.
+ const paymentAddress = getTag(payReq, 'payment_secret')
+ if (paymentAddress) {
+ routeToUse.hops[routeToUse.hops.length - 1].tlvPayload = true
+ routeToUse.hops[routeToUse.hops.length - 1].mppRecord = {
+ paymentAddr: Buffer.from(paymentAddress, 'hex'),
+ totalAmtMsat: routeToUse.totalAmtMsat - routeToUse.totalFeesMsat,
+ }
+ }
+
+ result = await grpc.services.Router.sendToRouteV2({
paymentHash: route.paymentHash ? Buffer.from(route.paymentHash, 'hex') : null,
route: routeToUse,
})
+
if (result.failure) {
throw new Error(result.failure.code)
}
diff --git a/renderer/reducers/payment/utils.js b/renderer/reducers/payment/utils.js
index 60b697aab96..dc32da3f80e 100644
--- a/renderer/reducers/payment/utils.js
+++ b/renderer/reducers/payment/utils.js
@@ -1,7 +1,13 @@
import get from 'lodash/get'
import cloneDeep from 'lodash/cloneDeep'
import { chanNumber } from 'bolt07'
-import { getTag, decodePayReq, getNodeAlias, generatePreimage } from '@zap/utils/crypto'
+import {
+ getTag,
+ decodePayReq,
+ getNodeAlias,
+ generatePreimage,
+ generateProbeHash,
+} from '@zap/utils/crypto'
import { convert } from '@zap/utils/btc'
import { getIntl } from '@zap/i18n'
import { sha256digest } from '@zap/utils/sha256'
@@ -193,6 +199,9 @@ export const prepareBolt11Probe = (payReq, feeLimit) => {
// Extract route hints from the invoice.
const routingInfo = getTag(invoice, 'routing_info') || []
+ const paymentHash = getTag(invoice, 'payment_hash')
+ const paymentAddress = getTag(invoice, 'payment_secret')
+
const hopHints = routingInfo.map(hint => ({
nodeId: hint.pubkey,
chanId: chanNumber({ id: hint.short_channel_id }).number,
@@ -207,6 +216,8 @@ export const prepareBolt11Probe = (payReq, feeLimit) => {
amtMsat: millisatoshis,
finalCltvDelta: getTag(invoice, 'min_final_cltv_expiry') || DEFAULT_CLTV_DELTA,
routeHints: [{ hopHints }],
+ paymentHash: generateProbeHash(paymentHash),
+ paymentAddr: paymentAddress && Buffer.from(paymentAddress, 'hex'),
}
}
diff --git a/services/grpc/router.methods.js b/services/grpc/router.methods.js
index 21fb1284d1e..082e09922e1 100644
--- a/services/grpc/router.methods.js
+++ b/services/grpc/router.methods.js
@@ -1,5 +1,4 @@
import { grpcLog } from '@zap/utils/log'
-import { generatePreimage } from '@zap/utils/crypto'
import { logGrpcCmd } from './helpers'
export const KEYSEND_PREIMAGE_TYPE = '5482373484'
@@ -15,10 +14,6 @@ export const KEYSEND_PREIMAGE_TYPE = '5482373484'
* @returns {Promise} The route route when state is SUCCEEDED
*/
async function probePayment(payload) {
- // Use a payload that has the payment hash set to some random bytes.
- // This will cause the payment to fail at the final destination.
- payload.paymentHash = new Uint8Array(generatePreimage())
-
logGrpcCmd('Router.probePayment', payload)
let result
@@ -94,10 +89,6 @@ async function probePayment(payload) {
* @returns {Promise} The route route when state is SUCCEEDED
*/
async function probePaymentV2(payload) {
- // Use a payload that has the payment hash set to some random bytes.
- // This will cause the payment to fail at the final destination.
- payload.paymentHash = new Uint8Array(generatePreimage())
-
logGrpcCmd('Router.probePaymentV2', payload)
let result
diff --git a/services/neutrino/neutrino.js b/services/neutrino/neutrino.js
index def6b2dc3c8..29380aa65e6 100644
--- a/services/neutrino/neutrino.js
+++ b/services/neutrino/neutrino.js
@@ -372,10 +372,12 @@ class Neutrino extends EventEmitter {
const { chain, network, whitelistPeers, neutrinoNodes } = this.lndConfig
const nodes = neutrinoNodes || config.lnd.neutrino[chain][network]
const connectFlag = whitelistPeers ? 'connect' : 'addpeer'
+ const feeUrl = 'https://nodes.lightning.computer/fees/v1/btc-fee-estimates.json'
neutrinoArgs.push('--bitcoin.node=neutrino')
neutrinoArgs.push('--neutrino.useragentname=zap-desktop')
neutrinoArgs.push(`--neutrino.useragentversion=${getPackageDetails().version}`)
+ neutrinoArgs.push(`--neutrino.feeurl=${feeUrl}`)
neutrinoArgs.push(`--${chain}.${network}`)
nodes.forEach(node => neutrinoArgs.push(`--neutrino.${connectFlag}=${node}`))
@@ -478,12 +480,13 @@ class Neutrino extends EventEmitter {
}
/**
+ *
* notifyOnWalletUnlockerActivation - Update state if log line indicates WalletUnlocker gRPC became active.
*
* @param {string} line log output line
*/
notifyOnWalletUnlockerActivation(line) {
- if (line.includes('RPC server listening on') && line.includes('password')) {
+ if (line.includes('RPC server listening on') && line.toLowerCase().includes('password')) {
this.isWalletUnlockerGrpcActive = true
this.isLightningGrpcActive = false
this.emit(NEUTRINO_WALLET_UNLOCKER_GRPC_ACTIVE)
@@ -496,7 +499,7 @@ class Neutrino extends EventEmitter {
* @param {string} line log output line
*/
notifyLightningActivation(line) {
- if (line.includes('RPC server listening on') && !line.includes('password')) {
+ if (line.includes('RPC server listening on') && !line.toLowerCase().includes('password')) {
this.isLightningGrpcActive = true
this.isWalletUnlockerGrpcActive = false
this.emit(NEUTRINO_LIGHTNING_GRPC_ACTIVE)
diff --git a/stories/containers/activity.stories.js b/stories/containers/activity.stories.js
index 8b5c9c61ba9..deacd2e65a8 100644
--- a/stories/containers/activity.stories.js
+++ b/stories/containers/activity.stories.js
@@ -2,7 +2,7 @@ import React from 'react'
import { storiesOf } from '@storybook/react'
import { action } from '@storybook/addon-actions'
import { boolean } from '@storybook/addon-knobs'
-import lightningPayReq from 'bolt11'
+import lightningPayReq from '@ln-zap/bolt11'
import { Modal } from 'components/UI'
import { InvoiceModal } from 'components/Activity/InvoiceModal'
import { PaymentModal } from 'components/Activity/PaymentModal'
diff --git a/stories/containers/request/request.component.stories.js b/stories/containers/request/request.component.stories.js
index 7dbcaa05246..bc0861692c2 100644
--- a/stories/containers/request/request.component.stories.js
+++ b/stories/containers/request/request.component.stories.js
@@ -3,7 +3,7 @@
import React from 'react'
import { storiesOf } from '@storybook/react'
import { action } from '@storybook/addon-actions'
-import lightningPayReq from 'bolt11'
+import lightningPayReq from '@ln-zap/bolt11'
import { convert } from '@zap/utils/btc'
import { RequestSummary } from 'components/Request'
import { Provider } from '../../Provider'
diff --git a/stories/helpers.js b/stories/helpers.js
index 1bf41976ad0..9e22edea1c5 100644
--- a/stories/helpers.js
+++ b/stories/helpers.js
@@ -1,7 +1,7 @@
import React from 'react'
import PropTypes from 'prop-types'
import { Box, Flex } from 'rebass/styled-components'
-import lightningPayReq from 'bolt11'
+import lightningPayReq from '@ln-zap/bolt11'
import { Bar, Heading, Page } from '@zap/renderer/components/UI'
export const Window = props =>
diff --git a/test/e2e/basic-ui.spec.js b/test/e2e/basic-ui.spec.js
index 578fd028663..330ba7fbf09 100644
--- a/test/e2e/basic-ui.spec.js
+++ b/test/e2e/basic-ui.spec.js
@@ -51,6 +51,7 @@ test('provide access to basic wallet functionality', async t => {
.typeText(onboarding.macaroonInput, path.join(__dirname, 'fixtures', 'readonly.macaroon'), {
paste: true,
})
+ .typeText(onboarding.nameInput, 'My Test Wallet', { paste: true })
.click(onboarding.nextButton)
// Confirm connection details and submit
diff --git a/test/e2e/fixtures/tls.cert b/test/e2e/fixtures/tls.cert
index 8fcb22f8c9d..270d04a5ee6 100644
--- a/test/e2e/fixtures/tls.cert
+++ b/test/e2e/fixtures/tls.cert
@@ -1,15 +1,16 @@
-----BEGIN CERTIFICATE-----
-MIICYTCCAgagAwIBAgIRAJMTFnc73j4iP6VAU/+nSOowCgYIKoZIzj0EAwIwPjEf
-MB0GA1UEChMWbG5kIGF1dG9nZW5lcmF0ZWQgY2VydDEbMBkGA1UEAxMSemFwLXRl
-c3RuZXQ0LWxuZC0wMB4XDTE5MTAyMzEwMDIyNloXDTIwMTIxNzEwMDIyNlowPjEf
-MB0GA1UEChMWbG5kIGF1dG9nZW5lcmF0ZWQgY2VydDEbMBkGA1UEAxMSemFwLXRl
-c3RuZXQ0LWxuZC0wMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEESndkptIDcgV
-AdH7ulBVDPZNsKWgD12WJhII2VmbUN9IU1ZFFcv43kg/DyzCH0/158tDGqHp+Npy
-f9JEQ++y4aOB5DCB4TAOBgNVHQ8BAf8EBAMCAqQwDwYDVR0TAQH/BAUwAwEB/zCB
-vQYDVR0RBIG1MIGyghJ6YXAtdGVzdG5ldDQtbG5kLTCCCWxvY2FsaG9zdIIVdGVz
-dG5ldDQtbG5kLnphcGhxLmlvgj56YXBuMzRxZmVlZHcybDV5MjZwM2hubmt1c3Fu
-Ymh4Y3h3NjRscTVjb2ptdnE0NXl3NGJjM3NxZC5vbmlvboIEdW5peIIKdW5peHBh
-Y2tldIcEfwAAAYcQAAAAAAAAAAAAAAAAAAAAAYcECjQEPocEIklopocECjf8YDAK
-BggqhkjOPQQDAgNJADBGAiEAiBiCFmgYrgQyF/OKoZb/I47xnaZYTkdUNeajomMo
-FKoCIQC6X3YEAMV2r1rbNs0faOUYS3hCTmFK75coXBJHHWFsFw==
+MIICeDCCAh2gAwIBAgIQOMCEKNbMG26NQgqAOmsYoDAKBggqhkjOPQQDAjA+MR8w
+HQYDVQQKExZsbmQgYXV0b2dlbmVyYXRlZCBjZXJ0MRswGQYDVQQDExJ6YXAtdGVz
+dG5ldDQtbG5kLTAwHhcNMjAxMjE2MTMzMTI4WhcNMjIwMjEwMTMzMTI4WjA+MR8w
+HQYDVQQKExZsbmQgYXV0b2dlbmVyYXRlZCBjZXJ0MRswGQYDVQQDExJ6YXAtdGVz
+dG5ldDQtbG5kLTAwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARvFglyFQ1Jn2qT
+26K+/OWBT86ZanV6mHjbx1eia4UEsdL2fE2FiD2yyJx56OeY+YdXqXNDM+kNiELc
+f0me4JxAo4H8MIH5MA4GA1UdDwEB/wQEAwICpDATBgNVHSUEDDAKBggrBgEFBQcD
+ATAPBgNVHRMBAf8EBTADAQH/MIHABgNVHREEgbgwgbWCEnphcC10ZXN0bmV0NC1s
+bmQtMIIJbG9jYWxob3N0ghV0ZXN0bmV0NC1sbmQuemFwaHEuaW+CPnphcG4zNHFm
+ZWVkdzJsNXkyNnAzaG5ua3VzcW5iaHhjeHc2NGxxNWNvam12cTQ1eXc0YmMzc3Fk
+Lm9uaW9uggR1bml4ggp1bml4cGFja2V0ggdidWZjb25uhwR/AAABhxAAAAAAAAAA
+AAAAAAAAAAABhwQKNAFbhwQiSWimMAoGCCqGSM49BAMCA0kAMEYCIQD/aVOTXMfz
+tJ54IIOs+d99H8OtYkRNeYcXQBOVuKWnSQIhAKB+U7Jt8d1qn23RDc85e8tDqJos
+dPv6QS1cN1SwpxPv
-----END CERTIFICATE-----
diff --git a/test/e2e/onboarding-connect-btcpay.spec.js b/test/e2e/onboarding-connect-btcpay.spec.js
index a05ce32a30b..a5b17a08ece 100644
--- a/test/e2e/onboarding-connect-btcpay.spec.js
+++ b/test/e2e/onboarding-connect-btcpay.spec.js
@@ -55,6 +55,10 @@ test('should connect to an external wallet (btcpay)', async t => {
}`,
{ paste: true }
)
+ // Fill out wallet name and submit.
+ .expect(onboarding.nameInput.exists)
+ .ok()
+ .typeText(onboarding.nameInput, 'External Wallet (lndconnect)', { paste: true })
.click(onboarding.nextButton)
// Confirm connection details and submit.
diff --git a/test/e2e/onboarding-connect-lndconnect.spec.js b/test/e2e/onboarding-connect-lndconnect.spec.js
index 6452cb1af60..ac490c3fcf7 100644
--- a/test/e2e/onboarding-connect-lndconnect.spec.js
+++ b/test/e2e/onboarding-connect-lndconnect.spec.js
@@ -43,6 +43,11 @@ test('should connect to an external wallet (lndconnect)', async t => {
'lndconnect://testnet4-lnd.zaphq.io:10009?cert=MIICYTCCAgagAwIBAgIRAJMTFnc73j4iP6VAU_-nSOowCgYIKoZIzj0EAwIwPjEfMB0GA1UEChMWbG5kIGF1dG9nZW5lcmF0ZWQgY2VydDEbMBkGA1UEAxMSemFwLXRlc3RuZXQ0LWxuZC0wMB4XDTE5MTAyMzEwMDIyNloXDTIwMTIxNzEwMDIyNlowPjEfMB0GA1UEChMWbG5kIGF1dG9nZW5lcmF0ZWQgY2VydDEbMBkGA1UEAxMSemFwLXRlc3RuZXQ0LWxuZC0wMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEESndkptIDcgVAdH7ulBVDPZNsKWgD12WJhII2VmbUN9IU1ZFFcv43kg_DyzCH0_158tDGqHp-Npyf9JEQ--y4aOB5DCB4TAOBgNVHQ8BAf8EBAMCAqQwDwYDVR0TAQH_BAUwAwEB_zCBvQYDVR0RBIG1MIGyghJ6YXAtdGVzdG5ldDQtbG5kLTCCCWxvY2FsaG9zdIIVdGVzdG5ldDQtbG5kLnphcGhxLmlvgj56YXBuMzRxZmVlZHcybDV5MjZwM2hubmt1c3FuYmh4Y3h3NjRscTVjb2ptdnE0NXl3NGJjM3NxZC5vbmlvboIEdW5peIIKdW5peHBhY2tldIcEfwAAAYcQAAAAAAAAAAAAAAAAAAAAAYcECjQEPocEIklopocECjf8YDAKBggqhkjOPQQDAgNJADBGAiEAiBiCFmgYrgQyF_OKoZb_I47xnaZYTkdUNeajomMoFKoCIQC6X3YEAMV2r1rbNs0faOUYS3hCTmFK75coXBJHHWFsFw&macaroon=AgEDbG5kAooBAwoQGE3tbiKnewTcFZ2PksnBLxIBMBoPCgdhZGRyZXNzEgRyZWFkGgwKBGluZm8SBHJlYWQaEAoIaW52b2ljZXMSBHJlYWQaDwoHbWVzc2FnZRIEcmVhZBoQCghvZmZjaGFpbhIEcmVhZBoPCgdvbmNoYWluEgRyZWFkGg0KBXBlZXJzEgRyZWFkAAAGILUucIJstjca7--eeHDbtkIQ1BLlYOEXKgxLWQDiuReD',
{ paste: true }
)
+
+ // Fill out wallet name and submit.
+ .expect(onboarding.nameInput.exists)
+ .ok()
+ .typeText(onboarding.nameInput, 'External Wallet (lndconnect)', { paste: true })
.click(onboarding.nextButton)
// Confirm connection details and submit
diff --git a/test/e2e/pages/onboarding.js b/test/e2e/pages/onboarding.js
index 80fe89aa3c0..877358bf862 100644
--- a/test/e2e/pages/onboarding.js
+++ b/test/e2e/pages/onboarding.js
@@ -91,7 +91,9 @@ class Onboarding {
passwordInputSeePasswordButton = ReactSelector('Password Input').find('svg')
- nameInput = ReactSelector('Name Input').find('input')
+ nameInput = ReactSelector('Input')
+ .nth(-1)
+ .find('input')
hostInput = ReactSelector('ConnectionDetailsManual Input')
.nth(0)
diff --git a/translations/af-ZA.json b/translations/af-ZA.json
index 92012a20101..e42f5665000 100644
--- a/translations/af-ZA.json
+++ b/translations/af-ZA.json
@@ -653,6 +653,10 @@
"components.Settings.theme_label": "",
"components.Settings.theme_option_dark": "",
"components.Settings.theme_option_light": "",
+ "components.Settings.timeDisplayMode_description": "",
+ "components.Settings.timeDisplayMode_label": "",
+ "components.Settings.timeDisplayMode_option_12hour": "",
+ "components.Settings.timeDisplayMode_option_24hour": "",
"components.Syncing.address_copied_notification_description": "",
"components.Syncing.address_copied_notification_title": "",
"components.Syncing.block_progress": "",
diff --git a/translations/ar-SA.json b/translations/ar-SA.json
index 9c7879922eb..3a6d14faaff 100644
--- a/translations/ar-SA.json
+++ b/translations/ar-SA.json
@@ -653,6 +653,10 @@
"components.Settings.theme_label": "",
"components.Settings.theme_option_dark": "",
"components.Settings.theme_option_light": "",
+ "components.Settings.timeDisplayMode_description": "",
+ "components.Settings.timeDisplayMode_label": "",
+ "components.Settings.timeDisplayMode_option_12hour": "",
+ "components.Settings.timeDisplayMode_option_24hour": "",
"components.Syncing.address_copied_notification_description": "",
"components.Syncing.address_copied_notification_title": "",
"components.Syncing.block_progress": "",
diff --git a/translations/bg-BG.json b/translations/bg-BG.json
index ee5087d2d37..05f214cdbeb 100644
--- a/translations/bg-BG.json
+++ b/translations/bg-BG.json
@@ -653,6 +653,10 @@
"components.Settings.theme_label": "Тема",
"components.Settings.theme_option_dark": "Тъмна",
"components.Settings.theme_option_light": "Светла",
+ "components.Settings.timeDisplayMode_description": "",
+ "components.Settings.timeDisplayMode_label": "",
+ "components.Settings.timeDisplayMode_option_12hour": "",
+ "components.Settings.timeDisplayMode_option_24hour": "",
"components.Syncing.address_copied_notification_description": "Адресът за плащането е копиран в буферната ви памет",
"components.Syncing.address_copied_notification_title": "Адресът е копиран",
"components.Syncing.block_progress": "Блок {currentBlock} от {totalBlocks}",
diff --git a/translations/ca-ES.json b/translations/ca-ES.json
index 92012a20101..e42f5665000 100644
--- a/translations/ca-ES.json
+++ b/translations/ca-ES.json
@@ -653,6 +653,10 @@
"components.Settings.theme_label": "",
"components.Settings.theme_option_dark": "",
"components.Settings.theme_option_light": "",
+ "components.Settings.timeDisplayMode_description": "",
+ "components.Settings.timeDisplayMode_label": "",
+ "components.Settings.timeDisplayMode_option_12hour": "",
+ "components.Settings.timeDisplayMode_option_24hour": "",
"components.Syncing.address_copied_notification_description": "",
"components.Syncing.address_copied_notification_title": "",
"components.Syncing.block_progress": "",
diff --git a/translations/cs-CZ.json b/translations/cs-CZ.json
index 60fecf5aabe..3ec16a4ea78 100644
--- a/translations/cs-CZ.json
+++ b/translations/cs-CZ.json
@@ -653,6 +653,10 @@
"components.Settings.theme_label": "Téma",
"components.Settings.theme_option_dark": "Tmavý",
"components.Settings.theme_option_light": "Světlý",
+ "components.Settings.timeDisplayMode_description": "",
+ "components.Settings.timeDisplayMode_label": "",
+ "components.Settings.timeDisplayMode_option_12hour": "",
+ "components.Settings.timeDisplayMode_option_24hour": "",
"components.Syncing.address_copied_notification_description": "Platební adresa byla zkopírována do vaší schránky",
"components.Syncing.address_copied_notification_title": "Adresa zkopírována",
"components.Syncing.block_progress": "Blok {currentBlock} z {totalBlocks}",
diff --git a/translations/da-DK.json b/translations/da-DK.json
index 2504e5bc2a3..37f680a79d4 100644
--- a/translations/da-DK.json
+++ b/translations/da-DK.json
@@ -653,6 +653,10 @@
"components.Settings.theme_label": "Tema",
"components.Settings.theme_option_dark": "Mørk",
"components.Settings.theme_option_light": "Lys",
+ "components.Settings.timeDisplayMode_description": "",
+ "components.Settings.timeDisplayMode_label": "",
+ "components.Settings.timeDisplayMode_option_12hour": "",
+ "components.Settings.timeDisplayMode_option_24hour": "",
"components.Syncing.address_copied_notification_description": "Betalings adresse er blevet kopieret til din clipboard",
"components.Syncing.address_copied_notification_title": "Adresse kopieret",
"components.Syncing.block_progress": "Blok {currentBlock} af {totalBlocks}",
diff --git a/translations/de-DE.json b/translations/de-DE.json
index 060ecfe5a4a..5551febe624 100644
--- a/translations/de-DE.json
+++ b/translations/de-DE.json
@@ -653,6 +653,10 @@
"components.Settings.theme_label": "Design",
"components.Settings.theme_option_dark": "Dunkel",
"components.Settings.theme_option_light": "Hell",
+ "components.Settings.timeDisplayMode_description": "",
+ "components.Settings.timeDisplayMode_label": "",
+ "components.Settings.timeDisplayMode_option_12hour": "",
+ "components.Settings.timeDisplayMode_option_24hour": "",
"components.Syncing.address_copied_notification_description": "Die Adresse wurde in die Zwischenablage kopiert",
"components.Syncing.address_copied_notification_title": "Adresse kopiert",
"components.Syncing.block_progress": "Block {currentBlock} von {totalBlocks}",
diff --git a/translations/el-GR.json b/translations/el-GR.json
index 0636949d8b7..503765b4871 100644
--- a/translations/el-GR.json
+++ b/translations/el-GR.json
@@ -653,6 +653,10 @@
"components.Settings.theme_label": "",
"components.Settings.theme_option_dark": "",
"components.Settings.theme_option_light": "",
+ "components.Settings.timeDisplayMode_description": "",
+ "components.Settings.timeDisplayMode_label": "",
+ "components.Settings.timeDisplayMode_option_12hour": "",
+ "components.Settings.timeDisplayMode_option_24hour": "",
"components.Syncing.address_copied_notification_description": "",
"components.Syncing.address_copied_notification_title": "",
"components.Syncing.block_progress": "",
diff --git a/translations/en.json b/translations/en.json
index 1730db98948..f7885ea78cd 100644
--- a/translations/en.json
+++ b/translations/en.json
@@ -653,6 +653,10 @@
"components.Settings.theme_label": "Theme",
"components.Settings.theme_option_dark": "Dark",
"components.Settings.theme_option_light": "Light",
+ "components.Settings.timeDisplayMode_description": "Your preferred time display mode.",
+ "components.Settings.timeDisplayMode_label": "Time display mode",
+ "components.Settings.timeDisplayMode_option_12hour": "12 Hour",
+ "components.Settings.timeDisplayMode_option_24hour": "24 Hour",
"components.Syncing.address_copied_notification_description": "Payment address has been copied to your clipboard",
"components.Syncing.address_copied_notification_title": "Address copied",
"components.Syncing.block_progress": "Block {currentBlock} of {totalBlocks}",
diff --git a/translations/es-ES.json b/translations/es-ES.json
index 2dbc6b0c634..2b9f1818361 100644
--- a/translations/es-ES.json
+++ b/translations/es-ES.json
@@ -653,6 +653,10 @@
"components.Settings.theme_label": "Tema",
"components.Settings.theme_option_dark": "Oscuro",
"components.Settings.theme_option_light": "Ligero",
+ "components.Settings.timeDisplayMode_description": "",
+ "components.Settings.timeDisplayMode_label": "",
+ "components.Settings.timeDisplayMode_option_12hour": "",
+ "components.Settings.timeDisplayMode_option_24hour": "",
"components.Syncing.address_copied_notification_description": "Dirección de pago ha sido copiada a su portapapeles",
"components.Syncing.address_copied_notification_title": "Dirección copiada",
"components.Syncing.block_progress": "Bloque {currentBlock} entre {totalBlocks} bloques totales",
diff --git a/translations/fi-FI.json b/translations/fi-FI.json
index 92012a20101..e42f5665000 100644
--- a/translations/fi-FI.json
+++ b/translations/fi-FI.json
@@ -653,6 +653,10 @@
"components.Settings.theme_label": "",
"components.Settings.theme_option_dark": "",
"components.Settings.theme_option_light": "",
+ "components.Settings.timeDisplayMode_description": "",
+ "components.Settings.timeDisplayMode_label": "",
+ "components.Settings.timeDisplayMode_option_12hour": "",
+ "components.Settings.timeDisplayMode_option_24hour": "",
"components.Syncing.address_copied_notification_description": "",
"components.Syncing.address_copied_notification_title": "",
"components.Syncing.block_progress": "",
diff --git a/translations/fr-FR.json b/translations/fr-FR.json
index 3dc1b5dfcad..debf950b5d9 100644
--- a/translations/fr-FR.json
+++ b/translations/fr-FR.json
@@ -653,6 +653,10 @@
"components.Settings.theme_label": "Thème",
"components.Settings.theme_option_dark": "Sombre",
"components.Settings.theme_option_light": "Clair",
+ "components.Settings.timeDisplayMode_description": "",
+ "components.Settings.timeDisplayMode_label": "",
+ "components.Settings.timeDisplayMode_option_12hour": "",
+ "components.Settings.timeDisplayMode_option_24hour": "",
"components.Syncing.address_copied_notification_description": "L'adresse a été copiée dans votre presse-papiers",
"components.Syncing.address_copied_notification_title": "Adresse copiée",
"components.Syncing.block_progress": "Bloc {currentBlock} sur {totalBlocks}",
diff --git a/translations/ga-IE.json b/translations/ga-IE.json
index a48517154ca..c1034aa9cdf 100644
--- a/translations/ga-IE.json
+++ b/translations/ga-IE.json
@@ -653,6 +653,10 @@
"components.Settings.theme_label": "",
"components.Settings.theme_option_dark": "",
"components.Settings.theme_option_light": "Solas",
+ "components.Settings.timeDisplayMode_description": "",
+ "components.Settings.timeDisplayMode_label": "",
+ "components.Settings.timeDisplayMode_option_12hour": "",
+ "components.Settings.timeDisplayMode_option_24hour": "",
"components.Syncing.address_copied_notification_description": "Tá an seoladh íocaíochta cóipeáilte go dtí do ghearrthaisce",
"components.Syncing.address_copied_notification_title": "Seoladh cóipeáilte",
"components.Syncing.block_progress": "Bloc {currentBlock} de {totalBlocks}",
diff --git a/translations/he-IL.json b/translations/he-IL.json
index 6b082734277..f5f18c17690 100644
--- a/translations/he-IL.json
+++ b/translations/he-IL.json
@@ -653,6 +653,10 @@
"components.Settings.theme_label": "",
"components.Settings.theme_option_dark": "",
"components.Settings.theme_option_light": "",
+ "components.Settings.timeDisplayMode_description": "",
+ "components.Settings.timeDisplayMode_label": "",
+ "components.Settings.timeDisplayMode_option_12hour": "",
+ "components.Settings.timeDisplayMode_option_24hour": "",
"components.Syncing.address_copied_notification_description": "",
"components.Syncing.address_copied_notification_title": "",
"components.Syncing.block_progress": "",
diff --git a/translations/hi-IN.json b/translations/hi-IN.json
index f6034c282cd..4f1fb423930 100644
--- a/translations/hi-IN.json
+++ b/translations/hi-IN.json
@@ -653,6 +653,10 @@
"components.Settings.theme_label": "",
"components.Settings.theme_option_dark": "",
"components.Settings.theme_option_light": "",
+ "components.Settings.timeDisplayMode_description": "",
+ "components.Settings.timeDisplayMode_label": "",
+ "components.Settings.timeDisplayMode_option_12hour": "",
+ "components.Settings.timeDisplayMode_option_24hour": "",
"components.Syncing.address_copied_notification_description": "",
"components.Syncing.address_copied_notification_title": "",
"components.Syncing.block_progress": "",
diff --git a/translations/hr-HR.json b/translations/hr-HR.json
index cc3ac094948..7c4d6811b4f 100644
--- a/translations/hr-HR.json
+++ b/translations/hr-HR.json
@@ -653,6 +653,10 @@
"components.Settings.theme_label": "Tema",
"components.Settings.theme_option_dark": "Tamna",
"components.Settings.theme_option_light": "Svijetla",
+ "components.Settings.timeDisplayMode_description": "",
+ "components.Settings.timeDisplayMode_label": "",
+ "components.Settings.timeDisplayMode_option_12hour": "",
+ "components.Settings.timeDisplayMode_option_24hour": "",
"components.Syncing.address_copied_notification_description": "Adresa je kopirana u međuspremnik",
"components.Syncing.address_copied_notification_title": "Adresa je kopirana",
"components.Syncing.block_progress": "Blok {currentBlock} od {totalBlocks}",
diff --git a/translations/hu-HU.json b/translations/hu-HU.json
index 92012a20101..e42f5665000 100644
--- a/translations/hu-HU.json
+++ b/translations/hu-HU.json
@@ -653,6 +653,10 @@
"components.Settings.theme_label": "",
"components.Settings.theme_option_dark": "",
"components.Settings.theme_option_light": "",
+ "components.Settings.timeDisplayMode_description": "",
+ "components.Settings.timeDisplayMode_label": "",
+ "components.Settings.timeDisplayMode_option_12hour": "",
+ "components.Settings.timeDisplayMode_option_24hour": "",
"components.Syncing.address_copied_notification_description": "",
"components.Syncing.address_copied_notification_title": "",
"components.Syncing.block_progress": "",
diff --git a/translations/it-IT.json b/translations/it-IT.json
index a3df66fc756..aef1b05a616 100644
--- a/translations/it-IT.json
+++ b/translations/it-IT.json
@@ -653,6 +653,10 @@
"components.Settings.theme_label": "",
"components.Settings.theme_option_dark": "",
"components.Settings.theme_option_light": "",
+ "components.Settings.timeDisplayMode_description": "",
+ "components.Settings.timeDisplayMode_label": "",
+ "components.Settings.timeDisplayMode_option_12hour": "",
+ "components.Settings.timeDisplayMode_option_24hour": "",
"components.Syncing.address_copied_notification_description": "",
"components.Syncing.address_copied_notification_title": "",
"components.Syncing.block_progress": "",
diff --git a/translations/ja-JP.json b/translations/ja-JP.json
index c757eec2523..117ca53fcb6 100644
--- a/translations/ja-JP.json
+++ b/translations/ja-JP.json
@@ -653,6 +653,10 @@
"components.Settings.theme_label": "",
"components.Settings.theme_option_dark": "",
"components.Settings.theme_option_light": "",
+ "components.Settings.timeDisplayMode_description": "",
+ "components.Settings.timeDisplayMode_label": "",
+ "components.Settings.timeDisplayMode_option_12hour": "",
+ "components.Settings.timeDisplayMode_option_24hour": "",
"components.Syncing.address_copied_notification_description": "",
"components.Syncing.address_copied_notification_title": "",
"components.Syncing.block_progress": "",
diff --git a/translations/ko-KR.json b/translations/ko-KR.json
index 92012a20101..e42f5665000 100644
--- a/translations/ko-KR.json
+++ b/translations/ko-KR.json
@@ -653,6 +653,10 @@
"components.Settings.theme_label": "",
"components.Settings.theme_option_dark": "",
"components.Settings.theme_option_light": "",
+ "components.Settings.timeDisplayMode_description": "",
+ "components.Settings.timeDisplayMode_label": "",
+ "components.Settings.timeDisplayMode_option_12hour": "",
+ "components.Settings.timeDisplayMode_option_24hour": "",
"components.Syncing.address_copied_notification_description": "",
"components.Syncing.address_copied_notification_title": "",
"components.Syncing.block_progress": "",
diff --git a/translations/nl-NL.json b/translations/nl-NL.json
index e7a8b2fc3e5..a3f3fed73d0 100644
--- a/translations/nl-NL.json
+++ b/translations/nl-NL.json
@@ -653,6 +653,10 @@
"components.Settings.theme_label": "",
"components.Settings.theme_option_dark": "",
"components.Settings.theme_option_light": "",
+ "components.Settings.timeDisplayMode_description": "",
+ "components.Settings.timeDisplayMode_label": "",
+ "components.Settings.timeDisplayMode_option_12hour": "",
+ "components.Settings.timeDisplayMode_option_24hour": "",
"components.Syncing.address_copied_notification_description": "Betalingsadres is gekopieerd naar je klembord",
"components.Syncing.address_copied_notification_title": "Adres gekopiëerd",
"components.Syncing.block_progress": "Blok {currentBlock} van {totalBlocks}",
diff --git a/translations/no-NO.json b/translations/no-NO.json
index 9ceda2ba4aa..e8072169251 100644
--- a/translations/no-NO.json
+++ b/translations/no-NO.json
@@ -653,6 +653,10 @@
"components.Settings.theme_label": "",
"components.Settings.theme_option_dark": "",
"components.Settings.theme_option_light": "",
+ "components.Settings.timeDisplayMode_description": "",
+ "components.Settings.timeDisplayMode_label": "",
+ "components.Settings.timeDisplayMode_option_12hour": "",
+ "components.Settings.timeDisplayMode_option_24hour": "",
"components.Syncing.address_copied_notification_description": "Betalingsadresse har blitt kopiert til utklippstavlen",
"components.Syncing.address_copied_notification_title": "Addresse kopiert",
"components.Syncing.block_progress": "Blokk {currentBlock} av {totalBlocks}",
diff --git a/translations/pl-PL.json b/translations/pl-PL.json
index 18545f65365..1185eeb0b18 100644
--- a/translations/pl-PL.json
+++ b/translations/pl-PL.json
@@ -653,6 +653,10 @@
"components.Settings.theme_label": "",
"components.Settings.theme_option_dark": "",
"components.Settings.theme_option_light": "",
+ "components.Settings.timeDisplayMode_description": "",
+ "components.Settings.timeDisplayMode_label": "",
+ "components.Settings.timeDisplayMode_option_12hour": "",
+ "components.Settings.timeDisplayMode_option_24hour": "",
"components.Syncing.address_copied_notification_description": "",
"components.Syncing.address_copied_notification_title": "",
"components.Syncing.block_progress": "",
diff --git a/translations/pt-BR.json b/translations/pt-BR.json
index aa50b51f44b..5a8cb17b22a 100644
--- a/translations/pt-BR.json
+++ b/translations/pt-BR.json
@@ -653,6 +653,10 @@
"components.Settings.theme_label": "",
"components.Settings.theme_option_dark": "",
"components.Settings.theme_option_light": "",
+ "components.Settings.timeDisplayMode_description": "",
+ "components.Settings.timeDisplayMode_label": "",
+ "components.Settings.timeDisplayMode_option_12hour": "",
+ "components.Settings.timeDisplayMode_option_24hour": "",
"components.Syncing.address_copied_notification_description": "",
"components.Syncing.address_copied_notification_title": "",
"components.Syncing.block_progress": "",
diff --git a/translations/pt-PT.json b/translations/pt-PT.json
index b3366454dc7..aad7c0e03ea 100644
--- a/translations/pt-PT.json
+++ b/translations/pt-PT.json
@@ -653,6 +653,10 @@
"components.Settings.theme_label": "",
"components.Settings.theme_option_dark": "",
"components.Settings.theme_option_light": "",
+ "components.Settings.timeDisplayMode_description": "",
+ "components.Settings.timeDisplayMode_label": "",
+ "components.Settings.timeDisplayMode_option_12hour": "",
+ "components.Settings.timeDisplayMode_option_24hour": "",
"components.Syncing.address_copied_notification_description": "",
"components.Syncing.address_copied_notification_title": "",
"components.Syncing.block_progress": "",
diff --git a/translations/ro-RO.json b/translations/ro-RO.json
index 052ea6ce19b..55bdaca050e 100644
--- a/translations/ro-RO.json
+++ b/translations/ro-RO.json
@@ -653,6 +653,10 @@
"components.Settings.theme_label": "",
"components.Settings.theme_option_dark": "",
"components.Settings.theme_option_light": "",
+ "components.Settings.timeDisplayMode_description": "",
+ "components.Settings.timeDisplayMode_label": "",
+ "components.Settings.timeDisplayMode_option_12hour": "",
+ "components.Settings.timeDisplayMode_option_24hour": "",
"components.Syncing.address_copied_notification_description": "",
"components.Syncing.address_copied_notification_title": "",
"components.Syncing.block_progress": "",
diff --git a/translations/ru-RU.json b/translations/ru-RU.json
index 9425ef3e0bd..60a899f47d3 100644
--- a/translations/ru-RU.json
+++ b/translations/ru-RU.json
@@ -653,6 +653,10 @@
"components.Settings.theme_label": "",
"components.Settings.theme_option_dark": "",
"components.Settings.theme_option_light": "",
+ "components.Settings.timeDisplayMode_description": "",
+ "components.Settings.timeDisplayMode_label": "",
+ "components.Settings.timeDisplayMode_option_12hour": "",
+ "components.Settings.timeDisplayMode_option_24hour": "",
"components.Syncing.address_copied_notification_description": "",
"components.Syncing.address_copied_notification_title": "",
"components.Syncing.block_progress": "",
diff --git a/translations/sr-SP.json b/translations/sr-SP.json
index 92012a20101..e42f5665000 100644
--- a/translations/sr-SP.json
+++ b/translations/sr-SP.json
@@ -653,6 +653,10 @@
"components.Settings.theme_label": "",
"components.Settings.theme_option_dark": "",
"components.Settings.theme_option_light": "",
+ "components.Settings.timeDisplayMode_description": "",
+ "components.Settings.timeDisplayMode_label": "",
+ "components.Settings.timeDisplayMode_option_12hour": "",
+ "components.Settings.timeDisplayMode_option_24hour": "",
"components.Syncing.address_copied_notification_description": "",
"components.Syncing.address_copied_notification_title": "",
"components.Syncing.block_progress": "",
diff --git a/translations/sv-SE.json b/translations/sv-SE.json
index 4fdb014f958..befcf2c1a78 100644
--- a/translations/sv-SE.json
+++ b/translations/sv-SE.json
@@ -653,6 +653,10 @@
"components.Settings.theme_label": "",
"components.Settings.theme_option_dark": "",
"components.Settings.theme_option_light": "",
+ "components.Settings.timeDisplayMode_description": "",
+ "components.Settings.timeDisplayMode_label": "",
+ "components.Settings.timeDisplayMode_option_12hour": "",
+ "components.Settings.timeDisplayMode_option_24hour": "",
"components.Syncing.address_copied_notification_description": "",
"components.Syncing.address_copied_notification_title": "",
"components.Syncing.block_progress": "",
diff --git a/translations/tr-TR.json b/translations/tr-TR.json
index b4ab337b33a..930f6b449c9 100644
--- a/translations/tr-TR.json
+++ b/translations/tr-TR.json
@@ -653,6 +653,10 @@
"components.Settings.theme_label": "",
"components.Settings.theme_option_dark": "",
"components.Settings.theme_option_light": "",
+ "components.Settings.timeDisplayMode_description": "",
+ "components.Settings.timeDisplayMode_label": "",
+ "components.Settings.timeDisplayMode_option_12hour": "",
+ "components.Settings.timeDisplayMode_option_24hour": "",
"components.Syncing.address_copied_notification_description": "Ödeme adresi kopyalandı",
"components.Syncing.address_copied_notification_title": "Adres kopyalandı",
"components.Syncing.block_progress": "Toplam {totalBlocks} bloktan: {currentBlock}",
diff --git a/translations/uk-UA.json b/translations/uk-UA.json
index c8118a67b6e..95768064da5 100644
--- a/translations/uk-UA.json
+++ b/translations/uk-UA.json
@@ -653,6 +653,10 @@
"components.Settings.theme_label": "Тема",
"components.Settings.theme_option_dark": "Темна",
"components.Settings.theme_option_light": "Світла",
+ "components.Settings.timeDisplayMode_description": "",
+ "components.Settings.timeDisplayMode_label": "",
+ "components.Settings.timeDisplayMode_option_12hour": "",
+ "components.Settings.timeDisplayMode_option_24hour": "",
"components.Syncing.address_copied_notification_description": "Адреса платежу скопійована у буфер обміну",
"components.Syncing.address_copied_notification_title": "Адреса скопійована",
"components.Syncing.block_progress": "Заблокувати {currentBlock} з {totalBlocks}",
diff --git a/translations/vi-VN.json b/translations/vi-VN.json
index 92012a20101..e42f5665000 100644
--- a/translations/vi-VN.json
+++ b/translations/vi-VN.json
@@ -653,6 +653,10 @@
"components.Settings.theme_label": "",
"components.Settings.theme_option_dark": "",
"components.Settings.theme_option_light": "",
+ "components.Settings.timeDisplayMode_description": "",
+ "components.Settings.timeDisplayMode_label": "",
+ "components.Settings.timeDisplayMode_option_12hour": "",
+ "components.Settings.timeDisplayMode_option_24hour": "",
"components.Syncing.address_copied_notification_description": "",
"components.Syncing.address_copied_notification_title": "",
"components.Syncing.block_progress": "",
diff --git a/translations/zh-CN.json b/translations/zh-CN.json
index 56c27633efa..4dade42e3e9 100644
--- a/translations/zh-CN.json
+++ b/translations/zh-CN.json
@@ -653,6 +653,10 @@
"components.Settings.theme_label": "",
"components.Settings.theme_option_dark": "",
"components.Settings.theme_option_light": "",
+ "components.Settings.timeDisplayMode_description": "",
+ "components.Settings.timeDisplayMode_label": "",
+ "components.Settings.timeDisplayMode_option_12hour": "",
+ "components.Settings.timeDisplayMode_option_24hour": "",
"components.Syncing.address_copied_notification_description": "",
"components.Syncing.address_copied_notification_title": "",
"components.Syncing.block_progress": "",
diff --git a/translations/zh-TW.json b/translations/zh-TW.json
index 75058884a31..41644c8aa61 100644
--- a/translations/zh-TW.json
+++ b/translations/zh-TW.json
@@ -653,6 +653,10 @@
"components.Settings.theme_label": "",
"components.Settings.theme_option_dark": "",
"components.Settings.theme_option_light": "",
+ "components.Settings.timeDisplayMode_description": "",
+ "components.Settings.timeDisplayMode_label": "",
+ "components.Settings.timeDisplayMode_option_12hour": "",
+ "components.Settings.timeDisplayMode_option_24hour": "",
"components.Syncing.address_copied_notification_description": "",
"components.Syncing.address_copied_notification_title": "",
"components.Syncing.block_progress": "",
diff --git a/utils/crypto.js b/utils/crypto.js
index 68402e8c29e..6e0c7cac3fa 100644
--- a/utils/crypto.js
+++ b/utils/crypto.js
@@ -3,11 +3,12 @@ import get from 'lodash/get'
import config from 'config'
import range from 'lodash/range'
import { address } from 'bitcoinjs-lib'
-import lightningRequestReq from 'bolt11'
+import lightningRequestReq from '@ln-zap/bolt11'
import bip21 from 'bip21'
import coininfo from 'coininfo'
import { CoinBig } from '@zap/utils/coin'
import { convert } from '@zap/utils/btc'
+import { sha256digest } from '@zap/utils/sha256'
export const PREIMAGE_BYTE_LENGTH = 32
@@ -22,10 +23,10 @@ export const networks = {
export const coinTypes = {
bitcoin: {
- mainnet: 'bitcoin',
- testnet: 'testnet',
- regtest: 'regtest',
- simnet: 'simnet',
+ mainnet: 'bc',
+ testnet: 'tb',
+ regtest: 'bcrt',
+ simnet: 'sb',
},
}
@@ -179,7 +180,7 @@ export const isBolt11 = (input, chain = 'bitcoin', network = 'mainnet') => {
}
try {
const decoded = lightningRequestReq.decode(input)
- if (decoded.coinType !== get(coinTypes, `${chain}.${network}`)) {
+ if (decoded.network.bech32 !== get(coinTypes, `${chain}.${network}`)) {
throw new Error('Invalid coin type')
}
return true
@@ -315,3 +316,20 @@ export const getFeeRange = (routes = []) => ({
* @returns {Uint8Array} hash bytes
*/
export const generatePreimage = () => randomBytes(PREIMAGE_BYTE_LENGTH)
+
+/**
+ * generateHash - Generates probe hash from payment hash.
+ *
+ * @param {string} paymentHash payment hash (hex)
+ * @returns {Uint8Array} probe hash (bytes)
+ */
+export const generateProbeHash = paymentHash => {
+ const idx = Buffer.from('probing-01:', 'utf8')
+ const hash = Buffer.from(paymentHash, 'hex')
+ const totalLength = idx.length + hash.length
+
+ const probeHashBuffer = Buffer.concat([idx, hash], totalLength)
+ const probeHash = sha256digest(probeHashBuffer)
+
+ return probeHash
+}
diff --git a/webpack/webpack.config.dll.js b/webpack/webpack.config.dll.js
index 90d43bb85cf..0f7eea649df 100644
--- a/webpack/webpack.config.dll.js
+++ b/webpack/webpack.config.dll.js
@@ -15,7 +15,7 @@ export default merge.smart(baseConfig, {
mode: 'development',
externals: [
'@grpc/grpc-js',
- '@ln-zap/proto-loader',
+ '@grpc/proto-loader',
'config',
'electron',
'electron-is-dev',
diff --git a/yarn.lock b/yarn.lock
index 38d6c0aeb89..207d2a51efc 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1373,26 +1373,22 @@
tslib "^2.0.1"
typescript "^4.0"
-"@grpc/grpc-js@^1.1.7":
- version "1.1.7"
- resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.1.7.tgz#d3d71c6da95397e2d63895ccc4a05e7572f7b7e6"
- integrity sha512-EuxMstI0u778dp0nk6Fe3gHXYPeV6FYsWOe0/QFwxv1NQ6bc5Wl/0Yxa4xl9uBlKElL6AIxuASmSfu7KEJhqiw==
+"@grpc/grpc-js@1.2.5":
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.2.5.tgz#d1ef9ae8b99c3b46bb6cc8c82be1aa80080b7300"
+ integrity sha512-CBCNwedw8McnEBq9jvoiJikws16WN0OiHFejQPovY71XkFWSiIqgvydYiDwpvIYDJmhPQ7qZNzW9BPndhXbx1Q==
dependencies:
- "@grpc/proto-loader" "^0.6.0-pre14"
"@types/node" "^12.12.47"
- google-auth-library "^6.0.0"
+ google-auth-library "^6.1.1"
semver "^6.2.0"
-"@grpc/proto-loader@^0.6.0-pre14":
- version "0.6.0-pre9"
- resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.6.0-pre9.tgz#0c6fe42f6c5ef9ce1b3cef7be64d5b09d6fe4d6d"
- integrity sha512-oM+LjpEjNzW5pNJjt4/hq1HYayNeQT+eGrOPABJnYHv7TyNPDNzkQ76rDYZF86X5swJOa4EujEMzQ9iiTdPgww==
+"@grpc/proto-loader@0.5.6":
+ version "0.5.6"
+ resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.5.6.tgz#1dea4b8a6412b05e2d58514d507137b63a52a98d"
+ integrity sha512-DT14xgw3PSzPxwS13auTEwxhMMOoz33DPUKNtmYK/QYbBSpLXJy78FGGs5yVoxVobEqPm4iW9MOIoz0A3bLTRQ==
dependencies:
- "@types/long" "^4.0.1"
lodash.camelcase "^4.3.0"
- long "^4.0.0"
- protobufjs "^6.9.0"
- yargs "^15.3.1"
+ protobufjs "^6.8.6"
"@hot-loader/react-dom@16.13.0":
version "16.13.0"
@@ -1596,6 +1592,20 @@
"@types/yargs" "^15.0.0"
chalk "^4.0.0"
+"@ln-zap/bolt11@1.2.8-beta.3":
+ version "1.2.8-beta.3"
+ resolved "https://registry.yarnpkg.com/@ln-zap/bolt11/-/bolt11-1.2.8-beta.3.tgz#201b080c0113932fba482df14573403ff8a8b0cf"
+ integrity sha512-K9mnrVRpqmWu8nlpZod2yrWj3MN22rKOOkmxOqgC2uoRAq8zPlT/1FPDwKmkqAtnVsRFCPxKo+KKvZBqMsW+Aw==
+ dependencies:
+ "@types/bn.js" "^4.11.3"
+ bech32 "^1.1.2"
+ bitcoinjs-lib "^3.3.1"
+ bn.js "^4.11.8"
+ create-hash "^1.2.0"
+ lodash "^4.17.11"
+ safe-buffer "^5.1.1"
+ secp256k1 "^3.4.0"
+
"@ln-zap/eslint-config@0.3.2":
version "0.3.2"
resolved "https://registry.yarnpkg.com/@ln-zap/eslint-config/-/eslint-config-0.3.2.tgz#e6d54f5e2104fb405b1c67871fbdb5f185cb1a50"
@@ -1609,14 +1619,6 @@
resolved "https://registry.yarnpkg.com/@ln-zap/prettier-config/-/prettier-config-0.1.0.tgz#d42cd49c9d675da26d56ecfe58f5304c43471d84"
integrity sha512-L9OHuzQ2XscNCWCyqWMYLxZhGc6hQLDjkDTa9aywkGYVAKctlGpHIj43OeuZnaacxZWA+vgiSUNsKT94BxfX6g==
-"@ln-zap/proto-loader@0.5.4":
- version "0.5.4"
- resolved "https://registry.yarnpkg.com/@ln-zap/proto-loader/-/proto-loader-0.5.4.tgz#4be409f6d0448fe81e71918e440bf902168f576f"
- integrity sha512-6zK9sgYrUwz+vd5Tt97rrKwKiFBe8r4+sQdO+MLZO2odiapLuiwUBB5mjEG/zb0c9nDgU6ZW+Pqye7Gye00VcA==
- dependencies:
- lodash.camelcase "^4.3.0"
- protobufjs "^6.8.6"
-
"@marionebl/sander@^0.6.0":
version "0.6.1"
resolved "https://registry.yarnpkg.com/@marionebl/sander/-/sander-0.6.1.tgz#1958965874f24bc51be48875feb50d642fc41f7b"
@@ -5716,15 +5718,16 @@ browserify-zlib@^0.2.0:
dependencies:
pako "~1.0.5"
-browserslist@4.14.5, browserslist@^4.12.0, browserslist@^4.12.2, browserslist@^4.8.5:
- version "4.14.5"
- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.5.tgz#1c751461a102ddc60e40993639b709be7f2c4015"
- integrity sha512-Z+vsCZIvCBvqLoYkBFTwEYH3v5MCQbsAjp50ERycpOjnPmolg1Gjy4+KaWWpm8QOJt9GHkhdqAl14NpCX73CWA==
+browserslist@4.16.5:
+ version "4.16.5"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.5.tgz#952825440bca8913c62d0021334cbe928ef062ae"
+ integrity sha512-C2HAjrM1AI/djrpAUU/tr4pml1DqLIzJKSLDBXBrNErl9ZCCTXdhwxdJjYc16953+mBWf7Lw+uUJgpgb8cN71A==
dependencies:
- caniuse-lite "^1.0.30001135"
- electron-to-chromium "^1.3.571"
- escalade "^3.1.0"
- node-releases "^1.1.61"
+ caniuse-lite "^1.0.30001214"
+ colorette "^1.2.2"
+ electron-to-chromium "^1.3.719"
+ escalade "^3.1.1"
+ node-releases "^1.1.71"
browserslist@4.7.0:
version "4.7.0"
@@ -5743,6 +5746,16 @@ browserslist@^3.2.6:
caniuse-lite "^1.0.30000844"
electron-to-chromium "^1.3.47"
+browserslist@^4.12.0, browserslist@^4.12.2, browserslist@^4.8.5:
+ version "4.14.5"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.5.tgz#1c751461a102ddc60e40993639b709be7f2c4015"
+ integrity sha512-Z+vsCZIvCBvqLoYkBFTwEYH3v5MCQbsAjp50ERycpOjnPmolg1Gjy4+KaWWpm8QOJt9GHkhdqAl14NpCX73CWA==
+ dependencies:
+ caniuse-lite "^1.0.30001135"
+ electron-to-chromium "^1.3.571"
+ escalade "^3.1.0"
+ node-releases "^1.1.61"
+
bs58@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a"
@@ -6066,6 +6079,11 @@ caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000989, caniuse-lite@^1.0.300011
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001146.tgz#c61fcb1474520c1462913689201fb292ba6f447c"
integrity sha512-VAy5RHDfTJhpxnDdp2n40GPPLp3KqNrXz1QqFv4J64HvArKs8nuNMOWkB3ICOaBTU/Aj4rYAo/ytdQDDFF/Pug==
+caniuse-lite@^1.0.30001214:
+ version "1.0.30001235"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001235.tgz#ad5ca75bc5a1f7b12df79ad806d715a43a5ac4ed"
+ integrity sha512-zWEwIVqnzPkSAXOUlQnPW2oKoYb2aLQ4Q5ejdjBcnH63rfypaW34CxaeBn1VMya2XaEU3P/R2qHpWyj+l0BT1A==
+
capital-case@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/capital-case/-/capital-case-1.0.3.tgz#339bd77e8fab6cf75111d4fca509b3edf7c117c8"
@@ -6546,6 +6564,11 @@ colorette@^1.2.1:
resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b"
integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==
+colorette@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94"
+ integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==
+
colors@^1.1.2:
version "1.4.0"
resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78"
@@ -7258,7 +7281,7 @@ debug@2.6.9, debug@^2.1.0, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.
dependencies:
ms "2.0.0"
-debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0:
+debug@4, debug@4.2.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1:
version "4.2.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1"
integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==
@@ -7970,6 +7993,11 @@ electron-to-chromium@^1.3.247, electron-to-chromium@^1.3.47, electron-to-chromiu
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.578.tgz#e6671936f4571a874eb26e2e833aa0b2c0b776e0"
integrity sha512-z4gU6dA1CbBJsAErW5swTGAaU2TBzc2mPAonJb00zqW1rOraDo2zfBMDRvaz9cVic+0JEZiYbHWPw/fTaZlG2Q==
+electron-to-chromium@^1.3.719:
+ version "1.3.749"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.749.tgz#0ecebc529ceb49dd2a7c838ae425236644c3439a"
+ integrity sha512-F+v2zxZgw/fMwPz/VUGIggG4ZndDsYy0vlpthi3tjmDZlcfbhN5mYW0evXUsBr2sUtuDANFtle410A9u/sd/4A==
+
electron-updater@4.3.5:
version "4.3.5"
resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-4.3.5.tgz#4fb36f593a031c87ea07ee141c9f064d5deffb15"
@@ -7983,10 +8011,10 @@ electron-updater@4.3.5:
lodash.isequal "^4.5.0"
semver "^7.3.2"
-electron@8.4.0:
- version "8.4.0"
- resolved "https://registry.yarnpkg.com/electron/-/electron-8.4.0.tgz#30692166dc8b2a511b3c01c70960d467efe2b8e6"
- integrity sha512-SpgyccM5rjDJSGcpQjiviUBT44fZlSyhcjy8RpKSnAad+co4xY1vYj6T25U1CfSk0PH/dhvcp63P2sdXHCwq/Q==
+electron@9.3.4:
+ version "9.3.4"
+ resolved "https://registry.yarnpkg.com/electron/-/electron-9.3.4.tgz#d62dd9f8abc93c009878714de9e60db030361a05"
+ integrity sha512-OHP8qMKgW8D8GtH+altB22WJw/lBOyyVdoz5e8D0/iPBmJU3Jm93vO4z4Eh/9DvdSXlH8bMHUCMLL9PVW6f+tw==
dependencies:
"@electron/get" "^1.0.1"
"@types/node" "^12.0.12"
@@ -8365,6 +8393,11 @@ escalade@^3.0.2, escalade@^3.1.0:
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.0.tgz#e8e2d7c7a8b76f6ee64c2181d6b8151441602d4e"
integrity sha512-mAk+hPSO8fLDkhV7V0dXazH5pDc6MrjBTPyD3VeKzxnVFjH1MIxbCdqGZB9O8+EwWakZs3ZCbDS4IpRt79V1ig==
+escalade@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
+ integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
+
escape-goat@^2.0.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675"
@@ -9829,6 +9862,17 @@ gaxios@^3.0.0, gaxios@^3.2.0:
is-stream "^2.0.0"
node-fetch "^2.3.0"
+gaxios@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-4.1.0.tgz#e8ad466db5a4383c70b9d63bfd14dfaa87eb0099"
+ integrity sha512-vb0to8xzGnA2qcgywAjtshOKKVDf2eQhJoiL6fHhgW5tVN7wNk7egnYIO9zotfn3lQ3De1VPdf7V5/BWfCtCmg==
+ dependencies:
+ abort-controller "^3.0.0"
+ extend "^3.0.2"
+ https-proxy-agent "^5.0.0"
+ is-stream "^2.0.0"
+ node-fetch "^2.3.0"
+
gcp-metadata@^4.1.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-4.2.0.tgz#3b424355ccdc240ee07c5791e2fd6a60a283d89a"
@@ -9837,6 +9881,14 @@ gcp-metadata@^4.1.0:
gaxios "^3.0.0"
json-bigint "^1.0.0"
+gcp-metadata@^4.2.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-4.2.1.tgz#31849fbcf9025ef34c2297c32a89a1e7e9f2cd62"
+ integrity sha512-tSk+REe5iq/N+K+SK1XjZJUrFPuDqGZVzCy2vocIHIGmPlTGsa8owXMJwGkrXr73NO0AzhPW4MF2DEHz7P2AVw==
+ dependencies:
+ gaxios "^4.0.0"
+ json-bigint "^1.0.0"
+
gensync@^1.0.0-beta.1:
version "1.0.0-beta.1"
resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269"
@@ -10208,6 +10260,21 @@ google-auth-library@^6.0.0:
jws "^4.0.0"
lru-cache "^6.0.0"
+google-auth-library@^6.1.1:
+ version "6.1.3"
+ resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-6.1.3.tgz#39d868140b70d0c4b32c6f6d8f4ccc1400d84dca"
+ integrity sha512-m9mwvY3GWbr7ZYEbl61isWmk+fvTmOt0YNUfPOUY2VH8K5pZlAIWJjxEi0PqR3OjMretyiQLI6GURMrPSwHQ2g==
+ dependencies:
+ arrify "^2.0.0"
+ base64-js "^1.3.0"
+ ecdsa-sig-formatter "^1.0.11"
+ fast-text-encoding "^1.0.0"
+ gaxios "^4.0.0"
+ gcp-metadata "^4.2.0"
+ gtoken "^5.0.4"
+ jws "^4.0.0"
+ lru-cache "^6.0.0"
+
google-p12-pem@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-3.0.3.tgz#673ac3a75d3903a87f05878f3c75e06fc151669e"
@@ -12563,21 +12630,21 @@ lnd-binary@0.3.18:
"true-case-path" "^2.2.1"
unzip-stream "^0.3.0"
-lnd-grpc@0.4.6:
- version "0.4.6"
- resolved "https://registry.yarnpkg.com/lnd-grpc/-/lnd-grpc-0.4.6.tgz#5ef3e6429531a3f814a5ec4cfadc5d5c2dd7d4a0"
- integrity sha512-dzHpS9lLyJE6xzGrqs/nCFkBOT3edqFibK+nL1ibCx9fuG5PXs7QBFrhwYgu4vbWva44xrxkz/JSHifPEBUH7A==
+lnd-grpc@0.4.8:
+ version "0.4.8"
+ resolved "https://registry.yarnpkg.com/lnd-grpc/-/lnd-grpc-0.4.8.tgz#84e079f127682e157071dfae25695223da97a9cd"
+ integrity sha512-wu10CB+ANiXysXOCLrvpm7PLdsHAepgcxa7HTPcMYVRoU8I8aH8oLaxUvIWJQMBiHfS2vdOrfWTx1Cj/qGc6gQ==
dependencies:
- "@grpc/grpc-js" "^1.1.7"
- "@ln-zap/proto-loader" "0.5.4"
- debug "^4.2.0"
+ "@grpc/grpc-js" "1.2.5"
+ "@grpc/proto-loader" "0.5.6"
+ debug "4.2.0"
get-port "5.1.1"
javascript-state-machine "3.1.0"
lndconnect "0.2.10"
lodash.defaultsdeep "4.6.1"
- semver "^7.1.3"
+ semver "7.1.3"
untildify "4.0.0"
- validator "^13.1.17"
+ validator "13.1.17"
lndconnect@0.2.10:
version "0.2.10"
@@ -13724,6 +13791,11 @@ node-releases@^1.1.29, node-releases@^1.1.61:
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.61.tgz#707b0fca9ce4e11783612ba4a2fcba09047af16e"
integrity sha512-DD5vebQLg8jLCOzwupn954fbIiZht05DAZs0k2u8NStSe6h9XdsuIQL8hSRKYiU8WUQRznmSDrKGbv3ObOmC7g==
+node-releases@^1.1.71:
+ version "1.1.72"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.72.tgz#14802ab6b1039a79a0c7d662b610a5bbd76eacbe"
+ integrity sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==
+
node-version@^1.0.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/node-version/-/node-version-1.2.0.tgz#34fde3ffa8e1149bd323983479dda620e1b5060d"
@@ -14952,7 +15024,7 @@ proto-list@~1.2.1:
resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=
-protobufjs@^6.8.6, protobufjs@^6.9.0:
+protobufjs@^6.8.6:
version "6.10.1"
resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.10.1.tgz#e6a484dd8f04b29629e9053344e3970cccf13cd2"
integrity sha512-pb8kTchL+1Ceg4lFd5XUpK8PdWacbvV5SK2ULH2ebrYtl4GjJmS24m6CKME67jzV53tbJxHlnNOSqQHbTsR9JQ==
@@ -16557,7 +16629,12 @@ semver@7.0.0:
resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==
-semver@7.3.2, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2:
+semver@7.1.3:
+ version "7.1.3"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.1.3.tgz#e4345ce73071c53f336445cfc19efb1c311df2a6"
+ integrity sha512-ekM0zfiA9SCBlsKa2X1hxyxiI4L3B6EbVJkkdgQXnSEEaHlGdvyodMruTiulSRWMMB4NeIuYNMC9rTKTz97GxA==
+
+semver@7.3.2, semver@^7.2.1, semver@^7.3.2:
version "7.3.2"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938"
integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==
@@ -18999,7 +19076,7 @@ validate-npm-package-license@^3.0.1:
spdx-correct "^3.0.0"
spdx-expression-parse "^3.0.0"
-validator@13.1.17, validator@^13.1.17:
+validator@13.1.17:
version "13.1.17"
resolved "https://registry.yarnpkg.com/validator/-/validator-13.1.17.tgz#ad677736950adddd3c37209484a6b2e0966579ad"
integrity sha512-zL5QBoemJ3jYFb2/j38y7ljhwYGXVLUp8H6W1nVxadnAOvUOytec+L7BHh1oBQ82/TzWXHd+GSaxUWp4lROkLg==
@@ -19683,7 +19760,7 @@ yargs@^13.3.2:
y18n "^4.0.0"
yargs-parser "^13.1.2"
-yargs@^15.3.1, yargs@^15.4.1:
+yargs@^15.4.1:
version "15.4.1"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8"
integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==