@romeblockchain/wallet
Version:
Implmentation of web3react-v8 for RT widgets
1 lines • 26.8 kB
Source Map (JSON)
{"version":3,"sources":["../src/index.ts","../src/hooks/useWallets.ts","../src/context/WalletProvider.tsx","../src/connection/connectors.ts","../src/chains.ts","../src/connection/utils.ts","../src/hooks/useOrderedConnections.ts"],"sourcesContent":["export * from '@web3-react/core'\nexport * from './hooks/useWallets'\nexport * from './chains'\nexport * from './connection/connectors'\nexport * from './context/WalletProvider'\nexport * from './connection/utils'\n","import { useContext } from 'react'\nimport { WalletContext } from '../context/WalletProvider'\n\nexport function useWallets() {\n const context = useContext(WalletContext)\n if (context === undefined) {\n throw new Error('useWallet must be used within a useWalletsProvider')\n }\n return context\n}\n","import { useWeb3React, Web3ReactHooks, Web3ReactProvider } from '@web3-react/core'\nimport React, { useEffect, useState, ReactNode, useMemo } from 'react'\nimport { AddEthereumChainParameter, Connector } from '@web3-react/types'\nimport { ethers } from 'ethers'\nimport { RomeEventType, widgetBridge } from '@romeblockchain/bridge'\nimport bannedAccounts from '../../src/bannedAccounts.json'\nimport { Connection, ConnectionType, networkConnection } from '../connection/connectors'\nimport { getConnection, getConnectionName } from '../connection/utils'\nimport useOrderedConnections from '../hooks/useOrderedConnections'\n\nexport interface IWalletContext {\n setSelectedWallet: (ConnectionType: undefined) => void\n selectedWallet: ConnectionType | undefined\n handleConnect: (connector: Connector, chainParams?: AddEthereumChainParameter) => Promise<void>\n loading: boolean\n}\n\nexport const WalletContext = React.createContext<IWalletContext>({\n setSelectedWallet: () => {},\n selectedWallet: undefined,\n handleConnect: async () => {},\n loading: false,\n})\n\nconst OfacBan = ({ children }: any) => {\n const { account } = useWeb3React()\n const ofacBanned = account && bannedAccounts.includes(account.toLowerCase())\n if (ofacBanned) {\n return (\n <div\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n width: '100%',\n height: '100%',\n }}\n >\n <div\n style={{\n padding: '1.25rem',\n backgroundColor: '#991b1b',\n borderRadius: '0.375rem',\n }}\n >\n <p\n style={{\n marginBottom: '0.75rem',\n fontSize: 'large',\n }}\n >\n Blocked Address\n </p>\n <p>This address is blocked because it is associated with banned activities.</p>\n </div>\n </div>\n )\n }\n return children\n}\n\nexport const WalletProvider = ({ children, connectToNetwork }: { children: ReactNode; connectToNetwork?: boolean }) => {\n const [selectedWallet, setSelectedWallet] = useState<ConnectionType>()\n const [loading, setLoading] = useState(false)\n\n const connections = useOrderedConnections(selectedWallet)\n\n const handleConnect = async (connector: Connector, chainParams?: AddEthereumChainParameter) => {\n const connection = getConnection(connector)\n const chainIdInput = chainParams && chainParams.chainId ? chainParams.chainId : undefined\n const chainIdInputHex = chainIdInput ? ethers.utils.hexValue(chainIdInput) : undefined\n setLoading(true)\n\n try {\n // error would return true if user rejects the wallet connection request\n // if network doesnt exist yet connector.activate would not throw an error and still successsfully activate\n await connector.activate(chainIdInput)\n // activate needs to occur before wallet_addEthereumChain because we can only make requests with an active\n // connector.\n\n // check if chainId was passed, if it did, then we can assume that\n // the user wished to add \"Chain\" and do a \"Network Switch\"\n // otherwise this is just simply a wallet connect\n if (chainIdInput != undefined) {\n // calling wallet_addEthereumChain will check if the chainId is already present in the wallet\n // if the chainId alreaady exists then it wont add the duplicate network to the wallet\n connector.provider\n ?.request({\n method: 'wallet_addEthereumChain',\n params: [\n {\n ...chainParams,\n chainId: chainIdInputHex,\n },\n ],\n })\n .then(() => console.log('chain added'))\n \n connector.provider\n ?.request({\n method: 'wallet_switchEthereumChain',\n params: [{ \n chainId: chainIdInputHex\n }],\n })\n .then(() => console.log('switched network'))\n \n // we need to subscribe to chainChanged because we would only want to switch selectedWallet when\n // the user has switched networks especially when the netork is newly added\n connector.provider?.once('chainChanged', () => {\n console.log('Chain changed')\n setSelectedWallet(connection.type)\n connector.provider?.removeListener('chainChanged', () => {})\n })\n }\n\n // If wallet is already connected to the correct network then set wallet as priority wallet\n const chainId = await connector.provider?.request({\n method: 'eth_chainId',\n })\n\n const accounts = (await connector.provider?.request({\n method: 'eth_requestAccounts',\n })) as string[]\n\n widgetBridge?.sendWalletConnectEvent(RomeEventType.WIDGET_WALLET_CONNECT_EVENT, {\n address: accounts[0],\n wallet: ConnectionType as any,\n })\n\n if (!chainId) throw new Error('Unable to get chainID from provider')\n\n if (chainId === chainIdInputHex) {\n setSelectedWallet(connection.type)\n }\n } catch (error: any) {\n throw new Error('Unable to connect to wallet. error:', error)\n }\n\n setLoading(false)\n }\n\n useEffect(() => {\n if (!selectedWallet) {\n widgetBridge?.sendWalletDisconnectEvent(RomeEventType.WIDGET_WALLET_DISCONNECT_EVENT)\n }\n }, [selectedWallet])\n\n useEffect(() => {\n if (connectToNetwork) {\n networkConnection.connector.activate()\n }\n }, [connectToNetwork])\n\n const key = useMemo(() => connections.map(({ type }: Connection) => getConnectionName(type)).join('-'), [connections])\n\n const connectors: [Connector, Web3ReactHooks][] = connections.map(({ hooks, connector }) => [connector, hooks])\n return (\n <Web3ReactProvider connectors={connectors} key={key}>\n <WalletContext.Provider value={{ selectedWallet, setSelectedWallet, handleConnect, loading }}>\n <OfacBan>{children}</OfacBan>\n </WalletContext.Provider>\n </Web3ReactProvider>\n )\n}\n","import { CoinbaseWallet } from '@web3-react/coinbase-wallet'\nimport { initializeConnector, Web3ReactHooks } from '@web3-react/core'\nimport { MetaMask } from '@web3-react/metamask'\nimport { Network } from '@web3-react/network'\nimport { Connector } from '@web3-react/types'\nimport { WalletConnect } from '@web3-react/walletconnect'\nimport { URLS } from '../chains'\n\nexport enum ConnectionType {\n INJECTED = 'INJECTED',\n COINBASE_WALLET = 'COINBASE_WALLET',\n WALLET_CONNECT = 'WALLET_CONNECT',\n NETWORK = 'NETWORK',\n GNOSIS_SAFE = 'GNOSIS_SAFE',\n}\n\nexport interface Connection {\n connector: Connector\n hooks: Web3ReactHooks\n type: ConnectionType\n}\n\nfunction onError(error: Error) {\n console.debug(`web3-react error: ${error}`)\n}\n\nconst [web3Network, web3NetworkHooks] = initializeConnector<Network>(\n (actions) =>\n new Network({\n actions,\n urlMap: URLS,\n defaultChainId: 1,\n }),\n)\nexport const networkConnection: Connection = {\n connector: web3Network,\n hooks: web3NetworkHooks,\n type: ConnectionType.NETWORK,\n}\n\nconst [web3Injected, web3InjectedHooks] = initializeConnector<MetaMask>((actions) => new MetaMask({ actions, onError }))\nexport const injectedConnection: Connection = {\n connector: web3Injected,\n hooks: web3InjectedHooks,\n type: ConnectionType.INJECTED,\n}\n\nconst [web3WalletConnect, web3WalletConnectHooks] = initializeConnector<WalletConnect>((actions) => {\n return new WalletConnect({\n actions,\n options: {\n rpc: URLS,\n qrcode: true,\n },\n onError,\n })\n})\nexport const walletConnectConnection: Connection = {\n connector: web3WalletConnect,\n hooks: web3WalletConnectHooks,\n type: ConnectionType.WALLET_CONNECT,\n}\n\nconst [web3CoinbaseWallet, web3CoinbaseWalletHooks] = initializeConnector<CoinbaseWallet>(\n (actions) =>\n new CoinbaseWallet({\n actions,\n options: {\n url: URLS[1][0],\n appName: 'RBL',\n appLogoUrl: 'https://app.benqi.fi/favicon.svg',\n reloadOnDisconnect: false,\n },\n onError,\n }),\n)\nexport const coinbaseWalletConnection: Connection = {\n connector: web3CoinbaseWallet,\n hooks: web3CoinbaseWalletHooks,\n type: ConnectionType.COINBASE_WALLET,\n}\n\nexport const ConnectionList: Connection[] = [injectedConnection, coinbaseWalletConnection, walletConnectConnection]\n","import type { AddEthereumChainParameter } from '@web3-react/types'\n\nconst INFURA_KEY = process.env.REACT_APP_INFURA_KEY ? process.env.REACT_APP_INFURA_KEY : process.env.INFURA_KEY\n\nconst ALCHEMY_KEY = process.env.REACT_APP_ALCHEMY_KEY ? process.env.REACT_APP_ALCHEMY_KEY : process.env.ALCHEMY_KEY\n\nconst ETH: AddEthereumChainParameter['nativeCurrency'] = {\n name: 'Ether',\n symbol: 'ETH',\n decimals: 18,\n}\n\nconst MATIC: AddEthereumChainParameter['nativeCurrency'] = {\n name: 'Matic',\n symbol: 'MATIC',\n decimals: 18,\n}\nconst AVAX: AddEthereumChainParameter['nativeCurrency'] = {\n name: 'Avax',\n symbol: 'AVAX',\n decimals: 18,\n}\nconst BNB: AddEthereumChainParameter['nativeCurrency'] = {\n name: 'Binance Coin',\n symbol: 'BNB',\n decimals: 18,\n}\n\nconst GLMR: AddEthereumChainParameter['nativeCurrency'] = {\n name: 'Glimmer',\n symbol: 'GLMR',\n decimals: 18,\n}\nconst MOVR: AddEthereumChainParameter['nativeCurrency'] = {\n name: 'Moonriver',\n symbol: 'MOVR',\n decimals: 18,\n}\nconst METIS: AddEthereumChainParameter['nativeCurrency'] = {\n name: 'Metis',\n symbol: 'METIS',\n decimals: 18,\n}\n\nconst JEWEL: AddEthereumChainParameter['nativeCurrency'] = {\n name: 'Jewel',\n symbol: 'JEWEL',\n decimals: 18,\n}\n\nconst KLAY: AddEthereumChainParameter['nativeCurrency'] = {\n name: 'Klay',\n symbol: 'KLAY',\n decimals: 18,\n}\n\ninterface BasicChainInformation {\n urls: (string | undefined)[]\n name: string\n}\n\nexport enum NetworkName {\n ETHEREUM = 'ethereum',\n AVALANCHE = 'avalanche',\n BINANCE = 'bsc',\n MOONBEAM = 'moonbeam',\n MOONRIVER = 'moonriver',\n METIS = 'metis',\n OPTIMISM = 'optimism',\n POLYGON = 'polygon',\n DFK = 'dfk',\n KLAYTN = 'klaytn',\n}\n\ninterface ExtendedChainInformation extends BasicChainInformation {\n nativeCurrency: AddEthereumChainParameter['nativeCurrency']\n blockExplorerUrls: AddEthereumChainParameter['blockExplorerUrls']\n}\n\nexport function getAddChainParameters(chainId: number): AddEthereumChainParameter {\n const chainInformation = CHAINS[chainId]\n return {\n chainId,\n chainName: chainInformation.name,\n nativeCurrency: chainInformation.nativeCurrency,\n rpcUrls: chainInformation.urls as any,\n blockExplorerUrls: chainInformation.blockExplorerUrls,\n }\n}\n\nconst NetworkChainMap: { [key in NetworkName]: number } = {\n ethereum: 1,\n avalanche: 43114,\n bsc: 56,\n moonbeam: 1284,\n moonriver: 1285,\n metis: 1088,\n optimism: 10,\n polygon: 137,\n dfk: 53935,\n klaytn: 8217,\n}\n\nexport const CHAINS: { [chainId: number]: ExtendedChainInformation } = {\n 1: {\n urls: [\n INFURA_KEY ? `https://mainnet.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161` : undefined,\n ALCHEMY_KEY ? `https://eth-mainnet.alchemyapi.io/v2/${ALCHEMY_KEY}` : undefined,\n 'https://cloudflare-eth.com',\n ].filter((url) => url !== undefined),\n name: 'Mainnet',\n nativeCurrency: ETH,\n blockExplorerUrls: ['https://etherscan.io/'],\n },\n 5: {\n urls: [INFURA_KEY ? `https://goerli.infura.io/v3/${INFURA_KEY}` : undefined].filter((url) => url !== undefined),\n name: 'Görli',\n nativeCurrency: ETH,\n blockExplorerUrls: ['https://goerli.etherscan.io/'],\n },\n // Optimism\n 10: {\n urls: [\n INFURA_KEY ? `https://optimism-mainnet.infura.io/v3/${INFURA_KEY}` : undefined,\n 'https://mainnet.optimism.io',\n ].filter((url) => url !== undefined),\n name: 'Optimism',\n nativeCurrency: ETH,\n blockExplorerUrls: ['https://optimistic.etherscan.io'],\n },\n // Arbitrum\n 42161: {\n urls: [\n INFURA_KEY ? `https://arbitrum-mainnet.infura.io/v3/${INFURA_KEY}` : undefined,\n 'https://arb1.arbitrum.io/rpc',\n ].filter((url) => url !== undefined),\n name: 'Arbitrum One',\n nativeCurrency: ETH,\n blockExplorerUrls: ['https://arbiscan.io'],\n },\n // Polygon\n 137: {\n urls: [\n INFURA_KEY ? `https://polygon-mainnet.infura.io/v3/${INFURA_KEY}` : undefined,\n 'https://polygon-rpc.com',\n ].filter((url) => url !== undefined),\n name: 'Polygon Mainnet',\n nativeCurrency: MATIC,\n blockExplorerUrls: ['https://polygonscan.com'],\n },\n 80001: {\n urls: [INFURA_KEY ? `https://polygon-mumbai.infura.io/v3/${INFURA_KEY}` : undefined].filter(\n (url) => url !== undefined,\n ),\n name: 'Polygon Mumbai',\n nativeCurrency: MATIC,\n blockExplorerUrls: ['https://mumbai.polygonscan.com'],\n },\n 43114: {\n urls: ['https://api.avax.network/ext/bc/C/rpc'].filter((url) => url !== undefined),\n name: 'Avalanche',\n nativeCurrency: AVAX,\n blockExplorerUrls: ['https://snowtrace.io'],\n },\n\n 56: {\n urls: ['https://bsc-dataseed.binance.org'].filter((url) => url !== undefined),\n name: 'Binance',\n nativeCurrency: BNB,\n blockExplorerUrls: ['https://bscscan.com'],\n },\n 1284: {\n urls: ['https://rpc.api.moonbeam.network'].filter((url) => url !== undefined),\n name: 'Glimmer',\n nativeCurrency: GLMR,\n blockExplorerUrls: ['https://moonbeam.moonscan.io'],\n },\n 1285: {\n urls: ['https://rpc.moonriver.moonbeam.network'].filter((url) => url !== undefined),\n name: 'Moonriver',\n nativeCurrency: MOVR,\n blockExplorerUrls: ['https://moonriver.moonscan.io'],\n },\n 1088: {\n urls: ['https://andromeda.metis.io/?owner=1088'].filter((url) => url !== undefined),\n name: 'Metis',\n nativeCurrency: METIS,\n blockExplorerUrls: ['https://andromeda-explorer.metis.io'],\n },\n 53935: {\n urls: ['https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc'].filter((url) => url !== undefined),\n name: 'DFK',\n nativeCurrency: JEWEL,\n blockExplorerUrls: ['https://subnets.avax.network/defi-kingdoms'],\n },\n 8217: {\n urls: ['https://public-node-api.klaytnapi.com/v1/cypress'].filter((url) => url !== undefined),\n name: 'Klaytn',\n nativeCurrency: KLAY,\n blockExplorerUrls: ['https://scope.klaytn.com'],\n },\n}\n\nexport const URLS: { [chainId: number]: string[] } = Object.keys(CHAINS).reduce<{ [chainId: number]: string[] }>(\n (accumulator, chainId) => {\n const validURLs: string[] = CHAINS[Number(chainId)].urls as any\n\n if (validURLs.length) {\n accumulator[Number(chainId)] = validURLs\n }\n\n return accumulator\n },\n {},\n)\nexport const getAddChainParametersfromNetworkName = (network: NetworkName): AddEthereumChainParameter | number => {\n const chainId = NetworkChainMap[network]\n return getAddChainParameters(chainId)\n}\n","import { Connector } from '@web3-react/types'\n\nimport {\n injectedConnection,\n coinbaseWalletConnection,\n walletConnectConnection,\n networkConnection,\n ConnectionType,\n} from './connectors'\nconst CONNECTIONS = [injectedConnection, coinbaseWalletConnection, walletConnectConnection, networkConnection]\n\nexport function getConnection(connector: Connector | ConnectionType) {\n if (connector instanceof Connector) {\n const connection = CONNECTIONS.find((connection) => connection.connector === connector)\n if (!connection) {\n throw Error('unsupported connector')\n }\n\n return connection\n } else {\n switch (connector) {\n case ConnectionType.INJECTED:\n return injectedConnection\n case ConnectionType.COINBASE_WALLET:\n return coinbaseWalletConnection\n case ConnectionType.WALLET_CONNECT:\n return walletConnectConnection\n case ConnectionType.NETWORK:\n return networkConnection\n default:\n throw Error('invalid connector')\n }\n }\n}\n\nexport function getConnectionName(connectionType: ConnectionType, isMetaMask?: boolean, connectionName?: string) {\n switch (connectionType) {\n case ConnectionType.INJECTED:\n return isMetaMask ? 'MetaMask' : connectionName ? connectionName : 'Browser Wallet'\n case ConnectionType.COINBASE_WALLET:\n return 'Coinbase Wallet'\n case ConnectionType.WALLET_CONNECT:\n return 'WalletConnect'\n case ConnectionType.NETWORK:\n return 'Network'\n case ConnectionType.GNOSIS_SAFE:\n return 'Gnosis Safe'\n }\n}\n","import { useMemo } from 'react'\nimport { ConnectionType } from '../connection/connectors'\nimport { getConnection } from '../connection/utils'\n\nconst SELECTABLE_WALLETS = [ConnectionType.INJECTED, ConnectionType.COINBASE_WALLET, ConnectionType.WALLET_CONNECT]\n\nexport default function useOrderedConnections(selectedWallet: ConnectionType | undefined) {\n return useMemo(() => {\n const orderedConnectionTypes: ConnectionType[] = []\n\n // Add the `selectedWallet` to the top so it's prioritized, then add the other selectable wallets.\n if (selectedWallet) {\n orderedConnectionTypes.push(selectedWallet)\n }\n orderedConnectionTypes.push(...SELECTABLE_WALLETS.filter((wallet) => wallet !== selectedWallet))\n\n // Add network connection last as it should be the fallback.\n orderedConnectionTypes.push(ConnectionType.NETWORK)\n\n return orderedConnectionTypes.map(getConnection)\n }, [selectedWallet])\n}\n"],"mappings":"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","names":[]}