diff --git a/android/app/build.gradle b/android/app/build.gradle
index 852f5524f..813f1d0e3 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -134,7 +134,7 @@ android {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
- versionName "1.51.5"
+ versionName "1.51.6"
missingDimensionStrategy 'react-native-camera', 'general'
multiDexEnabled true
diff --git a/app/appstores/Stores/Send/SendActionsEnd.ts b/app/appstores/Stores/Send/SendActionsEnd.ts
index efaf4befe..c01c9bb89 100644
--- a/app/appstores/Stores/Send/SendActionsEnd.ts
+++ b/app/appstores/Stores/Send/SendActionsEnd.ts
@@ -1,5 +1,5 @@
/**
- * @version 0.41
+ * @version 2.0
*/
import analytics from '@react-native-firebase/analytics'
@@ -175,7 +175,7 @@ export namespace SendActionsEnd {
}})
} else if (uiType === 'WALLET_CONNECT') {
Log.log('SendActionsEnd.endRedirect walletConnect will get ' + tx.transactionHash)
- await walletConnectActions.approveRequestWalletConnect(walletConnectPayload, tx.transactionHash)
+ await walletConnectActions.approveRequest(walletConnectPayload, tx.transactionHash)
NavStore.goNext('AccountTransactionScreen', {
txData: {
transactionHash: tx.transactionHash,
@@ -203,7 +203,7 @@ export namespace SendActionsEnd {
const { bseOrderId } = bse
const data = { extraData, ...params, orderHash: bseOrderId, status: 'CLOSE' }
if (uiType === 'WALLET_CONNECT') {
- await walletConnectActions.rejectRequestWalletConnect(walletConnectPayload)
+ await walletConnectActions.rejectRequest(walletConnectPayload)
}
if (typeof bseOrderId === 'undefined' || !bseOrderId) return
return ApiV3.setExchangeStatus(data)
diff --git a/app/appstores/Stores/WalletConnect/WalletConnectService.js b/app/appstores/Stores/WalletConnect/WalletConnectService.js
index 018aca333..12f6ea996 100644
--- a/app/appstores/Stores/WalletConnect/WalletConnectService.js
+++ b/app/appstores/Stores/WalletConnect/WalletConnectService.js
@@ -1,255 +1,485 @@
/**
- * @version 1.0
+ * @version 2.0
*/
-import BlocksoftCryptoLog from '@crypto/common/BlocksoftCryptoLog'
import Log from '@app/services/Log/Log'
import { signTypedData } from '@metamask/eth-sig-util'
-import BlocksoftUtils from '@crypto/common/BlocksoftUtils'
import BlocksoftPrivateKeysUtils from '@crypto/common/BlocksoftPrivateKeysUtils'
import walletConnectActions from '@app/appstores/Stores/WalletConnect/WalletConnectStoreActions'
-import { handleSendSignModal, handleSendSignTypedModal, handleSendTransactionRedirect, handleSessionRequestModal } from '@app/appstores/Stores/WalletConnect/helpers'
+import {
+ handleSendSignModal,
+ handleSendSignTypedModal,
+ handleSendTransactionRedirect,
+ handleSessionProposalModal, handleSignTransactionModal
+} from '@app/appstores/Stores/WalletConnect/helpers'
import { Web3Injected } from '@crypto/services/Web3Injected'
-import trusteeAsyncStorage from '@appV2/services/trusteeAsyncStorage/trusteeAsyncStorage'
+import { Core } from '@walletconnect/core'
+import { Web3Wallet } from '@walletconnect/web3wallet'
+import { getSdkError } from '@walletconnect/utils'
-const walletConnectCore = require('@walletconnect/core')
-const walletConnectISO = require('@walletconnect/iso-crypto')
+import WalletConnectServiceWrapper from '@app/appstores/Stores/WalletConnect/WalletConnectServiceWrapper'
+import WalletConnectServiceWrapperWeb3 from '@app/appstores/Stores/WalletConnect/WalletConnectServiceWrapperWeb3'
-class WalletConnect extends walletConnectCore.default {
- // @ts-ignore
- constructor(connectorOpts, pushServerOpts) {
- super({
- cryptoLib: walletConnectISO,
- connectorOpts,
- pushServerOpts
- })
+import { showModal } from '@app/appstores/Stores/Modal/ModalActions'
+import { strings } from '@app/services/i18n'
+import config from '@app/config/config'
+import store from '@app/store'
+
+let core = false
+let web3wallet = false
+
+const WC_PROJECT_ID = 'daa39ed4fa0978cc19a9c9c0a2a7015c' // https://cloud.walletconnect.com/app/project
+
+const _getPrivateData = async (from) => {
+ const accountList = store.getState().accountStore.accountList
+ if (!accountList) {
+ return false
+ }
+ let account = false
+ for (const walletHash in accountList) {
+ for (const currencyCode in accountList[walletHash]) {
+ if (typeof accountList[walletHash][currencyCode].address !== 'undefined'
+ && accountList[walletHash][currencyCode].address.toLowerCase() === from.toLowerCase()) {
+ account = accountList[walletHash][currencyCode]
+ }
+ }
+ }
+ if (!account) {
+ return false
+ }
+
+ const discoverFor = {
+ addressToCheck: account.address,
+ derivationPath: account.derivationPath,
+ walletHash: account.walletHash,
+ currencyCode: account.currencyCode
+ }
+ const privateData = await BlocksoftPrivateKeysUtils.getPrivateKey(discoverFor, 'WalletConnectService')
+ return privateData
+}
+const _getAccounts = (payload) => {
+ const { walletHash } = store.getState().mainStore.selectedWallet
+ const { params } = payload
+ const { requiredNamespaces } = params
+
+ const accountList = store.getState().accountStore.accountList
+ if (!accountList || typeof accountList[walletHash] === 'undefined') {
+ return false
+ }
+ const currentETHAddress = accountList[walletHash]['ETH']
+ const namespaces = {}
+ for (const key in requiredNamespaces) {
+ const accounts = []
+ for (const chain of requiredNamespaces[key].chains) {
+ if (chain === 'tron:0x2b6653dc' && typeof accountList[walletHash]['TRX'] !== 'undefined') {
+ accounts.push(`${chain}:${accountList[walletHash]['TRX'].address}`)
+ } else if (chain === 'tron:0x2b6653dc' && typeof accountList[walletHash]['TRX_USDT'] !== 'undefined') {
+ accounts.push(`${chain}:${accountList[walletHash]['TRX_USDT'].address}`)
+ } else if (chain === 'solana' && typeof accountList[walletHash]['SOL'] !== 'undefined') {
+ accounts.push(`${chain}:${accountList[walletHash]['SOL'].address}`)
+ } else if (chain === 'solana' && typeof accountList[walletHash]['SOL_USDT'] !== 'undefined') {
+ accounts.push(`${chain}:${accountList[walletHash]['SOL_USDT'].address}`)
+ } else {
+ accounts.push(`${chain}:${currentETHAddress.address}`)
+ }
+ }
+ namespaces[key] = {
+ accounts,
+ methods: requiredNamespaces[key].methods,
+ events: requiredNamespaces[key].events
+ }
+ }
+ return {
+ namespaces
}
}
const walletConnectService = {
- createAndConnect: (fullLink, session, dappData) => {
- const walletConnector = new WalletConnect(
- {
- uri: fullLink,
- clientMeta: {
- description: 'Trustee Wallet for Wallet Connect',
- url: 'https://trustee.deals',
- icons: ['https://walletconnect.org/walletconnect-logo.png'],
- name: 'Trustee Wallet'
- },
- session
- }
- )
- walletConnector.on('session_request', (error, payload) => {
- Log.log('WalletConnectService.on session_request payload', payload, error)
- if (error) {
- throw error
- }
- if (!walletConnector.connected) {
- walletConnector.createSession()
- }
+ _init: async () => {
+ core = new Core({
+ // logger: 'debug',
+ projectId: WC_PROJECT_ID,
+ relayUrl: 'wss://relay.walletconnect.com'
+ })
+ core = WalletConnectServiceWrapper(core)
- if (!payload) {
- Log.log('WalletConnectService.on session_request no payload')
- return
+ web3wallet = await Web3Wallet.init({
+ core,
+ metadata: {
+ description: 'Trustee Wallet',
+ url: 'https://trustee.deals',
+ icons: ['https://trusteeglobal.com/wp-content/uploads/2023/03/icon_wallet.png'],
+ name: 'Trustee Wallet'
}
- if (typeof payload.method === 'undefined' || payload.method !== 'session_request') {
- Log.log('WalletConnectService.on session_request no payload method')
- return
+ })
+
+ web3wallet = await WalletConnectServiceWrapperWeb3(web3wallet)
+
+ web3wallet.on('session_proposal', async (payload) => {
+ try {
+ if (!payload) {
+ Log.log('WalletConnectService.on v2 session_proposal no payload')
+ return
+ }
+ Log.log('WalletConnectService.on v2 session_proposal', JSON.stringify(payload))
+ handleSessionProposalModal(web3wallet, payload)
+ } catch (e) {
+ if (config.debug.appErrors) {
+ console.log('WalletConnectService.on v2 session_proposal error ' + e.message)
+ }
+ Log.log('WalletConnectService.on v2 session_proposal error ' + e.message)
}
- if (typeof payload.params === 'undefined' || typeof payload.params[0] === 'undefined') {
- Log.log('WalletConnectService.on session_request no payload params')
- return
+ })
+
+ web3wallet.on('session_request', (payload) => {
+ try {
+ Log.log('WalletConnectService.on v2 session_request', JSON.stringify(payload))
+ let { request, chainId } = payload.params
+ const { method, params } = request
+
+ if (typeof chainId !== 'undefined' && chainId && chainId.indexOf(':') !== -1) {
+ const tmp = chainId.split(':')
+ if (typeof tmp[1] !== 'undefined') {
+ chainId = tmp[1] * 1
+ }
+ }
+
+ if (method === 'personal_sign') {
+ handleSendSignModal(web3wallet, chainId, params[1], params[0], payload)
+ } else if (method.indexOf('eth_') === -1) {
+ if (config.debug.appErrors) {
+ console.log('WalletConnectService.on v2 session_request todo method ' + method, JSON.stringify(payload))
+ }
+ Log.log('WalletConnectService.on v2 session_request todo method ' + method, JSON.stringify(payload))
+ showModal({
+ type: 'INFO_MODAL',
+ icon: null,
+ title: strings('modal.exchange.sorry'),
+ description: `Method ${method} is not supported`
+ })
+ walletConnectService.rejectRequest(web3wallet, payload)
+ } else {
+ const WEB3 = Web3Injected(chainId)
+ if (method === 'eth_sendTransaction') {
+ handleSendTransactionRedirect(web3wallet, params[0], WEB3.MAIN_CURRENCY_CODE, payload)
+ } else if (method === 'eth_signTransaction') {
+ handleSignTransactionModal(web3wallet, chainId, params[0], WEB3.MAIN_CURRENCY_CODE, payload)
+ } else if (method === 'eth_sign') {
+ handleSendSignModal(web3wallet, chainId, params[0], params[1], payload)
+ } else if (method === 'eth_signTypedData') {
+ handleSendSignTypedModal(web3wallet, chainId, params[0], JSON.parse(params[1]), payload)
+ } else {
+ if (config.debug.appErrors) {
+ console.log('WalletConnectService.on v2 session_request no method ' + method, JSON.stringify(payload))
+ }
+ Log.log('WalletConnectService.on v2 session_request no method ' + method, JSON.stringify(payload))
+ }
+ }
+ } catch (e) {
+ if (config.debug.appErrors) {
+ console.log('WalletConnectService.on v2 session_request error ' + e.message)
+ }
+ Log.log('WalletConnectService.on v2 session_request error ' + e.message)
}
- Log.log('WalletConnectService.on session_request finish', payload.params[0])
+ })
- handleSessionRequestModal(walletConnector, payload.params[0], dappData)
+ web3wallet.on('session_delete', (payload) => {
+ try {
+ Log.log('WalletConnectService.on v2 session_delete', JSON.stringify(payload))
+ walletConnectActions.resetWalletConnect()
+ } catch (e) {
+ if (config.debug.appErrors) {
+ console.log('WalletConnectService.on v2 session_delete error ' + e.message)
+ }
+ Log.log('WalletConnectService.on v2 session_delete error ' + e.message)
+ }
})
- walletConnector.on('session_update', (error, payload) => {
- Log.log('WalletConnectService.on session_update payload', payload)
- if (error) {
- throw error
+ web3wallet.on('auth_request', async (payload) => {
+ if (config.debug.appErrors) {
+ console.log('WalletConnectService.on v2 auth_request', JSON.stringify(payload))
}
- walletConnectActions.setIsConnectedWalletConnect({
- isConnected: walletConnector.session.connected,
- peerId: walletConnector.peerId,
- peerMeta: walletConnector.peerMeta
+ Log.log('WalletConnectService.on v2 auth_request', JSON.stringify(payload))
+ showModal({
+ type: 'INFO_MODAL',
+ icon: null,
+ title: strings('modal.exchange.sorry'),
+ description: `Method auth_request is not supported`
})
})
- walletConnector.on('call_request', (error, payload) => {
+ return web3wallet
+ },
+
+ createAndConnect: async (fullLink, activatePairing) => {
+ try {
+ if (web3wallet === false) {
+ await walletConnectService._init()
+ }
+ Log.log('WalletConnectService.on v2 init fullLink ' + fullLink + ' ' + (activatePairing ? 'activePairing' : 'no pairing'))
+ const params = activatePairing ? { uri: fullLink, activatePairing } : { uri: fullLink }
try {
- Log.log('WalletConnectService.on call_request payload', payload)
- if (error) {
- throw new Error('Strange ' + error.message)
- }
- if (payload.method === 'wallet_addEthereumChain' || payload.method === 'wallet_switchEthereumChain') {
- const chainId = 1 * BlocksoftUtils.hexToDecimalWalletConnect(payload.params[0].chainId)
- Log.log('autoChangeChain ' + payload.params[0].chainId + ' => ' + chainId)
- walletConnectActions.getAndSetWalletConnectAccountNetwork(walletConnector, chainId, 'call_request')
-
- } else if (payload.method === 'eth_signTypedData') {
- handleSendSignTypedModal(walletConnector, JSON.parse(payload.params[1]), payload)
- } else if (payload.method === 'personal_sign') {
- const message = payload.params[0]
- handleSendSignModal(walletConnector, message, payload)
- } else if (payload.method === 'eth_sendTransaction') {
- handleSendTransactionRedirect(walletConnector, payload.params[0], payload)
+ await web3wallet.core.pairing.pair(params)
+ } catch (e) {
+ if (e.message.indexOf('Pairing already exists') !== -1 || e.message.indexOf('Keychain already exists') !== -1) {
+ // do nothing
+ Log.log('WalletConnectService.on v2 web3wallet.core.pairing.pair error 1 ' + e.message)
+ } else if (e.message.indexOf('Request validation') !== -1) {
+ // do nothing
+ Log.log('WalletConnectService.on v2 web3wallet.core.pairing.pair error 2 ' + e.message)
} else {
- Log.err('WalletConnectService.on call_request unknown method: ' + payload.method)
- throw new Error('Please call developers to add support of method: ' + payload.method)
+ if (config.debug.appErrors) {
+ console.log('WalletConnectService.on ' + e.message + ' in v2 web3wallet.core.pairing.pair')
+ }
+ throw new Error(e.message + ' in v2 web3wallet.core.pairing.pair')
}
- } catch (e) {
- Log.err('WalletConnectService.on call_request error ' + e.message)
}
- })
- walletConnector.on('disconnect', (error, payload) => {
- Log.log('WalletConnectService.on disconnect payload', payload)
- if (error) {
- throw error
+ return web3wallet
+ } catch (e1) {
+ if (config.debug.appErrors) {
+ console.log('WalletConnectService createAndConnect v2 error ' + e1.message)
}
- if (payload.event === 'disconnect') {
- walletConnectActions.resetWalletConnect()
+ throw new Error(e1)
+ }
+ },
+
+ getConnections: async (walletConnector) => {
+ const connections = []
+ try {
+ const activeSessions = await walletConnector.getActiveSessions()
+ for (const key in activeSessions) {
+ const res = {
+ key,
+ topic : activeSessions[key].topic,
+ peer: activeSessions[key].peer.metadata
+ }
+ connections.push(res)
+ }
+ } catch (e) {
+ if (config.debug.appErrors) {
+ console.log('WalletConnectService.getConnections v2 error ' + e.message)
+ }
+ Log.log('WalletConnectService.getConnections v2 error ' + e.message)
+ }
+ return connections
+ },
+
+ killConnections: async (walletConnector) => {
+ const connections = []
+ try {
+ const activeSessions = await walletConnector.getActiveSessions()
+ for (const key in activeSessions) {
+ const res = {
+ key,
+ topic : activeSessions[key].topic,
+ peer: activeSessions[key].peer.metadata
+ }
+ try {
+ await walletConnector.disconnectSession({
+ topic: activeSessions[key].topic,
+ reason: getSdkError("USER_DISCONNECTED"),
+ })
+ } catch (e) {
+ if (config.debug.appErrors) {
+ console.log('WalletConnectService.killConnections v2 error 2 ' + e.message, res)
+ }
+ Log.log('WalletConnectService.killConnections v2 error 2 ' + e.message, res)
+ connections.push(res)
+ }
+ }
+ } catch (e) {
+ if (config.debug.appErrors) {
+ console.log('WalletConnectService.killConnections v2 error ' + e.message)
+ }
+ Log.log('WalletConnectService.killConnections v2 error ' + e.message)
+ }
+ return connections
+ },
+
+ approveRequest: async (walletConnector, payload, transactionHash) => {
+ try {
+ Log.log('WalletConnectService.approveRequest v2 transactionHash ' + JSON.stringify(transactionHash), payload)
+ const res = {
+ topic: payload.topic,
+ response: {
+ id: payload.id,
+ jsonrpc: '2.0',
+ result: transactionHash
+ }
+ }
+ if (walletConnector) {
+ await walletConnector.respondSessionRequest(res)
} else {
- Log.log('WalletConnectService.on disconnect error unknown event')
+ await web3wallet.respondSessionRequest(res)
}
- })
- return walletConnector
+ } catch (e) {
+ if (config.debug.appErrors) {
+ console.log('WalletConnectService.approveRequest v2 error ' + e.message)
+ }
+ Log.log('WalletConnectService.approveRequest v2 error ' + e.message)
+ }
},
- approveRequest: async (walletConnector, walletConnectPayload, transactionHash) => {
+ // https://docs.walletconnect.com/2.0/advanced/rpc-reference/ethereum-rpc#eth_signtransaction
+ approveSignTransaction: async (walletConnector, chainId, from, transaction, accountCurrencyCode, payload) => {
try {
- await walletConnector.approveRequest({
- id: walletConnectPayload.id,
- result: transactionHash
- })
+ Log.log('WalletConnectService.approveSignTransaction v2 chainId ' + chainId + ' from ' + from + ' transaction ' + JSON.stringify(transaction), payload)
+
+ const privateData = await _getPrivateData(from)
+ if (!privateData) {
+ return false
+ }
+ const WEB3 = Web3Injected(chainId)
+ const signData = await WEB3.eth.accounts.signTransaction(transaction, privateData.privateKey)
+ Log.log('WalletConnectService.approveSignTransaction v2 chainId ' + chainId + ' from ' + from + ' signData', signData)
+ const res = {
+ topic: payload.topic,
+ response: {
+ id: payload.id,
+ jsonrpc: '2.0',
+ result: signData.rawTransaction
+ }
+ }
+ await walletConnector.respondSessionRequest(res)
} catch (e) {
- Log.err('WalletConnectService.approveRequest error ' + e.message)
+ if (config.debug.appErrors) {
+ console.log('WalletConnectService.approveSignTransaction v2 error ' + e.message)
+ }
+ Log.log('WalletConnectService.approveSignTransaction v2 error ' + e.message)
}
},
- approveSign: async (walletConnector, message, payload) => {
+ approveSign: async (walletConnector, chainId, from, message, payload) => {
try {
- Log.log('WalletConnectService.approveSign', message, payload)
- const { chainId } = payload
- const { account } = await walletConnectActions.getAndSetWalletConnectAccount(walletConnector, chainId)
- const discoverFor = {
- addressToCheck: account.address,
- derivationPath: account.derivationPath,
- walletHash: account.walletHash,
- currencyCode: account.currencyCode
- }
- const privateData = await BlocksoftPrivateKeysUtils.getPrivateKey(discoverFor, 'WalletConnectService')
+ Log.log('WalletConnectService.approveSign v2 chainId ' + chainId + ' from ' + from + ' message ' + message, payload)
+
+ const privateData = await _getPrivateData(from)
+ if (!privateData) {
+ return false
+ }
const WEB3 = Web3Injected(chainId)
- const signData = await WEB3.eth.accounts.sign(payload.params[0], privateData.privateKey)
+ const signData = await WEB3.eth.accounts.sign(message, privateData.privateKey)
- await walletConnector.approveRequest({
- id: payload.id,
- result: signData.signature
- })
+ const res = {
+ topic: payload.topic,
+ response: {
+ id: payload.id,
+ jsonrpc: '2.0',
+ result: signData.signature
+ }
+ }
+ await walletConnector.respondSessionRequest(res)
} catch (e) {
- Log.err('WalletConnectService.approveSign error ' + e.message)
+ if (config.debug.appErrors) {
+ console.log('WalletConnectService.approveSign v2 error ' + e.message)
+ }
+ Log.log('WalletConnectService.approveSign v2 error ' + e.message)
}
},
- approveSignTyped: async (walletConnector, data, payload) => {
+ approveSignTyped: async (walletConnector, chainId, from, data, payload) => {
try {
- Log.log('WalletConnectService.approveSignTyped2 ' + JSON.stringify(data), payload)
- const { chainId } = payload
- const { account } = await walletConnectActions.getAndSetWalletConnectAccount(walletConnector, chainId)
- const discoverFor = {
- addressToCheck: account.address,
- derivationPath: account.derivationPath,
- walletHash: account.walletHash,
- currencyCode: account.currencyCode
- }
- const privateData = await BlocksoftPrivateKeysUtils.getPrivateKey(discoverFor, 'WalletConnectService')
+ Log.log('WalletConnectService.approveSignTyped2 v2 chainId' + chainId + ' from ' + from + ' data ' + JSON.stringify(data), payload)
+
+ const privateData = await _getPrivateData(from)
+ if (!privateData) {
+ return false
+ }
const privateKey = Buffer.from(privateData.privateKey.slice(2), 'hex')
+ if (!privateKey) {
+ return false
+ }
const signData = signTypedData({ privateKey, data, version: 'V4' })
- await walletConnector.approveRequest({
- id: payload.id,
- result: signData
- })
+ const res = {
+ topic: payload.topic,
+ response: {
+ id: payload.id,
+ jsonrpc: '2.0',
+ result: signData
+ }
+ }
+ await walletConnector.respondSessionRequest(res)
} catch (e) {
- Log.err('WalletConnectService.approveSignTyped2 error ' + e.message)
+ if (config.debug.appErrors) {
+ console.log('WalletConnectService.approveSignTyped2 v2 error ' + e.message)
+ }
+ Log.log.log('WalletConnectService.approveSignTyped2 v2 error ' + e.message)
}
},
rejectRequest: async (walletConnector, payload) => {
- Log.log('WalletConnectService.rejectRequest', payload)
- walletConnector.rejectRequest({
- id: payload.id,
- error: {
- message: 'You have rejected request in Trustee Wallet'
+ try {
+ Log.log('WalletConnectService.rejectSession v2', payload)
+ const { id } = payload
+ if (id) {
+ const res = {
+ topic: payload.topic,
+ response: {
+ id: payload.id,
+ jsonrpc: '2.0',
+ error: getSdkError('USER_REJECTED_METHODS').message
+ }
+ }
+ if (walletConnector) {
+ await walletConnector.respondSessionRequest(res)
+ } else {
+ await web3wallet.respondSessionRequest(res)
+ }
}
- })
+ } catch (e) {
+ if (config.debug.appErrors) {
+ console.log('WalletConnectService.rejectRequest v211 error ' + e.message)
+ }
+ Log.log('WalletConnectService.rejectRequest v2 error ' + e.message)
+ }
},
- killSession: async (walletConnector) => {
- Log.log('WalletConnectService.killSession', walletConnector)
+ rejectSession: async (walletConnector, payload) => {
try {
- if (walletConnector.killSession !== 'undefined') {
- await walletConnector.killSession({
- message: 'You have rejected session in TrusteeWallet'
+ Log.log('WalletConnectService.rejectSession v2', payload)
+ const { id } = payload
+ if (id) {
+ await walletConnector.rejectSession({
+ id,
+ reason: getSdkError('USER_REJECTED_METHODS')
})
}
} catch (e) {
- if (e.message.indexOf('Missing or invalid topic field') !== -1) {
- walletConnectActions.resetWalletConnect()
+ if (config.debug.appErrors) {
+ console.log('WalletConnectService.rejectSession v2 error ' + e.message)
}
- Log.log('WalletConnectService.killSession error ' + e.message)
+ Log.log('WalletConnectService.rejectSession v2 error ' + e.message)
}
},
- rejectSession: async (walletConnector) => {
- Log.log('WalletConnectService.rejectSession')
- walletConnector.rejectSession({
- message: 'OPTIONAL_ERROR_MESSAGE'
- })
- },
-
- approveSession: async (walletConnector, payload, dappData = false) => {
+ approveSession: async (walletConnector, payload) => {
try {
- Log.log('WalletConnectService.approveSession payload', payload)
- BlocksoftCryptoLog.log('WalletConnectService.approveSession payload', payload)
- const { chainId } = payload
- const { data } = await walletConnectActions.getAndSetWalletConnectAccount(walletConnector, chainId)
+ const { id, params } = payload
+ const { requiredNamespaces, relays } = params
+ Log.log('WalletConnectService.approveSession v2 payload.params.requiredNamespaces', requiredNamespaces)
+ const { namespaces } = _getAccounts(payload)
try {
- Log.log('WalletConnectService.approveSession data ' + JSON.stringify(data))
- await walletConnector.approveSession(data)
+ Log.log('WalletConnectService.approveSession v2 namespaces ' + JSON.stringify(namespaces))
+ await walletConnector.approveSession({
+ id,
+ relayProtocol: relays[0].protocol,
+ namespaces
+ })
} catch (e1) {
if (e1.message.indexOf('Session currently connected') === -1) {
throw e1
}
}
- await walletConnector.updateSession(data)
- trusteeAsyncStorage.setWalletConnectSession({session : walletConnector.session, dappData})
-
- Log.log('WalletConnectService.approveSession finish', data)
- BlocksoftCryptoLog.log('WalletConnectService.approveSession finish', data)
- return data
+ return namespaces
} catch (e) {
- Log.err('WalletConnectService.approveSession error ' + e.message)
- }
- },
-
- updateSession: async (walletConnector, payload) => {
- Log.log('WalletConnectService.updateSession', payload)
- BlocksoftCryptoLog.log('WalletConnectService.updateSession', payload)
- const { chainId } = payload
- const { data } = await walletConnectActions.getAndSetWalletConnectAccount(walletConnector, chainId)
- try {
- await walletConnector.updateSession(data)
- Log.log('WalletConnectService.updateSession finish', data)
- BlocksoftCryptoLog.log('WalletConnectService.updateSession finish', data)
- return data
- } catch (e) {
- Log.err('WalletConnectService.updateSession error ' + e.message)
+ if (config.debug.appErrors) {
+ console.log('WalletConnectService.approveSession v2 error ' + e.message)
+ }
+ Log.log('WalletConnectService.approveSession v2 error ' + e.message)
}
}
}
diff --git a/app/appstores/Stores/WalletConnect/WalletConnectServiceWrapper.js b/app/appstores/Stores/WalletConnect/WalletConnectServiceWrapper.js
new file mode 100644
index 000000000..e665f2b3a
--- /dev/null
+++ b/app/appstores/Stores/WalletConnect/WalletConnectServiceWrapper.js
@@ -0,0 +1,726 @@
+/**
+ * @version 1.0
+ */
+import Log from '@app/services/Log/Log'
+import trusteeAsyncStorage from '@appV2/services/trusteeAsyncStorage/trusteeAsyncStorage'
+import * as BlocksoftRandom from 'react-native-blocksoft-random'
+import { fromString } from 'uint8arrays/from-string'
+
+import * as relayAuth from '@walletconnect/relay-auth'
+import { ONE_DAY } from '@walletconnect/time'
+import {
+ getRelayProtocolApi,
+ getRelayProtocolName,
+ getSdkError,
+ hashMessage,
+ isExpired,
+ isValidArray,
+ deriveSymKey,
+ generateKeyPair as generateKeyPairUtil
+} from '@walletconnect/utils'
+
+const EXPIRER_EVENTS = {
+ created: 'expirer_created',
+ deleted: 'expirer_deleted',
+ expired: 'expirer_expired',
+ sync: 'expirer_sync'
+}
+
+const RELAYER_EVENTS = {
+ message: 'relayer_message',
+ message_ack: 'relayer_message_ack',
+ connect: 'relayer_connect',
+ disconnect: 'relayer_disconnect',
+ error: 'relayer_error',
+ connection_stalled: 'relayer_connection_stalled',
+ transport_closed: 'relayer_transport_closed',
+ publish: 'relayer_publish'
+}
+
+const SUBSCRIBER_EVENTS = {
+ created: 'subscription_created',
+ deleted: 'subscription_deleted',
+ expired: 'subscription_expired',
+ disabled: 'subscription_disabled',
+ sync: 'subscription_sync',
+ resubscribed: 'subscription_resubscribed'
+}
+
+export default (core) => {
+ core.crypto.keychain.set = async (tag, key) => {
+ try {
+ core.crypto.keychain.isInitialized()
+ core.crypto.keychain.keychain[tag] = key
+ await core.crypto.keychain.persist()
+ } catch (e) {
+ Log.log(`core.crypto.keychain.set ` + e.message)
+ }
+ }
+ core.crypto.keychain.get = (tag) => {
+ if (typeof core.crypto.keychain.keychain[tag] === 'undefined') {
+ return false
+ }
+ return core.crypto.keychain.keychain[tag]
+ }
+ core.crypto.keychain.has = (tag) => {
+ if (typeof core.crypto.keychain.keychain[tag] === 'undefined') {
+ return false
+ }
+ return true
+ }
+ core.crypto.keychain.del = async (tag) => {
+ if (typeof core.crypto.keychain.keychain[tag] === 'undefined') {
+ return false
+ }
+ delete core.crypto.keychain.keychain[tag]
+ await core.crypto.keychain.persist()
+ }
+ core.crypto.keychain.setKeyChain = async (keychain) => {
+ await trusteeAsyncStorage.setWalletConnectKC(keychain)
+ }
+ core.crypto.keychain.getKeyChain = async () => {
+ return trusteeAsyncStorage.getWalletConnectKC()
+ }
+ core.expirer.has = (key) => {
+ try {
+ const target = core.formatTarget(key)
+ const expiration = core.expirer.getExpiration(target)
+ return typeof expiration !== 'undefined'
+ } catch (e) {
+ // ignore
+ return false
+ }
+ }
+
+ core.expirer.set = (key, expiry) => {
+ try {
+ core.expirer.isInitialized()
+ const target = core.expirer.formatTarget(key)
+ const expiration = { target, expiry }
+ core.expirer.expirations.set(target, expiration)
+ core.expirer.checkExpiry(target, expiration)
+ core.expirer.events.emit(EXPIRER_EVENTS.created, {
+ target,
+ expiration
+ })
+ } catch (e) {
+ Log.log('core.expirer.set error ' + e.message)
+ }
+ }
+
+ core.expirer.get = (key) => {
+ try {
+ core.expirer.isInitialized()
+ const target = core.expirer.formatTarget(key)
+ return core.expirer.getExpiration(target)
+ } catch (e) {
+ Log.log('core.expirer.get error ' + e.message)
+ }
+ }
+
+ core.expirer.del = (key) => {
+ try {
+ core.expirer.isInitialized()
+ const exists = core.expirer.has(key)
+ if (exists) {
+ const target = core.expirer.formatTarget(key)
+ const expiration = core.expirer.getExpiration(target)
+ core.expirer.expirations.delete(target)
+ core.expirer.events.emit(EXPIRER_EVENTS.deleted, {
+ target,
+ expiration
+ })
+ }
+ } catch (e) {
+ Log.log('core.expirer.del error ' + e.message)
+ }
+ }
+
+
+ core.crypto.generateKeyPair = () => {
+ try {
+ core.crypto.isInitialized()
+ const keyPair = generateKeyPairUtil()
+ return core.crypto.setPrivateKey(keyPair.publicKey, keyPair.privateKey)
+ } catch (e) {
+ Log.log('core.crypto.generateKeyPair error ' + e.message)
+ }
+ }
+ core.crypto.generateSharedKey = (
+ selfPublicKey,
+ peerPublicKey,
+ overrideTopic
+ ) => {
+ try {
+ core.crypto.isInitialized()
+ const selfPrivateKey = core.crypto.getPrivateKey(selfPublicKey)
+ const symKey = deriveSymKey(selfPrivateKey, peerPublicKey)
+ return core.crypto.setSymKey(symKey, overrideTopic)
+ } catch (e) {
+ Log.log('core.crypto.generateSharedKey error ' + e.message)
+ }
+ }
+
+
+ core.crypto.getClientSeed = async () => {
+ let seed = ''
+ try {
+ seed = await core.crypto.keychain.get('client_ed25519_seed')
+ } catch {
+ }
+ if (!seed) {
+ seed = await BlocksoftRandom.getRandomBytes(32)
+ await core.crypto.keychain.set('client_ed25519_seed', seed)
+ }
+ let random
+ try {
+ random = fromString(seed, 'base64')
+ } catch (e) {
+ seed = await BlocksoftRandom.getRandomBytes(32)
+ await core.crypto.keychain.set('client_ed25519_seed', seed)
+ }
+ return random
+ }
+ core.crypto.signJWT = async (aud) => {
+ core.crypto.isInitialized()
+ let seed
+ try {
+ seed = await core.crypto.getClientSeed()
+ } catch (e) {
+ throw new Error(e.message + ' in core.crypto.getClientSeed')
+ }
+ const keyPair = relayAuth.generateKeyPair(seed)
+ const sub = await BlocksoftRandom.getRandomBytes(32)
+ const ttl = ONE_DAY
+ const jwt = await relayAuth.signJWT(sub, aud, ttl, keyPair)
+ return jwt
+ }
+
+ core.relayer.subscriber.subscribe = async (topic, opts) => {
+ await core.relayer.subscriber.restartToComplete()
+ core.relayer.subscriber.isInitialized()
+ core.relayer.subscriber.logger.debug(`Subscribing Topic`)
+ core.relayer.subscriber.logger.trace({ type: 'method', method: 'subscribe', params: { topic, opts } })
+ let relay, params, id
+ try {
+ relay = getRelayProtocolName(opts)
+ params = { topic, relay }
+ core.relayer.subscriber.pending.set(topic, params)
+ } catch (e) {
+ core.relayer.subscriber.logger.debug(`Failed to Subscribe Topic`)
+ Log.log('core.relayer.subscriber.subscribe error 1 ' + e.message)
+ return false
+ }
+ if (typeof relay === 'undefined' || typeof relay.protocol === 'undefined') {
+ relay = { 'protocol': 'irn' }
+ }
+ try {
+ id = await core.relayer.subscriber.rpcSubscribe(topic, relay)
+ } catch (e) {
+ core.relayer.subscriber.logger.debug(`Failed to Subscribe Topic`)
+ Log.log('core.relayer.subscriber.subscribe error 2 ' + e.message + ' relay ' + relay)
+ return false
+ }
+ try {
+ core.relayer.subscriber.onSubscribe(id, params)
+ core.relayer.subscriber.logger.debug(`Successfully Subscribed Topic`)
+ core.relayer.subscriber.logger.trace({ type: 'method', method: 'subscribe', params: { topic, opts } })
+ return id
+ } catch (e) {
+ core.relayer.subscriber.logger.debug(`Failed to Subscribe Topic`)
+ Log.log('core.relayer.subscriber.subscribe error 3 ' + e.message)
+ }
+ }
+
+ core.relayer.subscriber.unsubscribe = async (topic, opts) => {
+ try {
+ await core.relayer.subscriber.restartToComplete()
+ } catch (e) {
+ Log.log('core.relayer.subscriber.unsubscribe error 1 ' + e.message)
+ }
+ try {
+ core.relayer.subscriber.isInitialized()
+ } catch (e) {
+ Log.log('core.relayer.subscriber.unsubscribe error 2 ' + e.message)
+ }
+ if (typeof opts?.id !== 'undefined') {
+ try {
+ await core.relayer.subscriber.unsubscribeById(topic, opts.id, opts)
+ } catch (e) {
+ Log.log('core.relayer.subscriber.unsubscribe error 3.1 ' + e.message)
+ }
+ } else {
+ try {
+ await core.relayer.subscriber.unsubscribeByTopic(topic, opts)
+ } catch (e) {
+ Log.log('core.relayer.subscriber.unsubscribe error 3.2 ' + e.message)
+ }
+ }
+ }
+
+ core.relayer.subscriber.unsubscribeByTopic = async (topic, opts) => {
+ let ids = false
+ try {
+ ids = core.relayer.subscriber.topicMap.get(topic)
+ } catch (e) {
+ Log.log('core.relayer.subscriber.topicMap.get error ' + e.message)
+ }
+ if (ids) {
+ for (const index in ids) {
+ try {
+ await core.relayer.subscriber.unsubscribeById(topic, ids[index], opts)
+ } catch (e) {
+ Log.log('core.relayer.subscriber.unsubscribeById error ' + e.message + ' ' + ids[index])
+ }
+ }
+ }
+ }
+
+ core.relayer.subscriber.unsubscribeById = async (topic, id, opts) => {
+ core.relayer.subscriber.logger.debug(`Unsubscribing Topic`)
+ core.relayer.subscriber.logger.trace({ type: 'method', method: 'unsubscribe', params: { topic, id, opts } })
+ let relay
+ try {
+ relay = getRelayProtocolName(opts)
+ } catch (e) {
+ Log.log('core.relayer.subscriber.unsubscribeById error 3.1 ' + e.message)
+ return false
+ }
+ try {
+ await core.relayer.subscriber.rpcUnsubscribe(topic, id, relay)
+ } catch (e) {
+ Log.log('core.relayer.subscriber.unsubscribeById error 3.2 ' + e.message)
+ return false
+ }
+ try {
+ const reason = getSdkError('USER_DISCONNECTED', `${core.relayer.subscriber.name}, ${topic}`)
+ await core.relayer.subscriber.onUnsubscribe(topic, id, reason)
+ } catch (e) {
+ Log.log('core.relayer.subscriber.unsubscribeById error 3.3 ' + e.message)
+ return false
+ }
+ try {
+ core.relayer.subscriber.logger.debug(`Successfully Unsubscribed Topic`)
+ core.relayer.subscriber.logger.trace({ type: 'method', method: 'unsubscribe', params: { topic, id, opts } })
+ } catch (e) {
+ core.relayer.subscriber.logger.debug(`Failed to Unsubscribe Topic`)
+ Log.log('core.relayer.subscriber.unsubscribeById error 3.4 ' + e.message)
+ }
+ }
+
+ core.relayer.subscriber.onSubscribe = (id, params) => {
+ try {
+ core.relayer.subscriber.setSubscription(id, { ...params, id })
+ } catch (e) {
+ Log.log('core.relayer.subscriber.onSubscribe error 1 ' + e.message)
+ }
+ try {
+ core.relayer.subscriber.pending.delete(params.topic)
+ } catch (e) {
+ Log.log('core.relayer.subscriber.onSubscribe error 2 ' + e.message)
+ }
+ }
+
+
+ core.relayer.subscriber.onUnsubscribe = async (topic, id, reason) => {
+ try {
+ core.relayer.subscriber.events.removeAllListeners(id)
+ } catch (e) {
+ Log.log('core.relayer.subscriber.onUnsubscribe error 1 ' + e.message)
+ }
+ let t = false
+ try {
+ t = core.relayer.subscriber.hasSubscription(id, topic)
+ } catch (e) {
+ Log.log('core.relayer.subscriber.onUnsubscribe error 2 ' + e.message)
+ }
+ try {
+ if (t) {
+ core.relayer.subscriber.deleteSubscription(id, reason)
+ }
+ } catch (e) {
+ Log.log('core.relayer.subscriber.onUnsubscribe error 3 ' + e.message)
+ }
+ try {
+ await core.relayer.subscriber.relayer.messages.del(topic)
+ } catch (e) {
+ Log.log('core.relayer.subscriber.onUnsubscribe error 4 ' + e.message)
+ }
+ }
+
+
+ core.relayer.subscriber.relayer.messages.del = async (topic) => {
+ try {
+ core.relayer.subscriber.relayer.messages.isInitialized()
+ } catch (e) {
+ Log.log('core.relayer.subscriber.relayer.messages.del error 1 ' + e.message)
+ }
+ try {
+ core.relayer.subscriber.relayer.messages.messages.delete(topic)
+ } catch (e) {
+ Log.log('core.relayer.subscriber.relayer.messages.del error 2 ' + e.message)
+ }
+ try {
+ await core.relayer.subscriber.relayer.messages.persist()
+ } catch (e) {
+ Log.log('core.relayer.subscriber.relayer.messages.del error 3 ' + e.message)
+ }
+ }
+
+ core.relayer.subscriber.deleteSubscription = (id, reason) => {
+ let subscription
+ try {
+ subscription = core.relayer.subscriber.getSubscription(id)
+ } catch (e) {
+ Log.log('core.relayer.subscriber.deleteSubscription error 1 ' + e.message)
+ }
+ try {
+ core.relayer.subscriber.subscriptions.delete(id)
+ } catch (e) {
+ Log.log('core.relayer.subscriber.deleteSubscription error 2 ' + e.message)
+ }
+ if (subscription) {
+ try {
+ core.relayer.subscriber.topicMap.delete(subscription.topic, id)
+ } catch (e) {
+ Log.log('core.relayer.subscriber.deleteSubscription error 3 ' + e.message)
+ }
+ try {
+ core.relayer.subscriber.events.emit(SUBSCRIBER_EVENTS.deleted, {
+ ...subscription,
+ reason
+ })
+ } catch (e) {
+ Log.log('core.relayer.subscriber.deleteSubscription error 4 ' + e.message)
+ }
+ }
+ }
+
+ core.relayer.subscriber.restart = async () => {
+ core.relayer.subscriber.restartInProgress = true
+ try {
+ await core.relayer.subscriber.restore()
+ } catch (e) {
+ Log.log('core.relayer.subscriber.restore error ' + e.message)
+ }
+ try {
+ await core.relayer.subscriber.reset()
+ } catch (e) {
+ Log.log('core.relayer.subscriber.reset error ' + e.message)
+ }
+ core.relayer.subscriber.restartInProgress = false
+ }
+ core.relayer.subscriber.reset = async () => {
+ if (core.relayer.subscriber.cached.length) {
+ const batches = Math.ceil(core.relayer.subscriber.cached.length / core.relayer.subscriber.batchSubscribeTopicsLimit)
+ for (let i = 0; i < batches; i++) {
+ const batch = core.relayer.subscriber.cached.splice(0, core.relayer.subscriber.batchSubscribeTopicsLimit)
+ try {
+ await core.relayer.subscriber.batchSubscribe(batch)
+ } catch (e) {
+ Log.log('core.relayer.subscriber.batchSubscribe error ' + e.message)
+ }
+
+ }
+ }
+ core.relayer.subscriber.events.emit(SUBSCRIBER_EVENTS.resubscribed)
+ }
+ core.relayer.subscriber.batchSubscribe = async (subscriptions) => {
+ if (!subscriptions.length) return
+ let result
+ try {
+ result = await core.relayer.subscriber.rpcBatchSubscribe(subscriptions)
+ } catch (e) {
+ Log.log('core.relayer.subscriber.rpcBatchSubscribe error ' + e.message)
+ }
+ try {
+ if (!isValidArray(result)) return
+ } catch (e) {
+ Log.log('core.relayer.subscriber.isValidArray error ' + e.message)
+ }
+ try {
+ core.relayer.subscriber.onBatchSubscribe(result.map((id, i) => ({ ...subscriptions[i], id })))
+ } catch (e) {
+ Log.log('core.relayer.subscriber.onBatchSubscribe error ' + e.message)
+ }
+ }
+
+ core.relayer.subscriber.rpcSubscribe = async (topic, relay) => {
+ const api = getRelayProtocolApi(relay.protocol)
+ const request = {
+ method: api.subscribe,
+ params: {
+ topic
+ }
+ }
+ core.relayer.subscriber.logger.debug(`Outgoing Relay Payload`)
+ core.relayer.subscriber.logger.trace({ type: 'payload', direction: 'outgoing', request })
+
+ let request2
+ try {
+ request2 = core.relayer.subscriber.relayer.request(request)
+ } catch (err) {
+ Log.log('core.relayer.subscriber.rpcSubscribe error 4.1 ' + err.message)
+ }
+
+ let subscribe
+ try {
+ // fix is here!
+ // eslint-disable-next-line no-async-promise-executor
+ subscribe = new Promise(async (resolve, reject) => {
+ const timeout = setTimeout(() => reject(new Error('expired by timeout')), 30000)
+ try {
+ const result = await request2
+ resolve(result)
+ } catch (error) {
+ reject(error)
+ }
+ clearTimeout(timeout)
+ })
+ } catch (err) {
+ Log.log('core.relayer.subscriber.rpcSubscribe error 4.2 ' + err.message)
+ core.relayer.subscriber.logger.debug(`Outgoing Relay Subscribe Payload stalled`)
+ core.relayer.subscriber.relayer.events.emit(RELAYER_EVENTS.connection_stalled)
+ }
+ try {
+ const res = await subscribe
+ return res
+ } catch (err) {
+ // and here also is the fix
+ Log.log('core.relayer.subscriber.rpcSubscribe error 4.3 ' + err.message + ' topic ' + topic)
+ core.relayer.subscriber.logger.debug(`Outgoing Relay Subscribe Payload stalled`)
+ core.relayer.subscriber.relayer.events.emit(RELAYER_EVENTS.connection_stalled)
+ }
+
+ try {
+ const hash = hashMessage(topic + core.relayer.subscriber.clientId)
+ return hash
+ } catch (e) {
+ Log.log('core.relayer.subscriber.rpcSubscribe error 4.4 ' + e.message)
+ }
+ }
+
+ core.relayer.subscriber.rpcBatchSubscribe = async (subscriptions) => {
+ if (!subscriptions.length) return
+
+ let relay, api, request
+ try {
+ relay = subscriptions[0].relay
+ } catch (e) {
+ Log.log('core.relayer.subscriber.rpcBatchSubscribe error 1 ' + e.message)
+ return false
+ }
+ try {
+ api = getRelayProtocolApi(relay.protocol)
+ } catch (e) {
+ Log.log('core.relayer.subscriber.rpcBatchSubscribe error 2 ' + e.message)
+ return false
+ }
+ try {
+ request = {
+ method: api.batchSubscribe,
+ params: {
+ topics: subscriptions.map((s) => s.topic)
+ }
+ }
+ } catch (e) {
+ Log.log('core.relayer.subscriber.rpcBatchSubscribe error 3 ' + e.message)
+ return false
+ }
+ core.relayer.subscriber.logger.debug(`Outgoing Relay Payload`)
+ core.relayer.subscriber.logger.trace({ type: 'payload', direction: 'outgoing', request })
+
+ let request2
+ try {
+ request2 = core.relayer.subscriber.relayer.request(request)
+ } catch (err) {
+ Log.log('core.relayer.subscriber.rpcBatchSubscribe error 4.1 ' + err.message)
+ core.relayer.subscriber.logger.debug(`Outgoing Relay Payload stalled`)
+ core.relayer.subscriber.relayer.events.emit(RELAYER_EVENTS.connection_stalled)
+ }
+ let subscribe
+ try {
+ // fix is here!
+ // eslint-disable-next-line no-async-promise-executor
+ subscribe = new Promise(async (resolve, reject) => {
+ const timeout = setTimeout(() => reject(new Error('expired by timeout')), 30000)
+ try {
+ const result = await request2
+ resolve(result)
+ } catch (error) {
+ reject(error)
+ }
+ clearTimeout(timeout)
+ })
+ } catch (err) {
+ Log.log('core.relayer.subscriber.rpcBatchSubscribe error 4.2 ' + err.message)
+ core.relayer.subscriber.logger.debug(`Outgoing Relay Payload stalled`)
+ core.relayer.subscriber.relayer.events.emit(RELAYER_EVENTS.connection_stalled)
+ }
+ try {
+ const res = await subscribe
+ return res
+ } catch (err) {
+ // and here also is the fix
+ Log.log('core.relayer.subscriber.rpcBatchSubscribe error 4.3 ' + err.message)
+ core.relayer.subscriber.logger.debug(`Outgoing Relay Payload stalled`)
+ core.relayer.subscriber.relayer.events.emit(RELAYER_EVENTS.connection_stalled)
+ }
+ }
+ core.relayer.subscriber.init = async () => {
+ if (!core.relayer.subscriber.initialized) {
+ core.relayer.subscriber.logger.trace(`Initialized`)
+ try {
+ await core.relayer.subscriber.restart()
+ } catch (e) {
+ Log.log('core.relayer.subscriber.restart error ' + e.message)
+ }
+ try {
+ core.relayer.subscriber.registerEventListeners()
+ } catch (e) {
+ Log.log('core.relayer.subscriber.registerEventListeners error ' + e.message)
+ }
+ try {
+ core.relayer.subscriber.onEnable()
+ } catch (e) {
+ Log.log('core.relayer.subscriber.onEnable error ' + e.message)
+ }
+ try {
+ core.relayer.subscriber.clientId = await core.crypto.getClientId()
+ } catch (e) {
+ Log.log('core.relayer.subscriber.clientId error ' + e.message)
+ }
+ }
+ }
+ core.relayer.init = async () => {
+ try {
+ await core.relayer.createProvider()
+ } catch (e) {
+ Log.log('core.relayer.init error 1 ' + e.message)
+ }
+ try {
+ await core.relayer.messages.init()
+ } catch (e) {
+ Log.log('core.relayer.init error 2.1 ' + e.message)
+ }
+ try {
+ await core.relayer.transportOpen()
+ } catch (e) {
+ Log.log('core.relayer.init error 2.2 ' + e.message)
+ }
+ try {
+ await core.relayer.subscriber.init()
+ } catch (e) {
+ Log.log('core.relayer.init error 2.3 ' + e.message)
+ }
+ try {
+ core.relayer.registerEventListeners()
+ core.relayer.initialized = true
+ } catch (e) {
+ Log.log('core.relayer.init error 3 ' + e.message)
+ }
+ try {
+ setTimeout(async () => {
+ try {
+ if (core.relayer.subscriber.topics.length === 0) {
+ core.relayer.logger.info(`No topics subscribted to after init, closing transport`)
+ await core.relayer.transportClose()
+ core.relayer.transportExplicitlyClosed = false
+ }
+ } catch (e) {
+ Log.log('core.relayer.init error 4.1 ' + e.message)
+ }
+ }, 10000)
+ } catch (e) {
+ Log.log('core.relayer.init error 4 ' + e.message)
+ }
+ }
+
+ core.relayer.unsubscribe = async (topic, opts) => {
+ try {
+ core.relayer.isInitialized()
+ } catch (e) {
+ Log.log('core.relayer.unsubscribe error 1 ' + e.message)
+ return false
+ }
+ try {
+ await core.relayer.subscriber.unsubscribe(topic, opts)
+ } catch (e) {
+ Log.log('core.relayer.unsubscribe error 2 ' + e.message)
+ return false
+ }
+ }
+
+
+ core.pairing.deletePairing = async (topic, expirerHasDeleted) => {
+ try {
+ await core.relayer.unsubscribe(topic, {})
+ } catch (e) {
+ Log.log('core.pairing.deletePairing error 1 ' + e.message)
+ return false
+ }
+ try {
+ await core.pairing.pairings.delete(topic, getSdkError('USER_DISCONNECTED'))
+ } catch (e) {
+ Log.log('core.pairing.deletePairing error 2 ' + e.message)
+ return false
+ }
+ try {
+ await core.pairing.core.crypto.deleteSymKey(topic)
+ } catch (e) {
+ Log.log('core.pairing.deletePairing error 3 ' + e.message)
+ return false
+ }
+ try {
+ await expirerHasDeleted ? Promise.resolve() : core.pairing.core.expirer.del(topic)
+ } catch (e) {
+ Log.log('core.pairing.deletePairing error 4 ' + e.message)
+ return false
+ }
+ }
+
+ core.pairing.cleanup = async () => {
+ let expiredPairings = false
+ try {
+ expiredPairings = core.pairing.pairings.getAll().filter((pairing) => isExpired(pairing.expiry))
+ } catch (e) {
+ Log.log('core.pairing.cleanup error 1 ' + e.message)
+ return false
+ }
+ try {
+ await Promise.all(expiredPairings.map((pairing) => core.pairing.deletePairing(pairing.topic)))
+ } catch (e) {
+ Log.log('core.pairing.cleanup error 2 ' + e.message)
+ }
+ }
+
+
+ core.pairing.init = async () => {
+ if (!core.pairing.initialized) {
+ try {
+ await core.pairing.pairings.init()
+ } catch (e) {
+ Log.log('core.pairing.init error 1 ' + e.message)
+ }
+ try {
+ await core.pairing.cleanup()
+ } catch (e) {
+ Log.log('core.pairing.init error 2 ' + e.message)
+ }
+ try {
+ core.pairing.registerRelayerEvents()
+ } catch (e) {
+ Log.log('core.pairing.init error 3 ' + e.message)
+ }
+ try {
+ core.pairing.registerExpirerEvents()
+ } catch (e) {
+ Log.log('core.pairing.init error 4 ' + e.message)
+ }
+ core.pairing.initialized = true
+ core.pairing.logger.trace(`Initialized`)
+ }
+ }
+
+ return core
+}
\ No newline at end of file
diff --git a/app/appstores/Stores/WalletConnect/WalletConnectServiceWrapperWeb3.js b/app/appstores/Stores/WalletConnect/WalletConnectServiceWrapperWeb3.js
new file mode 100644
index 000000000..4b1b5ff47
--- /dev/null
+++ b/app/appstores/Stores/WalletConnect/WalletConnectServiceWrapperWeb3.js
@@ -0,0 +1,199 @@
+/**
+ * @version 1.0
+ */
+import Log from '@app/services/Log/Log'
+import { getRequiredNamespacesFromNamespaces, getSdkError, isValidObject } from '@walletconnect/utils'
+
+
+import { getBigIntRpcId } from '@walletconnect/jsonrpc-utils'
+
+const RELAYER_EVENTS = {
+ message: 'relayer_message',
+ message_ack: 'relayer_message_ack',
+ connect: 'relayer_connect',
+ disconnect: 'relayer_disconnect',
+ error: 'relayer_error',
+ connection_stalled: 'relayer_connection_stalled',
+ transport_closed: 'relayer_transport_closed',
+ publish: 'relayer_publish'
+}
+
+export default (web3wallet) => {
+
+ web3wallet.engine.signClient.engine.disconnect = async (params) => {
+ try {
+ web3wallet.engine.signClient.engine.isInitialized()
+ await web3wallet.engine.signClient.engine.isValidDisconnect(params)
+ } catch (e) {
+ Log.log(`web3wallet.engine.signClient.engine.disconnect error 1 ` + e.message)
+ }
+ const { topic } = params
+
+ let has = false
+ try {
+ has = web3wallet.engine.signClient.engine.client.session.keys.includes(topic)
+ } catch (e) {
+ Log.log(`web3wallet.engine.signClient.engine.disconnect error 2 ` + e.message)
+ }
+ if (has) {
+ let id = 0
+ try {
+ id = getBigIntRpcId().toString()
+ } catch (e) {
+ Log.log(`web3wallet.engine.signClient.engine.disconnect error 3.1 ` + e.message)
+ }
+
+ /*
+ let resolvePromise
+ const onDisconnectAck = (ack) => {
+ if (ack?.id.toString() === id) {
+ web3wallet.engine.signClient.engine.client.core.relayer.events.removeListener(
+ RELAYER_EVENTS.message_ack,
+ onDisconnectAck
+ )
+ resolvePromise()
+ }
+ }
+
+ try {
+ // await a relay ACK on the disconnect req before deleting the session, keychain etc.
+ await new Promise((resolve) => {
+ resolvePromise = resolve
+ web3wallet.engine.signClient.engine.client.core.relayer.on(RELAYER_EVENTS.message_ack, onDisconnectAck)
+ })
+ } catch (e) {
+ Log.log(`web3wallet.engine.signClient.engine.disconnect error 3.2 ` + e.message)
+ }
+ */
+
+ try {
+ await web3wallet.engine.signClient.engine.sendRequest(
+ topic,
+ 'wc_sessionDelete',
+ getSdkError('USER_DISCONNECTED'),
+ undefined,
+ id
+ )
+ } catch (e) {
+ Log.log(`web3wallet.engine.signClient.engine.disconnect error 3.3 ` + e.message)
+ }
+
+ try {
+ await web3wallet.engine.signClient.engine.deleteSession(topic)
+ } catch (e) {
+ Log.log(`web3wallet.engine.signClient.engine.disconnect error 3.4 ` + e.message)
+ }
+ } else {
+ try {
+ await web3wallet.engine.signClient.engine.client.core.pairing.disconnect({ topic })
+ } catch (e) {
+ Log.log(`web3wallet.engine.signClient.engine.disconnect error 4 ` + e.message)
+ }
+ }
+ }
+
+ web3wallet.engine.signClient.engine.approve = async (params) => {
+ try {
+ web3wallet.engine.signClient.engine.isInitialized()
+ await web3wallet.engine.signClient.engine.isValidApprove(params)
+ const { id, relayProtocol, namespaces, sessionProperties } = params
+ const proposal = web3wallet.engine.signClient.engine.client.proposal.get(id)
+ let { pairingTopic, proposer, requiredNamespaces, optionalNamespaces } = proposal
+ pairingTopic = pairingTopic || ''
+ if (!isValidObject(requiredNamespaces)) {
+ requiredNamespaces = getRequiredNamespacesFromNamespaces(namespaces, 'approve()')
+ }
+
+ const selfPublicKey = await web3wallet.engine.signClient.engine.client.core.crypto.generateKeyPair()
+ const peerPublicKey = proposer.publicKey
+ const sessionTopic = await web3wallet.engine.signClient.engine.client.core.crypto.generateSharedKey(
+ selfPublicKey,
+ peerPublicKey
+ )
+
+ if (pairingTopic && id) {
+ await web3wallet.engine.signClient.engine.client.core.pairing.updateMetadata({
+ topic: pairingTopic,
+ metadata: proposer.metadata
+ })
+ await web3wallet.engine.signClient.engine.sendResult(id, pairingTopic, {
+ relay: {
+ protocol: relayProtocol ?? 'irn'
+ },
+ responderPublicKey: selfPublicKey
+ })
+ await web3wallet.engine.signClient.engine.client.proposal.delete(id, getSdkError('USER_DISCONNECTED'))
+ await web3wallet.engine.signClient.engine.client.core.pairing.activate({ topic: pairingTopic })
+ }
+
+ // actually THATS THE FIX!
+ const SESSION_EXPIRY = new Date().getTime() + 604800000
+ const sessionSettle = {
+ relay: { protocol: relayProtocol ?? 'irn' },
+ namespaces,
+ requiredNamespaces,
+ optionalNamespaces,
+ pairingTopic,
+ controller: {
+ publicKey: selfPublicKey,
+ metadata: web3wallet.engine.signClient.engine.client.metadata
+ },
+ expiry: SESSION_EXPIRY,
+ ...(sessionProperties && { sessionProperties })
+ }
+ await web3wallet.engine.signClient.engine.client.core.relayer.subscribe(sessionTopic)
+ await web3wallet.engine.signClient.engine.sendRequest(sessionTopic, 'wc_sessionSettle', sessionSettle)
+ const session = {
+ ...sessionSettle,
+ topic: sessionTopic,
+ pairingTopic,
+ acknowledged: false,
+ self: sessionSettle.controller,
+ peer: {
+ publicKey: proposer.publicKey,
+ metadata: proposer.metadata
+ },
+ controller: selfPublicKey
+ }
+ await web3wallet.engine.signClient.engine.client.session.set(sessionTopic, session)
+ await web3wallet.engine.signClient.engine.setExpiry(sessionTopic, SESSION_EXPIRY)
+ return {
+ topic: sessionTopic,
+ acknowledged: () =>
+ new Promise((resolve) =>
+ setTimeout(() => resolve(web3wallet.engine.signClient.engine.client.session.get(sessionTopic)), 500)
+ ) // artificial delay to allow for the session to be processed by the peer
+ }
+ } catch (e) {
+ Log.log(`web3wallet.engine.signClient.engine.approve error ` + e.message)
+ }
+ }
+
+ web3wallet.engine.approveSession = async (sessionProposal) => {
+ let tmp, res
+ try {
+ tmp = await web3wallet.engine.signClient.approve({
+ id: sessionProposal.id,
+ namespaces: sessionProposal.namespaces
+ })
+ } catch (e) {
+ Log.log(`web3wallet.engine.approveSession error 1 ` + e.message)
+ throw new Error(e.message)
+ }
+ try {
+ await tmp.acknowledged()
+ } catch (e) {
+ Log.log(`web3wallet.engine.approveSession error 2 ` + e.message)
+ throw new Error(e.message)
+ }
+ try {
+ res = web3wallet.engine.signClient.session.get(tmp.topic)
+ } catch (e) {
+ Log.log(`web3wallet.engine.approveSession error 3 ` + e.message)
+ throw new Error(e.message)
+ }
+ return res
+ }
+
+ return web3wallet
+}
\ No newline at end of file
diff --git a/app/appstores/Stores/WalletConnect/WalletConnectStore.js b/app/appstores/Stores/WalletConnect/WalletConnectStore.js
index 581b337a8..63d496ef5 100644
--- a/app/appstores/Stores/WalletConnect/WalletConnectStore.js
+++ b/app/appstores/Stores/WalletConnect/WalletConnectStore.js
@@ -1,51 +1,32 @@
/**
- * @version 1.0
+ * @version 2.0
*/
const INITIAL_STATE = {
isConnected: false,
linkSource: false,
-
walletConnectLink: false,
walletConnectLinkError: false,
walletConnector: false,
-
-
- peerId: false,
- peerMeta: false,
-
- accountAddress: false,
- accountChainId : 1,
- accountCurrencyCode: false,
- accountWalletName: false
-
+ walletConnections: []
}
const walletConnectStoreReducer = (state = INITIAL_STATE, action) => {
switch (action.type) {
- case 'SET_WALLET_CONNECT_IS_CONNECTED':
- return {
- ...state,
- isConnected: action.isConnected,
- peerId: action.peerId,
- peerMeta: action.peerMeta
- }
case 'SET_WALLET_CONNECT':
return {
...state,
isConnected: action.isConnected,
linkSource: action.linkSource,
-
walletConnectLink: action.walletConnectLink,
walletConnectLinkError: action.walletConnectLinkError,
- walletConnector: action.walletConnector
+ walletConnector: action.walletConnector,
+ walletConnections: action.walletConnections
}
- case 'SET_WALLET_CONNECT_ACCOUNT':
+ case 'SET_WALLET_CONNECTIONS':
return {
...state,
- accountAddress: action.accountAddress,
- accountChainId: action.accountChainId,
- accountCurrencyCode: action.accountCurrencyCode,
- accountWalletName: action.accountWalletName
+ isConnected: action.isConnected,
+ walletConnections: action.walletConnections
}
default:
return state
diff --git a/app/appstores/Stores/WalletConnect/WalletConnectStoreActions.js b/app/appstores/Stores/WalletConnect/WalletConnectStoreActions.js
index 8e7af0afb..d0834d987 100644
--- a/app/appstores/Stores/WalletConnect/WalletConnectStoreActions.js
+++ b/app/appstores/Stores/WalletConnect/WalletConnectStoreActions.js
@@ -5,30 +5,15 @@ import store from '@app/store'
import Log from '@app/services/Log/Log'
-import { Web3Injected } from '@crypto/services/Web3Injected'
import walletConnectService from '@app/appstores/Stores/WalletConnect/WalletConnectService'
import trusteeAsyncStorage from '@appV2/services/trusteeAsyncStorage/trusteeAsyncStorage'
+import config from '@app/config/config'
import { setWalletDapp } from '@app/appstores/Stores/WalletDapp/WalletDappStoreActions'
const { dispatch } = store
const walletConnectActions = {
- setIsConnectedWalletConnect: ({ isConnected, peerId, peerMeta }) => {
- const oldData = store.getState().walletConnectStore.isConnected
- const oldPeerId = store.getState().walletConnectStore.peerId
- const oldPeerMeta = store.getState().walletConnectStore.peerMeta
- if (oldData === isConnected && (!peerId || peerId === oldPeerId) && (!peerMeta || peerMeta === oldPeerMeta)) {
- return false
- }
- return dispatch({
- type: 'SET_WALLET_CONNECT_IS_CONNECTED',
- isConnected,
- peerId: peerId || oldPeerId,
- peerMeta: peerMeta || oldPeerMeta
- })
- },
-
resetWalletConnect: () => {
trusteeAsyncStorage.setWalletConnectLink('')
return dispatch({
@@ -36,53 +21,63 @@ const walletConnectActions = {
walletConnectLink: false,
walletConnectLinkError: false,
walletConnector: false,
+ walletConnections: [],
isConnected: false,
linkSource: false,
})
},
- initWalletConnect: () => {
+ initWalletConnect: async () => {
const walletConnectLink = trusteeAsyncStorage.getWalletConnectLink()
- if (!walletConnectLink) return false
- Log.log('WalletConnect.initWalletConnect link ' + walletConnectLink)
- const { session, dappData } = trusteeAsyncStorage.getWalletConnectSession()
- walletConnectActions.connectAndSetWalletConnectLink(walletConnectLink, dappData ? 'DAPP_SAVED' : 'SAVED', session)
-
- const walletConnector = store.getState().walletConnectStore.walletConnector
- walletConnectActions.setIsConnectedWalletConnect({
- isConnected : walletConnector.connected,
- peerId : walletConnector?.peerId,
- peerMeta: walletConnector?.peerMeta
- })
- setWalletDapp(dappData)
- walletConnectActions.getAndSetWalletConnectAccount(walletConnector, walletConnector.chainId)
+ const dappData = trusteeAsyncStorage.getWalletConnectDapp()
+ if (!walletConnectLink) {
+ Log.log('WalletConnect.initWalletConnect link NONE')
+ } else if (dappData) {
+ Log.log('WalletConnect.initWalletConnect link ' + walletConnectLink + ' dapp ' + JSON.stringify(dappData))
+ await walletConnectActions.connectAndSetWalletConnectLink(walletConnectLink, 'SAVED', true, dappData)
+ } else {
+ Log.log('WalletConnect.initWalletConnect link ' + walletConnectLink)
+ await walletConnectActions.connectAndSetWalletConnectLink(walletConnectLink, 'SAVED', true)
+ }
+ return false
},
- connectAndSetWalletConnectLink: (walletConnectLink, linkSource, session, dappData) => {
- const oldData = store.getState().walletConnectStore.walletConnectLink
- if (oldData === walletConnectLink || !walletConnectLink) {
- return false
+ connectAndSetWalletConnectLink: async (walletConnectLink, linkSource, activatePairing = false, dappData = false) => {
+ if (dappData && store.getState().walletDappStore.dapp !== dappData) {
+ trusteeAsyncStorage.setWalletConnectDapp(dappData)
+ setWalletDapp(dappData)
+ } else {
+ const oldData = store.getState().walletConnectStore.walletConnectLink
+ if (oldData === walletConnectLink || !walletConnectLink) {
+ return false
+ }
}
try {
- const walletConnector = walletConnectService.createAndConnect(walletConnectLink, session, dappData)
+ const walletConnector = await walletConnectService.createAndConnect(walletConnectLink, activatePairing)
trusteeAsyncStorage.setWalletConnectLink(walletConnectLink)
dispatch({
type: 'SET_WALLET_CONNECT',
walletConnectLink: walletConnectLink,
walletConnectLinkError: false,
walletConnector,
- isConnected: walletConnector && walletConnector?.connected || false,
+ walletConnections: store.getState().walletConnectStore.walletConnections,
+ isConnected: true,
linkSource,
})
+ walletConnectActions.getAndSetWalletConnections(walletConnector)
return true
} catch (e) {
- Log.log('WalletConnect.connectAndSetWalletConnectLink error ' + e.message + ' ' + walletConnectLink + ' session ' + JSON.stringify(session))
+ if (config.debug.appErrors) {
+ console.log('WalletConnect.connectAndSetWalletConnectLink error ' + e.message + ' ' + walletConnectLink)
+ }
+ Log.log('WalletConnect.connectAndSetWalletConnectLink error ' + e.message + ' ' + walletConnectLink)
dispatch({
type: 'SET_WALLET_CONNECT',
walletConnectLink: walletConnectLink,
walletConnectLinkError: e.message + ' link ' + walletConnectLink,
walletConnector: false,
+ walletConnections: [],
isConnected: false,
linkSource: false,
})
@@ -90,101 +85,62 @@ const walletConnectActions = {
}
},
- rejectRequestWalletConnect : async (payload) => {
- const walletConnector = store.getState().walletConnectStore.walletConnector
- if (!walletConnector) {
- return false
- }
- await walletConnectService.rejectRequest(walletConnector, payload)
- },
-
- approveRequestWalletConnect: async (payload, txHash) => {
- const walletConnector = store.getState().walletConnectStore.walletConnector
- if (!walletConnector) {
- return false
+ getAndSetWalletConnections: async (walletConnector) => {
+ try {
+ const connections = await walletConnectService.getConnections(walletConnector)
+ dispatch({
+ type: 'SET_WALLET_CONNECTIONS',
+ walletConnections: connections,
+ isConnected: connections.length > 0 ? true : false
+ })
+ } catch (e) {
+ console.log('WalletConnect.getAndSetWalletConnections error ' + e.message)
}
- await walletConnectService.approveRequest(walletConnector, payload, txHash)
},
-
- disconnectAndSetWalletConnectLink: async () => {
- const walletConnector = store.getState().walletConnectStore.walletConnector
- if (!walletConnector) {
- return false
+ approveRequest: async (payload, transactionHash) => {
+ try {
+ const walletConnector = store.getState().walletConnectStore.walletConnector
+ await walletConnectService.approveRequest(walletConnector, payload, transactionHash)
+ } catch (e) {
+ console.log('WalletConnect.approveRequest error ' + e.message)
}
- await walletConnectService.killSession(walletConnector)
},
- getAndSetWalletConnectAccountNetwork: async (_walletConnector = false, chainId = 0, source = '_') => {
- let walletConnector = _walletConnector
- if (!walletConnector) {
- walletConnector = store.getState().walletConnectStore.walletConnector
- }
- if (!walletConnector) {
- return false
- }
-
- Log.log('WalletConnect.getAndSetWalletConnectAccountNetwork chainId ' + chainId + ' source ' + source)
+ rejectRequest: async (payload) => {
try {
- await walletConnectService.updateSession(walletConnector, { chainId })
+ const walletConnector = store.getState().walletConnectStore.walletConnector
+ await walletConnectService.rejectRequest(walletConnector, payload)
} catch (e) {
- Log.log('WalletConnect.getAndSetWalletConnectAccountNetwork chainId ' + chainId + ' updateSession error ' + e.message)
+ console.log('WalletConnect.rejectRequest error ' + e.message)
}
},
- getAndSetWalletConnectAccount: (walletConnector, chainId = 0) => {
- const { walletHash, walletName } = store.getState().mainStore.selectedWallet
- const { peerMeta } = walletConnector
- if (typeof chainId === 'undefined' || !chainId) {
- chainId = walletConnector.chainId * 1 || 1
- }
- const accountList = store.getState().accountStore.accountList
- if (!accountList || typeof accountList[walletHash] === 'undefined') {
- return false
- }
-
- const WEB3 = Web3Injected(chainId)
- const MAIN_CURRENCY_CODE = WEB3.MAIN_CURRENCY_CODE
- const MAIN_CHAIN_ID = WEB3.MAIN_CHAIN_ID
- if (chainId !== 1 && chainId !== 'ETH' && MAIN_CURRENCY_CODE === 'ETH') {
- throw new Error('Network ' + chainId + ' not supported')
- }
-
- Log.log('WalletConnect.getAndSetWalletConnectAccount chainId ' + chainId + ' code ' + MAIN_CURRENCY_CODE + ' id ' + MAIN_CHAIN_ID + ' ' + WEB3.LINK)
- if (typeof accountList[walletHash][MAIN_CURRENCY_CODE] === 'undefined' && typeof accountList[walletHash]['ETH'] === 'undefined') {
- throw new Error('TURN ON ' + MAIN_CURRENCY_CODE)
- }
-
- const _setWalletConnectAccount = (accountAddress, accountChainId, accountCurrencyCode, accountWalletName) => {
- const oldData = store.getState().walletConnectStore.accountAddress
- const oldCurrencyCode = store.getState().walletConnectStore.accountCurrencyCode
- if (oldData === accountAddress && oldCurrencyCode === accountCurrencyCode) {
- return false
+ disconnectAndSetWalletConnectLink: async () => {
+ try {
+ const walletConnector = store.getState().walletConnectStore.walletConnector
+ const connections = await walletConnectService.killConnections(walletConnector)
+ if (connections && connections.length > 0) {
+ dispatch({
+ type: 'SET_WALLET_CONNECTIONS',
+ walletConnections: connections,
+ isConnected: true
+ })
+ } else {
+ trusteeAsyncStorage.setWalletConnectLink('')
+ trusteeAsyncStorage.setWalletConnectDapp('')
+ dispatch({
+ type: 'SET_WALLET_CONNECT',
+ walletConnectLink: false,
+ walletConnectLinkError: false,
+ walletConnector: false,
+ walletConnections: [],
+ isConnected: false,
+ linkSource: false,
+ })
}
- return dispatch({
- type: 'SET_WALLET_CONNECT_ACCOUNT',
- accountAddress,
- accountChainId,
- accountCurrencyCode,
- accountWalletName
- })
- }
-
- const account = accountList[walletHash][MAIN_CURRENCY_CODE] || accountList[walletHash]['ETH']
- let res = []
- if (peerMeta && typeof peerMeta !== 'undefined' && typeof peerMeta.description !== 'undefined' && peerMeta.description === 'TrusteeConnect4Tron') {
- res = [accountList[walletHash]['TRX'].address, account.address]
- _setWalletConnectAccount(res[0], 'TRX', 'TRX', walletName)
- } else {
- res = [account.address]
- _setWalletConnectAccount(res[0], MAIN_CHAIN_ID, MAIN_CURRENCY_CODE, walletName)
- }
- return {
- data: {
- accounts: res,
- chainId: MAIN_CHAIN_ID && MAIN_CHAIN_ID > 0 ? MAIN_CHAIN_ID : 1
- },
- account,
+ } catch (e) {
+ console.log('WalletConnect.disconnectAndSetWalletConnectLink error ' + e.message)
}
}
}
diff --git a/app/appstores/Stores/WalletConnect/helpers.js b/app/appstores/Stores/WalletConnect/helpers.js
index 3265e1404..c5c07edcd 100644
--- a/app/appstores/Stores/WalletConnect/helpers.js
+++ b/app/appstores/Stores/WalletConnect/helpers.js
@@ -1,5 +1,5 @@
/**
- * @version 1.0
+ * @version 2.0
*/
import store from '@app/store'
@@ -11,17 +11,17 @@ import NavStore from '@app/components/navigation/NavStore'
import TransactionFilterTypeDict from '@appV2/dicts/transactionFilterTypeDict'
-import walletConnectService from '@app/appstores/Stores/WalletConnect/WalletConnectService'
import { NETWORKS_SETTINGS } from '@app/appstores/Stores/WalletConnect/settings'
+import walletConnectService from '@app/appstores/Stores/WalletConnect/WalletConnectService'
+import walletConnectActions from '@app/appstores/Stores/WalletConnect/WalletConnectStoreActions'
import { SendActionsStart } from '@app/appstores/Stores/Send/SendActionsStart'
-
-export function handleSessionRequestModal(walletConnector, data, dappData) {
+export function handleSessionProposalModal(walletConnector, data) {
let title = '?'
try {
- title = data.peerMeta.name + ' ' + data.peerMeta.url
+ title = data.params?.proposer?.metadata?.name + ' ' + data.params?.proposer?.metadata?.url
} catch (e) {
- Log.err('WalletConnectService.handleSessionRequest title error ' + e.message)
+ Log.err('WalletConnectService.handleSessionProposal v2 title error ' + e.message)
}
showModal({
type: 'YES_NO_MODAL',
@@ -30,23 +30,23 @@ export function handleSessionRequestModal(walletConnector, data, dappData) {
description: strings('settings.walletConnect.sessionText') + title,
reverse: true,
noCallback: async () => {
- await walletConnectService.rejectSession(walletConnector)
+ await walletConnectService.rejectSession(walletConnector, data)
const { initSource } = store.getState().walletConnectStore
if (initSource === 'QR') {
- Log.log('WalletConnectService.handleSessionRequest NO initSource=' + initSource + ' navStore.goBack started')
+ Log.log('WalletConnectService.handleSessionProposal v2 NO initSource=' + initSource + ' navStore.goBack started')
NavStore.goBack()
} else {
- Log.log('WalletConnectService.handleSessionRequest NO initSource=' + initSource + ' navStore.goBack skipped')
+ Log.log('WalletConnectService.handleSessionProposal v2 NO initSource=' + initSource + ' navStore.goBack skipped')
}
}
}, async () => {
- await walletConnectService.approveSession(walletConnector, data, dappData)
+ await walletConnectService.approveSession(walletConnector, data)
+ walletConnectActions.getAndSetWalletConnections(walletConnector)
})
}
-export async function handleSendTransactionRedirect(walletConnector, data, payload) {
- const { accountCurrencyCode } = store.getState().walletConnectStore
+export async function handleSendTransactionRedirect(walletConnector, data, accountCurrencyCode, payload) {
const { cryptoCurrencies } = store.getState().currencyStore
let found = false
for (const cryptoCurrency of cryptoCurrencies) {
@@ -75,36 +75,54 @@ export async function handleSendTransactionRedirect(walletConnector, data, paylo
await SendActionsStart.startFromWalletConnect({
currencyCode: accountCurrencyCode,
walletConnectData: data,
- walletConnectPayload : payload,
+ walletConnectPayload: payload,
transactionFilterType : TransactionFilterTypeDict.WALLET_CONNECT
})
}
+export function handleSignTransactionModal(walletConnector, chainId, data, accountCurrencyCode, payload) {
+
+ const dataCopy = {...data}
+ if (typeof dataCopy.from !== 'undefined') {
+ delete dataCopy.from
+ }
+ showModal({
+ type: 'YES_NO_MODAL',
+ icon: 'WARNING',
+ title: strings('settings.walletConnect.sign') + ' ' + data.from + ' ' + accountCurrencyCode,
+ description: strings('settings.walletConnect.signTransaction') + ' ' + JSON.stringify(dataCopy),
+ noCallback: async () => {
+ walletConnectService.rejectRequest(walletConnector, payload)
+ }
+ }, async () => {
+ await walletConnectService.approveSignTransaction(walletConnector, chainId, data.from, data, accountCurrencyCode, payload)
+ })
+}
-export function handleSendSignModal(walletConnector, message, payload) {
+export function handleSendSignModal(walletConnector, chainId, from, message, payload) {
showModal({
type: 'YES_NO_MODAL',
icon: 'WARNING',
- title: strings('settings.walletConnect.sign'),
- description: strings('settings.walletConnect.signText') + message,
+ title: strings('settings.walletConnect.sign') + ' ' + from,
+ description: strings('settings.walletConnect.signText') + ' ' + message,
noCallback: async () => {
- await walletConnectService.rejectRequest(walletConnector, payload)
+ walletConnectService.rejectRequest(walletConnector, payload)
}
}, async () => {
- await walletConnectService.approveSign(walletConnector, message, payload)
+ await walletConnectService.approveSign(walletConnector, chainId, from, message, payload)
})
}
-export function handleSendSignTypedModal(walletConnector, data, payload) {
+export function handleSendSignTypedModal(walletConnector, chainId, from, data, payload) {
showModal({
type: 'YES_NO_MODAL',
icon: 'WARNING',
- title: strings('settings.walletConnect.signTyped'),
- description: strings('settings.walletConnect.signTypedText') + JSON.stringify(data).substr(0, 200),
+ title: strings('settings.walletConnect.signTyped') + ' ' + from,
+ description: strings('settings.walletConnect.signTypedText') + ' ' + JSON.stringify(data).substr(0, 200),
noCallback: async () => {
- await walletConnectService.rejectRequest(walletConnector, payload)
+ walletConnectService.rejectRequest(walletConnector, payload)
}
}, async () => {
- await walletConnectService.approveSignTyped(walletConnector, data, payload)
+ await walletConnectService.approveSignTyped(walletConnector, chainId, from, data, payload)
})
}
\ No newline at end of file
diff --git a/app/appstores/Stores/WalletConnect/selectors.js b/app/appstores/Stores/WalletConnect/selectors.js
index b6d5afb7c..f41dea1a8 100644
--- a/app/appstores/Stores/WalletConnect/selectors.js
+++ b/app/appstores/Stores/WalletConnect/selectors.js
@@ -16,11 +16,7 @@ export const getWalletConnectData = createSelector(
linkSource: data.linkSource,
walletConnectLink: data.walletConnectLink,
walletConnectLinkError: data.walletConnectLinkError,
- accountCurrencyCode: data.accountCurrencyCode,
- accountAddress: data.accountAddress,
- accountWalletName: data.accountWalletName,
- peerId: data.peerId,
- peerMeta: data.peerMeta
+ walletConnections: data.walletConnections
}
})
)
diff --git a/app/config/config.js b/app/config/config.js
index c8ae1a5f5..a4b6e6fd0 100644
--- a/app/config/config.js
+++ b/app/config/config.js
@@ -55,7 +55,7 @@ const config = {
appDaemonLogs: false, // set false to see cron jobs logs in files only
cryptoLogs: false, // set false to see crypto logs in files only
cryptoErrors: false, // set false to get crypto errors in tg only
- appErrors: false, // set false to get errors in tg only
+ appErrors: true, // set false to get errors in tg only
fioErrors: false, //
appDBLogs: false, // set false to get db query in files only
firebaseLogs: true, // set false not to collect data to firebase live db
diff --git a/app/modules/Account/AccountStaking/AccountStakingTRX.js b/app/modules/Account/AccountStaking/AccountStakingTRX.js
index ad3b2daca..8ff09f200 100644
--- a/app/modules/Account/AccountStaking/AccountStakingTRX.js
+++ b/app/modules/Account/AccountStaking/AccountStakingTRX.js
@@ -38,6 +38,7 @@ import InputAndButtonsPartBalanceButton from '@app/modules/Send/elements/InputAn
import InfoProgressBar from './elements/InfoProgressBar'
import StakeView from './trx/StakeView'
import { handleTrxScan, handleFreezeV2Trx, handleUnFreezeV1Trx, handlePartBalance, handleGetRewardTrx, handleVoteTrx } from './helper'
+import Log from '@app/services/Log/Log'
const CACHE_ASKED = {}
const CACHE_ASK_TIME = 6000
@@ -155,7 +156,10 @@ class AccountStakingTRX extends React.PureComponent {
_wrapError = (e) => {
let msg = e.toString()
- if (msg.indexOf('less than 24 hours') !== -1) {
+ Log.log('AccountStakingTrx._wrapError ' + msg)
+ if (msg.indexOf('SERVER_RESPONSE_') !== -1) {
+ msg = strings('send.errors.' + e.message)
+ } else if (msg.indexOf('less than 24 hours') !== -1) {
msg = strings('settings.walletList.waitToClaimTRX')
} else if (msg.indexOf('not time to unfreeze') !== -1) {
msg = strings('settings.walletList.waitToUnfreezeTRX', { TRX_STAKE_DAYS: BlocksoftExternalSettings.getStatic('TRX_STAKE_DAYS') })
diff --git a/app/modules/Account/AccountStaking/helper.js b/app/modules/Account/AccountStaking/helper.js
index 2aa09c39e..4638139f5 100644
--- a/app/modules/Account/AccountStaking/helper.js
+++ b/app/modules/Account/AccountStaking/helper.js
@@ -404,7 +404,10 @@ async function _sendTxTrx(shortLink, params, langMsg, uiParams) {
const _wrapError = (e) => {
let msg = e.toString()
- if (msg.indexOf('less than 24 hours') !== -1) {
+ Log.log('AccountStaking.helper._wrapError ' + msg)
+ if (msg.indexOf('SERVER_RESPONSE_') !== -1) {
+ msg = strings('send.errors.' + e.message)
+ } else if (msg.indexOf('less than 24 hours') !== -1) {
msg = strings('settings.walletList.waitToClaimTRX')
} else if (msg.indexOf('not time to unfreeze') !== -1 || msg.indexOf('no unFreeze balance to withdraw') !== -1) {
msg = strings('settings.walletList.waitToUnfreezeTRX', {'TRX_STAKE_DAYS' : BlocksoftExternalSettings.getStatic('TRX_STAKE_DAYS')})
diff --git a/app/modules/QRCodeScanner/helpers.js b/app/modules/QRCodeScanner/helpers.js
index ae7bee663..096b4a866 100644
--- a/app/modules/QRCodeScanner/helpers.js
+++ b/app/modules/QRCodeScanner/helpers.js
@@ -91,8 +91,8 @@ export const finishProcess = async (param, qrCodeScannerConfig) => {
}, 500)
} else {
NavStore.goBack()
- setTimeout(() => {
- walletConnectActions.connectAndSetWalletConnectLink(res.data.walletConnect.fullLink, 'QR')
+ setTimeout(async () => {
+ await walletConnectActions.connectAndSetWalletConnectLink(res.data.walletConnect.fullLink, 'QR')
NavStore.goNext('WalletConnectScreen')
}, 100)
}
diff --git a/app/modules/Send/ReceiptScreen.js b/app/modules/Send/ReceiptScreen.js
index f0b50eef0..3e63a3c83 100644
--- a/app/modules/Send/ReceiptScreen.js
+++ b/app/modules/Send/ReceiptScreen.js
@@ -38,8 +38,8 @@ import { showModal } from '@app/appstores/Stores/Modal/ModalActions'
import ScreenWrapper from '@app/components/elements/ScreenWrapper'
import TransactionItem from '@app/modules/Account/AccountTransaction/elements/TransactionItem'
-import walletConnectActions from '@app/appstores/Stores/WalletConnect/WalletConnectStoreActions'
import BlocksoftCryptoLog from '@crypto/common/BlocksoftCryptoLog'
+import walletConnectActions from '@app/appstores/Stores/WalletConnect/WalletConnectStoreActions'
let CACHE_IS_COUNTING = false
let CACHE_IS_SENDING_CLICKED = 0
@@ -270,7 +270,7 @@ class ReceiptScreen extends PureComponent {
} else {
if (uiType === 'WALLET_CONNECT') {
try {
- await walletConnectActions.rejectRequestWalletConnect(walletConnectPayload)
+ await walletConnectActions.rejectRequest(walletConnectPayload)
} catch (e) {
Log.log('ReceiptScreen.closeAction WALLET_CONNECT error ' + e)
}
@@ -287,7 +287,7 @@ class ReceiptScreen extends PureComponent {
const { uiType, walletConnectPayload } = this.props.sendScreenStore.ui
if (uiType === 'WALLET_CONNECT') {
try {
- await walletConnectActions.rejectRequestWalletConnect(walletConnectPayload)
+ await walletConnectActions.rejectRequest(walletConnectPayload)
} catch (e) {
Log.log('ReceiptScreen.backAction WALLET_CONNECT error ' + e.message)
}
diff --git a/app/modules/WalletConnect/WalletConnectScreen.js b/app/modules/WalletConnect/WalletConnectScreen.js
index e6b0890e2..5c0c7db51 100644
--- a/app/modules/WalletConnect/WalletConnectScreen.js
+++ b/app/modules/WalletConnect/WalletConnectScreen.js
@@ -1,5 +1,5 @@
/**
- * @version 0.43
+ * @version 2.0
* @author Vadym
*/
import React, { PureComponent } from 'react'
@@ -12,8 +12,6 @@ import ListItem from '@app/components/elements/new/list/ListItem/Setting'
import NavStore from '@app/components/navigation/NavStore'
import MarketingAnalytics from '@app/services/Marketing/MarketingAnalytics'
-import BlocksoftPrettyStrings from '@crypto/common/BlocksoftPrettyStrings'
-
import { strings } from '@app/services/i18n'
import ScreenWrapper from '@app/components/elements/ScreenWrapper'
@@ -33,11 +31,8 @@ import Message from '@app/components/elements/new/Message'
import CustomIcon from '@app/components/elements/CustomIcon'
import GradientView from '@app/components/elements/GradientView'
-import TransactionItem from '@app/modules/Account/AccountTransaction/elements/TransactionItem'
import WalletDappFastLinksScreen from '@app/modules/WalletDapp/WalletDappFastLinksScreen'
-import colorDict from '@app/services/UIDict/UIDictData'
-
import { NETWORKS_SETTINGS } from '@app/appstores/Stores/WalletConnect/settings'
import { getSelectedAccountData } from '@app/appstores/Stores/Main/selectors'
import { getWalletDappData } from '@app/appstores/Stores/WalletDapp/selectors'
@@ -47,19 +42,6 @@ import Toast from 'react-native-root-toast'
import Log from '@app/services/Log/Log'
-const getIcon = (block, isLight) => {
- let _block = block
- if (block === 'MATIC') {
- _block = 'ETH_MATIC'
- } else if (block === 'ONE') {
- _block = 'ETH_ONE'
- }
-
- return (
-
- )
-}
-
class WalletConnectScreen extends PureComponent {
@@ -86,8 +68,8 @@ class WalletConnectScreen extends PureComponent {
})
}
- handleConnect = () => {
- if (walletConnectActions.connectAndSetWalletConnectLink(this.state.inputFullLink, 'WalletConnectScreen')) {
+ handleConnect = async () => {
+ if (await walletConnectActions.connectAndSetWalletConnectLink(this.state.inputFullLink, 'WalletConnectScreen')) {
// connected so we can clear input
this.linkInput.handleInput('', false)
this.setState({
@@ -123,10 +105,6 @@ class WalletConnectScreen extends PureComponent {
NavStore.reset('HomeScreen')
}
- handleChangeNetwork = () => {
- NavStore.goNext('WalletConnectChangeNetworkScreen')
- }
-
handleLastDapp = () => {
NavStore.goNext('WalletDappWebViewScreen')
}
@@ -162,20 +140,11 @@ class WalletConnectScreen extends PureComponent {
const {
GRID_SIZE,
colors,
- isLight
} = this.context
const { dappCode, dappName } = this.props.walletDappData
- const { walletConnectLink, walletConnectLinkError, accountCurrencyCode, accountAddress, accountWalletName, peerId, peerMeta, isConnected } = this.props.walletConnectData
-
- const condition = peerId && typeof peerMeta !== 'undefined' && isConnected
-
- const titleCondition = condition ? typeof peerMeta.name !== 'undefined' ? peerMeta.name : '' : strings('settings.walletConnect.unconnectedTitle')
-
- const textCondition = condition ? typeof peerMeta.url !== 'undefined' ? peerMeta.url : '' : strings('settings.walletConnect.unconnectedText')
-
- const imageUri = peerMeta?.icons?.length ? peerMeta?.icons?.find(item => item.indexOf('.png') !== -1) : ''
+ const { walletConnectLink, walletConnectLinkError, walletConnections, isConnected } = this.props.walletConnectData
return (
<>
@@ -187,35 +156,26 @@ class WalletConnectScreen extends PureComponent {
- <>
-
- {peerId && peerMeta && isConnected ?
- :
- }
- {peerId && peerMeta && isConnected &&
-
- {getIcon(accountCurrencyCode, isLight)}
-
- }
-
-
-
- {titleCondition}
- {textCondition}
+ {
+ walletConnections.map((item, index) => (
+ <>
+
+ {item.peer && item.peer.icons && typeof item.peer.icons[0] !== 'undefined' && item.peer.icons[0] ?
+ :
+ }
-
- {peerId && peerMeta !== 'undefined' && isConnected &&
-
-
+
+
+ {item.peer.name || strings('settings.walletConnect.unconnectedText')}
+ {item.peer.url || strings('settings.walletConnect.unconnectedText')}
+
- }
- >
+ >
+ ))
+ }
+
{!isConnected &&
@@ -252,18 +212,7 @@ class WalletConnectScreen extends PureComponent {
>
}
- {accountCurrencyCode && isConnected &&
-
-
-
- }
+
{dappCode && isConnected &&
diff --git a/app/modules/WalletDapp/WalletDappWebViewScreen.js b/app/modules/WalletDapp/WalletDappWebViewScreen.js
index 620164b0c..d6a480d14 100644
--- a/app/modules/WalletDapp/WalletDappWebViewScreen.js
+++ b/app/modules/WalletDapp/WalletDappWebViewScreen.js
@@ -110,34 +110,45 @@ class WalletDappWebViewScreen extends PureComponent {
// general handler (could be not only wallet connect)
handleWebViewNavigationTestLink = (req) => {
Log.log('WalletDapp.WebViewScreen handle link ' + req.url)
- let url = req.url
- let parsedUrl = UrlParse(url)
- if (parsedUrl.protocol === 'http:' || parsedUrl.protocol === 'https:') {
- let position = req.url.indexOf('/wc?uri=wc%3A')
- if (position !== -1) {
- position = position + 8
- const tmp = req.url.substr(position, req.url.length)
- Log.log('WalletDapp.WebViewScreen handle link update tmp ' + tmp)
- url = decodeURIComponent(tmp)
- Log.log('WalletDapp.WebViewScreen handle link update url ' + url)
- parsedUrl = UrlParse(url)
+ let parsedUrl = false
+ let url = false
+ try {
+ url = req.url
+ parsedUrl = UrlParse(url)
+ if (parsedUrl.protocol === 'http:' || parsedUrl.protocol === 'https:') {
+ let position = req.url.indexOf('/wc?uri=wc%3A')
+ if (position !== -1) {
+ position = position + 8
+ const tmp = req.url.substr(position, req.url.length)
+ Log.log('WalletDapp.WebViewScreen handle link update tmp ' + tmp)
+ url = decodeURIComponent(tmp)
+ Log.log('WalletDapp.WebViewScreen handle link update url ' + url)
+ parsedUrl = UrlParse(url)
+ }
}
- }
- if (parsedUrl.protocol === 'http:' || parsedUrl.protocol === 'https:') {
- return true
+ if (parsedUrl.protocol === 'http:' || parsedUrl.protocol === 'https:') {
+ console.log('GO ' + JSON.stringify(parsedUrl))
+ return true
+ }
+ } catch (err) {
+ if (config.debug.appErrors) {
+ console.log(`WalletDapp.WebViewScreen handle parse error `, err.message)
+ }
+ Log.log(`WalletDapp.WebViewScreen handle parse error `, err.message)
+ return false
}
try {
if (parsedUrl.protocol === 'wc:') {
- if (url.indexOf('?bridge=') !== -1) {
- walletConnectActions.connectAndSetWalletConnectLink(url, 'DAPP', false, this.props.walletDappData)
- } else {
- // ?
- }
- return false
+ walletConnectActions.connectAndSetWalletConnectLink(url, 'DAPP', true, this.props.walletDappData)
}
} catch (err) {
- return true
+ if (config.debug.appErrors) {
+ console.log(`WalletDapp.WebViewScreen handle dapp error `, err.message)
+ }
+ Log.log(`WalletDapp.WebViewScreen handle dapp error `, err.message)
}
+ // this.webref.stopLoading()
+ return false
}
render() {
diff --git a/appV2/services/trusteeAsyncStorage/trusteeAsyncStorage.js b/appV2/services/trusteeAsyncStorage/trusteeAsyncStorage.js
index 5857236d5..53c539c43 100644
--- a/appV2/services/trusteeAsyncStorage/trusteeAsyncStorage.js
+++ b/appV2/services/trusteeAsyncStorage/trusteeAsyncStorage.js
@@ -240,8 +240,8 @@ class TrusteeAsyncStorage {
return this._set('wcLink', value)
}
- getWalletConnectSession = () => {
- const tmp = this._getStatic('wcSession')
+ getWalletConnectDapp = () => {
+ const tmp = this._getStatic('wcDapp')
if (!tmp) return false
try {
return JSON.parse(tmp)
@@ -250,8 +250,8 @@ class TrusteeAsyncStorage {
}
}
- setWalletConnectSession = (value) => {
- return this._set('wcSession', JSON.stringify(value))
+ setWalletConnectDapp = (value) => {
+ return this._set('wcDapp', value ? JSON.stringify(value) : '')
}
setUseFirebaseForBSE = (value) => {
@@ -262,6 +262,20 @@ class TrusteeAsyncStorage {
return this._getStatic('useFirebaseForBSE')
}
+ getWalletConnectKC = (value) => {
+ const tmp = this._getStatic('wcKC11')
+ if (!tmp) return {}
+ try {
+ return JSON.parse(tmp)
+ } catch (e) {
+ return false
+ }
+ }
+
+ setWalletConnectKC = (value) => {
+ return this._set('wcKC11', JSON.stringify(value))
+ }
+
}
const trusteeAsyncStorage = new TrusteeAsyncStorage()
diff --git a/assets/fast-text-encoding.min.js b/assets/fast-text-encoding.min.js
new file mode 100644
index 000000000..240043393
--- /dev/null
+++ b/assets/fast-text-encoding.min.js
@@ -0,0 +1,3 @@
+(function(scope) {'use strict';
+function B(r,e){var f;return r instanceof Buffer?f=r:f=Buffer.from(r.buffer,r.byteOffset,r.byteLength),f.toString(e)}var w=function(r){return Buffer.from(r)};function h(r){for(var e=0,f=Math.min(256*256,r.length+1),n=new Uint16Array(f),i=[],o=0;;){var t=e=f-1){var s=n.subarray(0,o),m=s;if(i.push(String.fromCharCode.apply(null,m)),!t)return i.join("");r=r.subarray(e),e=0,o=0}var a=r[e++];if((a&128)===0)n[o++]=a;else if((a&224)===192){var d=r[e++]&63;n[o++]=(a&31)<<6|d}else if((a&240)===224){var d=r[e++]&63,l=r[e++]&63;n[o++]=(a&31)<<12|d<<6|l}else if((a&248)===240){var d=r[e++]&63,l=r[e++]&63,R=r[e++]&63,c=(a&7)<<18|d<<12|l<<6|R;c>65535&&(c-=65536,n[o++]=c>>>10&1023|55296,c=56320|c&1023),n[o++]=c}}}function F(r){for(var e=0,f=r.length,n=0,i=Math.max(32,f+(f>>>1)+7),o=new Uint8Array(i>>>3<<3);e=55296&&t<=56319){if(e=55296&&t<=56319)continue}if(n+4>o.length){i+=8,i*=1+e/r.length*2,i=i>>>3<<3;var m=new Uint8Array(i);m.set(o),o=m}if((t&4294967168)===0){o[n++]=t;continue}else if((t&4294965248)===0)o[n++]=t>>>6&31|192;else if((t&4294901760)===0)o[n++]=t>>>12&15|224,o[n++]=t>>>6&63|128;else if((t&4292870144)===0)o[n++]=t>>>18&7|240,o[n++]=t>>>12&63|128,o[n++]=t>>>6&63|128;else continue;o[n++]=t&63|128}return o.slice?o.slice(0,n):o.subarray(0,n)}var u="Failed to ",p=function(r,e,f){if(r)throw new Error("".concat(u).concat(e,": the '").concat(f,"' option is unsupported."))};var x=typeof Buffer=="function"&&Buffer.from;var A=x?w:F;function v(){this.encoding="utf-8"}v.prototype.encode=function(r,e){return p(e&&e.stream,"encode","stream"),A(r)};function U(r){var e;try{var f=new Blob([r],{type:"text/plain;charset=UTF-8"});e=URL.createObjectURL(f);var n=new XMLHttpRequest;return n.open("GET",e,!1),n.send(),n.responseText}finally{e&&URL.revokeObjectURL(e)}}var O=!x&&typeof Blob=="function"&&typeof URL=="function"&&typeof URL.createObjectURL=="function",S=["utf-8","utf8","unicode-1-1-utf-8"],T=h;x?T=B:O&&(T=function(r){try{return U(r)}catch(e){return h(r)}});var y="construct 'TextDecoder'",E="".concat(u," ").concat(y,": the ");function g(r,e){r=r||"utf-8";var f;if(x?f=Buffer.isEncoding(r):f=S.indexOf(r.toLowerCase())!==-1,!f)throw new RangeError("".concat(E," encoding label provided ('").concat(r,"') is invalid."));this.encoding=r,this.fatal=!1,this.ignoreBOM=!1}g.prototype.decode=function(r,e){p(e&&e.stream,"decode","stream");var f;return r instanceof Uint8Array?f=r:r.buffer instanceof ArrayBuffer?f=new Uint8Array(r.buffer):f=new Uint8Array(r),T(f,this.encoding)};scope.TextEncoder=scope.TextEncoder||v;scope.TextDecoder=scope.TextDecoder||g;
+}(typeof window !== 'undefined' ? window : (typeof global !== 'undefined' ? global : this)));
diff --git a/crypto/blockchains/eth/EthTransferProcessor.ts b/crypto/blockchains/eth/EthTransferProcessor.ts
index 0e39a41bb..784231ab7 100644
--- a/crypto/blockchains/eth/EthTransferProcessor.ts
+++ b/crypto/blockchains/eth/EthTransferProcessor.ts
@@ -46,6 +46,12 @@ const _getGasLimit = async ({ additionalData, data, currencyCode, realAddressTo,
return gasLimit
}
+ if (typeof data.walletConnectData !== 'undefined' && typeof data.walletConnectData.gasLimit !== 'undefined' && data.walletConnectData.gasLimit && data.walletConnectData.gasLimit !== '0x0') {
+ gasLimit = BlocksoftUtils.hexToDecimalWalletConnect(data.walletConnectData.gasLimit)
+ BlocksoftCryptoLog.log(currencyCode + ' EthTransferProcessor.getFeeRate walletConnectData v2 ' + gasLimit)
+ return gasLimit
+ }
+
if (typeof data.walletConnectData !== 'undefined') {
let value = '0x'
try {
diff --git a/crypto/blockchains/trx/basic/TrxTransactionsProvider.js b/crypto/blockchains/trx/basic/TrxTransactionsProvider.js
index 5e1884880..efa8e4f0d 100644
--- a/crypto/blockchains/trx/basic/TrxTransactionsProvider.js
+++ b/crypto/blockchains/trx/basic/TrxTransactionsProvider.js
@@ -165,6 +165,11 @@ export default class TrxTransactionsProvider {
addressFrom = transaction.ownerAddress
transactionDirection = 'unfreeze'
transactionFilterType = TransactionFilterTypeDict.STAKE
+ } else if (typeof transaction.contractType !== 'undefined' && transaction.contractType === 56) {
+ addressAmount = transaction.amount
+ addressFrom = transaction.ownerAddress
+ transactionDirection = 'withdraw_unfrozen'
+ transactionFilterType = TransactionFilterTypeDict.STAKE
} else if (typeof transaction.contractType !== 'undefined' && transaction.contractType === 4) {
// no vote tx
return false
@@ -204,7 +209,10 @@ export default class TrxTransactionsProvider {
transactionFilterType,
inputValue: transaction.data
}
- if (!res.addressTo && (!res.addressFrom || res.addressFrom.toLowerCase() === address.toLowerCase())) {
+ if (!res.addressTo
+ && (!res.addressFrom || res.addressFrom.toLowerCase() === address.toLowerCase())
+ && transactionFilterType !== TransactionFilterTypeDict.STAKE
+ ) {
return false
}
diff --git a/crypto/blockchains/xmr/XmrTransferProcessor.ts b/crypto/blockchains/xmr/XmrTransferProcessor.ts
index a1156046e..d76778cbd 100644
--- a/crypto/blockchains/xmr/XmrTransferProcessor.ts
+++ b/crypto/blockchains/xmr/XmrTransferProcessor.ts
@@ -104,7 +104,7 @@ export default class XmrTransferProcessor implements BlocksoftBlockchainTypes.Tr
})
}
})
-
+
if (typeof fee !== 'undefined' && fee && typeof fee.used_fee) {
const tmp = {
langMsg: 'xmr_speed_' + i,
@@ -129,7 +129,11 @@ export default class XmrTransferProcessor implements BlocksoftBlockchainTypes.Tr
},
amountForTx: '?'
}
- if (typeof fee.using_amount !== 'undefined') {
+ if (typeof fee.total_sent !== 'undefined' && fee.total_sent) {
+ tmp.amountForTx = fee.total_sent - fee.used_fee
+ logTmp.amountForTx = tmp.amountForTx
+ logTmp.xmr_total_sent = fee.total_sent
+ } else if (typeof fee.using_amount !== 'undefined') {
tmp.amountForTx = fee.using_amount
logTmp.amountForTx = fee.using_amount
} else {
diff --git a/docker/Dockerfile.androidprebuild b/docker/Dockerfile.androidprebuild
index a5f3fce02..13c3cbec1 100644
--- a/docker/Dockerfile.androidprebuild
+++ b/docker/Dockerfile.androidprebuild
@@ -22,8 +22,8 @@ RUN apt-get -y update && \
# curl -sL -o bundletool.jar https://github.com/google/bundletool/releases/download/1.14.1/bundletool-all-1.14.1.jar && \
curl -sL -o bundletool.jar https://github.com/google/bundletool/releases/download/1.8.0/bundletool-all-1.8.0.jar && \
chmod 644 bundletool.jar && \
-# curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash - && \
- curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash - && \
+ curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash - && \
+# curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash - && \
apt-get -y install nodejs && \
npm install --global yarn && \
apt-get -y autoremove && \
diff --git a/index.js b/index.js
index bd043b165..8d37d2b0c 100644
--- a/index.js
+++ b/index.js
@@ -2,6 +2,7 @@
* @format
* @lint-ignore-every XPLATJSCOPYRIGHT1
*/
+import './polyfills'
import 'react-native-gesture-handler'
import { AppRegistry } from 'react-native'
diff --git a/ios/trusteewallet-tvOS/Info.plist b/ios/trusteewallet-tvOS/Info.plist
index f5ef3a816..b4e503920 100644
--- a/ios/trusteewallet-tvOS/Info.plist
+++ b/ios/trusteewallet-tvOS/Info.plist
@@ -15,7 +15,7 @@
CFBundlePackageType
APPL
CFBundleShortVersionString
- 1.51.5
+ 1.51.6
CFBundleSignature
????
CFBundleVersion
diff --git a/ios/trusteewallet-tvOSTests/Info.plist b/ios/trusteewallet-tvOSTests/Info.plist
index 4a2279b3e..b47df7cd1 100644
--- a/ios/trusteewallet-tvOSTests/Info.plist
+++ b/ios/trusteewallet-tvOSTests/Info.plist
@@ -15,7 +15,7 @@
CFBundlePackageType
BNDL
CFBundleShortVersionString
- 1.51.5
+ 1.51.6
CFBundleSignature
????
CFBundleVersion
diff --git a/ios/trusteewallet/Info.plist b/ios/trusteewallet/Info.plist
index db71eab45..da8ede9a6 100644
--- a/ios/trusteewallet/Info.plist
+++ b/ios/trusteewallet/Info.plist
@@ -31,7 +31,7 @@
CFBundlePackageType
APPL
CFBundleShortVersionString
- 1.51.5
+ 1.51.6
CFBundleSignature
????
CFBundleURLTypes
diff --git a/ios/trusteewalletTests/Info.plist b/ios/trusteewalletTests/Info.plist
index f0a3b832a..1dfca6911 100644
--- a/ios/trusteewalletTests/Info.plist
+++ b/ios/trusteewalletTests/Info.plist
@@ -15,7 +15,7 @@
CFBundlePackageType
BNDL
CFBundleShortVersionString
- 1.51.5
+ 1.51.6
CFBundleSignature
????
CFBundleVersion
diff --git a/locales/en.json b/locales/en.json
index 5de038cf8..90f2a779a 100644
--- a/locales/en.json
+++ b/locales/en.json
@@ -80,6 +80,7 @@
"transaction": "Transaction request",
"transactionText": "Are you sure you want to allow %{subtitle} to use your %{txPrice} for transactions?",
"sign": "WalletConnect Sign Request",
+ "signTransaction": "Do you want to sign transaction ",
"signText": "Do you want to sign message ",
"signTyped": "WalletConnect Sign Typed Request",
"signTypedText": "Do you want to sign message ",
@@ -503,6 +504,7 @@
"income": "Income",
"freeze" : "Freeze",
"unfreeze" : "UnFreeze",
+ "withdraw_unfrozen": "Withdraw UnFrozen",
"claim" : "Claim",
"stake" : "Stake",
"vote": "Vote",
@@ -598,7 +600,7 @@
"share": "Share",
"booster": "Booster",
"remove": "Remove",
- "removeRbf": "Returning a tx",
+ "removeRbf": "Reverse",
"check": "Check",
"support": "Support",
"details": "Details",
@@ -883,7 +885,7 @@
"SERVER_RESPONSE_NOTHING_LEFT_FOR_FEE": "Insufficient balance to pay the network fee - please use an option \"Send All\" ",
"SERVER_RESPONSE_NOTHING_LEFT_FOR_DELEGATED_FEE": "Insufficient balance to pay the delegated transaction - please use ERC20 standard transaction",
"SERVER_RESPONSE_NO_RESPONSE": "The transaction has not received a network confirmation - please wait for the other transactions to be mined",
- "SERVER_RESPONSE_NO_RESPONSE_XMR": "Please, wait until the previous transactions have reached the required number of network confirmations (at least 15) and retry the current one",
+ "SERVER_RESPONSE_NO_RESPONSE_XMR": "Under the terms of the Monero protocol, each incoming transaction must collect at least 50 network confirmations (~1.5 hours) before being sent. Please wait until the last incoming transaction reaches 50 network confirmations and retry sending.",
"SERVER_RESPONSE_NO_RESPONSE_OR_MORE_FEE": "The transaction has not received a network confirmation - please wait for the other transactions to be mined or place higher fee",
"SERVER_RESPONSE_NOT_ENOUGH_CONFIRMED_FEE": "Insufficient balance of native currency %{symbol} to pay the network fee - please wait for the other transactions to be mined",
"SERVER_RESPONSE_NOT_ENOUGH_AMOUNT_AS_FEE": "Transaction fee is too small",
@@ -913,7 +915,7 @@
"SERVER_RESPONSE_BAD_SEND_NODE" : "No access to sending server or internet error - please try again",
"SERVER_RESPONSE_DOUBLE_SPEND" : "Please, regenerate transaction as outputs are changed or wait for the other transactions to be mined",
"SERVER_RESPONSE_NO_TX_TO_SPEEDUP" : "Transaction for speedup not found",
- "SERVER_RESPONSE_BANDWITH_ERROR_TRX" : "Insufficient TRX balance for fee / bandwidth limit is over",
+ "SERVER_RESPONSE_BANDWITH_ERROR_TRX" : "The Bandwidth (BW) of your address is not enough to complete a tx. Wait a day to replenish the BW or receive 1-2 TRX to the wallet address to compensate the BW.",
"SERVER_RESPONSE_ENERGY_ERROR_VET" : "Insufficient VeChain Thor Token (VTHO) balance for fee",
"SERVER_RESPONSE_PLEASE_CHECK_SYSTEM_TIME": "Please check your phone system time - it need to be synchronized for correct transaction creation",
"SERVER_RESPONSE_NOT_ENOUGH_BALANCE_SOL" : "Insufficient balance to make the transaction",
diff --git a/locales/fr.json b/locales/fr.json
index 00d666945..1f9b19e97 100644
--- a/locales/fr.json
+++ b/locales/fr.json
@@ -80,6 +80,7 @@
"transaction": "Demande de transaction",
"transactionText": "Êtes-vous sûr de vouloir autoriser %{subtitle} à utiliser votre %{txPrice} pour les transactions?",
"sign": "Demande de signature de WalletConnect",
+ "signTransaction": "Do you want to sign transaction ",
"signText": "Voulez-vous signer le message",
"signTyped": "Demande de type de signe WalletConnect",
"signTypedText": "Voulez-vous signer le message",
@@ -502,6 +503,7 @@
"income": "Revenu",
"freeze": "Geler",
"unfreeze": "Dégeler",
+ "withdraw": "Withdraw UnFrozen",
"claim": "Réclamer",
"stake": "Stake",
"vote": "Vote",
@@ -882,7 +884,7 @@
"SERVER_RESPONSE_NOTHING_LEFT_FOR_FEE": "Solde insuffisant pour payer les frais de réseau - veuillez utiliser une option \"Envoyer tout\" ",
"SERVER_RESPONSE_NOTHING_LEFT_FOR_DELEGATED_FEE": "Solde insuffisant pour payer la transaction déléguée - veuillez utiliser la transaction standard ERC20",
"SERVER_RESPONSE_NO_RESPONSE": "La transaction n'a pas reçu de confirmation du réseau - veuillez attendre que les autres transactions soient minées",
- "SERVER_RESPONSE_NO_RESPONSE_XMR": "Veuillez attendre que les transactions précédentes aient atteint le nombre requis de confirmations de réseau (au moins 15) et réessayez avec la transaction en cours",
+ "SERVER_RESPONSE_NO_RESPONSE_XMR": "Selon les termes du protocole Monero, chaque transaction entrante doit collecter au moins 50 confirmations réseau (~1,5 heures) avant d'être envoyée. Veuillez attendre que la dernière transaction entrante atteigne 50 confirmations de réseau et réessayez d'envoyer.",
"SERVER_RESPONSE_NO_RESPONSE_OR_MORE_FEE": "La transaction n'a pas reçu de confirmation de réseau - veuillez attendre que les autres transactions soient minées ou placez des frais plus élevés",
"SERVER_RESPONSE_NOT_ENOUGH_CONFIRMED_FEE": "Solde insuffisant de la devise native %{symbol} pour payer les frais de réseau - veuillez attendre que les autres transactions soient minées",
"SERVER_RESPONSE_NOT_ENOUGH_AMOUNT_AS_FEE": "Les frais de transaction sont trop faibles",
diff --git a/locales/ka.json b/locales/ka.json
index 5e3710f28..65d29d04a 100644
--- a/locales/ka.json
+++ b/locales/ka.json
@@ -80,6 +80,7 @@
"transaction": "Transaction request",
"transactionText": "Are you sure you want to allow %{subtitle} to use your %{txPrice} for transactions?",
"sign": "WalletConnect Sign Request",
+ "signTransaction": "Do you want to sign transaction ",
"signText": "Do you want to sign message ",
"signTyped": "WalletConnect Sign Typed Request",
"signTypedText": "Do you want to sign message ",
@@ -502,6 +503,7 @@
"self": "სელფი",
"freeze": "გაყინვა",
"unfreeze" : "UnFreeze",
+ "withdraw_unfrozen": "Withdraw UnFrozen",
"stake" : "Stake",
"vote": "Vote",
"wallet_connect" : "WalletConnect",
@@ -875,7 +877,7 @@
"SERVER_RESPONSE_NOTHING_LEFT_FOR_FEE": "ბალანსზე არ არის საკმარისი თანხა ქსელის საკომისიოს დასაფარად - გთხოვთ, გამოიყენეთ ფუნქცია \"ყველას გაგზავნა\" ",
"SERVER_RESPONSE_NOTHING_LEFT_FOR_DELEGATED_FEE": "ბალანსზე არაა საკმარისი თანხა დელეგირებული ტრანზაქციის განსახორციელებლად - გთხოვთ, გამოიყენეთ ჩვეულებრივი გადარიცხვა ERC20",
"SERVER_RESPONSE_NO_RESPONSE": "ქსელი არ იღებს ტრანზაქციას - გთხოვთ, დაელოდოთ, სანამ სხვა ტრანზაქციები დადასტურდება",
- "SERVER_RESPONSE_NO_RESPONSE_XMR": "გთხოვთ, დაელოდოთ სანამ წინა ტრანზაქციებმა მიაღწევს ქსელის დადასტურებების საჭირო რაოდენობას (მინიმუმ 15) და ხელახლა სცადეთ მიმდინარე",
+ "SERVER_RESPONSE_NO_RESPONSE_XMR": "Monero პროტოკოლის პირობების მიხედვით, ყოველი შემომავალი ტრანზაქცია გაგზავნამდე უნდა შეაგროვოს მინიმუმ 50 ქსელის დადასტურება (~1.5 საათი). გთხოვთ, დაელოდოთ, სანამ ბოლო შემომავალი ტრანზაქცია მიაღწევს 50 ქსელის დადასტურებას და ხელახლა სცადეთ გაგზავნა.",
"SERVER_RESPONSE_NO_RESPONSE_OR_MORE_FEE": "ქსელი არ იღებს ტრანზაქციას - გთხოვთ, დაელოდოთ, სანამ სხვა ტრანზაქციები დადასტურდება, ან გამოიყენეთ მაღალი საკომისიო ",
"SERVER_RESPONSE_NOT_ENOUGH_CONFIRMED_FEE": "ადგილობრივი მონეტები %{symbol} არასაკმარისია საკომისიოს გადასახდელად - გთხოვთ, დაელოდოთ, სანამ სხვა ტრანზაქციები დადასტურდება",
"SERVER_RESPONSE_NOT_ENOUGH_AMOUNT_AS_FEE": "ძალიან მცირეა საკომისიო ტრანზაქციისთვის",
diff --git a/locales/ru.json b/locales/ru.json
index fb406a5fc..f48b81894 100644
--- a/locales/ru.json
+++ b/locales/ru.json
@@ -80,6 +80,7 @@
"transaction": "Запрос транзакции WalletConnect",
"transactionText": "Вы хотите %{subtitle} (max tx cost: %{txPrice} ETH)",
"sign": "Запрос подписи для WalletConnect",
+ "signTransaction": "Вы хотите подписать транзакцию",
"signText": "Вы хотите подписать сообщение",
"signTyped": "Типизированный запрос подписи для подключения к кошельку",
"signTypedText": "Вы хотите подписать сообщение",
@@ -503,8 +504,9 @@
"outcome": "Исходящая",
"income": "Входящая",
"self" : "Себе",
- "freeze" : "Заморозить",
- "unfreeze" : "Разморозить",
+ "freeze" : "Заморожено",
+ "unfreeze" : "Разморожено",
+ "withdraw_unfrozen": "Вывод размороженого",
"claim" : "Награда",
"swap_income" : "Contract Входящая",
"swap_outcome" : "Contract Исходящая",
@@ -884,7 +886,7 @@
"SERVER_RESPONSE_NOTHING_LEFT_FOR_FEE" : "Недостаточно средств на балансе для оплаты комиссии сети - пожалуйста, используйте опцию \"Отправить Все\" ",
"SERVER_RESPONSE_NOTHING_LEFT_FOR_DELEGATED_FEE" : "Недостаточно средств на балансе для оплаты делегированной транзакции - пожалуйста, используйте обычную отправку ERC20",
"SERVER_RESPONSE_NO_RESPONSE": "Сеть не принимает транзакцию - пожалуйста, подождите пока другие транзакции будут подтверждены",
- "SERVER_RESPONSE_NO_RESPONSE_XMR": "Пожалуйста, подождите пока предыдущие транзакции наберут необходимое количество подтверждений сети (не менее 15) и повторите отправку текущей",
+ "SERVER_RESPONSE_NO_RESPONSE_XMR": "По условиям протокола Monero, каждая входящая транзакция перед отправкой должна набрать не менее 50 подтверждений сети (~1.5 часа). Пожалуйста, подождите пока последняя входящая транзакция наберет 50 подтверждений сети и повторите отправку.",
"SERVER_RESPONSE_NO_RESPONSE_OR_MORE_FEE": "Сеть не принимает транзакцию - пожалуйста, подождите пока другие транзакции будут подтверждены или используйте большую комиссию",
"SERVER_RESPONSE_NOT_ENOUGH_CONFIRMED_FEE": "Недостаточно средств нативной монеты %{symbol} для оплаты комиссии - пожалуйста, подождите пока другие транзакции будут подтверждены",
"SERVER_RESPONSE_NOT_ENOUGH_AMOUNT_AS_FEE": "Слишком маленькая комиссия за транзакцию",
@@ -914,7 +916,7 @@
"SERVER_RESPONSE_BAD_SEND_NODE" : "Нет доступа к серверу отправки или ошибка соединения - пожалуйста, попробуйте еще раз",
"SERVER_RESPONSE_DOUBLE_SPEND" : "Пожалуйста, пересоздайте транзакцию, так как текущая использует уже устаревшие входы или подождите пока другие транзакции будут подтверждены",
"SERVER_RESPONSE_NO_TX_TO_SPEEDUP" : "Транзакция для ускорения не найдена",
- "SERVER_RESPONSE_BANDWITH_ERROR_TRX" : "Недостаточно средств TRX для транзакций / лимит бесплатных исчерпан",
+ "SERVER_RESPONSE_BANDWITH_ERROR_TRX" : "Пропускной способности (ПС) вашего адреса недостаточно для совершения транзакции. Подождите сутки для восполнения ПС либо переведите на адрес кошелька 1-2 TRX для компенсации ПС.",
"SERVER_RESPONSE_ENERGY_ERROR_VET" : "Недостаточно средств VeChain Thor Token (VTHO) для оплаты сетевой комиссии",
"SERVER_RESPONSE_PLEASE_CHECK_SYSTEM_TIME": "Пожалуйста, проверьте системное время устройства - необходимо синхронизировать время для создания транзакции",
"SERVER_RESPONSE_NOT_ENOUGH_BALANCE_SOL" : "Недостаточно средств для отправки",
diff --git a/locales/uk.json b/locales/uk.json
index 9b6e6ec10..ce506095a 100644
--- a/locales/uk.json
+++ b/locales/uk.json
@@ -76,6 +76,7 @@
"transaction": "Запит на транзакцію WalletConnect",
"transactionText": "Ви хочете %{subtitle} (max tx cost: %{txPrice} ETH)",
"sign": "Запит на підпис підключення WalletConnect",
+ "signTransaction": "Ви хочете підписати транзакцію ",
"signText": "Ви хочете підписати повідомлення ",
"signTyped": "Запит із підписом WalletConnect",
"signTypedText": "Ви хочете підписати повідомлення ",
@@ -504,6 +505,7 @@
"self" : "Собі",
"freeze" : "Заморожено",
"unfreeze" : "Розморожено",
+ "withdraw_unfrozen": "Вивід розмороженого",
"stake" : "Стейк",
"vote": "Голосування",
"wallet_connect" : "WalletConnect",
@@ -883,7 +885,7 @@
"SERVER_RESPONSE_NOTHING_LEFT_FOR_FEE" : "Недостатньо коштів на балансі для сплати комісії мережі - будь ласка, використовуйте опцію \"Відправити Все \" ",
"SERVER_RESPONSE_NOTHING_LEFT_FOR_DELEGATED_FEE" : "Недостатньо коштів на балансі для сплати делегованої транзакції - будь ласка, використовуйте звичайну відправку ERC20",
"SERVER_RESPONSE_NO_RESPONSE" : "Мережа не приймає транзакцію - будь ласка, зачекайте доки замайняться інші транзакції",
- "SERVER_RESPONSE_NO_RESPONSE_XMR": "Зачекайте, поки попередні транзакції наберуть необхідну кількість підтверджень мережі (не менше 15) та повторіть відправку поточної",
+ "SERVER_RESPONSE_NO_RESPONSE_XMR": "За умовами протоколу Monero, кожна транзакція, що входить перед відправкою, повинна набрати не менше 50 підтверджень мережі (~1.5 години). Зачекайте, поки остання вхідна транзакція набере 50 підтверджень мережі і повторіть відправку.\neng",
"SERVER_RESPONSE_NO_RESPONSE_OR_MORE_FEE": "Мережа не приймає транзакцію - будь ласка, зачекайте доки замайняться інші транзакції або використовуйте більшу комісію",
"SERVER_RESPONSE_NOT_ENOUGH_CONFIRMED_FEE": "Недостатньо коштів нативної монети %{symbol} для сплати комісії - будь ласка, зачекайте доки інші транзакції замайняться",
"SERVER_RESPONSE_NOT_ENOUGH_AMOUNT_AS_FEE": "Занадто мала комісія за транзакцію",
@@ -913,7 +915,7 @@
"SERVER_RESPONSE_BAD_SEND_NODE" : "Немає доступу до сервера відправки або помилка доступу до інтернету - будь ласка, спробуйте ще раз ",
"SERVER_RESPONSE_DOUBLE_SPEND" : "Будь ласка, створіть повторно транзакцію, оскільки ця використовує вже застарілі входи або зачекайте доки інші транзакції замайняться",
"SERVER_RESPONSE_NO_TX_TO_SPEEDUP" : "Транзакцію для прискорення не знайдено",
- "SERVER_RESPONSE_BANDWITH_ERROR_TRX" : "Недостатньо коштів TRX для відправки / ліміт безкоштовних вичерпано",
+ "SERVER_RESPONSE_BANDWITH_ERROR_TRX" : "Пропускної спроможності (ПС) вашої адреси недостатньо для транзакції. Зачекайте на добу для заповнення ПС або переведіть на адресу гаманця 1-2 TRX для компенсації ПС.",
"SERVER_RESPONSE_ENERGY_ERROR_VET" : "Недостатньо коштів VeChain Thor Token (VTHO) для відправки",
"SERVER_RESPONSE_PLEASE_CHECK_SYSTEM_TIME": "Будь ласка, перевірте системний годинник пристрою - потрібно сінхронізувати час для створення транзакції",
"SERVER_RESPONSE_NOT_ENOUGH_BALANCE_SOL" : "Недостатньо коштів для відправки",
diff --git a/package.json b/package.json
index 93cd6a0b2..7cd77a707 100644
--- a/package.json
+++ b/package.json
@@ -48,10 +48,7 @@
"@solana/web3.js": "git+https://git@github.com/trustee-wallet/solana-web3.js.git",
"@tradle/react-native-http": "^2.0.1",
"@unstoppabledomains/resolution": "^3.0.0",
- "@walletconnect/client": "1.3.6",
- "@walletconnect/core": "1.3.6",
- "@walletconnect/iso-crypto": "git+https://git@github.com/trustee-wallet/walletconnect-iso-crypto.git",
- "@walletconnect/utils": "1.3.6",
+ "@walletconnect/web3wallet": "^1.8.6",
"@waves/ts-lib-crypto": "1.4.4-beta.1",
"@waves/waves-transactions": "git+https://git@github.com/trustee-wallet/waves-transactions.git",
"assert": "^1.5.0",
@@ -59,6 +56,7 @@
"aws-sdk": "^2.941.0",
"axios": "^0.19.0",
"babel-plugin-module-resolver": "^4.1.0",
+ "big-integer": "^1.6.51",
"bip32": "^2.0.4",
"bip39": "^3.0.2",
"bitcoinjs-lib": "git+https://git@github.com/trustee-wallet/bitcoinjs-lib",
@@ -79,6 +77,7 @@
"ethjs-query": "^0.3.8",
"events": "^1.1.1",
"fast-luhn": "^1.0.4",
+ "fast-text-encoding": "^1.0.6",
"https-browserify": "0.0.1",
"i18n-js": "^3.5.1",
"inherits": "^2.0.1",
diff --git a/polyfills.js b/polyfills.js
new file mode 100644
index 000000000..ee7901d91
--- /dev/null
+++ b/polyfills.js
@@ -0,0 +1,27 @@
+// import '@walletconnect/react-native-compat' =>
+
+// Polyfill TextEncode / TextDecode
+// import 'fast-text-encoding'
+import '@assets/fast-text-encoding.min'
+
+// Polyfill crypto.getRandomvalues
+// import 'react-native-get-random-values'
+
+// Polyfill Buffer
+if (typeof Buffer === 'undefined') {
+ global.Buffer = require('buffer').Buffer
+}
+
+if (typeof global?.Linking === 'undefined') {
+ try {
+ global.Linking = require('react-native').Linking
+ } catch (e) {
+ // eslint-disable-next-line no-console
+ console.error('react-native-compat: react-native.Linking is not available')
+ }
+}
+// end import '@walletconnect/react-native-compat'
+
+if (typeof BigInt === 'undefined') {
+ global.BigInt = require('big-integer');
+}
\ No newline at end of file
diff --git a/yarn.lock b/yarn.lock
index 46ce66367..5dbe17d78 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1233,20 +1233,6 @@
"@jridgewell/resolve-uri" "^3.0.3"
"@jridgewell/sourcemap-codec" "^1.4.10"
-"@json-rpc-tools/types@^1.6.1":
- version "1.7.6"
- resolved "https://registry.yarnpkg.com/@json-rpc-tools/types/-/types-1.7.6.tgz#5abd5fde01364a130c46093b501715bcce5bdc0e"
- integrity sha512-nDSqmyRNEqEK9TZHtM15uNnDljczhCUdBmRhpNZ95bIPKEDQ+nTDmGMFd2lLin3upc5h2VVVd9tkTDdbXUhDIQ==
- dependencies:
- keyvaluestorage-interface "^1.0.0"
-
-"@json-rpc-tools/utils@1.6.1":
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/@json-rpc-tools/utils/-/utils-1.6.1.tgz#26e37d0fc4522721158d0f6057e136daa8813263"
- integrity sha512-cNwP4QapAls+xATU8zLLqPYa9qCbgwEyWEK7vE1oH91b3LfbUYwHtiWZ1+rv0X/mh/9cWNTo2Oi2Sah/QX0WwA==
- dependencies:
- "@json-rpc-tools/types" "^1.6.1"
-
"@metamask/eth-sig-util@4.0.0":
version "4.0.0"
resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.0.tgz#11553ba06de0d1352332c1bde28c8edd00e0dcf6"
@@ -1295,30 +1281,6 @@
resolved "https://registry.yarnpkg.com/@mymonero/mymonero-sendfunds-utils/-/mymonero-sendfunds-utils-2.1.19.tgz#01ca5f23fc4656bb5e33c9665b0165da7c77199d"
integrity sha512-JjZdWAl7tGTY5vEhBZy/efA0hh6YkqgJzCR5umF7K/5WhYFHJjPraPtkMcr776BswqxMI0BLhK383FOuqLS9ZA==
-"@pedrouid/environment@^1.0.1":
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/@pedrouid/environment/-/environment-1.0.1.tgz#858f0f8a057340e0b250398b75ead77d6f4342ec"
- integrity sha512-HaW78NszGzRZd9SeoI3JD11JqY+lubnaOx7Pewj5pfjqWXOEATpeKIFb9Z4t2WBUK2iryiXX3lzWwmYWgUL0Ug==
-
-"@pedrouid/iso-crypto@^1.0.0":
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/@pedrouid/iso-crypto/-/iso-crypto-1.1.0.tgz#3fb4050ea99f2f8ee41ba8661193c0989c815c95"
- integrity sha512-twi+tW67XT0BSOv4rsegnGo4TQMhfFswS/GY3KhrjFiNw3z9x+cMkfO+itNe1JZghQxsxHuhifvfsnG814g1hQ==
- dependencies:
- "@pedrouid/iso-random" "^1.1.0"
- aes-js "^3.1.2"
- enc-utils "^3.0.0"
- hash.js "^1.1.7"
-
-"@pedrouid/iso-random@^1.1.0":
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/@pedrouid/iso-random/-/iso-random-1.2.1.tgz#55178d9a2e7897b0f630dd1b4be76bc8460242d7"
- integrity sha512-C35NqYMmLsg61WDiEup4OwjRhgfZIcK4BL+Qg49xowHUJ+f7/LFZCO+TGuQqoXFAj1beKIOpUN33f0fqV7zneQ==
- dependencies:
- "@pedrouid/environment" "^1.0.1"
- enc-utils "^3.0.0"
- randombytes "^2.1.0"
-
"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2":
version "1.1.2"
resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf"
@@ -1775,6 +1737,140 @@
superstruct "^0.14.2"
tweetnacl "^1.0.0"
+"@stablelib/aead@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@stablelib/aead/-/aead-1.0.1.tgz#c4b1106df9c23d1b867eb9b276d8f42d5fc4c0c3"
+ integrity sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg==
+
+"@stablelib/binary@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@stablelib/binary/-/binary-1.0.1.tgz#c5900b94368baf00f811da5bdb1610963dfddf7f"
+ integrity sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==
+ dependencies:
+ "@stablelib/int" "^1.0.1"
+
+"@stablelib/bytes@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@stablelib/bytes/-/bytes-1.0.1.tgz#0f4aa7b03df3080b878c7dea927d01f42d6a20d8"
+ integrity sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ==
+
+"@stablelib/chacha20poly1305@1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@stablelib/chacha20poly1305/-/chacha20poly1305-1.0.1.tgz#de6b18e283a9cb9b7530d8767f99cde1fec4c2ee"
+ integrity sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA==
+ dependencies:
+ "@stablelib/aead" "^1.0.1"
+ "@stablelib/binary" "^1.0.1"
+ "@stablelib/chacha" "^1.0.1"
+ "@stablelib/constant-time" "^1.0.1"
+ "@stablelib/poly1305" "^1.0.1"
+ "@stablelib/wipe" "^1.0.1"
+
+"@stablelib/chacha@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@stablelib/chacha/-/chacha-1.0.1.tgz#deccfac95083e30600c3f92803a3a1a4fa761371"
+ integrity sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg==
+ dependencies:
+ "@stablelib/binary" "^1.0.1"
+ "@stablelib/wipe" "^1.0.1"
+
+"@stablelib/constant-time@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@stablelib/constant-time/-/constant-time-1.0.1.tgz#bde361465e1cf7b9753061b77e376b0ca4c77e35"
+ integrity sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg==
+
+"@stablelib/ed25519@^1.0.2":
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/@stablelib/ed25519/-/ed25519-1.0.3.tgz#f8fdeb6f77114897c887bb6a3138d659d3f35996"
+ integrity sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg==
+ dependencies:
+ "@stablelib/random" "^1.0.2"
+ "@stablelib/sha512" "^1.0.1"
+ "@stablelib/wipe" "^1.0.1"
+
+"@stablelib/hash@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@stablelib/hash/-/hash-1.0.1.tgz#3c944403ff2239fad8ebb9015e33e98444058bc5"
+ integrity sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg==
+
+"@stablelib/hkdf@1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@stablelib/hkdf/-/hkdf-1.0.1.tgz#b4efd47fd56fb43c6a13e8775a54b354f028d98d"
+ integrity sha512-SBEHYE16ZXlHuaW5RcGk533YlBj4grMeg5TooN80W3NpcHRtLZLLXvKyX0qcRFxf+BGDobJLnwkvgEwHIDBR6g==
+ dependencies:
+ "@stablelib/hash" "^1.0.1"
+ "@stablelib/hmac" "^1.0.1"
+ "@stablelib/wipe" "^1.0.1"
+
+"@stablelib/hmac@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@stablelib/hmac/-/hmac-1.0.1.tgz#3d4c1b8cf194cb05d28155f0eed8a299620a07ec"
+ integrity sha512-V2APD9NSnhVpV/QMYgCVMIYKiYG6LSqw1S65wxVoirhU/51ACio6D4yDVSwMzuTJXWZoVHbDdINioBwKy5kVmA==
+ dependencies:
+ "@stablelib/constant-time" "^1.0.1"
+ "@stablelib/hash" "^1.0.1"
+ "@stablelib/wipe" "^1.0.1"
+
+"@stablelib/int@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@stablelib/int/-/int-1.0.1.tgz#75928cc25d59d73d75ae361f02128588c15fd008"
+ integrity sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==
+
+"@stablelib/keyagreement@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@stablelib/keyagreement/-/keyagreement-1.0.1.tgz#4612efb0a30989deb437cd352cee637ca41fc50f"
+ integrity sha512-VKL6xBwgJnI6l1jKrBAfn265cspaWBPAPEc62VBQrWHLqVgNRE09gQ/AnOEyKUWrrqfD+xSQ3u42gJjLDdMDQg==
+ dependencies:
+ "@stablelib/bytes" "^1.0.1"
+
+"@stablelib/poly1305@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@stablelib/poly1305/-/poly1305-1.0.1.tgz#93bfb836c9384685d33d70080718deae4ddef1dc"
+ integrity sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA==
+ dependencies:
+ "@stablelib/constant-time" "^1.0.1"
+ "@stablelib/wipe" "^1.0.1"
+
+"@stablelib/random@1.0.2", "@stablelib/random@^1.0.1", "@stablelib/random@^1.0.2":
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/@stablelib/random/-/random-1.0.2.tgz#2dece393636489bf7e19c51229dd7900eddf742c"
+ integrity sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==
+ dependencies:
+ "@stablelib/binary" "^1.0.1"
+ "@stablelib/wipe" "^1.0.1"
+
+"@stablelib/sha256@1.0.1", "@stablelib/sha256@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@stablelib/sha256/-/sha256-1.0.1.tgz#77b6675b67f9b0ea081d2e31bda4866297a3ae4f"
+ integrity sha512-GIIH3e6KH+91FqGV42Kcj71Uefd/QEe7Dy42sBTeqppXV95ggCcxLTk39bEr+lZfJmp+ghsR07J++ORkRELsBQ==
+ dependencies:
+ "@stablelib/binary" "^1.0.1"
+ "@stablelib/hash" "^1.0.1"
+ "@stablelib/wipe" "^1.0.1"
+
+"@stablelib/sha512@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@stablelib/sha512/-/sha512-1.0.1.tgz#6da700c901c2c0ceacbd3ae122a38ac57c72145f"
+ integrity sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw==
+ dependencies:
+ "@stablelib/binary" "^1.0.1"
+ "@stablelib/hash" "^1.0.1"
+ "@stablelib/wipe" "^1.0.1"
+
+"@stablelib/wipe@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@stablelib/wipe/-/wipe-1.0.1.tgz#d21401f1d59ade56a62e139462a97f104ed19a36"
+ integrity sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==
+
+"@stablelib/x25519@^1.0.3":
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/@stablelib/x25519/-/x25519-1.0.3.tgz#13c8174f774ea9f3e5e42213cbf9fc68a3c7b7fd"
+ integrity sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw==
+ dependencies:
+ "@stablelib/keyagreement" "^1.0.1"
+ "@stablelib/random" "^1.0.2"
+ "@stablelib/wipe" "^1.0.1"
+
"@svgr/babel-plugin-add-jsx-attribute@^4.2.0":
version "4.2.0"
resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.2.0.tgz#dadcb6218503532d6884b210e7f3c502caaa44b1"
@@ -2266,169 +2362,233 @@
uuid "2.0.1"
xmlhttprequest "1.8.0"
-"@walletconnect/browser-utils@^1.8.0":
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/@walletconnect/browser-utils/-/browser-utils-1.8.0.tgz#33c10e777aa6be86c713095b5206d63d32df0951"
- integrity sha512-Wcqqx+wjxIo9fv6eBUFHPsW1y/bGWWRboni5dfD8PtOmrihrEpOCmvRJe4rfl7xgJW8Ea9UqKEaq0bIRLHlK4A==
- dependencies:
- "@walletconnect/safe-json" "1.0.0"
- "@walletconnect/types" "^1.8.0"
- "@walletconnect/window-getters" "1.0.0"
- "@walletconnect/window-metadata" "1.0.0"
- detect-browser "5.2.0"
-
-"@walletconnect/client@1.3.6":
- version "1.3.6"
- resolved "https://registry.yarnpkg.com/@walletconnect/client/-/client-1.3.6.tgz#537b7af6bf87a906fcf171fd5bc4e56a2a3d1908"
- integrity sha512-HmzUpF/cPqPf8huaVg45SXk2hKQ6yxisy/qJ+51SoRGmtZDokJGxpq6+RFOnE8jFtUhTZRaK9UZ/jvsJAxIhEw==
- dependencies:
- "@walletconnect/core" "^1.3.6"
- "@walletconnect/iso-crypto" "^1.3.6"
- "@walletconnect/types" "^1.3.6"
- "@walletconnect/utils" "^1.3.6"
-
-"@walletconnect/core@1.3.6":
- version "1.3.6"
- resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-1.3.6.tgz#1690081bc4666b6644ed6a1bed128509a5259e50"
- integrity sha512-1HHP2xZI6b88WQgszs3gP5xkkCwwlWgDJz+J6ADGzVXhQP21p1mZhKezUtx27rOtQimMIrPDfgPyAHwQBZkkSw==
- dependencies:
- "@walletconnect/socket-transport" "^1.3.6"
- "@walletconnect/types" "^1.3.6"
- "@walletconnect/utils" "^1.3.6"
-
-"@walletconnect/core@^1.3.6":
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-1.8.0.tgz#6b2748b90c999d9d6a70e52e26a8d5e8bfeaa81e"
- integrity sha512-aFTHvEEbXcZ8XdWBw6rpQDte41Rxwnuk3SgTD8/iKGSRTni50gI9S3YEzMj05jozSiOBxQci4pJDMVhIUMtarw==
+"@walletconnect/auth-client@2.1.0":
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/@walletconnect/auth-client/-/auth-client-2.1.0.tgz#47b794cf807d6211fe3a87531f7fca7c6838fd3c"
+ integrity sha512-k6zZLEdlBpYIvbOL5tBWd+3DUJ2R4VFDyHpdp4TuRzC//njRkIzRSksEnsr8gN8P+IKuoJTLPsDy2sWR4qVTNQ==
dependencies:
- "@walletconnect/socket-transport" "^1.8.0"
- "@walletconnect/types" "^1.8.0"
- "@walletconnect/utils" "^1.8.0"
-
-"@walletconnect/crypto@^1.0.2":
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/@walletconnect/crypto/-/crypto-1.0.2.tgz#3fcc2b2cde6f529a19eadd883dc555cd0e861992"
- integrity sha512-+OlNtwieUqVcOpFTvLBvH+9J9pntEqH5evpINHfVxff1XIgwV55PpbdvkHu6r9Ib4WQDOFiD8OeeXs1vHw7xKQ==
+ "@ethersproject/hash" "^5.7.0"
+ "@ethersproject/transactions" "^5.7.0"
+ "@stablelib/random" "1.0.2"
+ "@stablelib/sha256" "^1.0.1"
+ "@walletconnect/core" "^2.7.2"
+ "@walletconnect/events" "^1.0.1"
+ "@walletconnect/heartbeat" "^1.2.0"
+ "@walletconnect/jsonrpc-utils" "^1.0.7"
+ "@walletconnect/logger" "^2.0.1"
+ "@walletconnect/time" "^1.0.2"
+ "@walletconnect/utils" "^2.7.2"
+ events "^3.3.0"
+ isomorphic-unfetch "^3.1.0"
+
+"@walletconnect/core@2.9.0", "@walletconnect/core@^2.7.2":
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-2.9.0.tgz#7837a5d015a22b48d35b987bcde2aa9ccdf300d8"
+ integrity sha512-MZYJghS9YCvGe32UOgDj0mCasaOoGHQaYXWeQblXE/xb8HuaM6kAWhjIQN9P+MNp5QP134BHP5olQostcCotXQ==
+ dependencies:
+ "@walletconnect/heartbeat" "1.2.1"
+ "@walletconnect/jsonrpc-provider" "1.0.13"
+ "@walletconnect/jsonrpc-types" "1.0.3"
+ "@walletconnect/jsonrpc-utils" "1.0.8"
+ "@walletconnect/jsonrpc-ws-connection" "1.0.12"
+ "@walletconnect/keyvaluestorage" "^1.0.2"
+ "@walletconnect/logger" "^2.0.1"
+ "@walletconnect/relay-api" "^1.0.9"
+ "@walletconnect/relay-auth" "^1.0.4"
+ "@walletconnect/safe-json" "^1.0.2"
+ "@walletconnect/time" "^1.0.2"
+ "@walletconnect/types" "2.9.0"
+ "@walletconnect/utils" "2.9.0"
+ events "^3.3.0"
+ lodash.isequal "4.5.0"
+ uint8arrays "^3.1.0"
+
+"@walletconnect/environment@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@walletconnect/environment/-/environment-1.0.1.tgz#1d7f82f0009ab821a2ba5ad5e5a7b8ae3b214cd7"
+ integrity sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg==
dependencies:
- "@walletconnect/encoding" "^1.0.1"
- "@walletconnect/environment" "^1.0.0"
- "@walletconnect/randombytes" "^1.0.2"
- aes-js "^3.1.2"
- hash.js "^1.1.7"
+ tslib "1.14.1"
-"@walletconnect/encoding@^1.0.1":
+"@walletconnect/events@^1.0.1":
version "1.0.1"
- resolved "https://registry.yarnpkg.com/@walletconnect/encoding/-/encoding-1.0.1.tgz#93c18ce9478c3d5283dbb88c41eb2864b575269a"
- integrity sha512-8opL2rs6N6E3tJfsqwS82aZQDL3gmupWUgmvuZ3CGU7z/InZs3R9jkzH8wmYtpbq0sFK3WkJkQRZFFk4BkrmFA==
+ resolved "https://registry.yarnpkg.com/@walletconnect/events/-/events-1.0.1.tgz#2b5f9c7202019e229d7ccae1369a9e86bda7816c"
+ integrity sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ==
dependencies:
- is-typedarray "1.0.0"
- typedarray-to-buffer "3.1.5"
-
-"@walletconnect/environment@^1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@walletconnect/environment/-/environment-1.0.0.tgz#c4545869fa9c389ec88c364e1a5f8178e8ab5034"
- integrity sha512-4BwqyWy6KpSvkocSaV7WR3BlZfrxLbJSLkg+j7Gl6pTDE+U55lLhJvQaMuDVazXYxcjBsG09k7UlH7cGiUI5vQ==
+ keyvaluestorage-interface "^1.0.0"
+ tslib "1.14.1"
-"@walletconnect/iso-crypto@^1.3.6":
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/@walletconnect/iso-crypto/-/iso-crypto-1.8.0.tgz#44ddf337c4f02837c062dbe33fa7ab36789df451"
- integrity sha512-pWy19KCyitpfXb70hA73r9FcvklS+FvO9QUIttp3c2mfW8frxgYeRXfxLRCIQTkaYueRKvdqPjbyhPLam508XQ==
+"@walletconnect/heartbeat@1.2.1", "@walletconnect/heartbeat@^1.2.0":
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/@walletconnect/heartbeat/-/heartbeat-1.2.1.tgz#afaa3a53232ae182d7c9cff41c1084472d8f32e9"
+ integrity sha512-yVzws616xsDLJxuG/28FqtZ5rzrTA4gUjdEMTbWB5Y8V1XHRmqq4efAxCw5ie7WjbXFSUyBHaWlMR+2/CpQC5Q==
dependencies:
- "@walletconnect/crypto" "^1.0.2"
- "@walletconnect/types" "^1.8.0"
- "@walletconnect/utils" "^1.8.0"
+ "@walletconnect/events" "^1.0.1"
+ "@walletconnect/time" "^1.0.2"
+ tslib "1.14.1"
-"@walletconnect/iso-crypto@git+https://git@github.com/trustee-wallet/walletconnect-iso-crypto.git":
- version "1.3.6"
- resolved "git+https://git@github.com/trustee-wallet/walletconnect-iso-crypto.git#b8b4861a5bd4537d23a42b200daf0b1ba96e2c4f"
+"@walletconnect/jsonrpc-provider@1.0.13":
+ version "1.0.13"
+ resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-provider/-/jsonrpc-provider-1.0.13.tgz#9a74da648d015e1fffc745f0c7d629457f53648b"
+ integrity sha512-K73EpThqHnSR26gOyNEL+acEex3P7VWZe6KE12ZwKzAt2H4e5gldZHbjsu2QR9cLeJ8AXuO7kEMOIcRv1QEc7g==
dependencies:
- "@pedrouid/iso-crypto" "^1.0.0"
- "@walletconnect/types" "^1.3.6"
- "@walletconnect/utils" "^1.3.6"
+ "@walletconnect/jsonrpc-utils" "^1.0.8"
+ "@walletconnect/safe-json" "^1.0.2"
+ tslib "1.14.1"
-"@walletconnect/jsonrpc-types@^1.0.1":
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.1.tgz#a96b4bb2bcc8838a70e06f15c1b5ab11c47d8e95"
- integrity sha512-+6coTtOuChCqM+AoYyi4Q83p9l/laI6NvuM2/AHaZFuf0gT0NjW7IX2+86qGyizn7Ptq4AYZmfxurAxTnhefuw==
+"@walletconnect/jsonrpc-types@1.0.3", "@walletconnect/jsonrpc-types@^1.0.2", "@walletconnect/jsonrpc-types@^1.0.3":
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.3.tgz#65e3b77046f1a7fa8347ae02bc1b841abe6f290c"
+ integrity sha512-iIQ8hboBl3o5ufmJ8cuduGad0CQm3ZlsHtujv9Eu16xq89q+BG7Nh5VLxxUgmtpnrePgFkTwXirCTkwJH1v+Yw==
dependencies:
keyvaluestorage-interface "^1.0.0"
+ tslib "1.14.1"
-"@walletconnect/jsonrpc-utils@^1.0.3":
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-utils/-/jsonrpc-utils-1.0.3.tgz#5bd49865eef0eae48e8b45a06731dc18691cf8c7"
- integrity sha512-3yb49bPk16MNLk6uIIHPSHQCpD6UAo1OMOx1rM8cW/MPEAYAzrSW5hkhG7NEUwX9SokRIgnZK3QuQkiyNzBMhQ==
+"@walletconnect/jsonrpc-utils@1.0.8", "@walletconnect/jsonrpc-utils@^1.0.6", "@walletconnect/jsonrpc-utils@^1.0.7", "@walletconnect/jsonrpc-utils@^1.0.8":
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-utils/-/jsonrpc-utils-1.0.8.tgz#82d0cc6a5d6ff0ecc277cb35f71402c91ad48d72"
+ integrity sha512-vdeb03bD8VzJUL6ZtzRYsFMq1eZQcM3EAzT0a3st59dyLfJ0wq+tKMpmGH7HlB7waD858UWgfIcudbPFsbzVdw==
+ dependencies:
+ "@walletconnect/environment" "^1.0.1"
+ "@walletconnect/jsonrpc-types" "^1.0.3"
+ tslib "1.14.1"
+
+"@walletconnect/jsonrpc-ws-connection@1.0.12":
+ version "1.0.12"
+ resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-ws-connection/-/jsonrpc-ws-connection-1.0.12.tgz#2192314884fabdda6d0a9d22e157e5b352025ed8"
+ integrity sha512-HAcadga3Qjt1Cqy+qXEW6zjaCs8uJGdGQrqltzl3OjiK4epGZRdvSzTe63P+t/3z+D2wG+ffEPn0GVcDozmN1w==
dependencies:
- "@walletconnect/environment" "^1.0.0"
- "@walletconnect/jsonrpc-types" "^1.0.1"
+ "@walletconnect/jsonrpc-utils" "^1.0.6"
+ "@walletconnect/safe-json" "^1.0.2"
+ events "^3.3.0"
+ tslib "1.14.1"
+ ws "^7.5.1"
-"@walletconnect/randombytes@^1.0.2":
+"@walletconnect/keyvaluestorage@^1.0.2":
version "1.0.2"
- resolved "https://registry.yarnpkg.com/@walletconnect/randombytes/-/randombytes-1.0.2.tgz#95c644251a15e6675f58fbffc9513a01486da49c"
- integrity sha512-ivgOtAyqQnN0rLQmOFPemsgYGysd/ooLfaDA/ACQ3cyqlca56t3rZc7pXfqJOIETx/wSyoF5XbwL+BqYodw27A==
+ resolved "https://registry.yarnpkg.com/@walletconnect/keyvaluestorage/-/keyvaluestorage-1.0.2.tgz#92f5ca0f54c1a88a093778842ce0c874d86369c8"
+ integrity sha512-U/nNG+VLWoPFdwwKx0oliT4ziKQCEoQ27L5Hhw8YOFGA2Po9A9pULUYNWhDgHkrb0gYDNt//X7wABcEWWBd3FQ==
dependencies:
- "@walletconnect/encoding" "^1.0.1"
- "@walletconnect/environment" "^1.0.0"
- randombytes "^2.1.0"
+ safe-json-utils "^1.1.1"
+ tslib "1.14.1"
-"@walletconnect/safe-json@1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@walletconnect/safe-json/-/safe-json-1.0.0.tgz#12eeb11d43795199c045fafde97e3c91646683b2"
- integrity sha512-QJzp/S/86sUAgWY6eh5MKYmSfZaRpIlmCJdi5uG4DJlKkZrHEF7ye7gA+VtbVzvTtpM/gRwO2plQuiooIeXjfg==
+"@walletconnect/logger@2.0.1", "@walletconnect/logger@^2.0.1":
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/@walletconnect/logger/-/logger-2.0.1.tgz#7f489b96e9a1ff6bf3e58f0fbd6d69718bf844a8"
+ integrity sha512-SsTKdsgWm+oDTBeNE/zHxxr5eJfZmE9/5yp/Ku+zJtcTAjELb3DXueWkDXmE9h8uHIbJzIb5wj5lPdzyrjT6hQ==
+ dependencies:
+ pino "7.11.0"
+ tslib "1.14.1"
-"@walletconnect/socket-transport@^1.3.6", "@walletconnect/socket-transport@^1.8.0":
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/@walletconnect/socket-transport/-/socket-transport-1.8.0.tgz#9a1128a249628a0be11a0979b522fe82b44afa1b"
- integrity sha512-5DyIyWrzHXTcVp0Vd93zJ5XMW61iDM6bcWT4p8DTRfFsOtW46JquruMhxOLeCOieM4D73kcr3U7WtyR4JUsGuQ==
+"@walletconnect/relay-api@^1.0.9":
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/@walletconnect/relay-api/-/relay-api-1.0.9.tgz#f8c2c3993dddaa9f33ed42197fc9bfebd790ecaf"
+ integrity sha512-Q3+rylJOqRkO1D9Su0DPE3mmznbAalYapJ9qmzDgK28mYF9alcP3UwG/og5V7l7CFOqzCLi7B8BvcBUrpDj0Rg==
dependencies:
- "@walletconnect/types" "^1.8.0"
- "@walletconnect/utils" "^1.8.0"
- ws "7.5.3"
+ "@walletconnect/jsonrpc-types" "^1.0.2"
+ tslib "1.14.1"
-"@walletconnect/types@^1.3.6", "@walletconnect/types@^1.8.0":
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-1.8.0.tgz#3f5e85b2d6b149337f727ab8a71b8471d8d9a195"
- integrity sha512-Cn+3I0V0vT9ghMuzh1KzZvCkiAxTq+1TR2eSqw5E5AVWfmCtECFkVZBP6uUJZ8YjwLqXheI+rnjqPy7sVM4Fyg==
+"@walletconnect/relay-auth@^1.0.4":
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/@walletconnect/relay-auth/-/relay-auth-1.0.4.tgz#0b5c55c9aa3b0ef61f526ce679f3ff8a5c4c2c7c"
+ integrity sha512-kKJcS6+WxYq5kshpPaxGHdwf5y98ZwbfuS4EE/NkQzqrDFm5Cj+dP8LofzWvjrrLkZq7Afy7WrQMXdLy8Sx7HQ==
+ dependencies:
+ "@stablelib/ed25519" "^1.0.2"
+ "@stablelib/random" "^1.0.1"
+ "@walletconnect/safe-json" "^1.0.1"
+ "@walletconnect/time" "^1.0.2"
+ tslib "1.14.1"
+ uint8arrays "^3.0.0"
-"@walletconnect/utils@1.3.6":
- version "1.3.6"
- resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-1.3.6.tgz#e55cb5510eb41b4ae6be8e88c1de42abf309bdd3"
- integrity sha512-nzTO5A3Ltjrsu6u8SR/KqdHTH03848KIj5MQlOCUjwxW1fXOvuri8+kwFKqlMn0bk1Qvlt6rrOptbt14PW8kSA==
+"@walletconnect/safe-json@^1.0.1", "@walletconnect/safe-json@^1.0.2":
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/@walletconnect/safe-json/-/safe-json-1.0.2.tgz#7237e5ca48046e4476154e503c6d3c914126fa77"
+ integrity sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==
dependencies:
- "@json-rpc-tools/utils" "1.6.1"
- "@walletconnect/types" "^1.3.6"
- bn.js "4.11.8"
- detect-browser "5.1.0"
- enc-utils "3.0.0"
- js-sha3 "0.8.0"
- query-string "6.13.5"
- safe-json-utils "1.0.0"
- window-getters "1.0.0"
- window-metadata "1.0.0"
+ tslib "1.14.1"
-"@walletconnect/utils@^1.3.6", "@walletconnect/utils@^1.8.0":
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-1.8.0.tgz#2591a197c1fa7429941fe428876088fda6632060"
- integrity sha512-zExzp8Mj1YiAIBfKNm5u622oNw44WOESzo6hj+Q3apSMIb0Jph9X3GDIdbZmvVZsNPxWDL7uodKgZcCInZv2vA==
+"@walletconnect/sign-client@2.9.0":
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/@walletconnect/sign-client/-/sign-client-2.9.0.tgz#fd3b0acb68bc8d56350f01ed70f8c6326e6e89fa"
+ integrity sha512-mEKc4LlLMebCe45qzqh+MX4ilQK4kOEBzLY6YJpG8EhyT45eX4JMNA7qQoYa9MRMaaVb/7USJcc4e3ZrjZvQmA==
+ dependencies:
+ "@walletconnect/core" "2.9.0"
+ "@walletconnect/events" "^1.0.1"
+ "@walletconnect/heartbeat" "1.2.1"
+ "@walletconnect/jsonrpc-utils" "1.0.8"
+ "@walletconnect/logger" "^2.0.1"
+ "@walletconnect/time" "^1.0.2"
+ "@walletconnect/types" "2.9.0"
+ "@walletconnect/utils" "2.9.0"
+ events "^3.3.0"
+
+"@walletconnect/time@^1.0.2":
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/@walletconnect/time/-/time-1.0.2.tgz#6c5888b835750ecb4299d28eecc5e72c6d336523"
+ integrity sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g==
dependencies:
- "@walletconnect/browser-utils" "^1.8.0"
- "@walletconnect/encoding" "^1.0.1"
- "@walletconnect/jsonrpc-utils" "^1.0.3"
- "@walletconnect/types" "^1.8.0"
- bn.js "4.11.8"
- js-sha3 "0.8.0"
- query-string "6.13.5"
+ tslib "1.14.1"
-"@walletconnect/window-getters@1.0.0", "@walletconnect/window-getters@^1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@walletconnect/window-getters/-/window-getters-1.0.0.tgz#1053224f77e725dfd611c83931b5f6c98c32bfc8"
- integrity sha512-xB0SQsLaleIYIkSsl43vm8EwETpBzJ2gnzk7e0wMF3ktqiTGS6TFHxcprMl5R44KKh4tCcHCJwolMCaDSwtAaA==
+"@walletconnect/types@2.9.0":
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-2.9.0.tgz#6e5dfdc7212c1ec4ab49a1ec409c743e16093f72"
+ integrity sha512-ORopsMfSRvUYqtjKKd6scfg8o4/aGebipLxx92AuuUgMTERSU6cGmIrK6rdLu7W6FBJkmngPLEGc9mRqAb9Lug==
+ dependencies:
+ "@walletconnect/events" "^1.0.1"
+ "@walletconnect/heartbeat" "1.2.1"
+ "@walletconnect/jsonrpc-types" "1.0.3"
+ "@walletconnect/keyvaluestorage" "^1.0.2"
+ "@walletconnect/logger" "^2.0.1"
+ events "^3.3.0"
-"@walletconnect/window-metadata@1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@walletconnect/window-metadata/-/window-metadata-1.0.0.tgz#93b1cc685e6b9b202f29c26be550fde97800c4e5"
- integrity sha512-9eFvmJxIKCC3YWOL97SgRkKhlyGXkrHwamfechmqszbypFspaSk+t2jQXAEU7YClHF6Qjw5eYOmy1//zFi9/GA==
+"@walletconnect/utils@2.9.0", "@walletconnect/utils@^2.7.2":
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-2.9.0.tgz#c73925edb9fefe79021bcf028e957028f986b728"
+ integrity sha512-7Tu3m6dZL84KofrNBcblsgpSqU2vdo9ImLD7zWimLXERVGNQ8smXG+gmhQYblebIBhsPzjy9N38YMC3nPlfQNw==
+ dependencies:
+ "@stablelib/chacha20poly1305" "1.0.1"
+ "@stablelib/hkdf" "1.0.1"
+ "@stablelib/random" "^1.0.2"
+ "@stablelib/sha256" "1.0.1"
+ "@stablelib/x25519" "^1.0.3"
+ "@walletconnect/relay-api" "^1.0.9"
+ "@walletconnect/safe-json" "^1.0.2"
+ "@walletconnect/time" "^1.0.2"
+ "@walletconnect/types" "2.9.0"
+ "@walletconnect/window-getters" "^1.0.1"
+ "@walletconnect/window-metadata" "^1.0.1"
+ detect-browser "5.3.0"
+ query-string "7.1.3"
+ uint8arrays "^3.1.0"
+
+"@walletconnect/web3wallet@^1.8.6":
+ version "1.8.6"
+ resolved "https://registry.yarnpkg.com/@walletconnect/web3wallet/-/web3wallet-1.8.6.tgz#445f547111dafb1b673d71f6fef849580a14439b"
+ integrity sha512-HxE3Jtaxs5cKhZNULEwApeMnsQsh9SEyw4FO+lafoe9KKdc2neQlY/CnPz/S4i345/Dg+bz6BcUNXouimgz3EQ==
+ dependencies:
+ "@walletconnect/auth-client" "2.1.0"
+ "@walletconnect/core" "2.9.0"
+ "@walletconnect/jsonrpc-provider" "1.0.13"
+ "@walletconnect/jsonrpc-utils" "1.0.8"
+ "@walletconnect/logger" "2.0.1"
+ "@walletconnect/sign-client" "2.9.0"
+ "@walletconnect/types" "2.9.0"
+ "@walletconnect/utils" "2.9.0"
+
+"@walletconnect/window-getters@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@walletconnect/window-getters/-/window-getters-1.0.1.tgz#f36d1c72558a7f6b87ecc4451fc8bd44f63cbbdc"
+ integrity sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q==
dependencies:
- "@walletconnect/window-getters" "^1.0.0"
+ tslib "1.14.1"
+
+"@walletconnect/window-metadata@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@walletconnect/window-metadata/-/window-metadata-1.0.1.tgz#2124f75447b7e989e4e4e1581d55d25bc75f7be5"
+ integrity sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==
+ dependencies:
+ "@walletconnect/window-getters" "^1.0.1"
+ tslib "1.14.1"
"@waves/bignumber@^1.1.1":
version "1.1.1"
@@ -2624,7 +2784,7 @@ aes-js@3.0.0:
resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d"
integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==
-aes-js@3.1.2, aes-js@^3.1.2:
+aes-js@3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.1.2.tgz#db9aabde85d5caabbfc0d4f2a4446960f627146a"
integrity sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==
@@ -2967,6 +3127,11 @@ atob@^2.1.2:
resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
+atomic-sleep@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b"
+ integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==
+
available-typed-arrays@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7"
@@ -3236,7 +3401,7 @@ bech32@^1.1.2:
resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9"
integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==
-big-integer@1.6.x:
+big-integer@1.6.x, big-integer@^1.6.51:
version "1.6.51"
resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686"
integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==
@@ -4586,6 +4751,11 @@ decode-uri-component@^0.2.0:
resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==
+decode-uri-component@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9"
+ integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==
+
decompress-response@^3.2.0, decompress-response@^3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3"
@@ -4718,15 +4888,10 @@ destroy@1.2.0:
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015"
integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==
-detect-browser@5.1.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/detect-browser/-/detect-browser-5.1.0.tgz#0c51c66b747ad8f98a6832bf3026a5a23a7850ff"
- integrity sha512-WKa9p+/MNwmTiS+V2AS6eGxic+807qvnV3hC+4z2GTY+F42h1n8AynVTMMc4EJBC32qMs6yjOTpeDEQQt/AVqQ==
-
-detect-browser@5.2.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/detect-browser/-/detect-browser-5.2.0.tgz#c9cd5afa96a6a19fda0bbe9e9be48a6b6e1e9c97"
- integrity sha512-tr7XntDAu50BVENgQfajMLzacmSe34D+qZc4zjnniz0ZVuw/TZcLcyxHQjYpJTM36sGEkZZlYLnIM1hH7alTMA==
+detect-browser@5.3.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/detect-browser/-/detect-browser-5.3.0.tgz#9705ef2bddf46072d0f7265a1fe300e36fe7ceca"
+ integrity sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==
detect-newline@^2.1.0:
version "2.1.0"
@@ -4852,6 +5017,16 @@ duplexer3@^0.1.4:
resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e"
integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==
+duplexify@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.2.tgz#18b4f8d28289132fa0b9573c898d9f903f81c7b0"
+ integrity sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==
+ dependencies:
+ end-of-stream "^1.4.1"
+ inherits "^2.0.3"
+ readable-stream "^3.1.1"
+ stream-shift "^1.0.0"
+
ecc-jsbn@~0.1.1:
version "0.1.2"
resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
@@ -4973,14 +5148,6 @@ enc-utils@2.1.0:
is-typedarray "1.0.0"
typedarray-to-buffer "3.1.5"
-enc-utils@3.0.0, enc-utils@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/enc-utils/-/enc-utils-3.0.0.tgz#65935d2d6a867fa0ae995f05f3a2f055ce764dcf"
- integrity sha512-e57t/Z2HzWOLwOp7DZcV0VMEY8t7ptWwsxyp6kM2b2zrk6JqIpXxzkruHAMiBsy5wg9jp/183GdiRXCvBtzsYg==
- dependencies:
- is-typedarray "1.0.0"
- typedarray-to-buffer "3.1.5"
-
encode-utf8@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda"
@@ -4998,7 +5165,7 @@ encoding@^0.1.11:
dependencies:
iconv-lite "^0.6.2"
-end-of-stream@^1.1.0:
+end-of-stream@^1.1.0, end-of-stream@^1.4.1:
version "1.4.4"
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
@@ -5715,7 +5882,7 @@ events@1.1.1, events@^1.0.2, events@^1.1.1:
resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
integrity sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==
-events@^3.0.0:
+events@^3.0.0, events@^3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
@@ -5967,6 +6134,16 @@ fast-luhn@^1.0.4:
resolved "https://registry.yarnpkg.com/fast-luhn/-/fast-luhn-1.1.1.tgz#c99bc1ce057aee16e68f5552c2d65800eda580be"
integrity sha512-omf2rT+fZMiaBXpyvOvBEYaoi/s+gdE/hrBGcKEraQIpD7AVTN+ZOaJgabPBJHRWzonjVABelF7KvI+7cij+mg==
+fast-redact@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.2.0.tgz#b1e2d39bc731376d28bde844454fa23e26919987"
+ integrity sha512-zaTadChr+NekyzallAMXATXLOR8MNx3zqpZ0MUF2aGf4EathnG0f32VLODNlY8IuGY3HoRO2L6/6fSzNsLaHIw==
+
+fast-text-encoding@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz#0aa25f7f638222e3396d72bf936afcf1d42d6867"
+ integrity sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==
+
fb-watchman@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85"
@@ -7356,6 +7533,14 @@ isomorphic-fetch@^2.1.1:
node-fetch "^1.0.1"
whatwg-fetch ">=0.10.0"
+isomorphic-unfetch@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz#87341d5f4f7b63843d468438128cb087b7c3e98f"
+ integrity sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==
+ dependencies:
+ node-fetch "^2.6.1"
+ unfetch "^4.2.0"
+
isomorphic-ws@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc"
@@ -8330,7 +8515,7 @@ lodash.get@^4.4.2:
resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==
-lodash.isequal@^4.5.0:
+lodash.isequal@4.5.0, lodash.isequal@^4.5.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0"
integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==
@@ -9352,6 +9537,11 @@ ms@2.1.3, ms@^2.1.1:
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+multiformats@^9.4.2:
+ version "9.9.0"
+ resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-9.9.0.tgz#c68354e7d21037a8f1f8833c8ccd68618e8f1d37"
+ integrity sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==
+
mute-stream@0.0.7:
version "0.0.7"
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
@@ -9716,6 +9906,11 @@ octal@^1.0.0:
resolved "https://registry.yarnpkg.com/octal/-/octal-1.0.0.tgz#63e7162a68efbeb9e213588d58e989d1e5c4530b"
integrity sha512-nnda7W8d+A3vEIY+UrDQzzboPf1vhs4JYVhff5CDkq9QNoZY7Xrxeo/htox37j9dZf7yNHevZzqtejWgy1vCqQ==
+on-exit-leak-free@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz#b39c9e3bf7690d890f4861558b0d7b90a442d209"
+ integrity sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==
+
on-finished@2.4.1:
version "2.4.1"
resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f"
@@ -10145,6 +10340,36 @@ pify@^4.0.1:
resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
+pino-abstract-transport@v0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz#4b54348d8f73713bfd14e3dc44228739aa13d9c0"
+ integrity sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==
+ dependencies:
+ duplexify "^4.1.2"
+ split2 "^4.0.0"
+
+pino-std-serializers@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz#1791ccd2539c091ae49ce9993205e2cd5dbba1e2"
+ integrity sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==
+
+pino@7.11.0:
+ version "7.11.0"
+ resolved "https://registry.yarnpkg.com/pino/-/pino-7.11.0.tgz#0f0ea5c4683dc91388081d44bff10c83125066f6"
+ integrity sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg==
+ dependencies:
+ atomic-sleep "^1.0.0"
+ fast-redact "^3.0.0"
+ on-exit-leak-free "^0.2.0"
+ pino-abstract-transport v0.5.0
+ pino-std-serializers "^4.0.0"
+ process-warning "^1.0.0"
+ quick-format-unescaped "^4.0.3"
+ real-require "^0.1.0"
+ safe-stable-stringify "^2.1.0"
+ sonic-boom "^2.2.1"
+ thread-stream "^0.15.1"
+
pirates@^4.0.1, pirates@^4.0.5:
version "4.0.5"
resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b"
@@ -10250,6 +10475,11 @@ process-nextick-args@~2.0.0:
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+process-warning@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-1.0.0.tgz#980a0b25dc38cd6034181be4b7726d89066b4616"
+ integrity sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==
+
process@^0.11.10, process@^0.11.9, process@~0.11.0:
version "0.11.10"
resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
@@ -10441,12 +10671,13 @@ qs@~6.5.2:
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad"
integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==
-query-string@6.13.5:
- version "6.13.5"
- resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.13.5.tgz#99e95e2fb7021db90a6f373f990c0c814b3812d8"
- integrity sha512-svk3xg9qHR39P3JlHuD7g3nRnyay5mHbrPctEBDUxUkHRifPHXJDhBUycdCC0NBjXoDf44Gb+IsOZL1Uwn8M/Q==
+query-string@7.1.3:
+ version "7.1.3"
+ resolved "https://registry.yarnpkg.com/query-string/-/query-string-7.1.3.tgz#a1cf90e994abb113a325804a972d98276fe02328"
+ integrity sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==
dependencies:
- decode-uri-component "^0.2.0"
+ decode-uri-component "^0.2.2"
+ filter-obj "^1.1.0"
split-on-first "^1.0.0"
strict-uri-encode "^2.0.0"
@@ -10489,6 +10720,11 @@ queue-microtask@^1.2.2:
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+quick-format-unescaped@^4.0.3:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz#93ef6dd8d3453cbc7970dd614fad4c5954d6b5a7"
+ integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==
+
randombytes@2.1.0, randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
@@ -11315,6 +11551,15 @@ readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.2.2, readable
string_decoder "~1.1.1"
util-deprecate "~1.0.1"
+readable-stream@^3.1.1:
+ version "3.6.2"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
+ integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
+ dependencies:
+ inherits "^2.0.3"
+ string_decoder "^1.1.1"
+ util-deprecate "^1.0.1"
+
readable-stream@^3.6.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
@@ -11334,6 +11579,11 @@ readable-stream@~1.0.26, readable-stream@~1.0.26-4:
isarray "0.0.1"
string_decoder "~0.10.x"
+real-require@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.1.0.tgz#736ac214caa20632847b7ca8c1056a0767df9381"
+ integrity sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==
+
realpath-native@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c"
@@ -11792,10 +12042,10 @@ safe-event-emitter@^1.0.1:
dependencies:
events "^3.0.0"
-safe-json-utils@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/safe-json-utils/-/safe-json-utils-1.0.0.tgz#8b1d68b13cff2ac6a5b68e6c9651cf7f8bb56d9b"
- integrity sha512-n0hJm6BgX8wk3G+AS8MOQnfcA8dfE6ZMUfwkHUNx69YxPlU3HDaZTHXWto35Z+C4mOjK1odlT95WutkGC+0Idw==
+safe-json-utils@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/safe-json-utils/-/safe-json-utils-1.1.1.tgz#0e883874467d95ab914c3f511096b89bfb3e63b1"
+ integrity sha512-SAJWGKDs50tAbiDXLf89PDwt9XYkWyANFWVzn4dTXl5QyI8t2o/bW5/OJl3lvc2WVU4MEpTo9Yz5NVFNsp+OJQ==
safe-regex@^1.1.0:
version "1.1.0"
@@ -11804,6 +12054,11 @@ safe-regex@^1.1.0:
dependencies:
ret "~0.1.10"
+safe-stable-stringify@^2.1.0:
+ version "2.4.3"
+ resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886"
+ integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==
+
"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
version "2.1.2"
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
@@ -12206,6 +12461,13 @@ sodium-native@^2.3.0:
nan "^2.14.0"
node-gyp-build "^4.1.0"
+sonic-boom@^2.2.1:
+ version "2.8.0"
+ resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-2.8.0.tgz#c1def62a77425090e6ad7516aad8eb402e047611"
+ integrity sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==
+ dependencies:
+ atomic-sleep "^1.0.0"
+
source-map-resolve@^0.5.0:
version "0.5.3"
resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
@@ -12288,6 +12550,11 @@ split-string@^3.0.1, split-string@^3.0.2:
dependencies:
extend-shallow "^3.0.0"
+split2@^4.0.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4"
+ integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==
+
sprintf-js@~1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
@@ -12453,6 +12720,11 @@ stream-http@^2.7.2:
to-arraybuffer "^1.0.0"
xtend "^4.0.0"
+stream-shift@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d"
+ integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==
+
strict-uri-encode@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
@@ -12789,6 +13061,13 @@ thor-devkit@^1.3.1:
ws "^6.0.0"
xhr2 "0.1.4"
+thread-stream@^0.15.1:
+ version "0.15.2"
+ resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-0.15.2.tgz#fb95ad87d2f1e28f07116eb23d85aba3bc0425f4"
+ integrity sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==
+ dependencies:
+ real-require "^0.1.0"
+
throat@^4.0.0, throat@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a"
@@ -12956,7 +13235,7 @@ tsconfig-paths@^3.14.1:
minimist "^1.2.6"
strip-bom "^3.0.0"
-tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0:
+tslib@1.14.1, tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0:
version "1.14.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
@@ -13080,6 +13359,13 @@ uglify-es@^3.1.9:
commander "~2.13.0"
source-map "~0.6.1"
+uint8arrays@^3.0.0, uint8arrays@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-3.1.1.tgz#2d8762acce159ccd9936057572dade9459f65ae0"
+ integrity sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==
+ dependencies:
+ multiformats "^9.4.2"
+
ultron@1.0.x:
version "1.0.2"
resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa"
@@ -13105,6 +13391,11 @@ underscore@1.9.1:
resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961"
integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==
+unfetch@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be"
+ integrity sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==
+
unicode-canonical-property-names-ecmascript@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc"
@@ -13829,23 +14120,6 @@ wif@^2.0.1, wif@^2.0.6:
dependencies:
bs58check "<3.0.0"
-window-getters@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/window-getters/-/window-getters-1.0.0.tgz#b5b264538c4c79cead027f9997850222bf6d0852"
- integrity sha512-xyvEFq3x+7dCA7NFhqOmTMk0fPmmAzCUYL2svkw2LGBaXXQLRP0lFnfXHzysri9WZNMkzp/FD1u0w2Qc7Co+JA==
-
-window-getters@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/window-getters/-/window-getters-1.0.1.tgz#a564c258413b4808789633d8bfb7ed741d798aa0"
- integrity sha512-cojBfDeV58XEurDgj+rre15c7dvu27bWCPlOIpwQgreOsw6qQk0UGDR1hi7ZHKw5+L0AENUNNWGG2h4yr2Y3hQ==
-
-window-metadata@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/window-metadata/-/window-metadata-1.0.0.tgz#fece0446db2f50be0612a211f25fc693917e823b"
- integrity sha512-eYoXsZ9X4J+6xZgbHhNAatSR5bCtT409q8B+2Ol9ySx7qsdtgVZcNfox4qszFmKlGsFtT2b1Tcmcy69bRMObcg==
- dependencies:
- window-getters "^1.0.0"
-
word-wrap@~1.2.3:
version "1.2.3"
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
@@ -13921,11 +14195,6 @@ write@1.0.3:
dependencies:
mkdirp "^0.5.1"
-ws@7.5.3:
- version "7.5.3"
- resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74"
- integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==
-
ws@^1.1.0, ws@^1.1.5:
version "1.1.5"
resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51"
@@ -13957,7 +14226,7 @@ ws@^6.0.0:
dependencies:
async-limiter "~1.0.0"
-ws@^7.2.0, ws@^7.4.5:
+ws@^7.2.0, ws@^7.4.5, ws@^7.5.1:
version "7.5.9"
resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591"
integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==
@@ -14274,4 +14543,4 @@ yauzl@^2.10.0:
integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==
dependencies:
buffer-crc32 "~0.2.3"
- fd-slicer "~1.1.0"
\ No newline at end of file
+ fd-slicer "~1.1.0"