diff --git a/electron/main.js b/electron/main.js index 77baa37c..62b0b284 100644 --- a/electron/main.js +++ b/electron/main.js @@ -67,7 +67,7 @@ function setCspHeader() { ...details.responseHeaders, // Should match header in /netlify/_headers and build.sh 'Content-Security-Policy': [ - "default-src 'self'; script-src 'self' 'sha256-a0xx6QQjQFEl3BVHxY4soTXMFurPf9rWKnRLQLOkzg4='; connect-src 'self' https://*.celowallet.app https://*.celo.org wss://walletconnect.celo.org https://api.github.com; img-src 'self' data:; style-src 'self' 'unsafe-inline'; font-src 'self' data:; base-uri 'self'; form-action 'self'", + "default-src 'self'; script-src 'self' 'sha256-a0xx6QQjQFEl3BVHxY4soTXMFurPf9rWKnRLQLOkzg4='; connect-src 'self' https://*.celowallet.app https://*.celo.org wss://walletconnect.celo.org wss://relay.walletconnect.org https://api.github.com; img-src 'self' data:; style-src 'self' 'unsafe-inline'; font-src 'self' data:; base-uri 'self'; form-action 'self'", ], }, }) diff --git a/netlify/_headers b/netlify/_headers index 2932d660..f5930766 100644 --- a/netlify/_headers +++ b/netlify/_headers @@ -1,5 +1,6 @@ # Configure Netlify custom headers # CSP header should match electron copy in /electron/main.js /* - Content-Security-Policy: default-src 'self'; script-src 'self' 'sha256-a0xx6QQjQFEl3BVHxY4soTXMFurPf9rWKnRLQLOkzg4='; connect-src 'self' https://*.celowallet.app https://*.celo.org wss://walletconnect.celo.org; img-src 'self' data:; style-src 'self' 'unsafe-inline'; font-src 'self' data:; base-uri 'self'; form-action 'self' - X-Frame-Options: DENY \ No newline at end of file + Content-Security-Policy: default-src 'self'; script-src 'self' 'sha256-a0xx6QQjQFEl3BVHxY4soTXMFurPf9rWKnRLQLOkzg4='; connect-src 'self' https://*.celowallet.app https://*.celo.org wss://walletconnect.celo.org wss://relay.walletconnect.org; img-src 'self' data:; style-src 'self' 'unsafe-inline'; font-src 'self' data:; base-uri 'self'; form-action 'self' + X-Frame-Options: DENY + X-Content-Type-Options: nosniff \ No newline at end of file diff --git a/package-electron.json b/package-electron.json index 857f86f2..d5d1233b 100644 --- a/package-electron.json +++ b/package-electron.json @@ -1,6 +1,6 @@ { "name": "celo-web-wallet", - "version": "1.3.5", + "version": "1.3.6", "description": "A lightweight web and desktop wallet for the Celo network", "main": "main.js", "keywords": [ diff --git a/package.json b/package.json index 89f6ac08..2ab80155 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "celo-web-wallet", - "version": "1.3.5", + "version": "1.3.6", "description": "A lightweight web and desktop wallet for the Celo network", "keywords": [ "Celo", @@ -38,7 +38,7 @@ "@ledgerhq/hw-transport-webusb": "^5.51.1", "@metamask/jazzicon": "https://github.com/jmrossy/jazzicon#7a8df28", "@reduxjs/toolkit": "^1.6.1", - "@walletconnect/client": "2.0.0-beta.10", + "@walletconnect/client": "2.0.0-beta.17.3", "buffer": "^6.0.3", "electron-updater": "^4.3.9", "ethers": "^5.3.0", diff --git a/src/app/logout/useLogoutModal.ts b/src/app/logout/useLogoutModal.ts index 2c5476dc..12899de1 100644 --- a/src/app/logout/useLogoutModal.ts +++ b/src/app/logout/useLogoutModal.ts @@ -17,7 +17,7 @@ export async function showLogoutModal( const answer = await showModalAsync({ head: 'WALLET RESET WARNING', subHead: 'Are you sure you want to logout?', - body: 'All keys and information for ALL OF YOUR ACCOUNTS will be completely removed from this device. If you have local accounts, back up their Account Keys first.', + body: 'All keys and information for ALL OF YOUR ACCOUNTS will be completely removed from this device. If you have local accounts, back up their recovery (seed) phrase first.', actions: [ { key: 'cancel', label: 'Cancel', color: Color.primaryWhite }, { key: 'logout', label: 'Log me out', color: Color.primaryRed }, diff --git a/src/components/FundWalletModal.tsx b/src/components/FundWalletModal.tsx index 48495d94..f41dc4c7 100644 --- a/src/components/FundWalletModal.tsx +++ b/src/components/FundWalletModal.tsx @@ -3,9 +3,13 @@ import Bittrex from 'src/components/icons/logos/bittrex.svg' import Coinbase from 'src/components/icons/logos/coinbase.svg' import Coinlist from 'src/components/icons/logos/coinlist.svg' import Okcoin from 'src/components/icons/logos/okcoin.svg' +import Okex from 'src/components/icons/logos/okex.svg' +import Ramp from 'src/components/icons/logos/ramp.svg' import Simplex from 'src/components/icons/logos/simplex.svg' -import { ModalLinkGrid } from 'src/components/modal/ModalLinkGrid' +import { Box } from 'src/components/layout/Box' +import { ModalLinkGrid, SmallGridLink } from 'src/components/modal/ModalLinkGrid' import { useModal } from 'src/components/modal/useModal' +import { RAMP_PROJECT_ID } from 'src/consts' export function useFundWalletModal() { const { showModalWithContent } = useModal() @@ -19,12 +23,25 @@ export function useFundWalletModal() { } export function FundWalletModal({ address }: { address: string }) { - const links = [ + const bigLinks = [ + { + url: `https://buy.ramp.network/?hostAppName=CeloWallet&hostLogoUrl=https%3A%2F%2Fcelowallet.app%2Fstatic%2Ficon.png&defaultAsset=CELO&userAddress=${address}&hostApiKey=${RAMP_PROJECT_ID}`, + imgSrc: Ramp, + text: 'Ramp', + subText: 'No Fees!', + }, { url: 'https://www.coinbase.com/earn/celo', imgSrc: Coinbase, text: 'Coinbase', }, + { + url: `https://valoraapp.com/simplex?address=${address}`, + imgSrc: Simplex, + text: 'Simplex', + }, + ] + const smallLinks = [ { url: 'https://global.bittrex.com/Market/Index?MarketName=USD-CELO', imgSrc: Bittrex, @@ -41,9 +58,9 @@ export function FundWalletModal({ address }: { address: string }) { text: 'Binance', }, { - url: `https://valoraapp.com/simplex?address=${address}`, - imgSrc: Simplex, - text: 'Simplex', + url: 'https://www.okex.com/markets/spot-info/celo-usdt', + imgSrc: Okex, + text: 'Okex', }, { url: 'https://coinlist.co/asset/celo', @@ -51,5 +68,14 @@ export function FundWalletModal({ address }: { address: string }) { text: 'Coinlist', }, ] - return + return ( +
+ + + {smallLinks.map((link, index) => ( + + ))} + +
+ ) } diff --git a/src/components/icons/logos/okex.svg b/src/components/icons/logos/okex.svg new file mode 100644 index 00000000..c1a52fff --- /dev/null +++ b/src/components/icons/logos/okex.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/icons/logos/ramp.svg b/src/components/icons/logos/ramp.svg new file mode 100644 index 00000000..426abd7b --- /dev/null +++ b/src/components/icons/logos/ramp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/modal/ModalLinkGrid.tsx b/src/components/modal/ModalLinkGrid.tsx index 89918b39..4a3acbd2 100644 --- a/src/components/modal/ModalLinkGrid.tsx +++ b/src/components/modal/ModalLinkGrid.tsx @@ -3,8 +3,16 @@ import { Color } from 'src/styles/Color' import { mq } from 'src/styles/mediaQueries' import { Stylesheet } from 'src/styles/types' +interface GridLink { + url: string + imgSrc: string + text: string + subText?: string + altText?: string +} + interface ModalLinkGridProps { - links: Array<{ url: string; imgSrc: string; text: string; altText?: string }> + links: Array } export function ModalLinkGrid({ links }: ModalLinkGridProps) { @@ -18,19 +26,38 @@ export function ModalLinkGrid({ links }: ModalLinkGridProps) { wrap > {links.map((link, index) => ( - - - - {link.altText -
{link.text}
-
-
-
+ ))} ) } +function BigGridLink({ link }: { link: GridLink }) { + return ( + + + + {link.altText +
{link.text}
+ {link.subText &&
{link.subText}
} +
+
+
+ ) +} + +export function SmallGridLink({ link }: { link: GridLink }) { + return ( + + + + {link.altText + + + + ) +} + const style: Stylesheet = { container: { maxWidth: '30em', @@ -68,4 +95,34 @@ const style: Stylesheet = { width: '3em', }, }, + subText: { + fontSize: '0.8em', + color: Color.primaryGreen, + marginTop: '0.3em', + }, +} + +const styleSm: Stylesheet = { + linkContent: { + ...style.linkContent, + width: '2.8em', + height: '2.8em', + margin: '0 0.4em', + [mq[480]]: { + width: '2.9em', + height: '2.9em', + margin: '0 0.5em', + }, + [mq[768]]: { + width: '3em', + height: '3em', + margin: '0 0.7em', + }, + }, + icon: { + width: '1.8em', + [mq[768]]: { + width: '2em', + }, + }, } diff --git a/src/consts.ts b/src/consts.ts index d936769c..72bb6713 100644 --- a/src/consts.ts +++ b/src/consts.ts @@ -57,3 +57,5 @@ export const DONATION_ADDRESS = '0xE3791A4a231D026c9567BEDbAb977617f2900383' // export const GOVERNANCE_GITHUB_BASEURL = 'https://api.github.com/repos/celo-org/governance/contents/CGPs/' + +export const RAMP_PROJECT_ID = 'jg2gy6y7o35np2w7npw9jnszaz962z3dxhpso4hq' diff --git a/src/features/governance/fetchDescription.test.ts b/src/features/governance/fetchDescription.test.ts index 6889b6aa..b87f0855 100644 --- a/src/features/governance/fetchDescription.test.ts +++ b/src/features/governance/fetchDescription.test.ts @@ -1,17 +1,45 @@ import { fetchProposalDescription } from 'src/features/governance/fetchDescription' +import { Proposal, ProposalStage, VoteValue } from 'src/features/governance/types' // TODO these are causing flaky 403s when running in CI. Skipping for now xdescribe('fetchProposals', () => { - it('Fetches and processes as expected', async () => { - const prop1Desc = await fetchProposalDescription( - 'https://github.com/celo-org/governance/blob/main/CGPs/cgp-0001.md' - ) + const proposal: Proposal = { + id: '21', + timestamp: 123, + description: 'Test prop', + url: '', + stage: ProposalStage.Referendum, + votes: { + [VoteValue.Yes]: '1', + [VoteValue.No]: '0', + [VoteValue.Abstain]: '0', + }, + } + + it('Fetches and processes as expected for old format', async () => { + const prop1Desc = await fetchProposalDescription({ + ...proposal, + id: '1', + url: 'https://github.com/celo-org/governance/blob/main/CGPs/cgp-0001.md', + }) expect(prop1Desc).toBe('Enable validator elections, epoch rewards and carbon offsetting') - const prop21Desc = await fetchProposalDescription( - 'https://github.com/celo-org/governance/blob/main/CGPs/cgp-0021.md' - ) + + const prop21Desc = await fetchProposalDescription({ + ...proposal, + id: '21', + url: 'https://github.com/celo-org/governance/blob/main/CGPs/cgp-0021.md', + }) expect(prop21Desc).toBe( 'Update randomnessBlockRetentionWindow to Extend Attestation Expiration Duration' ) }) + + it('Fetches and processes as expected for new format', async () => { + const prop35Desc = await fetchProposalDescription({ + ...proposal, + id: '35', + url: 'https://github.com/celo-org/governance/blob/main/CGPs/cgp-0035.md', + }) + expect(prop35Desc).toBe('Reduce the Epoch Rewards Community Fund share from 25% to 5%') + }) }) diff --git a/src/features/governance/fetchDescription.ts b/src/features/governance/fetchDescription.ts index a8ec5f8c..957afc86 100644 --- a/src/features/governance/fetchDescription.ts +++ b/src/features/governance/fetchDescription.ts @@ -1,21 +1,24 @@ import { GOVERNANCE_GITHUB_BASEURL } from 'src/consts' +import { Proposal } from 'src/features/governance/types' import { logger } from 'src/utils/logger' // Putting these in a seperate file to faciliate testing for now -export async function fetchProposalDescription(url: string) { +export async function fetchProposalDescription(proposal: Proposal) { try { - if (!url) throw new Error('No url provided') - const parsed = new URL(url) + if (!proposal || !proposal.url) throw new Error('No url provided') + const parsed = new URL(proposal.url) if (parsed.protocol !== 'https:') throw new Error('Invalid url protocol') if (parsed.hostname === 'github.com') { - return fetchProposalDescriptionFromGithub(parsed) + const description = await fetchProposalDescriptionFromGithub(parsed) + if (!description) throw new Error('No description found') + return description } else { throw new Error('Only github based urls currently supported') } } catch (error) { logger.error('Failed to retrieve proposal description', error) - return null + return `Proposal #${proposal.id}` } } @@ -38,8 +41,28 @@ async function fetchProposalDescriptionFromGithub(url: URL) { // TODO find a way to read just the first line if possible, don't actually need the whole file const text = await response.text() + const lines = text.split(/\r?\n/) + if (lines[0] === '---') { + return parseNewProposalFormat(lines) + } else { + return parseOldProposalFormat(lines[0]) + } +} + +function parseOldProposalFormat(line: string) { const descriptionRegex = /(.*): (.*)/ - const desciptionMatches = text.match(descriptionRegex) + const desciptionMatches = line.match(descriptionRegex) if (desciptionMatches?.length !== 3) throw new Error('Unable to extract proposal description') return desciptionMatches[2].trim().replace(/(`|#)/gi, '') } + +function parseNewProposalFormat(lines: string[]) { + for (let i = 0; i < 15; i++) { + const line = lines[i] + const descriptionRegex = /title: (.*)/ + const desciptionMatches = line.match(descriptionRegex) + if (desciptionMatches?.length !== 2) continue + return desciptionMatches[1].trim().replace(/(`|#)/gi, '') + } + throw new Error('Unable to extract proposal description') +} diff --git a/src/features/governance/fetchProposals.ts b/src/features/governance/fetchProposals.ts index 7485e97f..77c6e23d 100644 --- a/src/features/governance/fetchProposals.ts +++ b/src/features/governance/fetchProposals.ts @@ -95,7 +95,7 @@ export async function fetchCurrentProposals(): Promise { }) } - const descriptionsP = proposals.map((p) => fetchProposalDescription(p.url)) + const descriptionsP = proposals.map((p) => fetchProposalDescription(p)) const descriptions = await Promise.all(descriptionsP) for (let i = 0; i < numProps; i++) { proposals[i].description = descriptions[i] diff --git a/src/features/home/HomeScreenWarnings.tsx b/src/features/home/HomeScreenWarnings.tsx index db20c559..5fff0ef5 100644 --- a/src/features/home/HomeScreenWarnings.tsx +++ b/src/features/home/HomeScreenWarnings.tsx @@ -71,8 +71,9 @@ function AccountKeyReminder() { const navigate = useNavigate() return (
- Reminder: Copy your navigate('/wallet')}>Account Key{' '} - (seed phrase) to a safe place. Your key is the only way to recover your account. + Reminder: Copy your{' '} + navigate('/wallet')}>Recovery Phrase (seed phrase) to + a safe place. Your key is the only way to recover your account.
) } diff --git a/src/features/home/Tips.ts b/src/features/home/Tips.ts index 56aaea31..d953c86f 100644 --- a/src/features/home/Tips.ts +++ b/src/features/home/Tips.ts @@ -10,16 +10,16 @@ const Tips = [ 'The CELO currency is unstable and limited, like Bitcoin; its value will change over time.', ], [ - 'To keep your account safe, keep a copy of your Account Key in a private place.', + 'To keep your account safe, keep a copy of your recovery (seed) phrase in a private place.', 'For even better security, consider using a Ledger hardware wallet.', ], [ - "Your Account Address is public; it's like your username on the Celo network. Share it with your friends!", - 'Your Account Key is a secret; always keep it private.', + "Your account address is public; it's like your username on the Celo network. Share it with your friends!", + 'Your recovery (seed) phrase is a secret; always keep it private.', ], [ 'Your accounts can be imported in many places at once.', - 'For example, you can import your Account Key into the Valora mobile app.', + 'For example, you can import your recovery (seed) phrase into the Valora mobile app.', ], [ 'You can lock CELO to participate in Celo network elections and governance.', diff --git a/src/features/onboarding/import/ImportAccountForm.tsx b/src/features/onboarding/import/ImportAccountForm.tsx index 7ad4b59a..c4b7b2e4 100644 --- a/src/features/onboarding/import/ImportAccountForm.tsx +++ b/src/features/onboarding/import/ImportAccountForm.tsx @@ -111,7 +111,7 @@ export function ImportAccountForm(props: Props) { {!props.hideDescription && ( <>

- Enter your account key (seed phrase). + Enter your recovery (seed) phrase.

Only import on devices you trust.

@@ -154,7 +154,7 @@ export function ImportAccountForm(props: Props) { function validateForm(values: ImportFormValues): ErrorState { if (!isValidMnemonic(values.mnemonic)) { - return invalidInput('mnemonic', 'Invalid account key') + return invalidInput('mnemonic', 'Invalid recovery phrase') } const derivationPath = toDerivationPath(values) diff --git a/src/features/onboarding/import/ImportAccountScreen.tsx b/src/features/onboarding/import/ImportAccountScreen.tsx index c05a9d12..31daccd0 100644 --- a/src/features/onboarding/import/ImportAccountScreen.tsx +++ b/src/features/onboarding/import/ImportAccountScreen.tsx @@ -16,7 +16,7 @@ export function ImportAccountScreen() { return ( -

Import Your Account Key

+

Import Your Recovery Phrase

{!hasShownWarning ? ( setHasShownWarning(true)} /> ) : ( diff --git a/src/features/onboarding/import/ImportChoiceScreen.tsx b/src/features/onboarding/import/ImportChoiceScreen.tsx index e4bdd957..febf2903 100644 --- a/src/features/onboarding/import/ImportChoiceScreen.tsx +++ b/src/features/onboarding/import/ImportChoiceScreen.tsx @@ -27,7 +27,7 @@ export function ImportChoiceScreen() {

Import Your Celo Account

- To import your account, use your Account Key (seed phrase) or a Ledger hardware wallet.{' '} + To import your account, use your recovery (seed) phrase or a Ledger hardware wallet.{' '}

-

Account Key

+

Recovery Phrase

Keep this phrase secret and safe.
diff --git a/src/features/wallet/accounts/AddAccountScreen.tsx b/src/features/wallet/accounts/AddAccountScreen.tsx index 8b0d0220..8516ffbf 100644 --- a/src/features/wallet/accounts/AddAccountScreen.tsx +++ b/src/features/wallet/accounts/AddAccountScreen.tsx @@ -60,7 +60,7 @@ export function AddAccountScreen() { value: NewAccountAction.Create, label: ( } /> @@ -80,7 +80,7 @@ export function AddAccountScreen() { value: NewAccountAction.Import, label: ( } /> diff --git a/src/features/wallet/accounts/AddDeriveScreen.tsx b/src/features/wallet/accounts/AddDeriveScreen.tsx index 4646d3fc..a0fe7563 100644 --- a/src/features/wallet/accounts/AddDeriveScreen.tsx +++ b/src/features/wallet/accounts/AddDeriveScreen.tsx @@ -91,7 +91,7 @@ export function AddDeriveScreen() { <>

Derive Another Account

Set a derivation path to import another account.

-

This will use your existing account key.

+

This will use your existing recovery phrase.

diff --git a/src/features/wallet/accounts/AddImportScreen.tsx b/src/features/wallet/accounts/AddImportScreen.tsx index 3a99d0c8..e2eca278 100644 --- a/src/features/wallet/accounts/AddImportScreen.tsx +++ b/src/features/wallet/accounts/AddImportScreen.tsx @@ -15,7 +15,7 @@ export function AddImportScreen() { return ( <>

Import Another Account

-

Use an account key (seed phrase) to import another account.

+

Use an recovery (seed) phrase to import another account.

Only import on devices you trust.

- + Celo Wallet | Use Celo on the web or on your desktop diff --git a/src/utils/saga.ts b/src/utils/saga.ts index e5a526e1..058597eb 100644 --- a/src/utils/saga.ts +++ b/src/utils/saga.ts @@ -1,9 +1,10 @@ import { createAction, createReducer, PayloadActionCreator } from '@reduxjs/toolkit' import { call, delay, Effect, put, race, take } from 'redux-saga/effects' +import { errorToString } from 'src/utils/validation' import { logger } from './logger' /** - * A convinence utility to create a saga and trigger action + * A convenience utility to create a saga and trigger action * Use to create simple sagas, for more complex ones use createMonitoredSaga. * Note: the wrapped saga this returns must be added to rootSaga.ts */ @@ -57,8 +58,8 @@ interface MonitoredSagaOptions { } /** - * A convinence utility to create a wrapped saga that handles common concerns like - * triger watching, cancel watching, timeout, progress updates, and success/fail updates. + * A convenience utility to create a wrapped saga that handles common concerns like + * trigger watching, cancel watching, timeout, progress updates, and success/fail updates. * Use to create complex sagas that need more coordination with the UI. * Note: the wrapped saga and reducer this returns must be added to rootSaga.ts */ @@ -124,7 +125,7 @@ export function createMonitoredSaga( logger.debug(`${name} finished`) } catch (error: any) { logger.error(`${name} error`, error) - yield put(errorAction(error.toString())) + yield put(errorAction(errorToString(error))) } } } diff --git a/webpack.config.js b/webpack.config.js index 967b789a..c7581eaf 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -26,6 +26,7 @@ const config = { }, externals: { 'node-hid': 'commonjs node-hid', + ws: 'ws', // Exclude WS to work around walletconnect client bundling issue }, // https://github.com/webpack/webpack-dev-server/issues/2758 // TODO remove when fixed, should be in v4 upgrade diff --git a/yarn.lock b/yarn.lock index 29544b1b..11c77a58 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1878,45 +1878,6 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" -"@json-rpc-tools/provider@^2.0.0-beta.9": - version "2.0.0-beta.10" - resolved "https://registry.yarnpkg.com/@json-rpc-tools/provider/-/provider-2.0.0-beta.10.tgz#42dc00ca7dd3b6cb10294c717a1c88b83ab66632" - integrity sha512-XCzdeCGOu9WqKZ2VcGgRQ7XpPq2KDxQGwzthvRKtlqYAiYfbx0RPRjl3IFjv6OABo3lHMlpOJuLXLWOKln087Q== - dependencies: - "@json-rpc-tools/utils" "^2.0.0-beta.10" - safe-json-utils "^1.1.1" - -"@json-rpc-tools/types@^2.0.0-beta.1": - version "2.0.0-beta.1" - resolved "https://registry.yarnpkg.com/@json-rpc-tools/types/-/types-2.0.0-beta.1.tgz#be2af362815b71d9e9118985a61cd12a25c78e41" - integrity sha512-harWzyd0UcIgZNhUVSlmQN6e8opHUGMeQgRwWf+tl72LDVOiAe1njXnepdoHtoGMTKRWXMh19YOIOGZaWly6wA== - dependencies: - keyvaluestorage-interface "^1.0.0" - -"@json-rpc-tools/types@^2.0.0-beta.10", "@json-rpc-tools/types@^2.0.0-beta.9": - version "2.0.0-beta.10" - resolved "https://registry.yarnpkg.com/@json-rpc-tools/types/-/types-2.0.0-beta.10.tgz#4890d3a881d8200bb1adcc3b102892edda6adf88" - integrity sha512-kySvzJTKTxBMD2B81hFrDXWONrLf97mNqBp7G0fyJfEZFjzFEniDc2nYewMTrvQJ5c1gdaFVqPxx27/4JU2kFA== - dependencies: - keyvaluestorage-interface "^1.0.0" - -"@json-rpc-tools/utils@^2.0.0-beta.10", "@json-rpc-tools/utils@^2.0.0-beta.9": - version "2.0.0-beta.10" - resolved "https://registry.yarnpkg.com/@json-rpc-tools/utils/-/utils-2.0.0-beta.10.tgz#f291ae94be119b63d11c9fc53ae803514b857f23" - integrity sha512-vv0a7B4wwQSAj6cCRH9QS6bcIVbFJs1e/82wXbLYzP9adEnX3nHQPGJrfq/wkE1xk5vKsIC+P8SHYIgzAgMrAw== - dependencies: - "@json-rpc-tools/types" "^2.0.0-beta.10" - "@pedrouid/environment" "^1.0.1" - -"@json-rpc-tools/ws-connection@^2.0.0-beta.9": - version "2.0.0-beta.10" - resolved "https://registry.yarnpkg.com/@json-rpc-tools/ws-connection/-/ws-connection-2.0.0-beta.10.tgz#e8fa53feb5dc27cc9b2a5f96d16e75ed40c96a02" - integrity sha512-GSkQqwuzZvqyqV4b8Un/sQViICWFxL5mf5R8OGqz10qFr5sPYKe8V5AQqg9g9cAf/XMPLJ2xhV+2X6mwA65gvA== - dependencies: - "@json-rpc-tools/utils" "^2.0.0-beta.10" - safe-json-utils "^1.1.1" - ws "^7.4.0" - "@ledgerhq/cryptoassets@^5.51.0": version "5.51.0" resolved "https://registry.yarnpkg.com/@ledgerhq/cryptoassets/-/cryptoassets-5.51.0.tgz#3781914720ac3a8311ac492fa036806d36337abb" @@ -2078,38 +2039,6 @@ "@nodelib/fs.scandir" "2.1.4" fastq "^1.6.0" -"@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@^2.0.0-beta.5": - version "2.0.0-beta.5" - resolved "https://registry.yarnpkg.com/@pedrouid/iso-crypto/-/iso-crypto-2.0.0-beta.5.tgz#67dfa89b68456ff0a360ccb7a0b1f7613e3fafea" - integrity sha512-fAoQunzXXyI1zwSe1bpFdyLPizvn5jAGwzgdAnkM9QF6lCHHwczF72+jMb5NWHliPLgYXydRah46vcfI6VtQuw== - dependencies: - "@pedrouid/environment" "^1.0.1" - "@pedrouid/iso-random" "^2.0.0-beta.5" - aes-js "^3.1.2" - enc-utils "^3.0.0" - hash.js "^1.1.7" - -"@pedrouid/iso-random@^2.0.0-beta.5": - version "2.0.0-beta.5" - resolved "https://registry.yarnpkg.com/@pedrouid/iso-random/-/iso-random-2.0.0-beta.5.tgz#cb69853947cbfbb66c1942864ab57d0e3ada4959" - integrity sha512-QlFqP1QFJfzV/8MGzpRWsHdCj0EWZWvv9mRJe+saaE/rbhjKZYwhOL4j0HhmQPeml6e4Ez3p6WkyzhXPxdPuQw== - dependencies: - "@pedrouid/environment" "^1.0.1" - enc-utils "^3.0.0" - randombytes "^2.1.0" - -"@pedrouid/pino-utils@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@pedrouid/pino-utils/-/pino-utils-1.0.1.tgz#83ea202c7e67e4480bac2fa135a6bc0bcb782588" - integrity sha512-a20vNltMhvk/bvhgnpSvBLFqL9B4xXNCukDEo70lO1bCSwRy5Tmu6Gc/1DsuYY+oNgE6b424j5J+8/J1OJenCg== - dependencies: - pino "^6.7.0" - "@redux-saga/core@^1.1.3": version "1.1.3" resolved "https://registry.yarnpkg.com/@redux-saga/core/-/core-1.1.3.tgz#3085097b57a4ea8db5528d58673f20ce0950f6a4" @@ -2546,47 +2475,153 @@ "@typescript-eslint/types" "4.31.1" eslint-visitor-keys "^2.0.0" -"@walletconnect/client@2.0.0-beta.10": - version "2.0.0-beta.10" - resolved "https://registry.yarnpkg.com/@walletconnect/client/-/client-2.0.0-beta.10.tgz#e4c7540841be2ec7075783db3b46b2a88f19133d" - integrity sha512-H6wZ9LAc53Y7PfNtyq6cXlGBGTHC78/bbcqzPbW/433se1SGuZ+NQU/lod/Bf+GU2BxpfZfpPkxbRIb3B7NXCg== - dependencies: - "@json-rpc-tools/provider" "^2.0.0-beta.9" - "@json-rpc-tools/utils" "^2.0.0-beta.9" - "@json-rpc-tools/ws-connection" "^2.0.0-beta.9" - "@pedrouid/pino-utils" "^1.0.1" - "@walletconnect/types" "^2.0.0-beta.10" - "@walletconnect/utils" "^2.0.0-beta.10" - enc-utils "^3.0.0" +"@walletconnect/client@2.0.0-beta.17.3": + version "2.0.0-beta.17.3" + resolved "https://registry.yarnpkg.com/@walletconnect/client/-/client-2.0.0-beta.17.3.tgz#691561ad3d021fc668877603edab89a6e4b8127d" + integrity sha512-rLRqiqIV0817Zg2aHVoRR82oFgTmHMBTAASUR4XB87appe59YOFrvrUrg/TEmrj+MQCI3gsvDmRFG/fwimnXzQ== + dependencies: + "@walletconnect/encoding" "^1.0.0" + "@walletconnect/jsonrpc-provider" "^1.0.0" + "@walletconnect/jsonrpc-utils" "^1.0.0" + "@walletconnect/jsonrpc-ws-connection" "^1.0.0" + "@walletconnect/logger" "^1.0.0" + "@walletconnect/relay-api" "^1.0.0" + "@walletconnect/safe-json" "^1.0.0" + "@walletconnect/types" "^2.0.0-beta.17.3" + "@walletconnect/utils" "^2.0.0-beta.17.3" keyvaluestorage "^0.7.1" pino "^6.7.0" pino-pretty "^4.3.0" - relay-provider "^2.0.0-beta.0" - safe-json-utils "^1.1.1" -"@walletconnect/types@^2.0.0-beta.10": - version "2.0.0-beta.10" - resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-2.0.0-beta.10.tgz#bcd79a1aeb2c30f12049040e94767b4476d2af7b" - integrity sha512-rDS/utK2vcM34wOU90lPcuHkXTmOSU8bD5zZLSoT7GURheYFUca/eIlHQIhzEBENGkW5lcYLWkNhJavNgzrQgw== +"@walletconnect/crypto@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@walletconnect/crypto/-/crypto-1.0.1.tgz#d4c1b1cd5dd1be88fe9a82dfc54cadbbb3f9d325" + integrity sha512-IgUReNrycIFxkGgq8YT9HsosCkhutakWD9Q411PR0aJfxpEa/VKJeaLRtoz6DvJpztWStwhIHnAbBoOVR72a6g== + dependencies: + "@walletconnect/encoding" "^1.0.0" + "@walletconnect/environment" "^1.0.0" + "@walletconnect/randombytes" "^1.0.1" + aes-js "^3.1.2" + hash.js "^1.1.7" + +"@walletconnect/ecies-25519@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@walletconnect/ecies-25519/-/ecies-25519-1.0.1.tgz#33d548d259aa2cd60f251167eba239ee0c0658ea" + integrity sha512-IK3bYxmYbnFicO69qehPuacwfa3dU1Lw20YdvfLg3IH/WCCmo5EKZu5puaQCXep42uReYE4CQ5gcVSC4PCOLcw== dependencies: - "@json-rpc-tools/types" "^2.0.0-beta.9" + "@stablelib/x25519" "^1.0.1" + "@walletconnect/crypto" "^1.0.1" + "@walletconnect/encoding" "^1.0.0" + +"@walletconnect/encoding@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@walletconnect/encoding/-/encoding-1.0.0.tgz#e24190cb5e803526f9dfd7191fb0e4dc53c6d864" + integrity sha512-4nkJFnS0QF5JdieG/3VPD1/iEWkLSZ14EBInLZ00RWxmC6EMZrzAeHNAWIgm+xP3NK0lqz+7lEsmWGtcl5gYnQ== + 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== + +"@walletconnect/jsonrpc-provider@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-provider/-/jsonrpc-provider-1.0.0.tgz#066ee5a8a8554c55ea68f9ebf6fe8f96cdb66e7e" + integrity sha512-ZVe23tYT0LdykZ/denBdkKCjBC13fnpj8MiKFuvUl0idBv1PiYKYJR3LVJHy8+7zk0lBbDH3hBNrbMt/K4kjcw== + dependencies: + "@walletconnect/jsonrpc-utils" "^1.0.0" + "@walletconnect/safe-json" "^1.0.0" + +"@walletconnect/jsonrpc-types@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.0.tgz#fa75ad5e8f106a2e33287b1e6833e22ed0225055" + integrity sha512-11QXNq5H1PKZk7bP8SxgmCw3HRaDuPOVE+wObqEvmhc7OWYUZqfuaaMb+OXGRSOHL3sbC+XHfdeCxFTMXSFyng== + dependencies: + keyvaluestorage-interface "^1.0.0" + +"@walletconnect/jsonrpc-utils@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-utils/-/jsonrpc-utils-1.0.0.tgz#1a2f668d606e8f0b6e7d8fdebae86001bd037a3f" + integrity sha512-qUHbKUK6sHeHn67qtHZoLoYk5hS6x1arTPjKDRkY93/6Fx+ZmNIpdm1owX3l6aYueyegJ7mz43FpvYHUqJ8xcw== + dependencies: + "@walletconnect/environment" "^1.0.0" + "@walletconnect/jsonrpc-types" "^1.0.0" + +"@walletconnect/jsonrpc-ws-connection@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-ws-connection/-/jsonrpc-ws-connection-1.0.0.tgz#e0248542b30971338a84884ecea49ae9c0837f3e" + integrity sha512-ITeDZo08Jr2AdftksAJNSoB/IQdpmxwJBhHsa9z9rp95V6S88zSqc6EB+BSYMVJZPjLYW8Xi+gZD9YPwxMRY0w== + dependencies: + "@walletconnect/jsonrpc-utils" "^1.0.0" + "@walletconnect/safe-json" "^1.0.0" + ws "^7.5.1" + +"@walletconnect/logger@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@walletconnect/logger/-/logger-1.0.0.tgz#f00b7a49a9a72f0187696b4c382970272323d147" + integrity sha512-micLp42wwwDogbN+lKZjhk2t9oc7A6IvA2UR/3T+Xeh12eewZKfgrvZSu6CYijYLgiodjBxAwn0dC4a3ywXv/w== + dependencies: + pino "^6.7.0" + +"@walletconnect/randombytes@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@walletconnect/randombytes/-/randombytes-1.0.1.tgz#87f0f02d9206704ce1c9e23f07d3b28898c48385" + integrity sha512-YJTyq69i0PtxVg7osEpKfvjTaWuAsR49QEcqGKZRKVQWMbGXBZ65fovemK/SRgtiFRv0V8PwsrlKSheqzfPNcg== + dependencies: + "@walletconnect/encoding" "^1.0.0" + "@walletconnect/environment" "^1.0.0" + randombytes "^2.1.0" + +"@walletconnect/relay-api@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@walletconnect/relay-api/-/relay-api-1.0.0.tgz#3b9f5966a19a55bfb8c0ca770afadd05bae2116d" + integrity sha512-ri+hail+6rz9Fx4Hfqq/er0OfzMmKg2/thL5WemOM3JuR6zVqMUr0G5ExJ4OjCWjd/ndL4CZ0ldLINmeOZr2ag== + dependencies: + "@walletconnect/jsonrpc-types" "^1.0.0" + +"@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/types@^2.0.0-beta.17.3": + version "2.0.0-beta.17.3" + resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-2.0.0-beta.17.3.tgz#9696de8be60949ca48c93819503d4a73166300bd" + integrity sha512-Isk1VT2Q/l9yHaSlmtE5LuUS+D3T8LSStcMKDnfzXPhH8g4k5PtQk8sJql9GNq/4/oR/663Yp8bj4RYAskHfyA== + dependencies: + "@walletconnect/jsonrpc-types" "^1.0.0" keyvaluestorage "^0.7.1" pino "^6.7.0" pino-pretty "^4.3.0" -"@walletconnect/utils@^2.0.0-beta.10": - version "2.0.0-beta.10" - resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-2.0.0-beta.10.tgz#2be536a8d58116485d71aaf3e8ab72e6765d9992" - integrity sha512-ZwFpPr1bjalrFCAG3+dnmgKqhQPdTYT8c/cD5sygHCi1sVoE+IdObcRZqXWhHNEKkVq/e/7G8MDrGRNFFMUUeQ== - dependencies: - "@json-rpc-tools/utils" "^2.0.0-beta.9" - "@walletconnect/types" "^2.0.0-beta.10" - ecies-25519 "^2.0.0-beta.4" - enc-utils "^3.0.0" +"@walletconnect/utils@^2.0.0-beta.17.3": + version "2.0.0-beta.17.3" + resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-2.0.0-beta.17.3.tgz#fc7bb432d467d21fc96db3c664bcf7571e63b1f2" + integrity sha512-TOpQZnQeoxE4qi2hHgnZAZ4Ry5ZoNkvynJQEIWEhRFa4x9NYkkM/tER2eIaE3U8zWYlkRnkl2XkRYP2hE0E2EQ== + dependencies: + "@walletconnect/ecies-25519" "^1.0.1" + "@walletconnect/encoding" "^1.0.0" + "@walletconnect/jsonrpc-utils" "^1.0.0" + "@walletconnect/logger" "^1.0.0" + "@walletconnect/safe-json" "^1.0.0" + "@walletconnect/types" "^2.0.0-beta.17.3" + "@walletconnect/window-getters" "^1.0.0" + "@walletconnect/window-metadata" "^1.0.0" query-string "^6.13.5" - safe-json-utils "^1.1.1" - window-getters "^1.0.1" - window-metadata "^1.0.1" + +"@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/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== + dependencies: + "@walletconnect/window-getters" "^1.0.0" "@webassemblyjs/ast@1.11.1": version "1.11.1" @@ -4146,15 +4181,6 @@ duplexer3@^0.1.4: resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= -ecies-25519@^2.0.0-beta.4: - version "2.0.0-beta.4" - resolved "https://registry.yarnpkg.com/ecies-25519/-/ecies-25519-2.0.0-beta.4.tgz#e54988e425bf901bb0a716df910d12f378d5e6bd" - integrity sha512-bYNay+Iw2K3Svb2W0i09TJ7s2uFiFucj3EmAlF/VYCGRj+z7uhzqx0PaWPnkoHPUA++jT1nZmCk2VEB/x3g2UQ== - dependencies: - "@pedrouid/iso-crypto" "^2.0.0-beta.5" - "@stablelib/x25519" "^1.0.1" - enc-utils "^3.0.0" - ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -4267,14 +4293,6 @@ emojis-list@^3.0.0: resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== -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" - encodeurl@^1.0.2, encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -7473,13 +7491,6 @@ regjsparser@^0.6.4: dependencies: jsesc "~0.5.0" -relay-provider@^2.0.0-beta.0: - version "2.0.0-beta.0" - resolved "https://registry.yarnpkg.com/relay-provider/-/relay-provider-2.0.0-beta.0.tgz#59a6ca37e1c40246f71bd50639292e9bfd6ed798" - integrity sha512-ni4p+cqlH2U+SwBLjYk7uM9HWOfpR/PXPTh3M5AtzKxUJo5Y6d2u9qaKWfgdGGpQrtI5CIGeaHkzBpoBqXf4gA== - dependencies: - "@json-rpc-tools/types" "^2.0.0-beta.1" - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -8848,18 +8859,6 @@ wildcard@^2.0.0: resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== -window-getters@^1.0.0, window-getters@^1.0.1: - 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.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/window-metadata/-/window-metadata-1.0.1.tgz#b5874f5907fc9361f57de8415cc40e1dd0a937ca" - integrity sha512-jdU1zWsFMDTYRUtZx/4nh5dUJ9MJHfNVvrf0jaYVuC9SiNcSLiBd79H4XM2DhKmHmN8tlOCzovc5RCI4HbFObA== - dependencies: - window-getters "^1.0.0" - word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" @@ -8889,11 +8888,16 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -ws@7.4.6, ws@^7.4.0: +ws@7.4.6: version "7.4.6" resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== +ws@^7.5.1: + version "7.5.5" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.5.tgz#8b4bc4af518cfabd0473ae4f99144287b33eb881" + integrity sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w== + ws@^8.0.0, ws@^8.1.0: version "8.2.2" resolved "https://registry.yarnpkg.com/ws/-/ws-8.2.2.tgz#ca684330c6dd6076a737250ed81ac1606cb0a63e"