{"ast":null,"code":"var _jsxFileName = \"/home/jsw/code/codeoneline/web3-react/example/pages/index.tsx\";\nvar __jsx = React.createElement;\nimport React from 'react';\nimport { Web3ReactProvider, useWeb3React, UnsupportedChainIdError } from '@web3-react-wan/core';\nimport { NoEthereumProviderError, UserRejectedRequestError as UserRejectedRequestErrorInjected } from '@web3-react-wan/injected-connector';\nimport { UserRejectedRequestError as UserRejectedRequestErrorWalletConnect } from '@web3-react-wan/walletconnect-connector';\nimport { UserRejectedRequestError as UserRejectedRequestErrorFrame } from '@web3-react-wan/frame-connector';\nimport { Web3Provider } from '@wansproject/providers';\nimport { formatEther } from '@wansproject/units';\nimport { useEagerConnect, useInactiveListener } from '../hooks';\nimport { injected, network, walletconnect, walletlink, ledger, trezor, frame, authereum, fortmatic, magic, portis, squarelink, torus } from '../connectors';\nimport { Spinner } from '../components/Spinner';\nvar ConnectorNames;\n\n(function (ConnectorNames) {\n  ConnectorNames[\"Injected\"] = \"Injected\";\n  ConnectorNames[\"Network\"] = \"Network\";\n  ConnectorNames[\"WalletConnect\"] = \"WalletConnect\";\n  ConnectorNames[\"WalletLink\"] = \"WalletLink\";\n  ConnectorNames[\"Ledger\"] = \"Ledger\";\n  ConnectorNames[\"Trezor\"] = \"Trezor\";\n  ConnectorNames[\"Frame\"] = \"Frame\";\n  ConnectorNames[\"Authereum\"] = \"Authereum\";\n  ConnectorNames[\"Fortmatic\"] = \"Fortmatic\";\n  ConnectorNames[\"Magic\"] = \"Magic\";\n  ConnectorNames[\"Portis\"] = \"Portis\";\n  ConnectorNames[\"Squarelink\"] = \"Squarelink\";\n  ConnectorNames[\"Torus\"] = \"Torus\";\n})(ConnectorNames || (ConnectorNames = {}));\n\nconst connectorsByName = {\n  [ConnectorNames.Injected]: injected,\n  [ConnectorNames.Network]: network,\n  [ConnectorNames.WalletConnect]: walletconnect,\n  [ConnectorNames.WalletLink]: walletlink,\n  [ConnectorNames.Ledger]: ledger,\n  [ConnectorNames.Trezor]: trezor,\n  [ConnectorNames.Frame]: frame,\n  [ConnectorNames.Authereum]: authereum,\n  [ConnectorNames.Fortmatic]: fortmatic,\n  [ConnectorNames.Magic]: magic,\n  [ConnectorNames.Portis]: portis,\n  [ConnectorNames.Squarelink]: squarelink,\n  [ConnectorNames.Torus]: torus\n};\n\nfunction getErrorMessage(error) {\n  if (error instanceof NoEthereumProviderError) {\n    return 'No Ethereum browser extension detected, install MetaMask on desktop or visit from a dApp browser on mobile.';\n  } else if (error instanceof UnsupportedChainIdError) {\n    return \"You're connected to an unsupported network.\";\n  } else if (error instanceof UserRejectedRequestErrorInjected || error instanceof UserRejectedRequestErrorWalletConnect || error instanceof UserRejectedRequestErrorFrame) {\n    return 'Please authorize this website to access your Ethereum account.';\n  } else {\n    console.error(error);\n    return 'An unknown error occurred. Check the console for more details.';\n  }\n}\n\nfunction getLibrary(provider) {\n  const library = new Web3Provider(provider);\n  library.pollingInterval = 12000;\n  return library;\n}\n\nexport default function () {\n  return __jsx(Web3ReactProvider, {\n    getLibrary: getLibrary,\n    __self: this,\n    __source: {\n      fileName: _jsxFileName,\n      lineNumber: 87,\n      columnNumber: 5\n    }\n  }, __jsx(App, {\n    __self: this,\n    __source: {\n      fileName: _jsxFileName,\n      lineNumber: 88,\n      columnNumber: 7\n    }\n  }));\n}\n\nfunction ChainId() {\n  const {\n    chainId\n  } = useWeb3React();\n  return __jsx(React.Fragment, null, __jsx(\"span\", {\n    __self: this,\n    __source: {\n      fileName: _jsxFileName,\n      lineNumber: 98,\n      columnNumber: 7\n    }\n  }, \"Chain Id\"), __jsx(\"span\", {\n    role: \"img\",\n    \"aria-label\": \"chain\",\n    __self: this,\n    __source: {\n      fileName: _jsxFileName,\n      lineNumber: 99,\n      columnNumber: 7\n    }\n  }, \"\\u26D3\"), __jsx(\"span\", {\n    __self: this,\n    __source: {\n      fileName: _jsxFileName,\n      lineNumber: 102,\n      columnNumber: 7\n    }\n  }, chainId !== null && chainId !== void 0 ? chainId : ''));\n}\n\nfunction BlockNumber() {\n  const {\n    chainId,\n    library\n  } = useWeb3React();\n  const [blockNumber, setBlockNumber] = React.useState();\n  React.useEffect(() => {\n    if (!!library) {\n      let stale = false;\n      library.getBlockNumber().then(blockNumber => {\n        if (!stale) {\n          setBlockNumber(blockNumber);\n        }\n      }).catch(() => {\n        if (!stale) {\n          setBlockNumber(null);\n        }\n      });\n\n      const updateBlockNumber = blockNumber => {\n        setBlockNumber(blockNumber);\n      };\n\n      library.on('block', updateBlockNumber);\n      return () => {\n        stale = true;\n        library.removeListener('block', updateBlockNumber);\n        setBlockNumber(undefined);\n      };\n    }\n  }, [library, chainId]); // ensures refresh if referential identity of library doesn't change across chainIds\n\n  return __jsx(React.Fragment, null, __jsx(\"span\", {\n    __self: this,\n    __source: {\n      fileName: _jsxFileName,\n      lineNumber: 143,\n      columnNumber: 7\n    }\n  }, \"Block Number\"), __jsx(\"span\", {\n    role: \"img\",\n    \"aria-label\": \"numbers\",\n    __self: this,\n    __source: {\n      fileName: _jsxFileName,\n      lineNumber: 144,\n      columnNumber: 7\n    }\n  }, \"\\uD83D\\uDD22\"), __jsx(\"span\", {\n    __self: this,\n    __source: {\n      fileName: _jsxFileName,\n      lineNumber: 147,\n      columnNumber: 7\n    }\n  }, blockNumber === null ? 'Error' : blockNumber !== null && blockNumber !== void 0 ? blockNumber : ''));\n}\n\nfunction Account() {\n  const {\n    account\n  } = useWeb3React();\n  return __jsx(React.Fragment, null, __jsx(\"span\", {\n    __self: this,\n    __source: {\n      fileName: _jsxFileName,\n      lineNumber: 157,\n      columnNumber: 7\n    }\n  }, \"Account\"), __jsx(\"span\", {\n    role: \"img\",\n    \"aria-label\": \"robot\",\n    __self: this,\n    __source: {\n      fileName: _jsxFileName,\n      lineNumber: 158,\n      columnNumber: 7\n    }\n  }, \"\\uD83E\\uDD16\"), __jsx(\"span\", {\n    __self: this,\n    __source: {\n      fileName: _jsxFileName,\n      lineNumber: 161,\n      columnNumber: 7\n    }\n  }, account === null ? '-' : account ? `${account.substring(0, 6)}...${account.substring(account.length - 4)}` : ''));\n}\n\nfunction Balance() {\n  const {\n    account,\n    library,\n    chainId\n  } = useWeb3React();\n  const [balance, setBalance] = React.useState();\n  React.useEffect(() => {\n    if (!!account && !!library) {\n      let stale = false;\n      library.getBalance(account).then(balance => {\n        if (!stale) {\n          setBalance(balance);\n        }\n      }).catch(() => {\n        if (!stale) {\n          setBalance(null);\n        }\n      });\n      return () => {\n        stale = true;\n        setBalance(undefined);\n      };\n    }\n  }, [account, library, chainId]); // ensures refresh if referential identity of library doesn't change across chainIds\n\n  return __jsx(React.Fragment, null, __jsx(\"span\", {\n    __self: this,\n    __source: {\n      fileName: _jsxFileName,\n      lineNumber: 202,\n      columnNumber: 7\n    }\n  }, \"Balance\"), __jsx(\"span\", {\n    role: \"img\",\n    \"aria-label\": \"gold\",\n    __self: this,\n    __source: {\n      fileName: _jsxFileName,\n      lineNumber: 203,\n      columnNumber: 7\n    }\n  }, \"\\uD83D\\uDCB0\"), __jsx(\"span\", {\n    __self: this,\n    __source: {\n      fileName: _jsxFileName,\n      lineNumber: 206,\n      columnNumber: 7\n    }\n  }, balance === null ? 'Error' : balance ? `Ξ${formatEther(balance)}` : ''));\n}\n\nfunction Header() {\n  const {\n    active,\n    error\n  } = useWeb3React();\n  return __jsx(React.Fragment, null, __jsx(\"h1\", {\n    style: {\n      margin: '1rem',\n      textAlign: 'right'\n    },\n    __self: this,\n    __source: {\n      fileName: _jsxFileName,\n      lineNumber: 216,\n      columnNumber: 7\n    }\n  }, active ? '🟢' : error ? '🔴' : '🟠'), __jsx(\"h3\", {\n    style: {\n      display: 'grid',\n      gridGap: '1rem',\n      gridTemplateColumns: '1fr min-content 1fr',\n      maxWidth: '20rem',\n      lineHeight: '2rem',\n      margin: 'auto'\n    },\n    __self: this,\n    __source: {\n      fileName: _jsxFileName,\n      lineNumber: 217,\n      columnNumber: 7\n    }\n  }, __jsx(ChainId, {\n    __self: this,\n    __source: {\n      fileName: _jsxFileName,\n      lineNumber: 227,\n      columnNumber: 9\n    }\n  }), __jsx(BlockNumber, {\n    __self: this,\n    __source: {\n      fileName: _jsxFileName,\n      lineNumber: 228,\n      columnNumber: 9\n    }\n  }), __jsx(Account, {\n    __self: this,\n    __source: {\n      fileName: _jsxFileName,\n      lineNumber: 229,\n      columnNumber: 9\n    }\n  }), __jsx(Balance, {\n    __self: this,\n    __source: {\n      fileName: _jsxFileName,\n      lineNumber: 230,\n      columnNumber: 9\n    }\n  })));\n}\n\nfunction App() {\n  const context = useWeb3React();\n  const {\n    connector,\n    library,\n    chainId,\n    account,\n    activate,\n    deactivate,\n    active,\n    error\n  } = context; // handle logic to recognize the connector currently being activated\n\n  const [activatingConnector, setActivatingConnector] = React.useState();\n  React.useEffect(() => {\n    if (activatingConnector && activatingConnector === connector) {\n      setActivatingConnector(undefined);\n    }\n  }, [activatingConnector, connector]); // handle logic to eagerly connect to the injected ethereum provider, if it exists and has granted access already\n\n  const triedEager = useEagerConnect(); // handle logic to connect in reaction to certain events on the injected ethereum provider, if it exists\n\n  useInactiveListener(!triedEager || !!activatingConnector);\n  return __jsx(React.Fragment, null, __jsx(Header, {\n    __self: this,\n    __source: {\n      fileName: _jsxFileName,\n      lineNumber: 256,\n      columnNumber: 7\n    }\n  }), __jsx(\"hr\", {\n    style: {\n      margin: '2rem'\n    },\n    __self: this,\n    __source: {\n      fileName: _jsxFileName,\n      lineNumber: 257,\n      columnNumber: 7\n    }\n  }), __jsx(\"div\", {\n    style: {\n      display: 'grid',\n      gridGap: '1rem',\n      gridTemplateColumns: '1fr 1fr',\n      maxWidth: '20rem',\n      margin: 'auto'\n    },\n    __self: this,\n    __source: {\n      fileName: _jsxFileName,\n      lineNumber: 258,\n      columnNumber: 7\n    }\n  }, Object.keys(connectorsByName).map(name => {\n    const currentConnector = connectorsByName[name];\n    const activating = currentConnector === activatingConnector;\n    const connected = currentConnector === connector;\n    const disabled = !triedEager || !!activatingConnector || connected || !!error;\n    return __jsx(\"button\", {\n      style: {\n        height: '3rem',\n        borderRadius: '1rem',\n        borderColor: activating ? 'orange' : connected ? 'green' : 'unset',\n        cursor: disabled ? 'unset' : 'pointer',\n        position: 'relative'\n      },\n      disabled: disabled,\n      key: name,\n      onClick: () => {\n        setActivatingConnector(currentConnector);\n        activate(connectorsByName[name]);\n      },\n      __self: this,\n      __source: {\n        fileName: _jsxFileName,\n        lineNumber: 274,\n        columnNumber: 13\n      }\n    }, __jsx(\"div\", {\n      style: {\n        position: 'absolute',\n        top: '0',\n        left: '0',\n        height: '100%',\n        display: 'flex',\n        alignItems: 'center',\n        color: 'black',\n        margin: '0 0 0 1rem'\n      },\n      __self: this,\n      __source: {\n        fileName: _jsxFileName,\n        lineNumber: 289,\n        columnNumber: 15\n      }\n    }, activating && __jsx(Spinner, {\n      color: 'black',\n      style: {\n        height: '25%',\n        marginLeft: '-1rem'\n      },\n      __self: this,\n      __source: {\n        fileName: _jsxFileName,\n        lineNumber: 301,\n        columnNumber: 32\n      }\n    }), connected && __jsx(\"span\", {\n      role: \"img\",\n      \"aria-label\": \"check\",\n      __self: this,\n      __source: {\n        fileName: _jsxFileName,\n        lineNumber: 303,\n        columnNumber: 19\n      }\n    }, \"\\u2705\")), name);\n  })), __jsx(\"div\", {\n    style: {\n      display: 'flex',\n      flexDirection: 'column',\n      alignItems: 'center'\n    },\n    __self: this,\n    __source: {\n      fileName: _jsxFileName,\n      lineNumber: 313,\n      columnNumber: 7\n    }\n  }, (active || error) && __jsx(\"button\", {\n    style: {\n      height: '3rem',\n      marginTop: '2rem',\n      borderRadius: '1rem',\n      borderColor: 'red',\n      cursor: 'pointer'\n    },\n    onClick: () => {\n      deactivate();\n    },\n    __self: this,\n    __source: {\n      fileName: _jsxFileName,\n      lineNumber: 315,\n      columnNumber: 11\n    }\n  }, \"Deactivate\"), !!error && __jsx(\"h4\", {\n    style: {\n      marginTop: '1rem',\n      marginBottom: '0'\n    },\n    __self: this,\n    __source: {\n      fileName: _jsxFileName,\n      lineNumber: 331,\n      columnNumber: 21\n    }\n  }, getErrorMessage(error))), __jsx(\"hr\", {\n    style: {\n      margin: '2rem'\n    },\n    __self: this,\n    __source: {\n      fileName: _jsxFileName,\n      lineNumber: 334,\n      columnNumber: 7\n    }\n  }), __jsx(\"div\", {\n    style: {\n      display: 'grid',\n      gridGap: '1rem',\n      gridTemplateColumns: 'fit-content',\n      maxWidth: '20rem',\n      margin: 'auto'\n    },\n    __self: this,\n    __source: {\n      fileName: _jsxFileName,\n      lineNumber: 336,\n      columnNumber: 7\n    }\n  }, !!(library && account) && __jsx(\"button\", {\n    style: {\n      height: '3rem',\n      borderRadius: '1rem',\n      cursor: 'pointer'\n    },\n    onClick: () => {\n      library.getSigner(account).signMessage('👋').then(signature => {\n        window.alert(`Success!\\n\\n${signature}`);\n      }).catch(error => {\n        window.alert('Failure!' + (error && error.message ? `\\n\\n${error.message}` : ''));\n      });\n    },\n    __self: this,\n    __source: {\n      fileName: _jsxFileName,\n      lineNumber: 346,\n      columnNumber: 11\n    }\n  }, \"Sign Message\"), !!(connector === connectorsByName[ConnectorNames.Network] && chainId) && __jsx(\"button\", {\n    style: {\n      height: '3rem',\n      borderRadius: '1rem',\n      cursor: 'pointer'\n    },\n    onClick: () => {\n      ;\n      connector.changeChainId(chainId === 1 ? 4 : 1);\n    },\n    __self: this,\n    __source: {\n      fileName: _jsxFileName,\n      lineNumber: 368,\n      columnNumber: 11\n    }\n  }, \"Switch Networks\"), connector === connectorsByName[ConnectorNames.WalletConnect] && __jsx(\"button\", {\n    style: {\n      height: '3rem',\n      borderRadius: '1rem',\n      cursor: 'pointer'\n    },\n    onClick: () => {\n      ;\n      connector.close();\n    },\n    __self: this,\n    __source: {\n      fileName: _jsxFileName,\n      lineNumber: 382,\n      columnNumber: 11\n    }\n  }, \"Kill WalletConnect Session\"), connector === connectorsByName[ConnectorNames.WalletLink] && __jsx(\"button\", {\n    style: {\n      height: '3rem',\n      borderRadius: '1rem',\n      cursor: 'pointer'\n    },\n    onClick: () => {\n      ;\n      connector.close();\n    },\n    __self: this,\n    __source: {\n      fileName: _jsxFileName,\n      lineNumber: 396,\n      columnNumber: 11\n    }\n  }, \"Kill WalletLink Session\"), connector === connectorsByName[ConnectorNames.Fortmatic] && __jsx(\"button\", {\n    style: {\n      height: '3rem',\n      borderRadius: '1rem',\n      cursor: 'pointer'\n    },\n    onClick: () => {\n      ;\n      connector.close();\n    },\n    __self: this,\n    __source: {\n      fileName: _jsxFileName,\n      lineNumber: 410,\n      columnNumber: 11\n    }\n  }, \"Kill Fortmatic Session\"), connector === connectorsByName[ConnectorNames.Magic] && __jsx(\"button\", {\n    style: {\n      height: '3rem',\n      borderRadius: '1rem',\n      cursor: 'pointer'\n    },\n    onClick: () => {\n      ;\n      connector.close();\n    },\n    __self: this,\n    __source: {\n      fileName: _jsxFileName,\n      lineNumber: 424,\n      columnNumber: 11\n    }\n  }, \"Kill Magic Session\"), connector === connectorsByName[ConnectorNames.Portis] && __jsx(React.Fragment, null, chainId !== undefined && __jsx(\"button\", {\n    style: {\n      height: '3rem',\n      borderRadius: '1rem',\n      cursor: 'pointer'\n    },\n    onClick: () => {\n      ;\n      connector.changeNetwork(chainId === 1 ? 100 : 1);\n    },\n    __self: this,\n    __source: {\n      fileName: _jsxFileName,\n      lineNumber: 440,\n      columnNumber: 15\n    }\n  }, \"Switch Networks\"), __jsx(\"button\", {\n    style: {\n      height: '3rem',\n      borderRadius: '1rem',\n      cursor: 'pointer'\n    },\n    onClick: () => {\n      ;\n      connector.close();\n    },\n    __self: this,\n    __source: {\n      fileName: _jsxFileName,\n      lineNumber: 453,\n      columnNumber: 13\n    }\n  }, \"Kill Portis Session\")), connector === connectorsByName[ConnectorNames.Torus] && __jsx(\"button\", {\n    style: {\n      height: '3rem',\n      borderRadius: '1rem',\n      cursor: 'pointer'\n    },\n    onClick: () => {\n      ;\n      connector.close();\n    },\n    __self: this,\n    __source: {\n      fileName: _jsxFileName,\n      lineNumber: 468,\n      columnNumber: 11\n    }\n  }, \"Kill Torus Session\")));\n}","map":{"version":3,"sources":["/home/jsw/code/codeoneline/web3-react/example/pages/index.tsx"],"names":["React","Web3ReactProvider","useWeb3React","UnsupportedChainIdError","NoEthereumProviderError","UserRejectedRequestError","UserRejectedRequestErrorInjected","UserRejectedRequestErrorWalletConnect","UserRejectedRequestErrorFrame","Web3Provider","formatEther","useEagerConnect","useInactiveListener","injected","network","walletconnect","walletlink","ledger","trezor","frame","authereum","fortmatic","magic","portis","squarelink","torus","Spinner","ConnectorNames","connectorsByName","Injected","Network","WalletConnect","WalletLink","Ledger","Trezor","Frame","Authereum","Fortmatic","Magic","Portis","Squarelink","Torus","getErrorMessage","error","console","getLibrary","provider","library","pollingInterval","ChainId","chainId","BlockNumber","blockNumber","setBlockNumber","useState","useEffect","stale","getBlockNumber","then","catch","updateBlockNumber","on","removeListener","undefined","Account","account","substring","length","Balance","balance","setBalance","getBalance","Header","active","margin","textAlign","display","gridGap","gridTemplateColumns","maxWidth","lineHeight","App","context","connector","activate","deactivate","activatingConnector","setActivatingConnector","triedEager","Object","keys","map","name","currentConnector","activating","connected","disabled","height","borderRadius","borderColor","cursor","position","top","left","alignItems","color","marginLeft","flexDirection","marginTop","marginBottom","getSigner","signMessage","signature","window","alert","message","changeChainId","close","changeNetwork"],"mappings":"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","sourcesContent":["import React from 'react'\nimport { Web3ReactProvider, useWeb3React, UnsupportedChainIdError } from '@web3-react-wan/core'\nimport {\n  NoEthereumProviderError,\n  UserRejectedRequestError as UserRejectedRequestErrorInjected\n} from '@web3-react-wan/injected-connector'\nimport { UserRejectedRequestError as UserRejectedRequestErrorWalletConnect } from '@web3-react-wan/walletconnect-connector'\nimport { UserRejectedRequestError as UserRejectedRequestErrorFrame } from '@web3-react-wan/frame-connector'\nimport { Web3Provider } from '@wansproject/providers'\nimport { formatEther } from '@wansproject/units'\n\nimport { useEagerConnect, useInactiveListener } from '../hooks'\nimport {\n  injected,\n  network,\n  walletconnect,\n  walletlink,\n  ledger,\n  trezor,\n  frame,\n  authereum,\n  fortmatic,\n  magic,\n  portis,\n  squarelink,\n  torus\n} from '../connectors'\nimport { Spinner } from '../components/Spinner'\n\nenum ConnectorNames {\n  Injected = 'Injected',\n  Network = 'Network',\n  WalletConnect = 'WalletConnect',\n  WalletLink = 'WalletLink',\n  Ledger = 'Ledger',\n  Trezor = 'Trezor',\n  Frame = 'Frame',\n  Authereum = 'Authereum',\n  Fortmatic = 'Fortmatic',\n  Magic = 'Magic',\n  Portis = 'Portis',\n  Squarelink = 'Squarelink',\n  Torus = 'Torus'\n}\n\nconst connectorsByName: { [connectorName in ConnectorNames]: any } = {\n  [ConnectorNames.Injected]: injected,\n  [ConnectorNames.Network]: network,\n  [ConnectorNames.WalletConnect]: walletconnect,\n  [ConnectorNames.WalletLink]: walletlink,\n  [ConnectorNames.Ledger]: ledger,\n  [ConnectorNames.Trezor]: trezor,\n  [ConnectorNames.Frame]: frame,\n  [ConnectorNames.Authereum]: authereum,\n  [ConnectorNames.Fortmatic]: fortmatic,\n  [ConnectorNames.Magic]: magic,\n  [ConnectorNames.Portis]: portis,\n  [ConnectorNames.Squarelink]: squarelink,\n  [ConnectorNames.Torus]: torus\n}\n\nfunction getErrorMessage(error: Error) {\n  if (error instanceof NoEthereumProviderError) {\n    return 'No Ethereum browser extension detected, install MetaMask on desktop or visit from a dApp browser on mobile.'\n  } else if (error instanceof UnsupportedChainIdError) {\n    return \"You're connected to an unsupported network.\"\n  } else if (\n    error instanceof UserRejectedRequestErrorInjected ||\n    error instanceof UserRejectedRequestErrorWalletConnect ||\n    error instanceof UserRejectedRequestErrorFrame\n  ) {\n    return 'Please authorize this website to access your Ethereum account.'\n  } else {\n    console.error(error)\n    return 'An unknown error occurred. Check the console for more details.'\n  }\n}\n\nfunction getLibrary(provider: any): Web3Provider {\n  const library = new Web3Provider(provider)\n  library.pollingInterval = 12000\n  return library\n}\n\nexport default function() {\n  return (\n    <Web3ReactProvider getLibrary={getLibrary}>\n      <App />\n    </Web3ReactProvider>\n  )\n}\n\nfunction ChainId() {\n  const { chainId } = useWeb3React()\n\n  return (\n    <>\n      <span>Chain Id</span>\n      <span role=\"img\" aria-label=\"chain\">\n        ⛓\n      </span>\n      <span>{chainId ?? ''}</span>\n    </>\n  )\n}\n\nfunction BlockNumber() {\n  const { chainId, library } = useWeb3React()\n\n  const [blockNumber, setBlockNumber] = React.useState<number>()\n  React.useEffect((): any => {\n    if (!!library) {\n      let stale = false\n\n      library\n        .getBlockNumber()\n        .then((blockNumber: number) => {\n          if (!stale) {\n            setBlockNumber(blockNumber)\n          }\n        })\n        .catch(() => {\n          if (!stale) {\n            setBlockNumber(null)\n          }\n        })\n\n      const updateBlockNumber = (blockNumber: number) => {\n        setBlockNumber(blockNumber)\n      }\n      library.on('block', updateBlockNumber)\n\n      return () => {\n        stale = true\n        library.removeListener('block', updateBlockNumber)\n        setBlockNumber(undefined)\n      }\n    }\n  }, [library, chainId]) // ensures refresh if referential identity of library doesn't change across chainIds\n\n  return (\n    <>\n      <span>Block Number</span>\n      <span role=\"img\" aria-label=\"numbers\">\n        🔢\n      </span>\n      <span>{blockNumber === null ? 'Error' : blockNumber ?? ''}</span>\n    </>\n  )\n}\n\nfunction Account() {\n  const { account } = useWeb3React()\n\n  return (\n    <>\n      <span>Account</span>\n      <span role=\"img\" aria-label=\"robot\">\n        🤖\n      </span>\n      <span>\n        {account === null\n          ? '-'\n          : account\n          ? `${account.substring(0, 6)}...${account.substring(account.length - 4)}`\n          : ''}\n      </span>\n    </>\n  )\n}\n\nfunction Balance() {\n  const { account, library, chainId } = useWeb3React()\n\n  const [balance, setBalance] = React.useState()\n  React.useEffect((): any => {\n    if (!!account && !!library) {\n      let stale = false\n\n      library\n        .getBalance(account)\n        .then((balance: any) => {\n          if (!stale) {\n            setBalance(balance)\n          }\n        })\n        .catch(() => {\n          if (!stale) {\n            setBalance(null)\n          }\n        })\n\n      return () => {\n        stale = true\n        setBalance(undefined)\n      }\n    }\n  }, [account, library, chainId]) // ensures refresh if referential identity of library doesn't change across chainIds\n\n  return (\n    <>\n      <span>Balance</span>\n      <span role=\"img\" aria-label=\"gold\">\n        💰\n      </span>\n      <span>{balance === null ? 'Error' : balance ? `Ξ${formatEther(balance)}` : ''}</span>\n    </>\n  )\n}\n\nfunction Header() {\n  const { active, error } = useWeb3React()\n\n  return (\n    <>\n      <h1 style={{ margin: '1rem', textAlign: 'right' }}>{active ? '🟢' : error ? '🔴' : '🟠'}</h1>\n      <h3\n        style={{\n          display: 'grid',\n          gridGap: '1rem',\n          gridTemplateColumns: '1fr min-content 1fr',\n          maxWidth: '20rem',\n          lineHeight: '2rem',\n          margin: 'auto'\n        }}\n      >\n        <ChainId />\n        <BlockNumber />\n        <Account />\n        <Balance />\n      </h3>\n    </>\n  )\n}\n\nfunction App() {\n  const context = useWeb3React<Web3Provider>()\n  const { connector, library, chainId, account, activate, deactivate, active, error } = context\n\n  // handle logic to recognize the connector currently being activated\n  const [activatingConnector, setActivatingConnector] = React.useState<any>()\n  React.useEffect(() => {\n    if (activatingConnector && activatingConnector === connector) {\n      setActivatingConnector(undefined)\n    }\n  }, [activatingConnector, connector])\n\n  // handle logic to eagerly connect to the injected ethereum provider, if it exists and has granted access already\n  const triedEager = useEagerConnect()\n\n  // handle logic to connect in reaction to certain events on the injected ethereum provider, if it exists\n  useInactiveListener(!triedEager || !!activatingConnector)\n\n  return (\n    <>\n      <Header />\n      <hr style={{ margin: '2rem' }} />\n      <div\n        style={{\n          display: 'grid',\n          gridGap: '1rem',\n          gridTemplateColumns: '1fr 1fr',\n          maxWidth: '20rem',\n          margin: 'auto'\n        }}\n      >\n        {Object.keys(connectorsByName).map(name => {\n          const currentConnector = connectorsByName[name]\n          const activating = currentConnector === activatingConnector\n          const connected = currentConnector === connector\n          const disabled = !triedEager || !!activatingConnector || connected || !!error\n\n          return (\n            <button\n              style={{\n                height: '3rem',\n                borderRadius: '1rem',\n                borderColor: activating ? 'orange' : connected ? 'green' : 'unset',\n                cursor: disabled ? 'unset' : 'pointer',\n                position: 'relative'\n              }}\n              disabled={disabled}\n              key={name}\n              onClick={() => {\n                setActivatingConnector(currentConnector)\n                activate(connectorsByName[name])\n              }}\n            >\n              <div\n                style={{\n                  position: 'absolute',\n                  top: '0',\n                  left: '0',\n                  height: '100%',\n                  display: 'flex',\n                  alignItems: 'center',\n                  color: 'black',\n                  margin: '0 0 0 1rem'\n                }}\n              >\n                {activating && <Spinner color={'black'} style={{ height: '25%', marginLeft: '-1rem' }} />}\n                {connected && (\n                  <span role=\"img\" aria-label=\"check\">\n                    ✅\n                  </span>\n                )}\n              </div>\n              {name}\n            </button>\n          )\n        })}\n      </div>\n      <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center' }}>\n        {(active || error) && (\n          <button\n            style={{\n              height: '3rem',\n              marginTop: '2rem',\n              borderRadius: '1rem',\n              borderColor: 'red',\n              cursor: 'pointer'\n            }}\n            onClick={() => {\n              deactivate()\n            }}\n          >\n            Deactivate\n          </button>\n        )}\n\n        {!!error && <h4 style={{ marginTop: '1rem', marginBottom: '0' }}>{getErrorMessage(error)}</h4>}\n      </div>\n\n      <hr style={{ margin: '2rem' }} />\n\n      <div\n        style={{\n          display: 'grid',\n          gridGap: '1rem',\n          gridTemplateColumns: 'fit-content',\n          maxWidth: '20rem',\n          margin: 'auto'\n        }}\n      >\n        {!!(library && account) && (\n          <button\n            style={{\n              height: '3rem',\n              borderRadius: '1rem',\n              cursor: 'pointer'\n            }}\n            onClick={() => {\n              library\n                .getSigner(account)\n                .signMessage('👋')\n                .then((signature: any) => {\n                  window.alert(`Success!\\n\\n${signature}`)\n                })\n                .catch((error: any) => {\n                  window.alert('Failure!' + (error && error.message ? `\\n\\n${error.message}` : ''))\n                })\n            }}\n          >\n            Sign Message\n          </button>\n        )}\n        {!!(connector === connectorsByName[ConnectorNames.Network] && chainId) && (\n          <button\n            style={{\n              height: '3rem',\n              borderRadius: '1rem',\n              cursor: 'pointer'\n            }}\n            onClick={() => {\n              ;(connector as any).changeChainId(chainId === 1 ? 4 : 1)\n            }}\n          >\n            Switch Networks\n          </button>\n        )}\n        {connector === connectorsByName[ConnectorNames.WalletConnect] && (\n          <button\n            style={{\n              height: '3rem',\n              borderRadius: '1rem',\n              cursor: 'pointer'\n            }}\n            onClick={() => {\n              ;(connector as any).close()\n            }}\n          >\n            Kill WalletConnect Session\n          </button>\n        )}\n        {connector === connectorsByName[ConnectorNames.WalletLink] && (\n          <button\n            style={{\n              height: '3rem',\n              borderRadius: '1rem',\n              cursor: 'pointer'\n            }}\n            onClick={() => {\n              ;(connector as any).close()\n            }}\n          >\n            Kill WalletLink Session\n          </button>\n        )}\n        {connector === connectorsByName[ConnectorNames.Fortmatic] && (\n          <button\n            style={{\n              height: '3rem',\n              borderRadius: '1rem',\n              cursor: 'pointer'\n            }}\n            onClick={() => {\n              ;(connector as any).close()\n            }}\n          >\n            Kill Fortmatic Session\n          </button>\n        )}\n        {connector === connectorsByName[ConnectorNames.Magic] && (\n          <button\n            style={{\n              height: '3rem',\n              borderRadius: '1rem',\n              cursor: 'pointer'\n            }}\n            onClick={() => {\n              ;(connector as any).close()\n            }}\n          >\n            Kill Magic Session\n          </button>\n        )}\n        {connector === connectorsByName[ConnectorNames.Portis] && (\n          <>\n            {chainId !== undefined && (\n              <button\n                style={{\n                  height: '3rem',\n                  borderRadius: '1rem',\n                  cursor: 'pointer'\n                }}\n                onClick={() => {\n                  ;(connector as any).changeNetwork(chainId === 1 ? 100 : 1)\n                }}\n              >\n                Switch Networks\n              </button>\n            )}\n            <button\n              style={{\n                height: '3rem',\n                borderRadius: '1rem',\n                cursor: 'pointer'\n              }}\n              onClick={() => {\n                ;(connector as any).close()\n              }}\n            >\n              Kill Portis Session\n            </button>\n          </>\n        )}\n        {connector === connectorsByName[ConnectorNames.Torus] && (\n          <button\n            style={{\n              height: '3rem',\n              borderRadius: '1rem',\n              cursor: 'pointer'\n            }}\n            onClick={() => {\n              ;(connector as any).close()\n            }}\n          >\n            Kill Torus Session\n          </button>\n        )}\n      </div>\n    </>\n  )\n}\n"]},"metadata":{},"sourceType":"module"}