diff --git a/.circleci/config.yml b/.circleci/config.yml index b71ccb054..720824cc6 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -327,6 +327,12 @@ jobs: working_directory: ~/web3-onboard-monorepo/packages/uauth steps: - node-build-steps + build-transaction-preview: + docker: + - image: cimg/node:16.13.1 + working_directory: ~/web3-onboard-monorepo/packages/transaction-preview + steps: + - node-build-steps # Build staging/Alpha releases build-staging-core: @@ -491,6 +497,12 @@ jobs: working_directory: ~/web3-onboard-monorepo/packages/uauth steps: - node-staging-build-steps + build-staging-transaction-preview: + docker: + - image: cimg/node:16.13.1 + working_directory: ~/web3-onboard-monorepo/packages/transaction-preview + steps: + - node-staging-build-steps workflows: version: 2 @@ -657,3 +669,9 @@ workflows: <<: *deploy_production_filters - build-staging-uauth: <<: *deploy_staging_filters + transaction-preview: + jobs: + - build-transaction-preview: + <<: *deploy_production_filters + - build-staging-transaction-preview: + <<: *deploy_staging_filters diff --git a/package.json b/package.json index 972639a0b..d2c2d1095 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "web3-onboard-monorepo", - "version": "2.14.2", + "version": "2.15.0", "private": true, "workspaces": { "packages": [ diff --git a/packages/coinbase/package.json b/packages/coinbase/package.json index f1be439c9..63b2f7434 100644 --- a/packages/coinbase/package.json +++ b/packages/coinbase/package.json @@ -1,6 +1,6 @@ { "name": "@web3-onboard/coinbase", - "version": "2.1.3", + "version": "2.2.0", "description": "Coinbase SDK wallet module for connecting to Web3-Onboard. Web3-Onboard makes it simple to connect Ethereum hardware and software wallets to your dapp. Features standardised spec compliant web3 providers for all supported wallets, framework agnostic modern javascript UI with code splitting, CSS customization, multi-chain and multi-account support, reactive wallet state subscriptions and real-time transaction state change notifications.", "keywords": [ "Ethereum", @@ -58,7 +58,7 @@ "typescript": "^4.5.5" }, "dependencies": { - "@coinbase/wallet-sdk": "^3.0.5", + "@coinbase/wallet-sdk": "^3.6.0", "@web3-onboard/common": "^2.2.3" } } diff --git a/packages/coinbase/src/index.ts b/packages/coinbase/src/index.ts index 39b9b48ea..3d3063bdc 100644 --- a/packages/coinbase/src/index.ts +++ b/packages/coinbase/src/index.ts @@ -13,12 +13,22 @@ function coinbaseWallet({ const [chain] = chains const { name, icon } = appMetadata || {} - const { CoinbaseWalletSDK } = await import('@coinbase/wallet-sdk') + // according to https://github.com/wagmi-dev/wagmi/issues/383 + // @coinbase/wallet-sdk export double default fields + // so we need to detect it to get the real constructor + const { default: CoinbaseWalletSDK } = await import( + '@coinbase/wallet-sdk' + ) + const CoinbaseWalletSDKConstructor = ( + (CoinbaseWalletSDK as any).default + ? (CoinbaseWalletSDK as any).default + : CoinbaseWalletSDK + ) as typeof CoinbaseWalletSDK const base64 = window.btoa(icon || '') const appLogoUrl = `data:image/svg+xml;base64,${base64}` - const instance = new CoinbaseWalletSDK({ + const instance = new CoinbaseWalletSDKConstructor({ appName: name || '', appLogoUrl, darkMode diff --git a/packages/core/README.md b/packages/core/README.md index 20a367a8d..42e881087 100644 --- a/packages/core/README.md +++ b/packages/core/README.md @@ -33,6 +33,11 @@ type InitOptions { apiKey?: string notify?: Partial connect?: Partial + gas?: typeof gas + /** + * Object mapping for W3O components with the key being the component and the value the DOM element to mount the component to. This element must be available at time of package script execution. + */ + containerElements?: Partial } ``` @@ -78,13 +83,6 @@ type AppMetadata = { explore?: string // if your app only supports injected wallets and when no injected wallets detected, recommend the user to install some recommendedInjectedWallets?: RecommendedInjectedWallets[] - /** Gas module */ - gas?: typeof gas - /** - * Object mapping for W3O components with the key being the component and the value the DOM element to mount - * the component to. This element must be available at time of package script execution. - */ - containerElements?: Partial } type RecommendedInjectedWallets = { diff --git a/packages/core/package.json b/packages/core/package.json index a0569d54a..3287d7244 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@web3-onboard/core", - "version": "2.10.1", + "version": "2.11.0", "description": "Web3-Onboard makes it simple to connect Ethereum hardware and software wallets to your dapp. Features standardized spec compliant web3 providers for all supported wallets, framework agnostic modern javascript UI with code splitting, CSS customization, multi-chain and multi-account support, reactive wallet state subscriptions and real-time transaction state change notifications.", "keywords": [ "Ethereum", @@ -69,6 +69,7 @@ "@typescript-eslint/eslint-plugin": "^4.31.1", "@typescript-eslint/parser": "^4.31.1", "@web3-onboard/gas": "^2.0.0", + "@web3-onboard/transaction-preview": "^2.0.0", "eslint": "^7.32.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-svelte3": "^3.2.1", @@ -84,7 +85,7 @@ "dependencies": { "@web3-onboard/common": "^2.2.3", "bignumber.js": "^9.0.0", - "bnc-sdk": "^4.4.1", + "bnc-sdk": "^4.6.2", "bowser": "^2.11.0", "ethers": "5.5.3", "eventemitter3": "^4.0.7", diff --git a/packages/core/src/configuration.ts b/packages/core/src/configuration.ts index 68c9332f2..f19162c3e 100644 --- a/packages/core/src/configuration.ts +++ b/packages/core/src/configuration.ts @@ -8,7 +8,8 @@ export let configuration: Configuration = { device: getDevice(), initialWalletInit: [], gas: null, - containerElements: { accountCenter: null } + containerElements: { accountCenter: null }, + transactionPreview: null } export function updateConfiguration(update: Partial): void { diff --git a/packages/core/src/disconnect.ts b/packages/core/src/disconnect.ts index 0248f4e61..a63cda9bb 100644 --- a/packages/core/src/disconnect.ts +++ b/packages/core/src/disconnect.ts @@ -1,4 +1,4 @@ -import { getBlocknativeSdk } from './services.js' +import { getBNMulitChainSdk } from './services.js' import { state } from './store/index.js' import { removeWallet } from './store/actions.js' import { disconnectWallet$ } from './streams.js' @@ -15,7 +15,7 @@ async function disconnect(options: DisconnectOptions): Promise { if (state.get().notify.enabled) { // handle unwatching addresses - const sdk = await getBlocknativeSdk() + const sdk = await getBNMulitChainSdk() if (sdk) { const wallet = state.get().wallets.find(wallet => wallet.label === label) diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index e1be1e4be..1e4928036 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -3,7 +3,7 @@ import connectWallet from './connect.js' import disconnectWallet from './disconnect.js' import setChain from './chain.js' import { state } from './store/index.js' -import { reset$ } from './streams.js' +import { reset$, wallets$ } from './streams.js' import initI18N from './i18n/index.js' import App from './views/Index.svelte' import type { InitOptions, Notify } from './types.js' @@ -29,6 +29,8 @@ import { setWalletModules, updateConnectModal } from './store/actions.js' +import type { PatchedEIP1193Provider } from '@web3-onboard/transaction-preview' +import { getBlocknativeSdk } from './services' const API = { connectWallet, @@ -90,7 +92,8 @@ function init(options: InitOptions): OnboardAPI { notify, gas, connect, - containerElements + containerElements, + transactionPreview } = options updateConfiguration({ containerElements }) @@ -197,9 +200,26 @@ function init(options: InitOptions): OnboardAPI { svelteInstance: app, apiKey, initialWalletInit: wallets, - gas + gas, + transactionPreview }) + if (transactionPreview) { + const getBnSDK = async () => { + transactionPreview.init({ + containerElement: '#transaction-preview-container', + sdk: await getBlocknativeSdk(), + apiKey + }) + wallets$.subscribe(wallets => { + wallets.forEach(({ provider }) => { + transactionPreview.patchProvider(provider as PatchedEIP1193Provider) + }) + }) + } + getBnSDK() + } + return API } diff --git a/packages/core/src/provider.ts b/packages/core/src/provider.ts index 4da16c9e0..4ca62084f 100644 --- a/packages/core/src/provider.ts +++ b/packages/core/src/provider.ts @@ -8,7 +8,7 @@ import { updateAccount, updateWallet } from './store/actions.js' import { validEnsChain } from './utils.js' import disconnect from './disconnect.js' import { state } from './store/index.js' -import { getBlocknativeSdk } from './services.js' +import { getBNMulitChainSdk } from './services.js' import type { ChainId, @@ -157,7 +157,7 @@ export function trackWallet( // if not existing account and notifications, // then subscribe to transaction events if (state.get().notify.enabled && !existingAccount) { - const sdk = await getBlocknativeSdk() + const sdk = await getBNMulitChainSdk() if (sdk) { const wallet = state @@ -227,7 +227,7 @@ export function trackWallet( if (chainId === connectedWalletChain.id) return if (state.get().notify.enabled) { - const sdk = await getBlocknativeSdk() + const sdk = await getBNMulitChainSdk() if (sdk) { const wallet = state diff --git a/packages/core/src/services.ts b/packages/core/src/services.ts index 14b065b0d..ffc8a19e8 100644 --- a/packages/core/src/services.ts +++ b/packages/core/src/services.ts @@ -1,25 +1,49 @@ import type { MultiChain } from 'bnc-sdk' +import type SDK from 'bnc-sdk' import { configuration } from './configuration.js' import { handleTransactionUpdates } from './notify.js' -let blocknativeSdk: MultiChain +let blocknativeMultiChainSdk: MultiChain +let blocknativeSdk: SDK /** * - * @returns SDK if apikey + * @returns MultiChain SDK if apiKey */ -export async function getBlocknativeSdk(): Promise { + +export async function getBNMulitChainSdk(): Promise { const { apiKey } = configuration if (!apiKey) return null - if (!blocknativeSdk) { + if (!blocknativeMultiChainSdk) { const { default: Blocknative } = await import('bnc-sdk') - blocknativeSdk = Blocknative.multichain({ + blocknativeMultiChainSdk = Blocknative.multichain({ apiKey: configuration.apiKey }) - blocknativeSdk.transactions$.subscribe(handleTransactionUpdates) + blocknativeMultiChainSdk.transactions$.subscribe(handleTransactionUpdates) + } + + return blocknativeMultiChainSdk +} + +/** + * + * @returns SDK if apiKey + */ +export async function getBlocknativeSdk(): Promise { + const { apiKey } = configuration + + if (!apiKey) return null + + if (!blocknativeSdk) { + const { default: Blocknative } = await import('bnc-sdk') + blocknativeSdk = new Blocknative({ + dappId: configuration.apiKey, + networkId: 1 + }) + return blocknativeSdk } return blocknativeSdk diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index 268acfaf7..313f95fc8 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -12,6 +12,7 @@ import type { } from '@web3-onboard/common' import type gas from '@web3-onboard/gas' +import type { TransactionPreviewAPI } from '@web3-onboard/transaction-preview' import type en from './i18n/en.json' import type { EthereumTransactionData, Network } from 'bnc-sdk' @@ -53,10 +54,15 @@ export interface InitOptions { /** Gas module */ gas?: typeof gas /** - * Object mapping for W3O components with the key being the DOM element to mount - * the component to, this defines the DOM container element for svelte to attach the component + * Object mapping for W3O components with the key being the DOM + * element to mount the component to, this defines the DOM container + * element for svelte to attach the component */ containerElements?: Partial + /** + * Transaction Preview module + */ + transactionPreview?: TransactionPreviewAPI } export interface ConnectOptions { @@ -137,6 +143,7 @@ export type Configuration = { apiKey?: string gas?: typeof gas containerElements?: ContainerElements + transactionPreview?: TransactionPreviewAPI } export type Locale = string diff --git a/packages/core/src/validation.ts b/packages/core/src/validation.ts index 33cb1065a..1314e2948 100644 --- a/packages/core/src/validation.ts +++ b/packages/core/src/validation.ts @@ -185,7 +185,11 @@ const initOptions = Joi.object({ stream: Joi.function().required() }), connect: connectModalOptions, - containerElements: containerElements + containerElements: containerElements, + transactionPreview: Joi.object({ + patchProvider: Joi.function().required(), + init: Joi.function().required() + }) }) const connectOptions = Joi.object({ diff --git a/packages/core/src/views/Index.svelte b/packages/core/src/views/Index.svelte index 5a8f90e9a..55411f9f1 100644 --- a/packages/core/src/views/Index.svelte +++ b/packages/core/src/views/Index.svelte @@ -394,6 +394,16 @@ {/if} +{#if !$accountCenter$.enabled && !$notify$.enabled} +
+{/if} + {#if displayAccountCenterNotifySameContainer}
+ {/if}
{#await accountCenterComponent then AccountCenter} {#if AccountCenter} @@ -434,6 +448,9 @@ {/if} {/await}
+ {#if $accountCenter$.position.includes('top')} +
+ {/if} {#if $notify$.position.includes('top') && $accountCenter$.position.includes('top') && samePositionOrMobile} {#await notifyComponent then Notify} {#if Notify} @@ -459,6 +476,9 @@ ? 'padding-top:0;' : ''} " > + {#if $accountCenter$.position.includes('bottom')} +
+ {/if}
+ {#if $accountCenter$.position.includes('top')} +
+ {/if}
{/if} {#if displayNotifySeparate} @@ -491,6 +514,9 @@ ? 'padding-top:0;' : ''} " > + {#if $notify$.position.includes('top')} +
+ {/if} {#await notifyComponent then Notify} {#if Notify} {/if} {/await} + {#if $notify$.position.includes('bottom')} +
+ {/if}
{/if} diff --git a/packages/core/src/views/connect/Index.svelte b/packages/core/src/views/connect/Index.svelte index eb0b8d71a..1064b5c2c 100644 --- a/packages/core/src/views/connect/Index.svelte +++ b/packages/core/src/views/connect/Index.svelte @@ -17,7 +17,7 @@ import SelectingWallet from './SelectingWallet.svelte' import Sidebar from './Sidebar.svelte' import { configuration } from '../../configuration.js' - import { getBlocknativeSdk } from '../../services.js' + import { getBNMulitChainSdk } from '../../services.js' import { BigNumber } from 'ethers' import { @@ -211,7 +211,7 @@ const chain = await getChainId(provider) if (state.get().notify.enabled) { - const sdk = await getBlocknativeSdk() + const sdk = await getBNMulitChainSdk() if (sdk) { try { diff --git a/packages/dcent/src/index.ts b/packages/dcent/src/index.ts index 68dcba486..a15dc5e8e 100644 --- a/packages/dcent/src/index.ts +++ b/packages/dcent/src/index.ts @@ -12,6 +12,7 @@ import type { Account, ScanAccountsOptions } from '@web3-onboard/hw-common' +import { StaticJsonRpcProvider } from '@ethersproject/providers' interface CustomWindow extends Window { ethereum: EIP1193Provider @@ -36,7 +37,7 @@ const assets = [ const generateAccounts = async ( keyring: any, - provider: providers.StaticJsonRpcProvider + provider: StaticJsonRpcProvider ): Promise => { const accounts = [] @@ -123,9 +124,7 @@ function dcent({ currentChain = chains.find(({ id }: Chain) => id === chainId) || currentChain - const provider = new StaticJsonRpcProvider( - currentChain.rpcUrl - ) as providers.StaticJsonRpcProvider + const provider = new StaticJsonRpcProvider(currentChain.rpcUrl) return generateAccounts(dcentKeyring, provider) } diff --git a/packages/demo/package.json b/packages/demo/package.json index cb2dd6187..3724bc78f 100644 --- a/packages/demo/package.json +++ b/packages/demo/package.json @@ -22,8 +22,9 @@ "webpack-dev-server": "4.7.4" }, "dependencies": { - "@web3-onboard/coinbase": "^2.1.3", - "@web3-onboard/core": "^2.10.1", + "@web3-onboard/coinbase": "^2.1.4", + "@web3-onboard/core": "^2.11.0", + "@web3-onboard/transaction-preview": "^2.0.0", "@web3-onboard/dcent": "^2.2.2", "@web3-onboard/fortmatic": "^2.0.14", "@web3-onboard/gas": "^2.1.3", @@ -34,11 +35,11 @@ "@web3-onboard/ledger": "^2.3.2", "@web3-onboard/magic": "^2.1.3", "@web3-onboard/portis": "^2.1.3", - "@web3-onboard/sequence": "^2.0.3", + "@web3-onboard/sequence": "^2.0.4", "@web3-onboard/torus": "^2.1.3", "@web3-onboard/trezor": "^2.3.2", "@web3-onboard/tallyho": "^2.0.1", - "@web3-onboard/walletconnect": "^2.2.0", + "@web3-onboard/walletconnect": "^2.2.1", "@web3-onboard/web3auth": "^2.1.3", "@web3-onboard/enkrypt": "^2.0.0", "@web3-onboard/mew-wallet": "^2.0.0", diff --git a/packages/demo/src/App.svelte b/packages/demo/src/App.svelte index 92e03247e..a9416e64c 100644 --- a/packages/demo/src/App.svelte +++ b/packages/demo/src/App.svelte @@ -17,6 +17,7 @@ import dcentModule from '@web3-onboard/dcent' import sequenceModule from '@web3-onboard/sequence' import tallyHoModule from '@web3-onboard/tallyho' + import transactionPreviewModule from '@web3-onboard/transaction-preview' import enkryptModule from '@web3-onboard/enkrypt' import mewWalletModule from '@web3-onboard/mew-wallet' import uauthModule from '@web3-onboard/uauth' @@ -34,10 +35,13 @@ import { onMount } from 'svelte' let windowWidth - + if (window.innerWidth < 700) { new VConsole() } + + const apiKey = 'xxxxxx-bf21-42ec-a093-9d37e426xxxx' + const infura_key = '80633e48116943128cbab25e402764ab' let defaultTransactionObject = JSON.stringify( { @@ -115,11 +119,10 @@ }) const dcent = dcentModule() - const sequence = sequenceModule() - const enkrypt = enkryptModule() const mewWallet = mewWalletModule() + const transactionPreview = transactionPreviewModule() const onboard = Onboard({ wallets: [ @@ -143,25 +146,26 @@ tallyho, uauth ], + transactionPreview, gas, chains: [ { id: '0x1', token: 'ETH', label: 'Ethereum', - rpcUrl: 'https://mainnet.infura.io/v3/17c1e1500e384acfb6a72c5d2e67742e' + rpcUrl: `https://mainnet.infura.io/v3/${infura_key}` }, { id: 3, token: 'tROP', label: 'Ropsten', - rpcUrl: 'https://ropsten.infura.io/v3/17c1e1500e384acfb6a72c5d2e67742e' + rpcUrl: `https://ropsten.infura.io/v3/${infura_key}` }, { id: '0x5', token: 'ETH', label: 'Goerli', - rpcUrl: `https://goerli.infura.io/v3/17c1e1500e384acfb6a72c5d2e67742e` + rpcUrl: `https://goerli.infura.io/v3/${infura_key}` }, { id: '0x13881', @@ -260,7 +264,7 @@ // accountCenter: '#sample-container-el' // }, // Sign up for your free api key at www.Blocknative.com - apiKey: 'xxxxxx-bf21-42ec-a093-9d37e426xxxx' + apiKey }) // Subscribe to wallet updates @@ -286,16 +290,18 @@ } let toAddress - const sendTransaction = async provider => { + const sendTransaction = async (provider) => { const ethersProvider = new ethers.providers.Web3Provider(provider, 'any') const signer = ethersProvider.getSigner() - const txn = await signer.sendTransaction({ + const popTransaction = await signer.populateTransaction({ to: toAddress, value: 100000000000000 }) + await signer.sendTransaction(popTransaction) + const receipt = await txn.wait() console.log(receipt) } diff --git a/packages/gnosis/src/index.ts b/packages/gnosis/src/index.ts index edd43f1c6..872d2f865 100644 --- a/packages/gnosis/src/index.ts +++ b/packages/gnosis/src/index.ts @@ -5,11 +5,13 @@ type GnosisOptions = { } function gnosis(options?: GnosisOptions): WalletInit { - const { whitelistedDomains = [ - /^https:\/\/gnosis-safe\.io$/, - /^https:\/\/app\.safe\.global$/, - /^https:\/\/safe\.global$/ - ] } = options || {} + const { + whitelistedDomains = [ + /^https:\/\/gnosis-safe\.io$/, + /^https:\/\/app\.safe\.global$/, + /^https:\/\/safe\.global$/ + ] + } = options || {} return () => { const loadedInIframe = window.self !== window.top diff --git a/packages/react/package.json b/packages/react/package.json index 2ddc80554..d5a4bd93b 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@web3-onboard/react", - "version": "2.4.1", + "version": "2.5.0", "description": "A collection of React hooks for integrating Web3-Onboard in to React and Next.js projects. Web3-Onboard makes it simple to connect Ethereum hardware and software wallets to your dapp. Features standardised spec compliant web3 providers for all supported wallets, modern javascript UI with code splitting, CSS customization, multi-chain and multi-account support, reactive wallet state subscriptions and real-time transaction state change notifications.", "keywords": [ "Ethereum", @@ -62,7 +62,7 @@ "typescript": "^4.5.5" }, "dependencies": { - "@web3-onboard/core": "^2.10.1", + "@web3-onboard/core": "^2.11.0", "@web3-onboard/common": "^2.2.3", "use-sync-external-store": "1.0.0" }, diff --git a/packages/sequence/README.md b/packages/sequence/README.md index 9af0a1b12..70b2c921e 100644 --- a/packages/sequence/README.md +++ b/packages/sequence/README.md @@ -4,7 +4,7 @@ ### Install -`npm i @web3-onboard/sequence @0xsequence` +`npm i @web3-onboard/sequence @0xsequence ethers` ## Options diff --git a/packages/sequence/package.json b/packages/sequence/package.json index e75ba8bba..5530b5ef4 100644 --- a/packages/sequence/package.json +++ b/packages/sequence/package.json @@ -1,6 +1,6 @@ { "name": "@web3-onboard/sequence", - "version": "2.0.3", + "version": "2.0.4", "description": "Sequence is the smartest Web3 wallet. Easy, fun and secure.", "keywords": [ "Ethereum", @@ -57,9 +57,10 @@ }, "dependencies": { "@web3-onboard/common": "^2.2.3", - "0xsequence": "^0.40.5" + "0xsequence": "^0.43.1" }, "peerDependencies": { - "0xsequence": ">=0.40.5" + "0xsequence": ">=0.43.0", + "ethers": ">=5.5" } } diff --git a/packages/sequence/src/index.ts b/packages/sequence/src/index.ts index 6ce265f2d..fe9143d79 100644 --- a/packages/sequence/src/index.ts +++ b/packages/sequence/src/index.ts @@ -20,7 +20,7 @@ function sequence(options?: SequenceOptions): WalletInit { const { sequence } = await import('0xsequence') const { createEIP1193Provider } = await import('@web3-onboard/common') - const instance = new sequence.Wallet(network); + const instance = await sequence.initWallet(network); if (!instance.isConnected()) { const connectDetails = await instance.connect({ diff --git a/packages/transaction-preview/.eslintrc.cjs b/packages/transaction-preview/.eslintrc.cjs new file mode 100644 index 000000000..dbbeea2ae --- /dev/null +++ b/packages/transaction-preview/.eslintrc.cjs @@ -0,0 +1,44 @@ +module.exports = { + root: true, + parser: '@typescript-eslint/parser', + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended', + 'prettier' + ], + plugins: ['@typescript-eslint', 'svelte3'], + ignorePatterns: ['*.cjs'], + overrides: [{ files: ['*.svelte'], processor: 'svelte3/svelte3' }], + settings: { + 'svelte3/typescript': () => require('typescript') + }, + parserOptions: { + sourceType: 'module', + ecmaVersion: 2019 + }, + env: { + browser: true, + node: true, + es2017: true + }, + rules: { + '@typescript-eslint/quotes': [ + 'error', + 'single', + { allowTemplateLiterals: true } + ], + '@typescript-eslint/no-case-declarations': 'off', + 'max-len': [ + 'error', + { + code: 80, + tabWidth: 2, + ignoreStrings: true, + ignoreTemplateLiterals: true + } + ], + 'object-curly-spacing': ['error', 'always'], + '@typescript-eslint/no-empty-function': 'off', + quotes: ['error', 'single', { allowTemplateLiterals: true }] + } +} diff --git a/packages/transaction-preview/README.md b/packages/transaction-preview/README.md new file mode 100644 index 000000000..7168a1768 --- /dev/null +++ b/packages/transaction-preview/README.md @@ -0,0 +1,243 @@ +# @web3-onboard/transaction-preview + +## A modular UI for previewing a single or set of unsigned Ethereum transactions. + +![Transaction Preview Flow](https://github.com/blocknative/web3-onboard/blob/feature/testing_transaction_preview/packages/transaction-preview/assets/preview.gif?raw=true "Transaction Preview Flow") + +#### Full Transaction Preview package documentation available [here](https://onboard.blocknative.com/docs/packages/transaction-preview) + +Full Simulation Platform API documentation can be found [here](https://docs.blocknative.com/transaction-preview-api) + +### Install + +**NPM** +`npm i @web3-onboard/core @web3-onboard/injected @web3-onboard/transaction-preview` + +**Yarn** +`yarn add @web3-onboard/core @web3-onboard/injected @web3-onboard/transaction-preview` + +### Usage with Web3-Onboard Core package + +To use the Transaction Preview package with web3-onboard all a developer needs to do is initialize web3-onboard with their [Blocknative API key](https://onboard.blocknative.com/docs/overview/introduction#optional-use-an-api-key-to-fetch-real-time-transaction-data-balances-gas) and pass in the module as shown below. + +```typescript +import Onboard from '@web3-onboard/core' +import injectedModule from '@web3-onboard/injected' +import transactionPreviewModule from '@web3-onboard/transaction-preview' + +const injected = injectedModule() +const transactionPreview = transactionPreviewModule({ + // Optional: Require balance change approval prior to sending transaction to wallet + // Defaults to true + // requireTransactionApproval?: false + + // i18n?: i18nOptions - Internationalization options +}) + +const onboard = Onboard({ + transactionPreview, + apiKey: 'xxx387fb-bxx1-4xxc-a0x3-9d37e426xxxx' + wallets: [injected], + chains: [ + { + id: '0x1', + token: 'ETH', + label: 'Ethereum', + rpcUrl: 'https://mainnet.infura.io/v3/17c1e1500e384acfb6a72c5d2e67742e' + } + ] + // ... other Onboard options +}) + +// Transaction code here using Ether.js or Web3.js or custom +// The transaction will automatically be picked up and simulated with a UI displaying in the upper right corner +``` + +### Options & Types + +```typescript +export type TransactionPreviewModule = ( + options: TransactionPreviewOptions +) => TransactionPreviewAPI + +export type TransactionPreviewAPI = { + /** + * Pass this method a standard EIP1193 provider + * (such as an injected wallet from window.ethereum) + * and it will be patched to allow for transaction previewing + */ + patchProvider: (provider: PatchedEIP1193Provider) => PatchedEIP1193Provider + /** + * Pass this method a standard EIP1193 provider + * (such as an injected wallet from window.ethereum) + * and it will be patched to allow for transaction previewing + */ + init: (initializationOptions: TransactionPreviewInitOptions) => void +} + +export type PatchedEIP1193Provider = EIP1193Provider & { simPatched: boolean } + +export interface ProviderReq { + method: string + params?: Array +} + +export type RequestOptions = Pick + +export type TransactionPreviewInitOptions = { + /** + * Blocknative API key (https://explorer.blocknative.com/account) + */ + apiKey: string + /** + * Your Blocknative SDK instance + * */ + sdk: SDK + /** + * Optional dom query string to mount UI to + * */ + containerElement: string +} + +export type TransactionPreviewOptions = { + /** + * Optional requirement for user to accept transaction balance changes + * prior to sending the transaction to the wallet + * Defaults to true + * */ + requireTransactionApproval?: boolean + /** + * An optional internationalization object that defines the display + * text for different locales. Can also be used to override the default text. + * To override the default text, pass in a object for the en locale + */ + i18n?: i18nOptions +} + +export type Locale = string +export type i18nOptions = Record +export type i18n = typeof en + +export type DeviceNotBrowser = { + type: null + os: null + browser: null +} + +export type TransactionForSim = SimulationTransaction & { + data?: string +} + +export interface SimulationTransaction { + from: string + to: string + value: number + gas: number + input: string + // Either Type 1 Gas (gasPrice) or Type 2 Gas (maxPriorityFeePerGas & maxFeePerGas) + // must be included in the payload + gasPrice?: number + maxPriorityFeePerGas?: number + maxFeePerGas?: number +} + +export type MultiSimOutput = { + id?: string + contractCall: ContractCall[] + error?: any + gasUsed: number[] + internalTransactions: InternalTransaction[][] + netBalanceChanges: NetBalanceChange[][] + network: Network + simDetails: SimDetails + serverVersion: string + system: System + status: Status + simulatedBlockNumber: number + transactions: InternalTransaction[] +} + +export interface ContractCall { + contractType?: string + contractAddress?: string + methodName: string + params: Record + contractName?: string + contractDecimals?: number + decimalValue?: string +} + +export interface InternalTransaction { + type: string + from: string + to: string + input: string + gas: number + gasUsed: number + value: string + contractCall: ContractCall +} + +export interface NetBalanceChange { + address: string + balanceChanges: BalanceChange[] +} + +export interface BalanceChange { + delta: string + asset: Asset + breakdown: BreakDown[] +} + +export interface Asset { + type: string + symbol: string + contractAddress: string +} + +export interface BreakDown { + counterparty: string + amount: string +} + +export interface InternalTransaction { + type: string + from: string + to: string + input: string + gas: number + gasUsed: number + value: string + contractCall: ContractCall +} + +export type System = 'bitcoin' | 'ethereum' +export type Network = + | 'main' + | 'testnet' + | 'ropsten' + | 'rinkeby' + | 'goerli' + | 'kovan' + | 'xdai' + | 'bsc-main' + | 'matic-main' + | 'fantom-main' + | 'matic-mumbai' + | 'local' + +export type Status = + | 'pending' + | 'confirmed' + | 'speedup' + | 'cancel' + | 'failed' + | 'dropped' + | 'simulated' + +export interface SimDetails { + blockNumber: number + e2eMs: number + performanceProfile: any +} +``` diff --git a/packages/transaction-preview/assets/preview.gif b/packages/transaction-preview/assets/preview.gif new file mode 100644 index 000000000..938a9d1df Binary files /dev/null and b/packages/transaction-preview/assets/preview.gif differ diff --git a/packages/transaction-preview/package.json b/packages/transaction-preview/package.json new file mode 100644 index 000000000..d205c0867 --- /dev/null +++ b/packages/transaction-preview/package.json @@ -0,0 +1,91 @@ +{ + "name": "@web3-onboard/transaction-preview", + "version": "2.0.0", + "description": "In app preview of Ethereum transactions", + "keywords": [ + "Ethereum", + "Preview Transactions", + "Transaction Preview", + "Web3", + "EVM", + "dapp", + "Wallet", + "Transaction", + "Provider", + "Hardware Wallet", + "Notifications", + "React", + "Svelte", + "Vue", + "Next", + "Nuxt", + "MetaMask", + "Coinbase", + "WalletConnect", + "Ledger", + "Trezor", + "Connect Wallet", + "Blocknative", + "Mempool", + "pending", + "confirmed", + "Injected Wallet", + "Crypto", + "Crypto Wallet" + ], + "repository": { + "type": "git", + "url": "https://github.com/blocknative/web3-onboard.git", + "directory": "packages/transaction-preview" + }, + "homepage": "https://onboard.blocknative.com", + "bugs": "https://github.com/blocknative/web3-onboard/issues", + "scripts": { + "build": "rollup -c", + "dev": "rollup -c -w", + "start": "sirv public --no-clear", + "type-check": "svelte-check --tsconfig ./tsconfig.json", + "lint": "eslint -c './.eslintrc.cjs' './src' && prettier --check './src/**/*'" + }, + "module": "dist/index.js", + "browser": "dist/index.js", + "main": "dist/index.js", + "type": "module", + "typings": "dist/index.d.ts", + "files": [ + "dist" + ], + "license": "MIT", + "devDependencies": { + "@rollup-extras/plugin-copy": "~1.2.2", + "@rollup/plugin-json": "^4.1.0", + "@rollup/plugin-node-resolve": "^11.0.0", + "@rollup/plugin-replace": "^3.0.0", + "@rollup/plugin-typescript": "^8.0.0", + "@tsconfig/svelte": "^2.0.0", + "@types/lodash.merge": "^4.6.6", + "@types/lodash.partition": "^4.6.6", + "@typescript-eslint/eslint-plugin": "^4.31.1", + "@typescript-eslint/parser": "^4.31.1", + "eslint": "^7.32.0", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-svelte3": "^3.2.1", + "prettier": "^2.4.0", + "prettier-plugin-svelte": "^2.4.0", + "rollup": "^2.3.4", + "rollup-plugin-svelte": "^7.0.0", + "svelte-check": "^2.2.6", + "svelte-preprocess": "^4.9.4", + "tslib": "^2.0.0", + "typescript": "^4.5.5" + }, + "dependencies": { + "@web3-onboard/common": "^2.2.3", + "bnc-sdk": "^4.6.2", + "bowser": "^2.11.0", + "joi": "^17.6.1", + "rxjs": "^7.5.2", + "svelte": "^3.49.0", + "svelte-i18n": "^3.3.13" + } +} diff --git a/packages/transaction-preview/rollup.config.js b/packages/transaction-preview/rollup.config.js new file mode 100644 index 000000000..9b4c30c4c --- /dev/null +++ b/packages/transaction-preview/rollup.config.js @@ -0,0 +1,54 @@ +import svelte from 'rollup-plugin-svelte' +import resolve from '@rollup/plugin-node-resolve' +import replace from '@rollup/plugin-replace' +import json from '@rollup/plugin-json' +import sveltePreprocess from 'svelte-preprocess' +import typescript from '@rollup/plugin-typescript' +import copy from '@rollup-extras/plugin-copy' + +const production = !process.env.ROLLUP_WATCH + +export default { + input: 'src/index.ts', + output: { + format: 'es', + dir: 'dist/' + }, + plugins: [ + json(), + replace({ + 'process.env.NODE_ENV': JSON.stringify(production), + preventAssignment: true + }), + svelte({ + preprocess: sveltePreprocess({ sourceMap: !production }), + compilerOptions: { + dev: !production + }, + emitCss: false + }), + resolve({ + browser: true, + dedupe: ['svelte'] + }), + typescript({ + sourceMap: !production, + inlineSources: !production + }), + copy({ + src: 'src/i18n/en.json', + dest: 'i18n' + }) + ], + external: [ + '@web3-onboard/common', + 'bnc-sdk', + 'ethers', + 'bowser', + 'joi', + 'rxjs', + 'rxjs/operators', + 'svelte-i18n', + 'lodash.merge' + ] +} diff --git a/packages/transaction-preview/src/global.d.ts b/packages/transaction-preview/src/global.d.ts new file mode 100644 index 000000000..1a25456a2 --- /dev/null +++ b/packages/transaction-preview/src/global.d.ts @@ -0,0 +1 @@ +/// diff --git a/packages/transaction-preview/src/i18n/en.json b/packages/transaction-preview/src/i18n/en.json new file mode 100644 index 000000000..947f89298 --- /dev/null +++ b/packages/transaction-preview/src/i18n/en.json @@ -0,0 +1,22 @@ +{ + "time": { + "minutes": "min", + "seconds": "sec" + }, + "header":"Transaction Preview", + "timeSection": { + "action": "Simulated", + "past": "ago" + }, + "minimized": { + "show": "Show details" + }, + "maximized": { + "sectionHeading": "Simulated balance changes for", + "tokenColumnHeader": "Token", + "balanceColumnHeader": "Balance", + "hide": "Hide details", + "cancel": "Cancel", + "confirm": "Confirm" + } +} diff --git a/packages/transaction-preview/src/i18n/index.ts b/packages/transaction-preview/src/i18n/index.ts new file mode 100644 index 000000000..db5b473f9 --- /dev/null +++ b/packages/transaction-preview/src/i18n/index.ts @@ -0,0 +1,29 @@ +import { addMessages, init, getLocaleFromNavigator } from 'svelte-i18n' +import merge from 'lodash.merge' +import en from './en.json' +import type { i18nOptions } from '../types.js' + +function initialize(options?: i18nOptions): void { + if (options) { + const { en: customizedEn } = options + const merged = merge(en, customizedEn || {}) + addMessages('en', merged) + + const customLocales = Object.keys(options).filter(key => key !== 'en') + + // Sync register all customLocales + customLocales.forEach(locale => { + const dictionary = options[locale] + dictionary && addMessages(locale, dictionary) + }) + } else { + addMessages('en', en) + } + + init({ + fallbackLocale: 'en', + initialLocale: getLocaleFromNavigator() + }) +} + +export default initialize diff --git a/packages/transaction-preview/src/icons/close-circle.ts b/packages/transaction-preview/src/icons/close-circle.ts new file mode 100644 index 000000000..99288ef30 --- /dev/null +++ b/packages/transaction-preview/src/icons/close-circle.ts @@ -0,0 +1,5 @@ +export default ` + + + +` diff --git a/packages/transaction-preview/src/index.ts b/packages/transaction-preview/src/index.ts new file mode 100644 index 000000000..54b11dd28 --- /dev/null +++ b/packages/transaction-preview/src/index.ts @@ -0,0 +1,252 @@ +import { firstValueFrom, Subject } from 'rxjs' +import { + ProviderRpcError, + ProviderRpcErrorCode, + SofiaProLight, + SofiaProRegular +} from '@web3-onboard/common' +import type { + PatchedEIP1193Provider, + TransactionPreviewInitOptions, + TransactionPreviewModule, + TransactionPreviewAPI, + TransactionPreviewOptions, + TransactionForSim +} from './types.js' +import type { EIP1193Provider } from '@web3-onboard/common' +import type { MultiSimOutput } from 'bnc-sdk' + +import initI18N from './i18n/index.js' +import { validateTPInit, validateTPOptions } from './validation' +import simulateTransactions from './simulateTransactions.js' +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +//@ts-ignore +import TransactionPreview from './views/Index.svelte' + +export * from './types.js' + +const approved$ = new Subject() +let options: TransactionPreviewOptions & TransactionPreviewInitOptions +let optionalSettings: TransactionPreviewOptions +let app: TransactionPreview + +const destroyApp = () => { + app.$destroy() +} + +const handleRequireApproval = async ( + app: TransactionPreview, + fullProviderRequest: EIP1193Provider['request'], + req: { + method: string + params?: Array + } +) => { + const approved = await firstValueFrom(approved$) + app.$destroy() + if (!approved) { + throw new ProviderRpcError({ + code: ProviderRpcErrorCode.ACCOUNT_ACCESS_REJECTED, + message: 'User rejected the transaction' + }) + } + fullProviderRequest(req) +} + +const netBalanceChangesExist = (simResp: MultiSimOutput): boolean => { + if ( + simResp && + simResp.netBalanceChanges && + simResp.netBalanceChanges.length + ) { + return simResp.netBalanceChanges.some(balChange => { + return balChange.length && balChange.length > 0 + }) + } + return false +} + +export const patchProvider = ( + walletProvider: PatchedEIP1193Provider +): PatchedEIP1193Provider => { + if (!walletProvider) { + throw new Error( + `An EIP 1193 wallet provider is required to preform patching and + watch for transactions e.g. an injected wallet using window.ethereum` + ) + } + if (walletProvider.simPatched) return walletProvider as PatchedEIP1193Provider + + const fullProviderRequest = walletProvider.request + const patchedProvider = walletProvider as PatchedEIP1193Provider + const request: EIP1193Provider['request'] = async (req: { + method: string + params?: Array + }): Promise => { + if ( + req.method === 'eth_sendTransaction' && + req.params && + req.params.length + ) { + const transactionParams = req.params as TransactionForSim[] + try { + const preview = await simulateTransactions(options, transactionParams) + if (preview.error.length) { + fullProviderRequest(req) + throw new Error( + `An error occurred during transaction simulation: ${preview.error.join( + ' - ' + )}` + ) + } + if ( + preview.status !== 'simulated' || + !netBalanceChangesExist(preview) + ) { + // If transaction simulation was unsuccessful or balanceChanges do + // not exist do not create DOM el + return fullProviderRequest(req) + } + if (app) app.$destroy() + app = mountTransactionPreview(preview) + options.requireTransactionApproval + ? handleRequireApproval(app, fullProviderRequest, req) + : fullProviderRequest(req) + .then(() => { + app.$destroy() + }) + .catch(() => app.$destroy()) + } catch (e) { + fullProviderRequest(req) + if (app) app.$destroy() + throw new Error(`${e}`) + } + } else { + return fullProviderRequest(req) + } + } + try { + patchedProvider.request = request + patchedProvider.simPatched = true + } catch (err) { + console.error( + `There was an error patching the passed in wallet provider. + The provider may be read only and may be incompatible with Transaction Preview` + ) + } + return patchedProvider +} + +const transactionPreview: TransactionPreviewModule = ( + tpOptions: TransactionPreviewOptions +): TransactionPreviewAPI => { + if (tpOptions) { + const error = validateTPOptions(tpOptions) + + if (error) { + throw error + } + } + // defaults requireTransactionApproval to true + optionalSettings = { requireTransactionApproval: true, ...tpOptions } + + initI18N((tpOptions && tpOptions.i18n) || {}) + + return { + patchProvider, + init + } +} + +const init = (initOptions: TransactionPreviewInitOptions): void => { + if (initOptions) { + const error = validateTPInit(initOptions) + + if (error) { + throw error + } + } + options = { ...initOptions, ...optionalSettings } +} + +const mountTransactionPreview = (simResponse: MultiSimOutput) => { + class TransactionPreviewEl extends HTMLElement { + constructor() { + super() + } + } + + if (!customElements.get('transaction-preview')) { + customElements.define('transaction-preview', TransactionPreviewEl) + } + + // Add Fonts to main page + const styleEl = document.createElement('style') + + styleEl.innerHTML = ` + ${SofiaProRegular} + ${SofiaProLight} + ` + document.body.appendChild(styleEl) + + // add to DOM + const transactionPreviewDomElement = document.createElement( + 'transaction-preview' + ) + const target = transactionPreviewDomElement.attachShadow({ mode: 'open' }) + + transactionPreviewDomElement.style.all = 'initial' + + target.innerHTML = ` + + ` + const getW3OEl = document.querySelector('onboard-v2') + + const containerElementQuery = options.containerElement || 'body' + + let containerEl: Element | null + // If Onboard present copy stylesheets over to TransactionPreview shadow DOM + if (getW3OEl && getW3OEl.shadowRoot) { + const w3OStyleSheets = getW3OEl.shadowRoot.styleSheets + const transactionPreviewStyleSheet = new CSSStyleSheet() + + Object.values(w3OStyleSheets).forEach(sheet => { + const styleRules = Object.values(sheet.cssRules) + styleRules.forEach(rule => + transactionPreviewStyleSheet.insertRule(rule.cssText) + ) + }) + + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + //@ts-ignore + target.adoptedStyleSheets = [transactionPreviewStyleSheet] + containerEl = getW3OEl.shadowRoot.querySelector(containerElementQuery) + } else { + containerEl = document.querySelector(containerElementQuery) + } + + if (!containerEl) { + throw new Error( + `Element with query ${containerElementQuery} does not exist.` + ) + } + + containerEl.appendChild(transactionPreviewDomElement) + const { requireTransactionApproval } = options + + const app = new TransactionPreview({ + target, + intro: true, + props: { + simResponse, + requireTransactionApproval, + approved$, + destroyApp + } + }) + + return app +} + +export default transactionPreview diff --git a/packages/transaction-preview/src/simulateTransactions.ts b/packages/transaction-preview/src/simulateTransactions.ts new file mode 100644 index 000000000..98ee21351 --- /dev/null +++ b/packages/transaction-preview/src/simulateTransactions.ts @@ -0,0 +1,39 @@ +import { hexFieldsToNumber } from './utils' +import type { + TransactionForSim, + TransactionPreviewInitOptions +} from './types.js' +import type { MultiSimOutput } from 'bnc-sdk' + +const simulateTransactions = async ( + options: Omit, + transactions: TransactionForSim[] +): Promise => { + const { sdk } = options + const cleanedTransactions: TransactionForSim[] = transactions.map( + transaction => { + const convertedTransaction = hexFieldsToNumber( + transaction as TransactionForSim + ) + const cleanedTrans = { + from: convertedTransaction.from, + to: convertedTransaction.to, + gas: convertedTransaction.gas, + gasPrice: convertedTransaction.gasPrice, + maxFeePerGas: convertedTransaction.maxFeePerGas, + maxPriorityFeePerGas: convertedTransaction.maxPriorityFeePerGas, + input: + convertedTransaction.input || + transaction.input || + transaction.data || + '0x', + value: convertedTransaction.value + } + return cleanedTrans + } + ) + + return sdk.multiSim(cleanedTransactions) as Promise +} + +export default simulateTransactions diff --git a/packages/transaction-preview/src/types.ts b/packages/transaction-preview/src/types.ts new file mode 100644 index 000000000..321b217ad --- /dev/null +++ b/packages/transaction-preview/src/types.ts @@ -0,0 +1,75 @@ +import type { EIP1193Provider } from '@web3-onboard/common' +import type en from './i18n/en.json' +import type SDK from 'bnc-sdk' +import type { SimulationTransaction } from 'bnc-sdk' + +export type TransactionPreviewModule = ( + options: TransactionPreviewOptions +) => TransactionPreviewAPI + +export type TransactionPreviewAPI = { + /** + * Pass this method a standard EIP1193 provider + * (such as an injected wallet from window.ethereum) + * and it will be patched to allow for transaction previewing + */ + patchProvider: (provider: PatchedEIP1193Provider) => PatchedEIP1193Provider + /** + * Pass this method a standard EIP1193 provider + * (such as an injected wallet from window.ethereum) + * and it will be patched to allow for transaction previewing + */ + init: (initializationOptions: TransactionPreviewInitOptions) => void +} + +export type PatchedEIP1193Provider = EIP1193Provider & { simPatched: boolean } + +export interface ProviderReq { + method: string + params?: Array +} + +export type RequestOptions = Pick + +export type TransactionPreviewInitOptions = { + /** + * Blocknative API key (https://explorer.blocknative.com/account) + */ + apiKey: string + /** + * Your Blocknative SDK instance + * */ + sdk: SDK + /** + * Optional dom query string to mount UI to + * */ + containerElement: string +} + +export type TransactionForSim = SimulationTransaction & { + data?: string +} + +export type TransactionPreviewOptions = { + /** + * Optional requirement for user to accept transaction balance changes + * prior to sending the transaction to the wallet + * */ + requireTransactionApproval?: boolean + /** + * An optional internationalization object that defines the display + * text for different locales. Can also be used to override the default text. + * To override the default text, pass in a object for the en locale + */ + i18n?: i18nOptions +} + +export type Locale = string +export type i18nOptions = Record +export type i18n = typeof en + +export type DeviceNotBrowser = { + type: null + os: null + browser: null +} diff --git a/packages/transaction-preview/src/utils.ts b/packages/transaction-preview/src/utils.ts new file mode 100644 index 000000000..a48b00fa5 --- /dev/null +++ b/packages/transaction-preview/src/utils.ts @@ -0,0 +1,68 @@ +import type { DeviceNotBrowser, TransactionForSim } from './types' +import bowser from 'bowser' +import type { + Device, + DeviceBrowser, + DeviceOS, + DeviceType +} from '@web3-onboard/common' + +/** + * Takes in TransactionRequest and converts all Hex values to numbers + * @param transaction + * @returns a transaction where all Hex properties are now numbers + */ +export const hexFieldsToNumber = ( + transaction: TransactionForSim +): TransactionRequestWithNumberFields => + Object.keys(transaction).reduce( + (transaction, txnProperty) => ({ + ...transaction, + ...(typeof transaction[txnProperty as keyof TransactionForSim] === + 'string' && + (transaction[txnProperty as keyof TransactionForSim] as string).includes( + '0x' + ) && + txnProperty !== 'to' && + txnProperty !== 'input' && + txnProperty !== 'data' && + txnProperty !== 'from' + ? { + [txnProperty]: parseInt( + transaction[txnProperty as keyof TransactionForSim] as string, + 16 + ) + } + : {}) + }), + transaction + ) as TransactionRequestWithNumberFields + +type TransactionRequestWithNumberFields = TransactionForSim & { + gas: number + value: number + gasPrice?: number + maxPriorityFeePerGas?: number + maxFeePerGas?: number +} + +export function getDevice(): Device | DeviceNotBrowser { + if (typeof window !== 'undefined') { + const parsed = bowser.getParser(window.navigator.userAgent) + const os = parsed.getOS() + const browser = parsed.getBrowser() + const { type } = parsed.getPlatform() + + return { + type: type as DeviceType, + os: os as DeviceOS, + browser: browser as DeviceBrowser + } + } else { + return { + type: null, + os: null, + browser: null + } + } +} diff --git a/packages/transaction-preview/src/validation.ts b/packages/transaction-preview/src/validation.ts new file mode 100644 index 000000000..623fba688 --- /dev/null +++ b/packages/transaction-preview/src/validation.ts @@ -0,0 +1,27 @@ +import Joi from 'joi' +import type { + TransactionPreviewInitOptions, + TransactionPreviewOptions +} from './types.js' +import { validate, type ValidateReturn } from '@web3-onboard/common' + +const initOptions = Joi.object({ + apiKey: Joi.string().required(), + sdk: Joi.object().required(), + containerElement: Joi.string().required(), + requireTransactionApproval: Joi.boolean(), + i18n: Joi.object().unknown() +}) + +export const validateTPInit = ( + request: TransactionPreviewInitOptions +): ValidateReturn => validate(initOptions, request) + +const transactionPreviewOptions = Joi.object({ + requireTransactionApproval: Joi.boolean(), + i18n: Joi.object().unknown() +}) + +export const validateTPOptions = ( + request: TransactionPreviewOptions +): ValidateReturn => validate(transactionPreviewOptions, request) diff --git a/packages/transaction-preview/src/views/Index.svelte b/packages/transaction-preview/src/views/Index.svelte new file mode 100644 index 000000000..81a46488b --- /dev/null +++ b/packages/transaction-preview/src/views/Index.svelte @@ -0,0 +1,42 @@ + + +
+ {#if expanded || requireTransactionApproval} + + {:else} + + {/if} +
diff --git a/packages/transaction-preview/src/views/Maximized.svelte b/packages/transaction-preview/src/views/Maximized.svelte new file mode 100644 index 000000000..821f18149 --- /dev/null +++ b/packages/transaction-preview/src/views/Maximized.svelte @@ -0,0 +1,281 @@ + + + + +
+ {#if !requireTransactionApproval} +
{ + destroyApp() + }} + class="tp-close-btn tp-close-btn-{device.type} pointer flex" + > +
+ {@html closeIcon} +
+
+ {/if} +
+ + +
+
+
+ {$_('maximized.sectionHeading', { + default: en.maximized.sectionHeading + })} + {shortenAddress(transactionOriginator)} +
+ + + + + + + + + + + + + {#if balanceChanges.length} + {#each balanceChanges as assetChanges} + {#each assetChanges.balanceChanges as asset} + + + + + {/each} + {/each} + {/if} + +
+ {$_('maximized.tokenColumnHeader', { + default: en.maximized.tokenColumnHeader + })} + {$_('maximized.balanceColumnHeader', { + default: en.maximized.balanceColumnHeader + })}
{asset.asset.symbol}{!asset.delta.includes('-') ? '+' : ''}{cleanBalance( + asset.delta + )}
+
+
+ {#if requireTransactionApproval} +
+
diff --git a/packages/transaction-preview/src/views/Minimized.svelte b/packages/transaction-preview/src/views/Minimized.svelte new file mode 100644 index 000000000..ed7454a4d --- /dev/null +++ b/packages/transaction-preview/src/views/Minimized.svelte @@ -0,0 +1,125 @@ + + + + +
+
{ + destroyApp() + }} + class="tp-close-btn tp-close-btn-{device.type} pointer flex" + > +
+ {@html closeIcon} +
+
+
+ + +
+
+
+
diff --git a/packages/transaction-preview/src/views/components/Button.svelte b/packages/transaction-preview/src/views/components/Button.svelte new file mode 100644 index 000000000..529e349f4 --- /dev/null +++ b/packages/transaction-preview/src/views/components/Button.svelte @@ -0,0 +1,27 @@ + + + + + diff --git a/packages/transaction-preview/src/views/components/IconBadge.svelte b/packages/transaction-preview/src/views/components/IconBadge.svelte new file mode 100644 index 000000000..3b19b15da --- /dev/null +++ b/packages/transaction-preview/src/views/components/IconBadge.svelte @@ -0,0 +1,23 @@ + + + + +
+
+ 🔮 +
+
diff --git a/packages/transaction-preview/src/views/components/SimulationHeader.svelte b/packages/transaction-preview/src/views/components/SimulationHeader.svelte new file mode 100644 index 000000000..188fc6b4d --- /dev/null +++ b/packages/transaction-preview/src/views/components/SimulationHeader.svelte @@ -0,0 +1,45 @@ + + + + +
+ + {$_('header', { + default: en.header + })} + + + + + +
diff --git a/packages/transaction-preview/src/views/components/Timer.svelte b/packages/transaction-preview/src/views/components/Timer.svelte new file mode 100644 index 000000000..22676d2ae --- /dev/null +++ b/packages/transaction-preview/src/views/components/Timer.svelte @@ -0,0 +1,72 @@ + + + + +
= 60 && 'stale'}`}> + {$formatter('timeSection.action', { + default: en.timeSection.action + })} + {#if startTime} + - + + {timeString(currentTime - startTime)} + + {$formatter('timeSection.past', { + default: en.timeSection.past + })} + {/if} +
diff --git a/packages/transaction-preview/tsconfig.json b/packages/transaction-preview/tsconfig.json new file mode 100644 index 000000000..15ac7eb0d --- /dev/null +++ b/packages/transaction-preview/tsconfig.json @@ -0,0 +1,17 @@ +{ + "extends": "@tsconfig/svelte/tsconfig.json", + + "include": ["src/**/*"], + "exclude": ["node_modules/*", "dist"], + "compilerOptions": { + "strict": true, + "declaration": true, + "declarationDir": "dist", + "target": "esnext", + "module": "esnext", + "resolveJsonModule": true, + "strictNullChecks": false, + "allowSyntheticDefaultImports": true + }, + "outDir": "dist", +} diff --git a/packages/vue/package.json b/packages/vue/package.json index ef8c95a36..bfcd363c8 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -1,6 +1,6 @@ { "name": "@web3-onboard/vue", - "version": "2.3.1", + "version": "2.4.0", "description": "A collection of Vue Composables for integrating Web3-Onboard in to a Vue or Nuxt project. Web3-Onboard makes it simple to connect Ethereum hardware and software wallets to your dapp. Features standardised spec compliant web3 providers for all supported wallets, modern javascript UI with code splitting, CSS customization, multi-chain and multi-account support, reactive wallet state subscriptions and real-time transaction state change notifications.", "keywords": [ "Ethereum", @@ -63,7 +63,7 @@ "@vueuse/core": "^8.4.2", "@vueuse/rxjs": "^8.2.0", "@web3-onboard/common": "^2.2.3", - "@web3-onboard/core": "^2.10.1", + "@web3-onboard/core": "^2.11.0", "vue-demi": "^0.12.4" }, "peerDependencies": { diff --git a/packages/walletconnect/package.json b/packages/walletconnect/package.json index ccfbd0845..a5cc0ff40 100644 --- a/packages/walletconnect/package.json +++ b/packages/walletconnect/package.json @@ -1,6 +1,6 @@ { "name": "@web3-onboard/walletconnect", - "version": "2.2.0", + "version": "2.2.1", "description": "WalletConnect SDK module for connecting to Web3-Onboard. Web3-Onboard makes it simple to connect Ethereum hardware and software wallets to your dapp. Features standardised spec compliant web3 providers for all supported wallets, framework agnostic modern javascript UI with code splitting, CSS customization, multi-chain and multi-account support, reactive wallet state subscriptions and real-time transaction state change notifications.", "keywords": [ "Ethereum", diff --git a/packages/walletconnect/src/index.ts b/packages/walletconnect/src/index.ts index a419ea840..629947b16 100644 --- a/packages/walletconnect/src/index.ts +++ b/packages/walletconnect/src/index.ts @@ -223,9 +223,13 @@ function walletConnect(options?: WalletConnectOptions): WalletInit { message: `The Provider requires a chainId to be passed in as an argument` }) } - return this.connector.updateSession({ - chainId: chainIdObj.chainId, - accounts: this.connector.accounts + return this.connector.sendCustomRequest({ + method: 'wallet_switchEthereumChain', + params: [ + { + chainId: chainIdObj.chainId + } + ] }) } diff --git a/yarn.lock b/yarn.lock index 94f1bf1b7..265484d04 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,183 +2,152 @@ # yarn lockfile v1 -"0xsequence@^0.40.5": - version "0.40.5" - resolved "https://registry.yarnpkg.com/0xsequence/-/0xsequence-0.40.5.tgz#9da3eafa02e891f89150d68aaa99f8618b563608" - integrity sha512-okeE7YpaNJrl/8lRmmCHIY8EToz0mkQSzNmjMR1jcwlVcSDJfTNl/8ttvRTTvRFrQ0Rt3pGbf9WM3BQUwYx69g== - dependencies: - "@0xsequence/abi" "^0.40.5" - "@0xsequence/api" "^0.40.5" - "@0xsequence/auth" "^0.40.5" - "@0xsequence/config" "^0.40.5" - "@0xsequence/guard" "^0.40.5" - "@0xsequence/indexer" "^0.40.5" - "@0xsequence/metadata" "^0.40.5" - "@0xsequence/multicall" "^0.40.5" - "@0xsequence/network" "^0.40.5" - "@0xsequence/provider" "^0.40.5" - "@0xsequence/relayer" "^0.40.5" - "@0xsequence/transactions" "^0.40.5" - "@0xsequence/utils" "^0.40.5" - "@0xsequence/wallet" "^0.40.5" - ethers "^5.5.2" - -"@0xsequence/abi@^0.40.5": - version "0.40.5" - resolved "https://registry.yarnpkg.com/@0xsequence/abi/-/abi-0.40.5.tgz#117b9e9b4bac098ac71fa81b9fd2899005f15908" - integrity sha512-ofZ1+mkLRI7EPGDZrIk0+yE0Sco9uaK3TiOVGOGtoacSUNB2xFzfiuZCvCvISvaMycpcsUTEHpNRwJSNPv84eQ== - -"@0xsequence/api@^0.40.5": - version "0.40.5" - resolved "https://registry.yarnpkg.com/@0xsequence/api/-/api-0.40.5.tgz#db652e5bdb0a3cb42febf4652986948b9f810987" - integrity sha512-G8cf3BeS1eFWotZkg6oA2wEJyxbHKLnR2/+Wi5alJfKkoZEgKWNKEHRO4kxy5/J5HztnnfI+kgaDAyBrz2iABA== - dependencies: - cross-fetch "^3.1.5" - -"@0xsequence/auth@^0.40.5": - version "0.40.5" - resolved "https://registry.yarnpkg.com/@0xsequence/auth/-/auth-0.40.5.tgz#d1dea36addbab9f3cb32b41b07d1561d5195ac89" - integrity sha512-PG9FVgcZbC3jPQ8GqeyuFLnpv0RIgVlOFTzn6bUaBVHSjImxyZsHyYyTHUNUIP8PUCtH2hc9MdvwBId/nuA+cQ== - dependencies: - "@0xsequence/abi" "^0.40.5" - "@0xsequence/api" "^0.40.5" - "@0xsequence/config" "^0.40.5" - "@0xsequence/ethauth" "^0.7.0" - "@0xsequence/indexer" "^0.40.5" - "@0xsequence/metadata" "^0.40.5" - "@0xsequence/network" "^0.40.5" - "@0xsequence/utils" "^0.40.5" - "@0xsequence/wallet" "^0.40.5" - ethers "^5.5.2" - -"@0xsequence/config@^0.40.5": - version "0.40.5" - resolved "https://registry.yarnpkg.com/@0xsequence/config/-/config-0.40.5.tgz#2450f1437a54eb8fdba987b244e06f761771ee24" - integrity sha512-uAKd0iVY3T7aVLtMZp3WrRTJpts8K4rSduOICKsytT5Pj2tKtdmdPsYrmHOo9xDWUymsIxLBsj9Epu1yE0PlVA== - dependencies: - "@0xsequence/abi" "^0.40.5" - "@0xsequence/multicall" "^0.40.5" - "@0xsequence/network" "^0.40.5" - "@0xsequence/utils" "^0.40.5" - ethers "^5.5.2" - -"@0xsequence/ethauth@^0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@0xsequence/ethauth/-/ethauth-0.7.0.tgz#267f164404e1cafbfca534e0683cc4798ba4e8db" - integrity sha512-pghfR+OLm82wLMR9Uvvf53f0LniZLhcqw0G4EthFw1ME71/CWUskhR2MIeYKh1t7+OE3TqCbOBJ/p/buv8XynQ== +"0xsequence@^0.43.1": + version "0.43.1" + resolved "https://registry.yarnpkg.com/0xsequence/-/0xsequence-0.43.1.tgz#5b4846edb42ec2c8d6a19f01a9a7c8758ee8bf4b" + integrity sha512-LROKZUKOfqvj61u9Wa00FpUW4MI0lxPddrHKtYO16xCzTIkb59EKm/TpYYRxDBEMYYzA+vMBriWcO9iQefZafQ== + dependencies: + "@0xsequence/abi" "^0.43.1" + "@0xsequence/api" "^0.43.1" + "@0xsequence/auth" "^0.43.1" + "@0xsequence/config" "^0.43.1" + "@0xsequence/guard" "^0.43.1" + "@0xsequence/indexer" "^0.43.1" + "@0xsequence/metadata" "^0.43.1" + "@0xsequence/multicall" "^0.43.1" + "@0xsequence/network" "^0.43.1" + "@0xsequence/provider" "^0.43.1" + "@0xsequence/relayer" "^0.43.1" + "@0xsequence/transactions" "^0.43.1" + "@0xsequence/utils" "^0.43.1" + "@0xsequence/wallet" "^0.43.1" + +"@0xsequence/abi@^0.43.1": + version "0.43.1" + resolved "https://registry.yarnpkg.com/@0xsequence/abi/-/abi-0.43.1.tgz#7232b255cbbc46fb78db1b4805cf9c5732fc2154" + integrity sha512-vyxtYmqVZRpSzkDwxzGGHLyWMgR9FaRhuHriv13HU1wU8ZrRgHJuhNPtnXqES6LZwabw5Aqv4fgkkO2z4oKIkg== + +"@0xsequence/api@^0.43.1": + version "0.43.1" + resolved "https://registry.yarnpkg.com/@0xsequence/api/-/api-0.43.1.tgz#95836795eaf44b72a40c50f19a92c28022c9f95c" + integrity sha512-zxIr54davHGF96ZSU2WUhQFjoa8g/742HLVCxsEKoSfDHdUbs2Tdn+aEr9T67dMsiFW0a7MpTu9mAQR7a9h8Kw== + +"@0xsequence/auth@^0.43.1": + version "0.43.1" + resolved "https://registry.yarnpkg.com/@0xsequence/auth/-/auth-0.43.1.tgz#6b67caada42e9dc17840d16ba73952cbe49a47c0" + integrity sha512-oqIoolHJFIXCkgT8CmvmLDEdN1BoEc2PskR/1wWt2gSxtlzFWLdQvyIIjDlNfP1IZ6nBXLZTkHGrb0M75ENHQA== + dependencies: + "@0xsequence/abi" "^0.43.1" + "@0xsequence/api" "^0.43.1" + "@0xsequence/config" "^0.43.1" + "@0xsequence/ethauth" "^0.8.0" + "@0xsequence/indexer" "^0.43.1" + "@0xsequence/metadata" "^0.43.1" + "@0xsequence/network" "^0.43.1" + "@0xsequence/utils" "^0.43.1" + "@0xsequence/wallet" "^0.43.1" + +"@0xsequence/config@^0.43.1": + version "0.43.1" + resolved "https://registry.yarnpkg.com/@0xsequence/config/-/config-0.43.1.tgz#f815b5772a8aa3689f39062d456b07efd9e634e1" + integrity sha512-Kx4W2/wYYmljLR3VBxbXtqicHf3vc6p1rufPAyrdCwopHmGfap7SBiF3CXig7G0ekOI/25Miy1NqHkIN9/pgrQ== + dependencies: + "@0xsequence/abi" "^0.43.1" + "@0xsequence/multicall" "^0.43.1" + "@0xsequence/network" "^0.43.1" + "@0xsequence/utils" "^0.43.1" + +"@0xsequence/ethauth@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@0xsequence/ethauth/-/ethauth-0.8.1.tgz#9b97a17e74ca9559b79a93a8e39ca77baaccc943" + integrity sha512-P21cxRSS+2mDAqFVAJt0lwQFtbObX+Ewlj8DMyDELp81+QbfHFh6LCyu8dTXNdBx6UbmRFOCSBno5Txd50cJPQ== dependencies: js-base64 "^3.7.2" -"@0xsequence/guard@^0.40.5": - version "0.40.5" - resolved "https://registry.yarnpkg.com/@0xsequence/guard/-/guard-0.40.5.tgz#14ed5d822618059381ed86c255b6afa729e7c71a" - integrity sha512-i3oqGqrQAy2z4W0cPNFgTDeH5Wwd/Ean6MZv9Op0+srKKwYTGsd4gpKffvqsj9h5T/Ag8UCrlE5WSozJ3lwbCw== +"@0xsequence/guard@^0.43.1": + version "0.43.1" + resolved "https://registry.yarnpkg.com/@0xsequence/guard/-/guard-0.43.1.tgz#b5c4c06c231f7274b06cbd65ef2049063e519141" + integrity sha512-RMj/trMk/VDzd3jYdP9M0cdiaj+RDqTEfztdMVAryBezCiP7mTxcpwROxGU5UQ4khF66YCyc2nGzUjPCulX2xg== + +"@0xsequence/indexer@^0.43.1": + version "0.43.1" + resolved "https://registry.yarnpkg.com/@0xsequence/indexer/-/indexer-0.43.1.tgz#47122a9cc540601f4c2bc5b3cbe4705f229e6c40" + integrity sha512-NhnLX0QIXUdBDSxMMWORTvAM8zKOWJcDQ5SrPPDsiKi6zdHS+sB6RgRFuIzCX0Q5rz00yWyjKYrumlFUScHNPw== + +"@0xsequence/metadata@^0.43.1": + version "0.43.1" + resolved "https://registry.yarnpkg.com/@0xsequence/metadata/-/metadata-0.43.1.tgz#3b1a52b0b0aedf880b2af6ee04e7c6f2a1be36b8" + integrity sha512-31uHCSpE1bcj5c91lkm1KqP8n1r2Ci+Ytd5lASNLNiJdtO0WI7ndRwCZ9DjMd38wACXrmDu/qwv7qHuJk+rlVQ== + +"@0xsequence/multicall@^0.43.1": + version "0.43.1" + resolved "https://registry.yarnpkg.com/@0xsequence/multicall/-/multicall-0.43.1.tgz#e40f9c710edf306f47f04fda893e5f34b498a221" + integrity sha512-kpyOotDhVUSjAFry0s4u7ZGpiCZ/IPZX/Gtd0qnhhPuLNQUYVR0quGo6ZfUGQe1FLM3LrzMkUZ73eVWMcTpx6A== + dependencies: + "@0xsequence/abi" "^0.43.1" + "@0xsequence/network" "^0.43.1" + "@0xsequence/utils" "^0.43.1" + +"@0xsequence/network@^0.43.1": + version "0.43.1" + resolved "https://registry.yarnpkg.com/@0xsequence/network/-/network-0.43.1.tgz#1080a6e0111056361356bd8f5a6c0a57ee0dd163" + integrity sha512-p0I4XfMEs23G6JNqvc9Ty7eBoBPvuVc0B03Nto/YYlrsyl9/AI9j5xpPxQUe33ofdNEKZJXPzafG7Uv2s0Zx4g== + dependencies: + "@0xsequence/utils" "^0.43.1" + +"@0xsequence/provider@^0.43.1": + version "0.43.1" + resolved "https://registry.yarnpkg.com/@0xsequence/provider/-/provider-0.43.1.tgz#b7aedad675bc6406bc17432d9b80a6385e21ca73" + integrity sha512-Nkntk4b2GKqleUCppkw0SZcESdTdH3IxBzL/xdfEiDwpP/OGCTohmEt50EAUUzb3xQ2KpyuMfXz1sdRQgJMBIA== + dependencies: + "@0xsequence/abi" "^0.43.1" + "@0xsequence/auth" "^0.43.1" + "@0xsequence/config" "^0.43.1" + "@0xsequence/network" "^0.43.1" + "@0xsequence/transactions" "^0.43.1" + "@0xsequence/utils" "^0.43.1" + "@0xsequence/wallet" "^0.43.1" + eventemitter2 "^6.4.5" + webextension-polyfill-ts "^0.26.0" -"@0xsequence/indexer@^0.40.5": - version "0.40.5" - resolved "https://registry.yarnpkg.com/@0xsequence/indexer/-/indexer-0.40.5.tgz#a9e458e2ae878c84b5db0d5f76d8ca8f305decc1" - integrity sha512-qhElen7TtO2yJjkkeNNSx0dUd6N1Kj8jGw7Nnb+BMYI5clpel1XGVdDqBbGSMB5J1U/oBzQlcpNYbV2u5yvjGA== +"@0xsequence/relayer@^0.43.1": + version "0.43.1" + resolved "https://registry.yarnpkg.com/@0xsequence/relayer/-/relayer-0.43.1.tgz#7f7e682c908885fbcf787bb5cd0eaf1aa8f1f9c9" + integrity sha512-y0Hhc15QlhM4XcpA5bfXa3mS74XlLLgfIx/kLPWWs5qIQOGvEGd49SJqj7YYWI19BmpLCjzRIqZRebk+J5OMhA== dependencies: - cross-fetch "^3.1.5" + "@0xsequence/abi" "^0.43.1" + "@0xsequence/config" "^0.43.1" + "@0xsequence/transactions" "^0.43.1" + "@0xsequence/utils" "^0.43.1" -"@0xsequence/metadata@^0.40.5": - version "0.40.5" - resolved "https://registry.yarnpkg.com/@0xsequence/metadata/-/metadata-0.40.5.tgz#c82d86f610648e5024216b75625be1887b2a218e" - integrity sha512-14/LD8ecTrp2BrWwdHvbN7Wo3j3zQOrjLrXjGU7mkb3kYB0RRygA6dlnVAki+ZLs6X92mnyoDBZjZgWhEghezg== +"@0xsequence/transactions@^0.43.1": + version "0.43.1" + resolved "https://registry.yarnpkg.com/@0xsequence/transactions/-/transactions-0.43.1.tgz#c0b8caf69e86208433f97f710b4d58694a9d71d8" + integrity sha512-mzJzBZKuPXi50MQOO1tquZGLhObu2dNDChny9PUoZpGkXIf4LtFgU5leVWLuhPLYfvKHn81touYxQmB92ZWk3A== dependencies: - cross-fetch "^3.1.5" - -"@0xsequence/multicall@^0.40.5": - version "0.40.5" - resolved "https://registry.yarnpkg.com/@0xsequence/multicall/-/multicall-0.40.5.tgz#96897ddc1d713a8fa0e9338fba00cb06dffc11c8" - integrity sha512-uSE4BFGRWoiGTZgxSikubRsDXL6AiAG/WA0XwSssXtxsfhCe0P6lgn7Uyp32k0V0qzh4f3GPkMM9q1MbhJJ/Ag== - dependencies: - "@0xsequence/abi" "^0.40.5" - "@0xsequence/network" "^0.40.5" - "@0xsequence/utils" "^0.40.5" - "@ethersproject/providers" "^5.5.1" - ethers "^5.5.2" - -"@0xsequence/network@^0.40.5": - version "0.40.5" - resolved "https://registry.yarnpkg.com/@0xsequence/network/-/network-0.40.5.tgz#3a6f42c163381b8fe4b34253d6fabdf98339ac48" - integrity sha512-ldEQYy6jAPL33SHmx2T8I+jlHzhy9t5g4fNqi7cdnoDuOEVW7ZC0t6087K/xy25pnxO35HyMNvu1bUNCPEOJhA== - dependencies: - "@0xsequence/utils" "^0.40.5" - "@ethersproject/providers" "^5.5.1" - ethers "^5.5.2" - -"@0xsequence/provider@^0.40.5": - version "0.40.5" - resolved "https://registry.yarnpkg.com/@0xsequence/provider/-/provider-0.40.5.tgz#9ed6f00ed13bf2d69352f0b63a2ba6b1059acaf2" - integrity sha512-A1QGdwSr7eXICIPrFrb4DQ8+gLlJbK+hATZXFd5Wpmr5qB7NhuwRCj7CNwL7IChnHiZA43hNB7sxjRZL8fmcFw== - dependencies: - "@0xsequence/abi" "^0.40.5" - "@0xsequence/auth" "^0.40.5" - "@0xsequence/config" "^0.40.5" - "@0xsequence/network" "^0.40.5" - "@0xsequence/transactions" "^0.40.5" - "@0xsequence/utils" "^0.40.5" - "@0xsequence/wallet" "^0.40.5" - "@ethersproject/abstract-signer" "^5.5.0" - "@ethersproject/hash" "^5.5.0" - "@ethersproject/providers" "^5.5.1" - "@ethersproject/web" "^5.5.1" - ethers "^5.5.2" - eventemitter2 "^6.4.5" - webextension-polyfill-ts "^0.26.0" + "@0xsequence/abi" "^0.43.1" + "@0xsequence/network" "^0.43.1" + "@0xsequence/utils" "^0.43.1" -"@0xsequence/relayer@^0.40.5": - version "0.40.5" - resolved "https://registry.yarnpkg.com/@0xsequence/relayer/-/relayer-0.40.5.tgz#56da6399742e4f0f0017fe30374487fc8b8160ae" - integrity sha512-3sv002ywHUm3pBTqOhcS7WmUwomLxQX0vht4PbWp5uzihRDIMUHburaJhE84iSTqaasYyHL3Xn+rIvfGsS+arw== - dependencies: - "@0xsequence/abi" "^0.40.5" - "@0xsequence/config" "^0.40.5" - "@0xsequence/transactions" "^0.40.5" - "@0xsequence/utils" "^0.40.5" - "@ethersproject/providers" "^5.5.1" - ethers "^5.5.2" - fetch-ponyfill "^7.1.0" - -"@0xsequence/transactions@^0.40.5": - version "0.40.5" - resolved "https://registry.yarnpkg.com/@0xsequence/transactions/-/transactions-0.40.5.tgz#fa77fea1ba27957c6bee6c5c4b07af0dd9fd0edb" - integrity sha512-03Cckcw3zm613xb3mGD9W4bj37150QQo4RNXrTlTNHelL1HVY9xmUO1hYJvvp+ka6GXve4VHfI/Oe1ZQ1ZdraA== - dependencies: - "@0xsequence/abi" "^0.40.5" - "@0xsequence/network" "^0.40.5" - "@0xsequence/utils" "^0.40.5" - "@ethersproject/abi" "^5.5.0" - ethers "^5.5.2" - -"@0xsequence/utils@^0.40.5": - version "0.40.5" - resolved "https://registry.yarnpkg.com/@0xsequence/utils/-/utils-0.40.5.tgz#5c3a84859acb38776fb18b331d790d3d51c2d3cf" - integrity sha512-FYt/qjtbrnB6+O3IHvZBCXPg1wQ97V+8i2DJCQ22Henv2bAgv8qBzJDcyGVe3R0ZgBiqH+hknp0AgwNXfKyECw== +"@0xsequence/utils@^0.43.1": + version "0.43.1" + resolved "https://registry.yarnpkg.com/@0xsequence/utils/-/utils-0.43.1.tgz#746f438b50b052e0e497e4c35ced766b26dcf94e" + integrity sha512-DJekVSPg/VVsSVOssdUL8tstdLryh/hJ4Tw7xnF48VPZYszagWm1ip26oSZxuc/qR8YZHuN9NNWONmVsMX/kLQ== dependencies: - "@ethersproject/abstract-signer" "^5.5.0" - "@ethersproject/properties" "^5.5.0" - ethers "^5.5.2" js-base64 "^3.7.2" -"@0xsequence/wallet@^0.40.5": - version "0.40.5" - resolved "https://registry.yarnpkg.com/@0xsequence/wallet/-/wallet-0.40.5.tgz#4637444012e53790c60bca6790ad0afc16955f79" - integrity sha512-i4vBlzm2qvdZH9reGL6jiiUAFh27zXrt7YWQemEbt1rBNGaePl8ajToAUL5iN/N5wqSWV+R1ntUX9OCTkYa1KA== - dependencies: - "@0xsequence/abi" "^0.40.5" - "@0xsequence/config" "^0.40.5" - "@0xsequence/guard" "^0.40.5" - "@0xsequence/network" "^0.40.5" - "@0xsequence/relayer" "^0.40.5" - "@0xsequence/transactions" "^0.40.5" - "@0xsequence/utils" "^0.40.5" - "@ethersproject/abi" "^5.5.0" - "@ethersproject/properties" "^5.5.0" - "@ethersproject/providers" "^5.5.1" - ethers "^5.5.2" - fetch-ponyfill "^7.1.0" +"@0xsequence/wallet@^0.43.1": + version "0.43.1" + resolved "https://registry.yarnpkg.com/@0xsequence/wallet/-/wallet-0.43.1.tgz#05c435df8f2f27f7c78dd856e0f45cf5ed57c648" + integrity sha512-E/kCFxBk5zgDGXCsK1d4Us5Vi4i7nbPUv9mWRrJQxH4R4uXPLOIw6CqNtE+dCkwMcDjOv0hgiAXJQ0O8DwYYUg== + dependencies: + "@0xsequence/abi" "^0.43.1" + "@0xsequence/config" "^0.43.1" + "@0xsequence/guard" "^0.43.1" + "@0xsequence/network" "^0.43.1" + "@0xsequence/relayer" "^0.43.1" + "@0xsequence/transactions" "^0.43.1" + "@0xsequence/utils" "^0.43.1" "@apocentre/alias-sampling@^0.5.3": version "0.5.3" @@ -381,24 +350,28 @@ "@babel/helper-validator-identifier" "^7.16.7" to-fast-properties "^2.0.0" -"@coinbase/wallet-sdk@^3.0.5": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@coinbase/wallet-sdk/-/wallet-sdk-3.0.5.tgz#d9eb49b482570e93ef9fd0bfe15c5582e28b3063" - integrity sha512-MsPhgS9b9DpNQdbuYEFDZToPVhh8OQZFkLH59LpYHXRxRIjQDsGGjXcLC50jfW06ElBbtB9adl5RlJTmXb9KbA== +"@coinbase/wallet-sdk@^3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@coinbase/wallet-sdk/-/wallet-sdk-3.6.0.tgz#52cc01d6721b171b69f8c4a83ef5029e52d997d4" + integrity sha512-p7RHnbhWiwVr9viX9Z5KLxKgzGoJRKcAN/BYRTsodnesgA7y+omangXncsxY+5eyQSflEL7Dqs0dv/yeDsomow== dependencies: "@metamask/safe-event-emitter" "2.0.0" + "@solana/web3.js" "1.52.0" bind-decorator "^1.0.11" bn.js "^5.1.1" + buffer "^6.0.3" clsx "^1.1.0" eth-block-tracker "4.4.3" eth-json-rpc-filters "4.2.2" eth-rpc-errors "4.0.2" - js-sha256 "0.9.0" json-rpc-engine "6.1.0" keccak "^3.0.1" preact "^10.5.9" + qs "^6.10.3" rxjs "^6.6.3" + sha.js "^2.4.11" stream-browserify "^3.0.0" + util "^0.12.4" "@cspotcode/source-map-consumer@0.8.0": version "0.8.0" @@ -534,21 +507,6 @@ "@ethersproject/properties" "^5.5.0" "@ethersproject/strings" "^5.5.0" -"@ethersproject/abi@5.6.4", "@ethersproject/abi@^5.6.3": - version "5.6.4" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.6.4.tgz#f6e01b6ed391a505932698ecc0d9e7a99ee60362" - integrity sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg== - dependencies: - "@ethersproject/address" "^5.6.1" - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/constants" "^5.6.1" - "@ethersproject/hash" "^5.6.1" - "@ethersproject/keccak256" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/strings" "^5.6.1" - "@ethersproject/abi@^5.0.1": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" @@ -564,6 +522,21 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" +"@ethersproject/abi@^5.6.3": + version "5.6.4" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.6.4.tgz#f6e01b6ed391a505932698ecc0d9e7a99ee60362" + integrity sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg== + dependencies: + "@ethersproject/address" "^5.6.1" + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/constants" "^5.6.1" + "@ethersproject/hash" "^5.6.1" + "@ethersproject/keccak256" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/strings" "^5.6.1" + "@ethersproject/abstract-provider@5.5.1", "@ethersproject/abstract-provider@^5.5.0": version "5.5.1" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.5.1.tgz#2f1f6e8a3ab7d378d8ad0b5718460f85649710c5" @@ -577,7 +550,7 @@ "@ethersproject/transactions" "^5.5.0" "@ethersproject/web" "^5.5.0" -"@ethersproject/abstract-provider@5.6.1", "@ethersproject/abstract-provider@^5.6.1": +"@ethersproject/abstract-provider@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz#02ddce150785caf0c77fe036a0ebfcee61878c59" integrity sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ== @@ -614,7 +587,7 @@ "@ethersproject/logger" "^5.5.0" "@ethersproject/properties" "^5.5.0" -"@ethersproject/abstract-signer@5.6.2", "@ethersproject/abstract-signer@^5.6.2": +"@ethersproject/abstract-signer@^5.6.2": version "5.6.2" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz#491f07fc2cbd5da258f46ec539664713950b0b33" integrity sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ== @@ -647,7 +620,7 @@ "@ethersproject/logger" "^5.5.0" "@ethersproject/rlp" "^5.5.0" -"@ethersproject/address@5.6.1", "@ethersproject/address@^5.6.1": +"@ethersproject/address@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.6.1.tgz#ab57818d9aefee919c5721d28cd31fd95eff413d" integrity sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q== @@ -676,7 +649,7 @@ dependencies: "@ethersproject/bytes" "^5.5.0" -"@ethersproject/base64@5.6.1", "@ethersproject/base64@^5.6.1": +"@ethersproject/base64@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.6.1.tgz#2c40d8a0310c9d1606c2c37ae3092634b41d87cb" integrity sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw== @@ -698,14 +671,6 @@ "@ethersproject/bytes" "^5.5.0" "@ethersproject/properties" "^5.5.0" -"@ethersproject/basex@5.6.1", "@ethersproject/basex@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.6.1.tgz#badbb2f1d4a6f52ce41c9064f01eab19cc4c5305" - integrity sha512-a52MkVz4vuBXR06nvflPMotld1FJWSj2QT0985v7P/emPZO00PucFAkbcmq2vpVU7Ts7umKiSI6SppiLykVWsA== - dependencies: - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/bignumber@5.5.0", "@ethersproject/bignumber@^5.0.7", "@ethersproject/bignumber@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.5.0.tgz#875b143f04a216f4f8b96245bde942d42d279527" @@ -715,7 +680,7 @@ "@ethersproject/logger" "^5.5.0" bn.js "^4.11.9" -"@ethersproject/bignumber@5.6.2", "@ethersproject/bignumber@^5.6.2": +"@ethersproject/bignumber@^5.6.2": version "5.6.2" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.6.2.tgz#72a0717d6163fab44c47bcc82e0c550ac0315d66" integrity sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw== @@ -740,7 +705,7 @@ dependencies: "@ethersproject/logger" "^5.5.0" -"@ethersproject/bytes@5.6.1", "@ethersproject/bytes@^5.6.1": +"@ethersproject/bytes@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.6.1.tgz#24f916e411f82a8a60412344bf4a813b917eefe7" integrity sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g== @@ -761,7 +726,7 @@ dependencies: "@ethersproject/bignumber" "^5.5.0" -"@ethersproject/constants@5.6.1", "@ethersproject/constants@^5.6.1": +"@ethersproject/constants@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.6.1.tgz#e2e974cac160dd101cf79fdf879d7d18e8cb1370" integrity sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg== @@ -791,22 +756,6 @@ "@ethersproject/properties" "^5.5.0" "@ethersproject/transactions" "^5.5.0" -"@ethersproject/contracts@5.6.2": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.6.2.tgz#20b52e69ebc1b74274ff8e3d4e508de971c287bc" - integrity sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g== - dependencies: - "@ethersproject/abi" "^5.6.3" - "@ethersproject/abstract-provider" "^5.6.1" - "@ethersproject/abstract-signer" "^5.6.2" - "@ethersproject/address" "^5.6.1" - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/constants" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/transactions" "^5.6.2" - "@ethersproject/hash@5.5.0", "@ethersproject/hash@^5.0.4", "@ethersproject/hash@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.5.0.tgz#7cee76d08f88d1873574c849e0207dcb32380cc9" @@ -821,7 +770,7 @@ "@ethersproject/properties" "^5.5.0" "@ethersproject/strings" "^5.5.0" -"@ethersproject/hash@5.6.1", "@ethersproject/hash@^5.6.1": +"@ethersproject/hash@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.6.1.tgz#224572ea4de257f05b4abf8ae58b03a67e99b0f4" integrity sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA== @@ -868,24 +817,6 @@ "@ethersproject/transactions" "^5.5.0" "@ethersproject/wordlists" "^5.5.0" -"@ethersproject/hdnode@5.6.2", "@ethersproject/hdnode@^5.6.2": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.6.2.tgz#26f3c83a3e8f1b7985c15d1db50dc2903418b2d2" - integrity sha512-tERxW8Ccf9CxW2db3WsN01Qao3wFeRsfYY9TCuhmG0xNpl2IO8wgXU3HtWIZ49gUWPggRy4Yg5axU0ACaEKf1Q== - dependencies: - "@ethersproject/abstract-signer" "^5.6.2" - "@ethersproject/basex" "^5.6.1" - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/pbkdf2" "^5.6.1" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/sha2" "^5.6.1" - "@ethersproject/signing-key" "^5.6.2" - "@ethersproject/strings" "^5.6.1" - "@ethersproject/transactions" "^5.6.2" - "@ethersproject/wordlists" "^5.6.1" - "@ethersproject/json-wallets@5.5.0", "@ethersproject/json-wallets@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.5.0.tgz#dd522d4297e15bccc8e1427d247ec8376b60e325" @@ -905,25 +836,6 @@ aes-js "3.0.0" scrypt-js "3.0.1" -"@ethersproject/json-wallets@5.6.1", "@ethersproject/json-wallets@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.6.1.tgz#3f06ba555c9c0d7da46756a12ac53483fe18dd91" - integrity sha512-KfyJ6Zwz3kGeX25nLihPwZYlDqamO6pfGKNnVMWWfEVVp42lTfCZVXXy5Ie8IZTN0HKwAngpIPi7gk4IJzgmqQ== - dependencies: - "@ethersproject/abstract-signer" "^5.6.2" - "@ethersproject/address" "^5.6.1" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/hdnode" "^5.6.2" - "@ethersproject/keccak256" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/pbkdf2" "^5.6.1" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/random" "^5.6.1" - "@ethersproject/strings" "^5.6.1" - "@ethersproject/transactions" "^5.6.2" - aes-js "3.0.0" - scrypt-js "3.0.1" - "@ethersproject/keccak256@5.5.0", "@ethersproject/keccak256@^5.0.3", "@ethersproject/keccak256@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.5.0.tgz#e4b1f9d7701da87c564ffe336f86dcee82983492" @@ -932,7 +844,7 @@ "@ethersproject/bytes" "^5.5.0" js-sha3 "0.8.0" -"@ethersproject/keccak256@5.6.1", "@ethersproject/keccak256@^5.6.1": +"@ethersproject/keccak256@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.6.1.tgz#b867167c9b50ba1b1a92bccdd4f2d6bd168a91cc" integrity sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA== @@ -953,7 +865,7 @@ resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.5.0.tgz#0c2caebeff98e10aefa5aef27d7441c7fd18cf5d" integrity sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg== -"@ethersproject/logger@5.6.0", "@ethersproject/logger@^5.6.0": +"@ethersproject/logger@^5.6.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.6.0.tgz#d7db1bfcc22fd2e4ab574cba0bb6ad779a9a3e7a" integrity sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg== @@ -970,7 +882,7 @@ dependencies: "@ethersproject/logger" "^5.5.0" -"@ethersproject/networks@5.6.4", "@ethersproject/networks@^5.6.3": +"@ethersproject/networks@^5.6.3": version "5.6.4" resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.6.4.tgz#51296d8fec59e9627554f5a8a9c7791248c8dc07" integrity sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ== @@ -992,14 +904,6 @@ "@ethersproject/bytes" "^5.5.0" "@ethersproject/sha2" "^5.5.0" -"@ethersproject/pbkdf2@5.6.1", "@ethersproject/pbkdf2@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.6.1.tgz#f462fe320b22c0d6b1d72a9920a3963b09eb82d1" - integrity sha512-k4gRQ+D93zDRPNUfmduNKq065uadC2YjMP/CqwwX5qG6R05f47boq6pLZtV/RnC4NZAYOPH1Cyo54q0c9sshRQ== - dependencies: - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/sha2" "^5.6.1" - "@ethersproject/properties@5.5.0", "@ethersproject/properties@^5.0.3", "@ethersproject/properties@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.5.0.tgz#61f00f2bb83376d2071baab02245f92070c59995" @@ -1007,7 +911,7 @@ dependencies: "@ethersproject/logger" "^5.5.0" -"@ethersproject/properties@5.6.0", "@ethersproject/properties@^5.6.0": +"@ethersproject/properties@^5.6.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.6.0.tgz#38904651713bc6bdd5bdd1b0a4287ecda920fa04" integrity sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg== @@ -1071,32 +975,6 @@ bech32 "1.1.4" ws "7.4.6" -"@ethersproject/providers@5.6.8", "@ethersproject/providers@^5.5.1": - version "5.6.8" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.6.8.tgz#22e6c57be215ba5545d3a46cf759d265bb4e879d" - integrity sha512-Wf+CseT/iOJjrGtAOf3ck9zS7AgPmr2fZ3N97r4+YXN3mBePTG2/bJ8DApl9mVwYL+RpYbNxMEkEp4mPGdwG/w== - dependencies: - "@ethersproject/abstract-provider" "^5.6.1" - "@ethersproject/abstract-signer" "^5.6.2" - "@ethersproject/address" "^5.6.1" - "@ethersproject/base64" "^5.6.1" - "@ethersproject/basex" "^5.6.1" - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/constants" "^5.6.1" - "@ethersproject/hash" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/networks" "^5.6.3" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/random" "^5.6.1" - "@ethersproject/rlp" "^5.6.1" - "@ethersproject/sha2" "^5.6.1" - "@ethersproject/strings" "^5.6.1" - "@ethersproject/transactions" "^5.6.2" - "@ethersproject/web" "^5.6.1" - bech32 "1.1.4" - ws "7.4.6" - "@ethersproject/random@5.5.1", "@ethersproject/random@^5.5.0": version "5.5.1" resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.5.1.tgz#7cdf38ea93dc0b1ed1d8e480ccdaf3535c555415" @@ -1105,14 +983,6 @@ "@ethersproject/bytes" "^5.5.0" "@ethersproject/logger" "^5.5.0" -"@ethersproject/random@5.6.1", "@ethersproject/random@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.6.1.tgz#66915943981bcd3e11bbd43733f5c3ba5a790255" - integrity sha512-/wtPNHwbmng+5yi3fkipA8YBT59DdkGRoC2vWk09Dci/q5DlgnMkhIycjHlavrvrjJBkFjO/ueLyT+aUDfc4lA== - dependencies: - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/rlp@5.5.0", "@ethersproject/rlp@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.5.0.tgz#530f4f608f9ca9d4f89c24ab95db58ab56ab99a0" @@ -1121,7 +991,7 @@ "@ethersproject/bytes" "^5.5.0" "@ethersproject/logger" "^5.5.0" -"@ethersproject/rlp@5.6.1", "@ethersproject/rlp@^5.6.1": +"@ethersproject/rlp@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.6.1.tgz#df8311e6f9f24dcb03d59a2bac457a28a4fe2bd8" integrity sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ== @@ -1146,15 +1016,6 @@ "@ethersproject/logger" "^5.5.0" hash.js "1.1.7" -"@ethersproject/sha2@5.6.1", "@ethersproject/sha2@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.6.1.tgz#211f14d3f5da5301c8972a8827770b6fd3e51656" - integrity sha512-5K2GyqcW7G4Yo3uenHegbXRPDgARpWUiXc6RiF7b6i/HXUoWlb7uCARh7BAHg7/qT/Q5ydofNwiZcim9qpjB6g== - dependencies: - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - hash.js "1.1.7" - "@ethersproject/signing-key@5.5.0", "@ethersproject/signing-key@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.5.0.tgz#2aa37169ce7e01e3e80f2c14325f624c29cedbe0" @@ -1167,7 +1028,7 @@ elliptic "6.5.4" hash.js "1.1.7" -"@ethersproject/signing-key@5.6.2", "@ethersproject/signing-key@^5.6.2": +"@ethersproject/signing-key@^5.6.2": version "5.6.2" resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.6.2.tgz#8a51b111e4d62e5a62aee1da1e088d12de0614a3" integrity sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ== @@ -1203,18 +1064,6 @@ "@ethersproject/sha2" "^5.5.0" "@ethersproject/strings" "^5.5.0" -"@ethersproject/solidity@5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.6.1.tgz#5845e71182c66d32e6ec5eefd041fca091a473e2" - integrity sha512-KWqVLkUUoLBfL1iwdzUVlkNqAUIFMpbbeH0rgCfKmJp0vFtY4AsaN91gHKo9ZZLkC4UOm3cI3BmMV4N53BOq4g== - dependencies: - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/keccak256" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/sha2" "^5.6.1" - "@ethersproject/strings" "^5.6.1" - "@ethersproject/strings@5.5.0", "@ethersproject/strings@^5.0.4", "@ethersproject/strings@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.5.0.tgz#e6784d00ec6c57710755699003bc747e98c5d549" @@ -1224,7 +1073,7 @@ "@ethersproject/constants" "^5.5.0" "@ethersproject/logger" "^5.5.0" -"@ethersproject/strings@5.6.1", "@ethersproject/strings@^5.6.1": +"@ethersproject/strings@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.6.1.tgz#dbc1b7f901db822b5cafd4ebf01ca93c373f8952" integrity sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw== @@ -1257,7 +1106,7 @@ "@ethersproject/rlp" "^5.5.0" "@ethersproject/signing-key" "^5.5.0" -"@ethersproject/transactions@5.6.2", "@ethersproject/transactions@^5.6.2": +"@ethersproject/transactions@^5.6.2": version "5.6.2" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.6.2.tgz#793a774c01ced9fe7073985bb95a4b4e57a6370b" integrity sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q== @@ -1296,15 +1145,6 @@ "@ethersproject/constants" "^5.5.0" "@ethersproject/logger" "^5.5.0" -"@ethersproject/units@5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.6.1.tgz#ecc590d16d37c8f9ef4e89e2005bda7ddc6a4e6f" - integrity sha512-rEfSEvMQ7obcx3KWD5EWWx77gqv54K6BKiZzKxkQJqtpriVsICrktIQmKl8ReNToPeIYPnFHpXvKpi068YFZXw== - dependencies: - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/constants" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/wallet@5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.5.0.tgz#322a10527a440ece593980dca6182f17d54eae75" @@ -1326,27 +1166,6 @@ "@ethersproject/transactions" "^5.5.0" "@ethersproject/wordlists" "^5.5.0" -"@ethersproject/wallet@5.6.2": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.6.2.tgz#cd61429d1e934681e413f4bc847a5f2f87e3a03c" - integrity sha512-lrgh0FDQPuOnHcF80Q3gHYsSUODp6aJLAdDmDV0xKCN/T7D99ta1jGVhulg3PY8wiXEngD0DfM0I2XKXlrqJfg== - dependencies: - "@ethersproject/abstract-provider" "^5.6.1" - "@ethersproject/abstract-signer" "^5.6.2" - "@ethersproject/address" "^5.6.1" - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/hash" "^5.6.1" - "@ethersproject/hdnode" "^5.6.2" - "@ethersproject/json-wallets" "^5.6.1" - "@ethersproject/keccak256" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/random" "^5.6.1" - "@ethersproject/signing-key" "^5.6.2" - "@ethersproject/transactions" "^5.6.2" - "@ethersproject/wordlists" "^5.6.1" - "@ethersproject/web@5.5.1", "@ethersproject/web@^5.5.0": version "5.5.1" resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.5.1.tgz#cfcc4a074a6936c657878ac58917a61341681316" @@ -1358,7 +1177,7 @@ "@ethersproject/properties" "^5.5.0" "@ethersproject/strings" "^5.5.0" -"@ethersproject/web@5.6.1", "@ethersproject/web@^5.5.1", "@ethersproject/web@^5.6.1": +"@ethersproject/web@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.6.1.tgz#6e2bd3ebadd033e6fe57d072db2b69ad2c9bdf5d" integrity sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA== @@ -1391,17 +1210,6 @@ "@ethersproject/properties" "^5.5.0" "@ethersproject/strings" "^5.5.0" -"@ethersproject/wordlists@5.6.1", "@ethersproject/wordlists@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.6.1.tgz#1e78e2740a8a21e9e99947e47979d72e130aeda1" - integrity sha512-wiPRgBpNbNwCQFoCr8bcWO8o5I810cqO6mkdtKfLKFlLxeCWcnzDi4Alu8iyNzlhYuS9npCwivMbRWF19dyblw== - dependencies: - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/hash" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/strings" "^5.6.1" - "@findeth/abi@^0.3.0": version "0.3.1" resolved "https://registry.yarnpkg.com/@findeth/abi/-/abi-0.3.1.tgz#fe9a25211bc0c840c8bc53f937fd9af7278b9dab" @@ -2043,6 +1851,29 @@ dependencies: buffer "~6.0.3" +"@solana/web3.js@1.52.0": + version "1.52.0" + resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.52.0.tgz#71bd5c322a31e3e2fa8cda2261c594846810b8ea" + integrity sha512-oG1+BX4nVYZ0OBzmk6DRrY8oBYMsbXVQEf9N9JOfKm+wXSmjxVEEo8v3IPV8mKwR0JvUWuE8lOn3IUDiMlRLgg== + dependencies: + "@babel/runtime" "^7.12.5" + "@ethersproject/sha2" "^5.5.0" + "@solana/buffer-layout" "^4.0.0" + bigint-buffer "^1.1.5" + bn.js "^5.0.0" + borsh "^0.7.0" + bs58 "^4.0.1" + buffer "6.0.1" + fast-stable-stringify "^1.0.0" + jayson "^3.4.4" + js-sha3 "^0.8.0" + node-fetch "2" + react-native-url-polyfill "^1.3.0" + rpc-websockets "^7.5.0" + secp256k1 "^4.0.2" + superstruct "^0.14.2" + tweetnacl "^1.0.3" + "@solana/web3.js@^1.43.0", "@solana/web3.js@^1.43.6": version "1.44.0" resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.44.0.tgz#233f7bd268520a0ce852ff7f92ded150c5fad0f5" @@ -4053,10 +3884,10 @@ bnb-javascript-sdk-nobroadcast@^2.16.14: uuid "^3.3.2" websocket-stream "^5.5.0" -bnc-sdk@^4.4.1: - version "4.4.1" - resolved "https://registry.yarnpkg.com/bnc-sdk/-/bnc-sdk-4.4.1.tgz#dc9dda2962eb28a5deafe8ac0f9305b63fa38ac4" - integrity sha512-S8urB7JPqTo+BGiAJJ9g7/NqMspzXXYhWlxFXOKy6YjyVEDBMqZ1j4aVLQaoPkaIPRV249wnu+tb4kuWbsKk3A== +bnc-sdk@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/bnc-sdk/-/bnc-sdk-4.6.2.tgz#3ba6c2305c1eecfbbf021865898c56704f391c60" + integrity sha512-XPYr1PNCEwJvb6X+xYZCbM7Nr1qN7aSendDxDKsHROyHSqbLN5Q+BobIAGrCxwUolpk9GzuO3zl/oRSVaiRyPg== dependencies: crypto-es "^1.2.2" nanoid "^3.3.1" @@ -6081,42 +5912,6 @@ ethers@5.5.4, ethers@^5.4.7: "@ethersproject/web" "5.5.1" "@ethersproject/wordlists" "5.5.0" -ethers@^5.5.2: - version "5.6.9" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.6.9.tgz#4e12f8dfcb67b88ae7a78a9519b384c23c576a4d" - integrity sha512-lMGC2zv9HC5EC+8r429WaWu3uWJUCgUCt8xxKCFqkrFuBDZXDYIdzDUECxzjf2BMF8IVBByY1EBoGSL3RTm8RA== - dependencies: - "@ethersproject/abi" "5.6.4" - "@ethersproject/abstract-provider" "5.6.1" - "@ethersproject/abstract-signer" "5.6.2" - "@ethersproject/address" "5.6.1" - "@ethersproject/base64" "5.6.1" - "@ethersproject/basex" "5.6.1" - "@ethersproject/bignumber" "5.6.2" - "@ethersproject/bytes" "5.6.1" - "@ethersproject/constants" "5.6.1" - "@ethersproject/contracts" "5.6.2" - "@ethersproject/hash" "5.6.1" - "@ethersproject/hdnode" "5.6.2" - "@ethersproject/json-wallets" "5.6.1" - "@ethersproject/keccak256" "5.6.1" - "@ethersproject/logger" "5.6.0" - "@ethersproject/networks" "5.6.4" - "@ethersproject/pbkdf2" "5.6.1" - "@ethersproject/properties" "5.6.0" - "@ethersproject/providers" "5.6.8" - "@ethersproject/random" "5.6.1" - "@ethersproject/rlp" "5.6.1" - "@ethersproject/sha2" "5.6.1" - "@ethersproject/signing-key" "5.6.2" - "@ethersproject/solidity" "5.6.1" - "@ethersproject/strings" "5.6.1" - "@ethersproject/transactions" "5.6.2" - "@ethersproject/units" "5.6.1" - "@ethersproject/wallet" "5.6.2" - "@ethersproject/web" "5.6.1" - "@ethersproject/wordlists" "5.6.1" - ethjs-unit@0.1.6, ethjs-unit@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" @@ -6139,9 +5934,9 @@ eventemitter2@^5.0.1: integrity sha1-YZegldX7a1folC9v1+qtY6CclFI= eventemitter2@^6.4.5: - version "6.4.7" - resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.7.tgz#a7f6c4d7abf28a14c1ef3442f21cb306a054271d" - integrity sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg== + version "6.4.9" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.9.tgz#41f2750781b4230ed58827bc119d293471ecb125" + integrity sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg== eventemitter3@4.0.4: version "4.0.4" @@ -6329,13 +6124,6 @@ faye-websocket@^0.11.3: dependencies: websocket-driver ">=0.5.1" -fetch-ponyfill@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/fetch-ponyfill/-/fetch-ponyfill-7.1.0.tgz#4266ed48b4e64663a50ab7f7fcb8e76f990526d0" - integrity sha512-FhbbL55dj/qdVO3YNK7ZEkshvj3eQ7EuIGV2I6ic/2YiocvyWv+7jg2s4AyS0wdRU75s3tA8ZxI/xPigb0v5Aw== - dependencies: - node-fetch "~2.6.1" - file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -7409,9 +7197,9 @@ jose@^4.5.0: integrity sha512-3S4wQnaoJKSAx9uHSoyf8B/lxjs1qCntHWL6wNFszJazo+FtWe+qD0zVfY0BlqJ5HHK4jcnM98k3BQzVLbzE4g== js-base64@^3.7.2: - version "3.7.2" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.7.2.tgz#816d11d81a8aff241603d19ce5761e13e41d7745" - integrity sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ== + version "3.7.3" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.7.3.tgz#2e784bb0851636bf1e99ef12e4f3a8a8c9b7639f" + integrity sha512-PAr6Xg2jvd7MCR6Ld9Jg3BmTcjYsHEBx1VlwEwULb/qowPf5VD9kEMagj23Gm7JRnSvE/Da/57nChZjnvL8v6A== js-sha256@0.9.0: version "0.9.0" @@ -8264,7 +8052,7 @@ node-addon-api@^2.0.0: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== -node-fetch@2, node-fetch@2.6.7, node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.7, node-fetch@~2.6.1: +node-fetch@2, node-fetch@2.6.7, node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.7: version "2.6.7" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== @@ -9015,6 +8803,13 @@ qs@6.9.7: resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.7.tgz#4610846871485e1e048f44ae3b94033f0e675afe" integrity sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw== +qs@^6.10.3: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + qs@~6.5.2: version "6.5.3" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" @@ -9142,6 +8937,13 @@ react-modal@^3.12.1: react-lifecycles-compat "^3.0.0" warning "^4.0.3" +react-native-url-polyfill@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/react-native-url-polyfill/-/react-native-url-polyfill-1.3.0.tgz#c1763de0f2a8c22cc3e959b654c8790622b6ef6a" + integrity sha512-w9JfSkvpqqlix9UjDvJjm1EjSt652zVQ6iwCIj1cVVkwXf4jQhQgTNXY6EVTwuAmUjg6BC6k9RHCBynoLFo3IQ== + dependencies: + whatwg-url-without-unicode "8.0.0-3" + react-qr-code@^2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/react-qr-code/-/react-qr-code-2.0.7.tgz#508304e031e82426a044f5e9490aca87d7c3de38" @@ -9423,7 +9225,7 @@ rollup@^2.3.4: optionalDependencies: fsevents "~2.3.2" -rpc-websockets@^7.4.2: +rpc-websockets@^7.4.2, rpc-websockets@^7.5.0: version "7.5.0" resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-7.5.0.tgz#bbeb87572e66703ff151e50af1658f98098e2748" integrity sha512-9tIRi1uZGy7YmDjErf1Ax3wtqdSSLIlnmL5OtOzgd5eqPKbsPpwDP5whUDO2LQay3Xp0CcHlcNSGzacNRluBaQ== @@ -11512,6 +11314,11 @@ webidl-conversions@^4.0.2: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== +webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== + webpack-cli@^4.4.0: version "4.9.2" resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.9.2.tgz#77c1adaea020c3f9e2db8aad8ea78d235c83659d" @@ -11699,6 +11506,15 @@ whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0: resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== +whatwg-url-without-unicode@8.0.0-3: + version "8.0.0-3" + resolved "https://registry.yarnpkg.com/whatwg-url-without-unicode/-/whatwg-url-without-unicode-8.0.0-3.tgz#ab6df4bf6caaa6c85a59f6e82c026151d4bb376b" + integrity sha512-HoKuzZrUlgpz35YO27XgD28uh/WJH4B0+3ttFqRo//lmq+9T/mIOJ6kqmINI9HpUpz1imRC/nR/lxKpJiv0uig== + dependencies: + buffer "^5.4.3" + punycode "^2.1.1" + webidl-conversions "^5.0.0" + whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"