diff --git a/landing/siwe.react.js b/landing/siwe.react.js --- a/landing/siwe.react.js +++ b/landing/siwe.react.js @@ -12,16 +12,7 @@ import _merge from 'lodash/fp/merge'; import * as React from 'react'; import '@rainbow-me/rainbowkit/dist/index.css'; -import { - useAccount, - useSigner, - chain, - configureChains, - createClient, - WagmiConfig, -} from 'wagmi'; -import { alchemyProvider } from 'wagmi/providers/alchemy'; -import { publicProvider } from 'wagmi/providers/public'; +import { useAccount, useSigner, WagmiConfig } from 'wagmi'; import type { SIWEWebViewMessage } from 'lib/types/siwe-types'; import { @@ -30,29 +21,14 @@ siweMessageSigningExplanationStatements, createSIWEMessage, } from 'lib/utils/siwe-utils.js'; +import { configureWagmiChains, createWagmiClient } from 'lib/utils/wagmi-utils'; import { SIWEContext } from './siwe-context.js'; import css from './siwe.css'; -// details can be found https://0.6.x.wagmi.sh/docs/providers/configuring-chains -const availableProviders = process.env.COMM_ALCHEMY_KEY - ? [alchemyProvider({ apiKey: process.env.COMM_ALCHEMY_KEY })] - : [publicProvider()]; -const { chains, provider } = configureChains( - [chain.mainnet], - availableProviders, -); - -const { connectors } = getDefaultWallets({ - appName: 'comm', - chains, -}); - -const wagmiClient = createClient({ - autoConnect: true, - connectors, - provider, -}); +const { chains, provider } = configureWagmiChains(process.env.COMM_ALCHEMY_KEY); +const { connectors } = getDefaultWallets({ appName: 'comm', chains }); +const wagmiClient = createWagmiClient({ connectors, provider }); function postMessageToNativeWebView(message: SIWEWebViewMessage) { window.ReactNativeWebView?.postMessage?.(JSON.stringify(message)); diff --git a/lib/package.json b/lib/package.json --- a/lib/package.json +++ b/lib/package.json @@ -46,7 +46,8 @@ "tokenize-text": "^1.1.3", "url-parse-lax": "^3.0.0", "util-inspect": "^0.1.8", - "utils-copy-error": "^1.0.1" + "utils-copy-error": "^1.0.1", + "wagmi": "^0.6.0" }, "jest": { "transform": { diff --git a/lib/utils/wagmi-utils.js b/lib/utils/wagmi-utils.js new file mode 100644 --- /dev/null +++ b/lib/utils/wagmi-utils.js @@ -0,0 +1,37 @@ +// @flow + +import { chain, configureChains, createClient } from 'wagmi'; +import { alchemyProvider } from 'wagmi/providers/alchemy'; +import { publicProvider } from 'wagmi/providers/public'; + +// details can be found https://0.6.x.wagmi.sh/docs/providers/configuring-chains + +type WagmiChainConfiguration = { + +chains: mixed, + +provider: mixed, +}; +function configureWagmiChains(alchemyKey: ?string): WagmiChainConfiguration { + const availableProviders = alchemyKey + ? [alchemyProvider({ apiKey: alchemyKey })] + : [publicProvider()]; + const { chains, provider } = configureChains( + [chain.mainnet], + availableProviders, + ); + return { chains, provider }; +} + +type WagmiClientInput = { + +provider: mixed, + +connectors?: mixed, +}; +function createWagmiClient(input: WagmiClientInput): mixed { + const { provider, connectors } = input; + return createClient({ + autoConnect: true, + connectors, + provider, + }); +} + +export { configureWagmiChains, createWagmiClient }; diff --git a/web/account/siwe.react.js b/web/account/siwe.react.js --- a/web/account/siwe.react.js +++ b/web/account/siwe.react.js @@ -13,16 +13,7 @@ import _merge from 'lodash/fp/merge'; import * as React from 'react'; import { FaEthereum } from 'react-icons/fa'; -import { - chain, - configureChains, - createClient, - useAccount, - useSigner, - WagmiConfig, -} from 'wagmi'; -import { alchemyProvider } from 'wagmi/providers/alchemy'; -import { publicProvider } from 'wagmi/providers/public'; +import { useAccount, useSigner, WagmiConfig } from 'wagmi'; import { getSIWENonce, @@ -41,6 +32,7 @@ siweMessageSigningExplanationStatements, siweStatementWithoutPublicKey, } from 'lib/utils/siwe-utils.js'; +import { configureWagmiChains, createWagmiClient } from 'lib/utils/wagmi-utils'; import Button from '../components/button.react'; import LoadingIndicator from '../loading-indicator.react'; @@ -48,25 +40,9 @@ import { webLogInExtraInfoSelector } from '../selectors/account-selectors.js'; import css from './siwe.css'; -// details can be found https://0.6.x.wagmi.sh/docs/providers/configuring-chains -const availableProviders = process.env.COMM_ALCHEMY_KEY - ? [alchemyProvider({ apiKey: process.env.COMM_ALCHEMY_KEY })] - : [publicProvider()]; -const { chains, provider } = configureChains( - [chain.mainnet], - availableProviders, -); - -const { connectors } = getDefaultWallets({ - appName: 'comm', - chains, -}); - -const wagmiClient = createClient({ - autoConnect: true, - connectors, - provider, -}); +const { chains, provider } = configureWagmiChains(process.env.COMM_ALCHEMY_KEY); +const { connectors } = getDefaultWallets({ appName: 'comm', chains }); +const wagmiClient = createWagmiClient({ connectors, provider }); const getSIWENonceLoadingStatusSelector = createLoadingStatusSelector( getSIWENonceActionTypes,