@toruslabs/ethereum-controllers 4.4.0 → 4.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"ethereumControllers.cjs.js","mappings":"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","sources":["webpack://@toruslabs/ethereum-controllers/webpack/bootstrap","webpack://@toruslabs/ethereum-controllers/webpack/runtime/compat get default export","webpack://@toruslabs/ethereum-controllers/webpack/runtime/define property getters","webpack://@toruslabs/ethereum-controllers/webpack/runtime/hasOwnProperty shorthand","webpack://@toruslabs/ethereum-controllers/webpack/runtime/make namespace object","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"@babel/runtime/helpers/objectSpread2\"","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"@babel/runtime/helpers/defineProperty\"","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"@toruslabs/base-controllers\"","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"async-mutex\"","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"ethers\"","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"loglevel\"","webpack://@toruslabs/ethereum-controllers/./src/utils/abis.ts","webpack://@toruslabs/ethereum-controllers/./src/utils/constants.ts","webpack://@toruslabs/ethereum-controllers/./src/utils/contractAddresses.ts","webpack://@toruslabs/ethereum-controllers/./src/Account/AccountTrackerController.ts","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"@ethereumjs/util\"","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"bignumber.js\"","webpack://@toruslabs/ethereum-controllers/./src/utils/helpers.ts","webpack://@toruslabs/ethereum-controllers/./src/Block/PollingBlockTracker.ts","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"@toruslabs/http-helpers\"","webpack://@toruslabs/ethereum-controllers/./src/Currency/CurrencyController.ts","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"lodash\"","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"@babel/runtime/helpers/objectDestructuringEmpty\"","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"@babel/runtime/helpers/objectWithoutProperties\"","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"bn.js\"","webpack://@toruslabs/ethereum-controllers/./src/utils/conversionUtils.ts","webpack://@toruslabs/ethereum-controllers/./src/Gas/gasUtil.ts","webpack://@toruslabs/ethereum-controllers/./src/Gas/GasFeeController.ts","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"@metamask/eth-sig-util\"","webpack://@toruslabs/ethereum-controllers/./src/Keyring/KeyringController.ts","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"@metamask/rpc-errors\"","webpack://@toruslabs/ethereum-controllers/./src/Message/AbstractMessageController.ts","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"jsonschema\"","webpack://@toruslabs/ethereum-controllers/./src/Message/utils.ts","webpack://@toruslabs/ethereum-controllers/./src/Message/DecryptMessageController.ts","webpack://@toruslabs/ethereum-controllers/./src/Message/EncryptionPublicKeyController.ts","webpack://@toruslabs/ethereum-controllers/./src/Message/MessageController.ts","webpack://@toruslabs/ethereum-controllers/./src/Message/PersonalMessageController.ts","webpack://@toruslabs/ethereum-controllers/./src/Message/TypedMessageController.ts","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"@toruslabs/openlogin-jrpc\"","webpack://@toruslabs/ethereum-controllers/./src/Network/createEthereumMiddleware.ts","webpack://@toruslabs/ethereum-controllers/./src/Network/createJsonRpcClient.ts","webpack://@toruslabs/ethereum-controllers/./src/Network/NetworkController.ts","webpack://@toruslabs/ethereum-controllers/./src/Nfts/NftHandler.ts","webpack://@toruslabs/ethereum-controllers/./src/Nfts/NftsController.ts","webpack://@toruslabs/ethereum-controllers/./src/Preferences/PreferencesController.ts","webpack://@toruslabs/ethereum-controllers/./src/Tokens/TokenHandler.ts","webpack://@toruslabs/ethereum-controllers/./src/Tokens/TokenRatesController.ts","webpack://@toruslabs/ethereum-controllers/./src/Tokens/TokensController.ts","webpack://@toruslabs/ethereum-controllers/./src/Transaction/NonceTracker.ts","webpack://@toruslabs/ethereum-controllers/./src/Transaction/PendingTransactionTracker.ts","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"@ethereumjs/common\"","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"@ethereumjs/tx\"","webpack://@toruslabs/ethereum-controllers/./src/Transaction/TransactionGasUtil.ts","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"fast-json-patch\"","webpack://@toruslabs/ethereum-controllers/./src/Transaction/TransactionStateHistoryHelper.ts","webpack://@toruslabs/ethereum-controllers/./src/Transaction/TransactionUtils.ts","webpack://@toruslabs/ethereum-controllers/./src/Transaction/TransactionStateManager.ts","webpack://@toruslabs/ethereum-controllers/./src/Transaction/TransactionController.ts","webpack://@toruslabs/ethereum-controllers/./src/index.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@babel/runtime/helpers/objectSpread2\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@babel/runtime/helpers/defineProperty\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@toruslabs/base-controllers\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"async-mutex\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"ethers\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"loglevel\");","export const ecr20Abi = [\n {\n constant: true,\n inputs: [],\n name: \"name\",\n outputs: [\n {\n name: \"\",\n type: \"string\",\n },\n ],\n payable: false,\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n name: \"_spender\",\n type: \"address\",\n },\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n name: \"success\",\n type: \"bool\",\n },\n ],\n payable: false,\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n payable: false,\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n name: \"_from\",\n type: \"address\",\n },\n {\n name: \"_to\",\n type: \"address\",\n },\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n name: \"success\",\n type: \"bool\",\n },\n ],\n payable: false,\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n payable: false,\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n name: \"_owner\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n name: \"balance\",\n type: \"uint256\",\n },\n ],\n payable: false,\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n name: \"\",\n type: \"string\",\n },\n ],\n payable: false,\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n name: \"_to\",\n type: \"address\",\n },\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n name: \"success\",\n type: \"bool\",\n },\n ],\n payable: false,\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n name: \"_spender\",\n type: \"address\",\n },\n {\n name: \"_value\",\n type: \"uint256\",\n },\n {\n name: \"_extraData\",\n type: \"bytes\",\n },\n ],\n name: \"approveAndCall\",\n outputs: [\n {\n name: \"success\",\n type: \"bool\",\n },\n ],\n payable: false,\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n name: \"_owner\",\n type: \"address\",\n },\n {\n name: \"_spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n name: \"remaining\",\n type: \"uint256\",\n },\n ],\n payable: false,\n type: \"function\",\n },\n {\n inputs: [\n {\n name: \"_initialAmount\",\n type: \"uint256\",\n },\n {\n name: \"_tokenName\",\n type: \"string\",\n },\n {\n name: \"_decimalUnits\",\n type: \"uint8\",\n },\n {\n name: \"_tokenSymbol\",\n type: \"string\",\n },\n ],\n type: \"constructor\",\n },\n {\n payable: false,\n type: \"fallback\",\n },\n];\n\nexport const erc721Abi = [\n {\n constant: true,\n inputs: [\n {\n name: \"interfaceID\",\n type: \"bytes4\",\n },\n ],\n name: \"supportsInterface\",\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"name\",\n outputs: [\n {\n name: \"_name\",\n type: \"string\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n name: \"_tokenId\",\n type: \"uint256\",\n },\n ],\n name: \"getApproved\",\n outputs: [\n {\n name: \"\",\n type: \"address\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n name: \"_approved\",\n type: \"address\",\n },\n {\n name: \"_tokenId\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [],\n payable: true,\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n name: \"_from\",\n type: \"address\",\n },\n {\n name: \"_to\",\n type: \"address\",\n },\n {\n name: \"_tokenId\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [],\n payable: true,\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n name: \"_owner\",\n type: \"address\",\n },\n {\n name: \"_index\",\n type: \"uint256\",\n },\n ],\n name: \"tokenOfOwnerByIndex\",\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n name: \"_from\",\n type: \"address\",\n },\n {\n name: \"_to\",\n type: \"address\",\n },\n {\n name: \"_tokenId\",\n type: \"uint256\",\n },\n ],\n name: \"safeTransferFrom\",\n outputs: [],\n payable: true,\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n name: \"_index\",\n type: \"uint256\",\n },\n ],\n name: \"tokenByIndex\",\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n name: \"_tokenId\",\n type: \"uint256\",\n },\n ],\n name: \"ownerOf\",\n outputs: [\n {\n name: \"\",\n type: \"address\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n name: \"_owner\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n name: \"_symbol\",\n type: \"string\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n name: \"_tokenId\",\n type: \"uint256\",\n },\n ],\n name: \"tokenURI\",\n outputs: [\n {\n name: \"\",\n type: \"string\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n];\n\nexport const erc1155Abi = [\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_owner\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"_id\",\n type: \"uint256\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"_owners\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"_ids\",\n type: \"uint256[]\",\n },\n ],\n name: \"balanceOfBatch\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"_operator\",\n type: \"address\",\n },\n ],\n name: \"isApprovedForAll\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"isOperator\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"_to\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"_id\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"_amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"_data\",\n type: \"bytes\",\n },\n ],\n name: \"safeTransferFrom\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_operator\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"_approved\",\n type: \"bool\",\n },\n ],\n name: \"setApprovalForAll\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"_interfaceID\",\n type: \"bytes4\",\n },\n ],\n name: \"supportsInterface\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"_id\",\n type: \"uint256\",\n },\n ],\n name: \"uri\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n];\n\nexport const singleBalanceCheckerAbi = [\n {\n payable: true,\n stateMutability: \"payable\",\n type: \"fallback\",\n },\n {\n constant: true,\n inputs: [\n {\n name: \"user\",\n type: \"address\",\n },\n {\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"tokenBalance\",\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n name: \"users\",\n type: \"address[]\",\n },\n {\n name: \"tokens\",\n type: \"address[]\",\n },\n ],\n name: \"balances\",\n outputs: [\n {\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n];\n","import { EthereumProviderConfig } from \"./interfaces\";\n\nexport const LOCALHOST = \"localhost\";\n\nexport const CONTRACT_TYPE_ETH = \"eth\";\nexport const CONTRACT_TYPE_ERC20 = \"erc20\";\nexport const CONTRACT_TYPE_ERC721 = \"erc721\";\nexport const CONTRACT_TYPE_ERC1155 = \"erc1155\";\n\nexport const ERC1155_INTERFACE_ID = \"0xd9b67a26\";\nexport const ERC721_INTERFACE_ID = \"0x80ac58cd\";\nexport const ERC721_METADATA_INTERFACE_ID = \"0x5b5e139f\";\nexport const ERC721_ENUMERABLE_INTERFACE_ID = \"0x780e9d63\";\n\nexport const MAINNET_CHAIN_ID = \"0x1\";\nexport const POLYGON_CHAIN_ID = \"0x89\";\nexport const BSC_MAINNET_CHAIN_ID = \"0x38\";\nexport const AVALANCHE_MAINNET_CHAIN_ID = \"0xa86a\";\nexport const XDAI_CHAIN_ID = \"0x64\";\nexport const ARBITRUM_MAINNET_CHAIN_ID = \"0xa4b1\";\nexport const OPTIMISM_MAINNET_CHAIN_ID = \"0xa\";\nexport const CELO_MAINNET_CHAIN_ID = \"0xa4ec\";\n\nexport const GOERLI_CHAIN_ID = \"0x5\";\nexport const SEPOLIA_CHAIN_ID = \"0xaa36a7\";\nexport const POLYGON_MUMBAI_CHAIN_ID = \"0x13881\";\nexport const BSC_TESTNET_CHAIN_ID = \"0x61\";\nexport const AVALANCHE_TESTNET_CHAIN_ID = \"0xa869\";\nexport const ARBITRUM_TESTNET_CHAIN_ID = \"0x66eeb\";\nexport const OPTIMISM_TESTNET_CHAIN_ID = \"0x1a4\";\n\nexport const SUPPORTED_NETWORKS: Record<string, EthereumProviderConfig> = {\n [MAINNET_CHAIN_ID]: {\n blockExplorerUrl: \"https://etherscan.io\",\n chainId: MAINNET_CHAIN_ID,\n displayName: \"Main Ethereum Network\",\n logo: \"eth.svg\",\n rpcTarget: `https://mainnet.infura.io/v3/${process.env.VITE_APP_INFURA_PROJECT_KEY}`,\n ticker: \"ETH\",\n tickerName: \"Ethereum\",\n },\n [POLYGON_CHAIN_ID]: {\n blockExplorerUrl: \"https://polygonscan.com\",\n chainId: POLYGON_CHAIN_ID,\n displayName: \"Polygon Mainnet\",\n logo: \"matic-network-logo.svg\",\n rpcTarget: `https://polygon-mainnet.infura.io/v3/${process.env.VITE_APP_INFURA_PROJECT_KEY}`,\n ticker: \"MATIC\",\n tickerName: \"Matic Network Token\",\n },\n [BSC_MAINNET_CHAIN_ID]: {\n blockExplorerUrl: \"https://bscscan.com\",\n chainId: BSC_MAINNET_CHAIN_ID,\n displayName: \"Binance Smart Chain Mainnet\",\n logo: \"bnb.png\",\n rpcTarget: `https://bsc-dataseed.binance.org`,\n ticker: \"BNB\",\n tickerName: \"Binance Coin\",\n },\n [AVALANCHE_MAINNET_CHAIN_ID]: {\n blockExplorerUrl: \"https://snowtrace.io\",\n chainId: AVALANCHE_MAINNET_CHAIN_ID,\n displayName: \"Avalanche Mainnet C-Chain\",\n logo: \"avax.svg\",\n rpcTarget: `https://api.avax.network/ext/bc/C/rpc`,\n ticker: \"AVAX\",\n tickerName: \"Avalanche\",\n },\n [OPTIMISM_MAINNET_CHAIN_ID]: {\n blockExplorerUrl: \"https://optimistic.etherscan.io\",\n chainId: OPTIMISM_MAINNET_CHAIN_ID,\n displayName: \"Optimism\",\n logo: \"optimism.svg\",\n rpcTarget: `https://optimism-mainnet.infura.io/v3/${process.env.VITE_APP_INFURA_PROJECT_KEY}`,\n ticker: \"ETH\",\n tickerName: \"Ethereum\",\n },\n [CELO_MAINNET_CHAIN_ID]: {\n blockExplorerUrl: \"https://explorer.celo.org\",\n chainId: CELO_MAINNET_CHAIN_ID,\n displayName: \"Celo Mainnet\",\n logo: \"celo.svg\",\n rpcTarget: `https://celo-mainnet.infura.io/v3/${process.env.VITE_APP_INFURA_PROJECT_KEY}`,\n ticker: \"CELO\",\n tickerName: \"Celo\",\n },\n [ARBITRUM_MAINNET_CHAIN_ID]: {\n blockExplorerUrl: \"https://arbiscan.io\",\n chainId: ARBITRUM_MAINNET_CHAIN_ID,\n displayName: \"Arbitrum One\",\n logo: \"eth.svg\",\n rpcTarget: `https://arbitrum-mainnet.infura.io/v3/${process.env.VITE_APP_INFURA_PROJECT_KEY}`,\n ticker: \"ETH\",\n tickerName: \"Ethereum\",\n },\n [XDAI_CHAIN_ID]: {\n blockExplorerUrl: \"https://blockscout.com/poa/xdai\",\n chainId: XDAI_CHAIN_ID,\n displayName: \"xDai\",\n logo: \"xdai.svg\",\n rpcTarget: `https://rpc.gnosischain.com`,\n ticker: \"DAI\",\n tickerName: \"xDai Network Token\",\n },\n [GOERLI_CHAIN_ID]: {\n blockExplorerUrl: \"https://goerli.etherscan.io\",\n chainId: GOERLI_CHAIN_ID,\n displayName: \"Goerli Test Network\",\n logo: \"eth.svg\",\n rpcTarget: `https://goerli.infura.io/v3/${process.env.VITE_APP_INFURA_PROJECT_KEY}`,\n ticker: \"ETH\",\n tickerName: \"Ethereum\",\n isTestnet: true,\n },\n [SEPOLIA_CHAIN_ID]: {\n blockExplorerUrl: \"https://sepolia.etherscan.io\",\n chainId: SEPOLIA_CHAIN_ID,\n displayName: \"Sepolia Test Network\",\n logo: \"eth.svg\",\n rpcTarget: `https://sepolia.infura.io/v3/${process.env.VITE_APP_INFURA_PROJECT_KEY}`,\n ticker: \"ETH\",\n tickerName: \"Ethereum\",\n isTestnet: true,\n },\n [POLYGON_MUMBAI_CHAIN_ID]: {\n blockExplorerUrl: \"https://mumbai.polygonscan.com\",\n chainId: POLYGON_MUMBAI_CHAIN_ID,\n displayName: \"Polygon Mumbai\",\n logo: \"matic-network-logo.svg\",\n rpcTarget: `https://polygon-mumbai.infura.io/v3/${process.env.VITE_APP_INFURA_PROJECT_KEY}`,\n ticker: \"MATIC\",\n tickerName: \"Matic Network Token\",\n isTestnet: true,\n },\n [BSC_TESTNET_CHAIN_ID]: {\n blockExplorerUrl: \"https://testnet.bscscan.com\",\n chainId: BSC_TESTNET_CHAIN_ID,\n displayName: \"Binance Smart Chain Testnet\",\n logo: \"bnb.png\",\n rpcTarget: `https://data-seed-prebsc-1-s1.binance.org:8545`,\n ticker: \"BNB\",\n tickerName: \"Binance Coin\",\n isTestnet: true,\n },\n [AVALANCHE_TESTNET_CHAIN_ID]: {\n blockExplorerUrl: \"https://testnet.snowtrace.io\",\n chainId: AVALANCHE_TESTNET_CHAIN_ID,\n displayName: \"Avalanche Testnet C-Chain\",\n logo: \"avax.png\",\n rpcTarget: `https://api.avax-test.network/ext/bc/C/rpc`,\n ticker: \"AVAX\",\n tickerName: \"Avalanche\",\n isTestnet: true,\n },\n [ARBITRUM_TESTNET_CHAIN_ID]: {\n blockExplorerUrl: \"https://testnet.arbiscan.io\",\n chainId: ARBITRUM_TESTNET_CHAIN_ID,\n displayName: \"Arbitrum Goerli\",\n logo: \"eth.svg\",\n rpcTarget: `https://arbitrum-rinkeby.infura.io/v3/${process.env.VITE_APP_INFURA_PROJECT_KEY}`,\n ticker: \"ETH\",\n tickerName: \"Ethereum\",\n isTestnet: true,\n },\n [OPTIMISM_TESTNET_CHAIN_ID]: {\n blockExplorerUrl: \"https://goerli-optimism.etherscan.io\",\n chainId: OPTIMISM_TESTNET_CHAIN_ID,\n displayName: \"Optimism Goerli\",\n logo: \"optimism.svg\",\n rpcTarget: `https://optimism-goerli.infura.io/v3/${process.env.VITE_APP_INFURA_PROJECT_KEY}`,\n ticker: \"ETH\",\n tickerName: \"Ethereum\",\n isTestnet: true,\n },\n};\n\nexport const METHOD_TYPES = {\n GET_ACCOUNTS: \"eth_accounts\",\n ETH_TRANSACTION: \"eth_sendTransaction\",\n ETH_REQUEST_ACCOUNTS: \"eth_requestAccounts\",\n ETH_SEND_RAW_TRANSACTION: \"eth_sendRawTransaction\",\n ETH_SIGN: \"eth_sign\",\n ETH_SIGN_TYPED_DATA: \"eth_signTypedData\",\n ETH_SIGN_TYPED_DATA_V3: \"eth_signTypedData_v3\",\n ETH_SIGN_TYPED_DATA_V4: \"eth_signTypedData_v4\",\n PERSONAL_SIGN: \"personal_sign\",\n ETH_GET_TRANSACTION_COUNT: \"eth_getTransactionCount\",\n ETH_GET_TRANSACTION_BY_HASH: \"eth_getTransactionByHash\",\n ETH_GET_ENCRYPTION_PUBLIC_KEY: \"eth_getEncryptionPublicKey\",\n ETH_DECRYPT: \"eth_decrypt\",\n ETH_GET_TRANSACTION_RECEIPT: \"eth_getTransactionReceipt\",\n WATCH_ASSET: \"wallet_watchAsset\",\n ETH_GET_BLOCK_BY_HASH: \"eth_getBlockByHash\",\n ETH_GET_CODE: \"eth_getCode\",\n ETH_GET_GAS_PRICE: \"eth_gasPrice\",\n} as const;\n\nexport const TRANSACTION_ENVELOPE_TYPES = {\n LEGACY: \"0x0\",\n ACCESS_LIST: \"0x1\",\n FEE_MARKET: \"0x2\",\n} as const;\n\nexport const GAS_ESTIMATE_TYPES = {\n // Fee Market describes the way gas is set after the london hardfork, and was\n // defined by EIP-1559.\n FEE_MARKET: \"fee-market\",\n // Legacy describes gasPrice estimates from before london hardfork, when the\n // user is connected to mainnet and are presented with fast/average/slow\n // estimate levels to choose from.\n LEGACY: \"legacy\",\n // EthGasPrice describes a gasPrice estimate received from eth_gasPrice. Post\n // london this value should only be used for legacy type transactions when on\n // networks that support EIP-1559. This type of estimate is the most accurate\n // to display on custom networks that don't support EIP-1559.\n ETH_GASPRICE: \"eth_gasPrice\",\n // NoEstimate describes the state of the controller before receiving its first\n // estimate.\n NONE: \"none\",\n} as const;\n\n// https://help.optimism.io/hc/en-us/articles/4411895794715-Transaction-fees\nexport const CHAIN_ID_TO_GAS_LIMIT_BUFFER_MAP: Record<string, number> = {\n [OPTIMISM_MAINNET_CHAIN_ID]: 1,\n [OPTIMISM_TESTNET_CHAIN_ID]: 1,\n};\n\nexport const OLD_ERC721_LIST: Record<string, { name?: string; logo?: string; erc20?: boolean; symbol?: string; decimals?: number }> = {\n \"0x06012c8cf97bead5deae237070f9587f8e7a266d\": {\n name: \"Cryptokitties\",\n logo: \"dapp-cryptokitty.svg\",\n erc20: true,\n symbol: \"CK\",\n decimals: 0,\n },\n};\n\nexport const TEST_CHAINS = [GOERLI_CHAIN_ID, SEPOLIA_CHAIN_ID];\n\nexport const ETHERSCAN_SUPPORTED_CHAINS = [\n MAINNET_CHAIN_ID,\n GOERLI_CHAIN_ID,\n SEPOLIA_CHAIN_ID,\n BSC_MAINNET_CHAIN_ID,\n BSC_TESTNET_CHAIN_ID,\n OPTIMISM_MAINNET_CHAIN_ID,\n OPTIMISM_TESTNET_CHAIN_ID,\n AVALANCHE_MAINNET_CHAIN_ID,\n AVALANCHE_TESTNET_CHAIN_ID,\n ARBITRUM_MAINNET_CHAIN_ID,\n ARBITRUM_TESTNET_CHAIN_ID,\n POLYGON_CHAIN_ID,\n POLYGON_MUMBAI_CHAIN_ID,\n CELO_MAINNET_CHAIN_ID,\n];\n\nexport const SIMPLEHASH_SUPPORTED_CHAINS = [\n MAINNET_CHAIN_ID,\n POLYGON_CHAIN_ID,\n POLYGON_MUMBAI_CHAIN_ID,\n BSC_MAINNET_CHAIN_ID,\n BSC_TESTNET_CHAIN_ID,\n ARBITRUM_MAINNET_CHAIN_ID,\n ARBITRUM_TESTNET_CHAIN_ID,\n OPTIMISM_MAINNET_CHAIN_ID,\n OPTIMISM_TESTNET_CHAIN_ID,\n CELO_MAINNET_CHAIN_ID,\n AVALANCHE_MAINNET_CHAIN_ID,\n AVALANCHE_TESTNET_CHAIN_ID,\n GOERLI_CHAIN_ID,\n];\n\nexport const COINGECKO_SUPPORTED_CURRENCIES = new Set([\n \"btc\",\n \"eth\",\n \"ltc\",\n \"bch\",\n \"bnb\",\n \"eos\",\n \"xrp\",\n \"xlm\",\n \"link\",\n \"dot\",\n \"yfi\",\n \"usd\",\n \"aed\",\n \"ars\",\n \"aud\",\n \"bdt\",\n \"bhd\",\n \"bmd\",\n \"brl\",\n \"cad\",\n \"chf\",\n \"clp\",\n \"cny\",\n \"czk\",\n \"dkk\",\n \"eur\",\n \"gbp\",\n \"hkd\",\n \"huf\",\n \"idr\",\n \"ils\",\n \"inr\",\n \"jpy\",\n \"krw\",\n \"kwd\",\n \"lkr\",\n \"mmk\",\n \"mxn\",\n \"myr\",\n \"ngn\",\n \"nok\",\n \"nzd\",\n \"php\",\n \"pkr\",\n \"pln\",\n \"rub\",\n \"sar\",\n \"sek\",\n \"sgd\",\n \"thb\",\n \"try\",\n \"twd\",\n \"uah\",\n \"vef\",\n \"vnd\",\n \"zar\",\n \"xdr\",\n \"xag\",\n \"xau\",\n \"bits\",\n \"sats\",\n]);\n\nexport const COINGECKO_PLATFORMS_CHAIN_CODE_MAP: Record<string, { platform: string; currency: string }> = {\n [POLYGON_CHAIN_ID]: {\n platform: \"polygon-pos\",\n currency: \"matic\",\n },\n [BSC_MAINNET_CHAIN_ID]: {\n platform: \"binance-smart-chain\",\n currency: \"bnb\",\n },\n [MAINNET_CHAIN_ID]: {\n platform: \"ethereum\",\n currency: \"eth\",\n },\n [ARBITRUM_MAINNET_CHAIN_ID]: {\n platform: \"arbitrum-one\",\n currency: \"eth\",\n },\n [OPTIMISM_MAINNET_CHAIN_ID]: {\n platform: \"optimistic-ethereum\",\n currency: \"eth\",\n },\n [CELO_MAINNET_CHAIN_ID]: {\n platform: \"celo\",\n currency: \"celo\",\n },\n [XDAI_CHAIN_ID]: {\n platform: \"xdai\",\n currency: \"xDAI\",\n },\n [AVALANCHE_MAINNET_CHAIN_ID]: {\n platform: \"avalanche\",\n currency: \"avax\",\n },\n};\n\nexport const MessageStatus = {\n UNAPPROVED: \"unapproved\",\n SIGNED: \"signed\",\n PENDING: \"pending\",\n APPROVED: \"approved\",\n REJECTED: \"rejected\",\n FAILED: \"failed\",\n} as const;\n\nexport const MESSAGE_EVENTS = {\n UNAPPROVED_MESSAGE: \"unapprovedMessage\",\n};\n","import {\n ARBITRUM_MAINNET_CHAIN_ID,\n AVALANCHE_MAINNET_CHAIN_ID,\n BSC_MAINNET_CHAIN_ID,\n GOERLI_CHAIN_ID,\n MAINNET_CHAIN_ID,\n OPTIMISM_MAINNET_CHAIN_ID,\n POLYGON_CHAIN_ID,\n} from \"../utils/constants\";\n\nexport const SINGLE_CALL_BALANCES_ADDRESSES: Record<string, string> = {\n [MAINNET_CHAIN_ID]: \"0xb1f8e55c7f64d203c1400b9d8555d050f94adf39\",\n [GOERLI_CHAIN_ID]: \"0x9788C4E93f9002a7ad8e72633b11E8d1ecd51f9b\",\n // [SEPOLIA_CHAIN_ID]: SINGLE_CALL_BALANCES_ADDRESS_SEPOLIA,\n // [FANTOM_CHAIN_ID]: \"0x07f697424ABe762bB808c109860c04eA488ff92B\",\n [BSC_MAINNET_CHAIN_ID]: \"0x2352c63A83f9Fd126af8676146721Fa00924d7e4\",\n [OPTIMISM_MAINNET_CHAIN_ID]: \"0xB1c568e9C3E6bdaf755A60c7418C269eb11524FC\",\n [POLYGON_CHAIN_ID]: \"0x2352c63A83f9Fd126af8676146721Fa00924d7e4\",\n [AVALANCHE_MAINNET_CHAIN_ID]: \"0xD023D153a0DFa485130ECFdE2FAA7e612EF94818\",\n [ARBITRUM_MAINNET_CHAIN_ID]: \"0x151E24A486D7258dd7C33Fb67E4bB01919B7B32c\",\n};\n","import { AccountTrackerConfig, AccountTrackerState, BaseController, IAccountTrackerController, PreferencesState } from \"@toruslabs/base-controllers\";\nimport { SafeEventEmitterProvider } from \"@toruslabs/openlogin-jrpc\";\nimport { Mutex } from \"async-mutex\";\nimport { BrowserProvider, Contract, toQuantity } from \"ethers\";\nimport log from \"loglevel\";\n\nimport PollingBlockTracker from \"../Block/PollingBlockTracker\";\nimport NetworkController from \"../Network/NetworkController\";\nimport { singleBalanceCheckerAbi } from \"../utils/abis\";\nimport { SINGLE_CALL_BALANCES_ADDRESSES } from \"../utils/contractAddresses\";\nimport { EthereumBlock, ExtendedAddressPreferences } from \"../utils/interfaces\";\n\ninterface AccountTrackerControllerOptions {\n config: AccountTrackerConfig<EthereumBlock>;\n state: Partial<AccountTrackerState>;\n provider: SafeEventEmitterProvider;\n blockTracker?: PollingBlockTracker;\n getIdentities: () => PreferencesState<ExtendedAddressPreferences>[\"identities\"];\n onPreferencesStateChange: (listener: (preferencesState: PreferencesState<ExtendedAddressPreferences>) => void) => void;\n getCurrentChainId: NetworkController[\"getNetworkIdentifier\"];\n}\n\nconst ZERO_ADDRESS = \"0x0000000000000000000000000000000000000000\";\n\n/**\n * Tracks accounts based on blocks.\n * If block tracker provides latest block, we query accounts from it.\n * Preferences state changes also retrigger accounts update.\n * Network state changes also retrigger accounts update.\n */\nclass AccountTrackerController\n extends BaseController<AccountTrackerConfig<EthereumBlock>, AccountTrackerState>\n implements IAccountTrackerController<AccountTrackerConfig<EthereumBlock>, AccountTrackerState>\n{\n private provider!: SafeEventEmitterProvider;\n\n private blockTracker!: PollingBlockTracker;\n\n private mutex = new Mutex();\n\n private ethersProvider!: BrowserProvider;\n\n private getIdentities!: AccountTrackerControllerOptions[\"getIdentities\"];\n\n private getCurrentChainId: NetworkController[\"getNetworkIdentifier\"];\n\n constructor({\n config,\n state,\n provider,\n blockTracker,\n getIdentities,\n onPreferencesStateChange,\n getCurrentChainId,\n }: AccountTrackerControllerOptions) {\n super({ config, state });\n this.defaultState = {\n accounts: {},\n };\n this.defaultConfig = {\n _currentBlock: null,\n };\n this.initialize();\n this.provider = provider;\n this.blockTracker = blockTracker;\n this.ethersProvider = new BrowserProvider(this.provider, \"any\");\n\n // Initiate block tracker internal tracking.\n this.blockTracker.on(\"latest\", (block: EthereumBlock) => {\n this.configure({ _currentBlock: block });\n this.refresh();\n });\n\n this.getIdentities = getIdentities;\n this.getCurrentChainId = getCurrentChainId;\n\n onPreferencesStateChange(() => {\n log.info(\"onPreferencesStateChange called\");\n const refreshNeeded = this.syncAccounts();\n if (refreshNeeded) this.refresh();\n });\n }\n\n syncAccounts(): boolean {\n const { accounts } = this.state;\n const addresses = Object.keys(this.getIdentities());\n const existing = Object.keys(accounts);\n const newAddresses = addresses.filter((address) => existing.indexOf(address) === -1);\n const oldAddresses = existing.filter((address) => addresses.indexOf(address) === -1);\n let isUpdated = false;\n newAddresses.forEach((address) => {\n isUpdated = true;\n accounts[address] = { balance: \"0x0\" };\n });\n oldAddresses.forEach((address) => {\n isUpdated = true;\n delete accounts[address];\n });\n this.update({ accounts: { ...accounts } });\n return isUpdated;\n }\n\n async refresh(): Promise<void> {\n const releaseLock = await this.mutex.acquire();\n try {\n const currentBlock = this.config._currentBlock;\n if (!currentBlock) return;\n this._updateAccounts();\n } catch (error) {\n } finally {\n releaseLock();\n }\n }\n\n private async _updateAccounts(): Promise<void> {\n const { accounts } = this.state;\n const addresses = Object.keys(accounts);\n const chainId = this.getCurrentChainId();\n if (chainId === \"loading\") return;\n\n if (addresses.length > 0) {\n if (SINGLE_CALL_BALANCES_ADDRESSES[chainId]) {\n await this._updateAccountsViaBalanceChecker(addresses, SINGLE_CALL_BALANCES_ADDRESSES[chainId]);\n return;\n }\n log.info(\"falling back to ethQuery.getBalance\");\n await Promise.all(addresses.map((x) => this._updateAccount(x)));\n }\n }\n\n private async _updateAccount(address: string): Promise<void> {\n const balance = await this.provider.request<[string, string], string>({ method: \"eth_getBalance\", params: [address, \"latest\"] });\n const { accounts } = this.state;\n if (!accounts[address]) return;\n accounts[address] = { balance: toQuantity(balance) };\n this.update({ accounts });\n }\n\n private async _updateAccountsViaBalanceChecker(addresses: string[], deployedContractAddress: string) {\n const ethContract = new Contract(deployedContractAddress, singleBalanceCheckerAbi, this.ethersProvider);\n try {\n const result: string[] = await ethContract.balances(addresses, [ZERO_ADDRESS]);\n const { accounts } = this.state;\n addresses.forEach((address, index) => {\n const balance = toQuantity(result[index]);\n if (!accounts[address]) return;\n accounts[address] = { balance };\n });\n return this.update({ accounts });\n } catch (error) {\n log.warn(\"Torus - Account Tracker single call balance fetch failed\", error);\n return Promise.all(addresses.map((x) => this._updateAccount(x)));\n }\n }\n}\n\nexport default AccountTrackerController;\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@ethereumjs/util\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"bignumber.js\");","import { addHexPrefix, isValidAddress, toChecksumAddress } from \"@ethereumjs/util\";\nimport {\n ACTIVITY_ACTION_RECEIVE,\n ACTIVITY_ACTION_SEND,\n addressSlicer,\n formatSmallNumbers,\n significantDigits,\n TransactionStatus,\n} from \"@toruslabs/base-controllers\";\nimport { SafeEventEmitterProvider } from \"@toruslabs/openlogin-jrpc\";\nimport BigNumber from \"bignumber.js\";\nimport log from \"loglevel\";\n\nimport {\n CONTRACT_TYPE_ERC20,\n CONTRACT_TYPE_ERC721,\n CONTRACT_TYPE_ERC1155,\n MAINNET_CHAIN_ID,\n METHOD_TYPES,\n SUPPORTED_NETWORKS,\n TEST_CHAINS,\n} from \"./constants\";\nimport { FormattedTransactionActivity, TransactionPayload, TransactionReceipt } from \"./interfaces\";\n\nexport function getEtherScanHashLink(txHash: string, chainId: string) {\n if (!SUPPORTED_NETWORKS[chainId]) return \"\";\n return `${SUPPORTED_NETWORKS[chainId].blockExplorerUrl}/tx/${txHash}`;\n}\n\nexport const formatPastTx = (x: TransactionPayload, lowerCaseSelectedAddress?: string): FormattedTransactionActivity => {\n let totalAmountString = \"\";\n if (x.type === CONTRACT_TYPE_ERC721 || x.type === CONTRACT_TYPE_ERC1155) totalAmountString = x.symbol;\n else if (x.type === CONTRACT_TYPE_ERC20) totalAmountString = formatSmallNumbers(Number.parseFloat(x.total_amount), x.symbol, true);\n else totalAmountString = formatSmallNumbers(Number.parseFloat(x.total_amount), x.type_name, true);\n const currencyAmountString =\n x.type === CONTRACT_TYPE_ERC721 || x.type === CONTRACT_TYPE_ERC1155\n ? \"\"\n : formatSmallNumbers(Number.parseFloat(x.currency_amount), x.selected_currency, true);\n const finalObject: FormattedTransactionActivity = {\n id: x.created_at.toString(),\n date: new Date(x.created_at).toString(),\n from: x.from,\n from_aa_address: x.from_aa_address,\n slicedFrom: typeof x.from === \"string\" ? addressSlicer(x.from) : \"\",\n to: x.to,\n slicedTo: typeof x.to === \"string\" ? addressSlicer(x.to) : \"\",\n action: lowerCaseSelectedAddress === x.to?.toLowerCase() || \"\" ? ACTIVITY_ACTION_RECEIVE : ACTIVITY_ACTION_SEND,\n totalAmount: x.total_amount,\n totalAmountString,\n currencyAmount: x.currency_amount,\n currencyAmountString,\n amount: `${totalAmountString} / ${currencyAmountString}`,\n status: x.status,\n etherscanLink: getEtherScanHashLink(x.transaction_hash, x.network || MAINNET_CHAIN_ID),\n networkType: x.network,\n ethRate:\n Number.parseFloat(x?.total_amount) && Number.parseFloat(x?.currency_amount)\n ? `1 ${x.symbol} = ${significantDigits(Number.parseFloat(x.currency_amount) / Number.parseFloat(x.total_amount))}`\n : \"\",\n currencyUsed: x.selected_currency,\n type: x.type,\n type_name: x.type_name,\n type_image_link: x.type_image_link,\n transaction_hash: x.transaction_hash,\n transaction_category: x.transaction_category,\n // TODO: // figure out how to handle these values.\n // isEtherscan: x.isEtherscan,\n // input: x.input || \"\",\n // token_id: x.token_id || \"\",\n contract_address: x.contract_address || \"\",\n nonce: x.nonce || \"\",\n is_cancel: !!x.is_cancel || false,\n gas: x.gas || \"\",\n gasPrice: x.gasPrice || \"\",\n };\n return finalObject;\n};\n\n/**\n * Ref - https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_gettransactionreceipt\n */\nexport const getEthTxStatus = async (hash: string, provider: SafeEventEmitterProvider): Promise<TransactionStatus | undefined> => {\n try {\n const result = await provider.request<[string], TransactionReceipt>({ method: METHOD_TYPES.ETH_GET_TRANSACTION_RECEIPT, params: [hash] });\n if (result === null) return TransactionStatus.submitted;\n if (result && result.status === \"0x1\") return TransactionStatus.confirmed;\n if (result && result.status === \"0x0\") return TransactionStatus.rejected;\n return undefined;\n } catch (err) {\n log.warn(\"unable to fetch transaction status\", err);\n return undefined;\n }\n};\n\nexport function formatDate(inputDate: string) {\n const monthList = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\n const date = new Date(inputDate);\n const day = date.getDate();\n const month = monthList[date.getMonth()];\n const year = date.getFullYear();\n return `${day} ${month} ${year}`;\n}\n\nexport function formatTime(time: number) {\n return new Date(time).toTimeString().slice(0, 8);\n}\n\nexport const idleTimeTracker = ((activityThresholdTime: number): { checkIfIdle: () => boolean } => {\n let isIdle = false;\n let idleTimeout: number = null;\n\n const resetTimer = () => {\n if (idleTimeout) {\n window.clearTimeout(idleTimeout);\n }\n isIdle = false;\n idleTimeout = window.setTimeout(() => {\n isIdle = true;\n }, activityThresholdTime * 1000);\n };\n\n window.addEventListener(\"load\", resetTimer);\n document.addEventListener(\"mousemove\", resetTimer);\n document.addEventListener(\"keydown\", resetTimer);\n\n function checkIfIdle() {\n return isIdle;\n }\n return {\n checkIfIdle,\n };\n})(60 * 3);\n\nexport function isAddressByChainId(address: string, _chainId: string) {\n // TOOD: add rsk network checks.\n return isValidAddress(address);\n}\n\nexport function toChecksumAddressByChainId(address: string, chainId: string) {\n // TOOD: add rsk network checks.\n if (!isAddressByChainId(address, chainId)) return address;\n return toChecksumAddress(address);\n}\n\nexport const GAS_LIMITS = {\n // maximum gasLimit of a simple send\n SIMPLE: addHexPrefix((21_000).toString(16)),\n // a base estimate for token transfers.\n BASE_TOKEN_ESTIMATE: addHexPrefix((100_000).toString(16)),\n};\n\nexport function bnLessThan(a: string | number, b: string | number) {\n if (a === null || a === undefined || b === null || b === undefined) {\n return null;\n }\n return new BigNumber(a, 10).lt(b, 10);\n}\n\nexport const getIpfsEndpoint = (path: string) => `https://infura-ipfs.io/${path}`;\n\nexport function sanitizeNftMetdataUrl(url: string): string {\n let finalUri = url;\n if (url?.startsWith(\"ipfs\")) {\n const ipfsPath = url.split(\"ipfs://\")[1];\n finalUri = getIpfsEndpoint(ipfsPath);\n }\n return finalUri;\n}\n\nexport function getChainType(chainId: string) {\n if (chainId === MAINNET_CHAIN_ID) {\n return \"mainnet\";\n } else if ((TEST_CHAINS as string[]).includes(chainId)) {\n return \"testnet\";\n }\n return \"custom\";\n}\n","import { BaseBlockTracker, PollingBlockTrackerConfig, timeout } from \"@toruslabs/base-controllers\";\nimport { BlockParams } from \"ethers\";\nimport log from \"loglevel\";\n\nimport { idleTimeTracker } from \"../utils/helpers\";\nimport { EthereumBlock, PollingBlockTrackerState } from \"../utils/interfaces\";\n\nconst DEFAULT_POLLING_INTERVAL = 20;\nconst DEFAULT_RETRY_TIMEOUT = 2;\nconst SEC = 1000;\n\nclass PollingBlockTracker extends BaseBlockTracker<EthereumBlock, PollingBlockTrackerConfig, PollingBlockTrackerState> {\n constructor({ config, state = {} }: { config: Partial<PollingBlockTrackerConfig>; state: Partial<PollingBlockTrackerState> }) {\n if (!config.provider) {\n throw new Error(\"PollingBlockTracker - no provider specified.\");\n }\n\n super({ config, state });\n\n const pollingInterval = config.pollingInterval || DEFAULT_POLLING_INTERVAL;\n\n const retryTimeout = config.retryTimeout || DEFAULT_RETRY_TIMEOUT;\n\n // merge default + provided config.\n this.defaultConfig = {\n provider: config.provider,\n pollingInterval: pollingInterval * SEC,\n retryTimeout: retryTimeout * SEC,\n setSkipCacheFlag: config.setSkipCacheFlag || false,\n };\n\n this.initialize();\n }\n\n async checkForLatestBlock(): Promise<EthereumBlock> {\n await this._updateLatestBlock();\n return this.getLatestBlock();\n }\n\n // overrides the BaseBlockTracker._start method.\n protected _start(): void {\n this._synchronize().catch((err) => this.emit(\"error\", err));\n }\n\n private async _synchronize(): Promise<void> {\n while (this.state._isRunning) {\n if (idleTimeTracker.checkIfIdle()) return;\n try {\n await this._updateLatestBlock();\n await timeout(this.config.pollingInterval);\n } catch (err) {\n const newErr = new Error(`PollingBlockTracker - encountered an error while attempting to update latest block:\\n${(err as Error).stack}`);\n try {\n this.emit(\"error\", newErr);\n } catch (emitErr) {\n log.error(newErr);\n }\n await timeout(this.config.retryTimeout);\n }\n }\n }\n\n private async _updateLatestBlock(): Promise<void> {\n // fetch + set latest block\n const latestBlock = await this._fetchLatestBlock();\n this._newPotentialLatest(latestBlock);\n }\n\n private async _fetchLatestBlock(): Promise<EthereumBlock> {\n try {\n const block = await this.config.provider.request<[string, boolean], { [K in keyof BlockParams]: string }>({\n method: \"eth_getBlockByNumber\",\n params: [\"latest\", false],\n });\n return {\n blockHash: block.hash,\n idempotencyKey: block.number,\n timestamp: block.timestamp,\n baseFeePerGas: block.baseFeePerGas,\n gasLimit: block.gasLimit,\n };\n } catch (error) {\n log.error(\"Polling Block Tracker: \", error);\n throw new Error(`PollingBlockTracker - encountered error fetching block:\\n${(error as Error).message}`);\n }\n }\n}\n\nexport default PollingBlockTracker;\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@toruslabs/http-helpers\");","import { BaseCurrencyController, BaseCurrencyControllerConfig, BaseCurrencyControllerState } from \"@toruslabs/base-controllers\";\nimport { get } from \"@toruslabs/http-helpers\";\nimport log from \"loglevel\";\n\nimport { idleTimeTracker } from \"../utils/helpers\";\nimport { EthereumNetworkState } from \"../utils/interfaces\";\n\nexport interface IEthereumCurrencyControllerState extends BaseCurrencyControllerState {\n commonDenomination: string;\n commonDenominatorPrice: number;\n}\n\nexport default class CurrencyController extends BaseCurrencyController<BaseCurrencyControllerConfig, IEthereumCurrencyControllerState> {\n private conversionInterval: number;\n\n constructor({\n config,\n state,\n onNetworkChanged,\n }: {\n config: Partial<BaseCurrencyControllerConfig>;\n state: Partial<IEthereumCurrencyControllerState>;\n onNetworkChanged: (listener: (networkState: EthereumNetworkState) => void) => void;\n }) {\n super({ config, state });\n this.defaultState = {\n ...this.defaultState,\n commonDenomination: \"USD\",\n commonDenominatorPrice: 0,\n };\n this.initialize();\n onNetworkChanged((networkState) => {\n // to be called as (listener) => this.networkController.on('networkDidChange', listener);\n if (networkState.providerConfig.ticker.toUpperCase() !== this.state.nativeCurrency.toUpperCase()) {\n this.setNativeCurrency(networkState.providerConfig.ticker);\n this.updateConversionRate();\n }\n });\n }\n\n public setCommonDenomination(commonDenomination: string): void {\n this.update({ commonDenomination });\n }\n\n public getCommonDenomination(): string {\n return this.state.commonDenomination;\n }\n\n public setCommonDenominatorPrice(commonDenominatorPrice: number): void {\n this.update({ commonDenominatorPrice });\n }\n\n public getCommonDenominatorPrice(): number {\n return this.state.commonDenominatorPrice;\n }\n\n /**\n * Creates a new poll, using setInterval, to periodically call updateConversionRate. The id of the interval is\n * stored at the controller's conversionInterval property. If it is called and such an id already exists, the\n * previous interval is clear and a new one is created.\n */\n public scheduleConversionInterval(): void {\n if (this.conversionInterval) {\n window.clearInterval(this.conversionInterval);\n }\n this.conversionInterval = window.setInterval(() => {\n if (!idleTimeTracker.checkIfIdle()) {\n this.updateConversionRate();\n }\n }, this.config.pollInterval);\n }\n\n /**\n * Updates the conversionRate and conversionDate properties associated with the currentCurrency. Updated info is\n * fetched from an external API\n */\n public async updateConversionRate() {\n const currentCurrency = this.getCurrentCurrency();\n const nativeCurrency = this.getNativeCurrency();\n const commonDenomination = this.getCommonDenomination();\n const conversionRate = await this.retrieveConversionRate(nativeCurrency, currentCurrency, commonDenomination);\n\n const currentCurrencyRate = Number.parseFloat(conversionRate[currentCurrency.toUpperCase()]);\n const commonDenominationRate = Number.parseFloat(conversionRate[commonDenomination.toUpperCase()]);\n // set conversion rate\n if (currentCurrencyRate || commonDenominationRate) {\n // ETC\n this.setConversionRate(currentCurrencyRate);\n this.setConversionDate(Math.floor(Date.now() / 1000).toString());\n if (currentCurrency.toUpperCase() === commonDenomination.toUpperCase()) {\n this.setCommonDenominatorPrice(currentCurrencyRate);\n } else {\n this.setCommonDenominatorPrice(commonDenominationRate);\n }\n } else {\n this.setConversionRate(0);\n this.setConversionDate(\"N/A\");\n }\n }\n\n private async retrieveConversionRate(fromCurrency: string, toCurrency: string, commonDenomination: string): Promise<Record<string, string>> {\n try {\n // query cryptocompare\n let apiUrl = `${this.config.api}/currency?fsym=${fromCurrency.toUpperCase()}&tsyms=${toCurrency.toUpperCase()}`;\n if (commonDenomination && commonDenomination.toUpperCase() !== toCurrency.toUpperCase()) {\n apiUrl += `,${commonDenomination.toUpperCase()}`;\n }\n const parsedResponse = await get<Record<string, string>>(apiUrl);\n\n return parsedResponse;\n } catch (error) {\n log.error(error, `CurrencyController - updateCommonDenominatorPrice: Failed to query rate for currency: ${fromCurrency}/ ${toCurrency}`);\n }\n\n return { [toCurrency.toUpperCase()]: \"0\", [commonDenomination.toUpperCase()]: \"0\" };\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"lodash\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@babel/runtime/helpers/objectDestructuringEmpty\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@babel/runtime/helpers/objectWithoutProperties\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"bn.js\");","// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\n/* Currency Conversion Utility\n * This utility function can be used for converting currency related values within metamask.\n * The caller should be able to pass it a value, along with information about the value's\n * numeric base, denomination and currency, and the desired numeric base, denomination and\n * currency. It should return a single value.\n *\n * @param {(number | string | BN)} value - The value to convert.\n * @param {Object} [options] - Options to specify details of the conversion\n * @param {string} [options.fromCurrency = 'ETH' | 'USD'] - The currency of the passed value\n * @param {string} [options.toCurrency = 'ETH' | 'USD'] - The desired currency of the result\n * @param {string} [options.fromNumericBase = 'hex' | 'dec' | 'BN'] - The numeric basic of the passed value.\n * @param {string} [options.toNumericBase = 'hex' | 'dec' | 'BN'] - The desired numeric basic of the result.\n * @param {string} [options.fromDenomination = 'WEI'] - The denomination of the passed value\n * @param {string} [options.numberOfDecimals] - The desired number of decimals in the result\n * @param {string} [options.roundDown] - The desired number of decimals to round down to\n * @param {number} [options.conversionRate] - The rate to use to make the fromCurrency -> toCurrency conversion\n * @returns {(number | string | BN)}\n *\n * The utility passes value along with the options as a single object to the `converter` function.\n * `converter` conditional modifies the supplied `value` property, depending\n * on the accompanying options.\n */\n\nimport { stripHexPrefix } from \"@ethereumjs/util\";\nimport BigNumber from \"bignumber.js\";\nimport BN from \"bn.js\";\n\n// Big Number Constants\nconst BIG_NUMBER_WEI_MULTIPLIER = new BigNumber(\"1000000000000000000\");\nconst BIG_NUMBER_GWEI_MULTIPLIER = new BigNumber(\"1000000000\");\nconst BIG_NUMBER_ETH_MULTIPLIER = new BigNumber(\"1\");\n\ntype NumericBase = \"hex\" | \"dec\" | \"BN\";\n\ntype EthDenomination = \"WEI\" | \"GWEI\" | \"ETH\";\n\ntype ConverterOptions = {\n value: BigNumber | string;\n fromNumericBase: NumericBase;\n fromDenomination: EthDenomination;\n fromCurrency: string;\n toNumericBase: NumericBase;\n toDenomination: EthDenomination;\n toCurrency: string;\n numberOfDecimals: number;\n conversionRate: number;\n invertConversionRate: boolean;\n roundDown?: number;\n};\n\n// Setter Maps\nconst toBigNumber = {\n hex: (n) => new BigNumber(stripHexPrefix(n), 16),\n dec: (n) => new BigNumber(String(n), 10),\n BN: (n) => new BigNumber(n.toString(16), 16),\n};\nconst toNormalizedDenomination = {\n WEI: (bigNumber) => bigNumber.div(BIG_NUMBER_WEI_MULTIPLIER),\n GWEI: (bigNumber) => bigNumber.div(BIG_NUMBER_GWEI_MULTIPLIER),\n ETH: (bigNumber) => bigNumber.div(BIG_NUMBER_ETH_MULTIPLIER),\n};\nconst toSpecifiedDenomination = {\n WEI: (bigNumber) => bigNumber.times(BIG_NUMBER_WEI_MULTIPLIER).dp(0, BigNumber.ROUND_HALF_UP),\n GWEI: (bigNumber) => bigNumber.times(BIG_NUMBER_GWEI_MULTIPLIER).dp(9, BigNumber.ROUND_HALF_UP),\n ETH: (bigNumber) => bigNumber.times(BIG_NUMBER_ETH_MULTIPLIER).dp(9, BigNumber.ROUND_HALF_UP),\n};\nconst baseChange = {\n hex: (n) => n.toString(16),\n dec: (n) => new BigNumber(n).toString(10),\n BN: (n) => new BN(n.toString(16)),\n};\n\n// Utility function for checking base types\nconst isValidBase = (base) => Number.isInteger(base) && base > 1;\n\n/**\n * Utility method to convert a value between denominations, formats and currencies.\n */\nconst converter = ({\n value,\n fromNumericBase,\n fromDenomination,\n fromCurrency,\n toNumericBase,\n toDenomination,\n toCurrency,\n numberOfDecimals,\n conversionRate,\n invertConversionRate,\n roundDown,\n}: ConverterOptions) => {\n let convertedValue = fromNumericBase ? toBigNumber[fromNumericBase](value) : value;\n\n if (fromDenomination) {\n convertedValue = toNormalizedDenomination[fromDenomination](convertedValue);\n }\n\n if (fromCurrency !== toCurrency) {\n if (conversionRate === null || conversionRate === undefined) {\n throw new Error(`Converting from ${fromCurrency} to ${toCurrency} requires a conversionRate, but one was not provided`);\n }\n let rate = toBigNumber.dec(conversionRate);\n if (invertConversionRate) {\n rate = new BigNumber(1).div(conversionRate);\n }\n convertedValue = convertedValue.times(rate);\n }\n\n if (toDenomination) {\n convertedValue = toSpecifiedDenomination[toDenomination](convertedValue);\n }\n\n if (numberOfDecimals) {\n convertedValue = convertedValue.dp(numberOfDecimals, BigNumber.ROUND_HALF_DOWN);\n }\n\n if (roundDown) {\n convertedValue = convertedValue.dp(roundDown, BigNumber.ROUND_DOWN);\n }\n\n if (toNumericBase) {\n convertedValue = baseChange[toNumericBase](convertedValue);\n }\n return convertedValue;\n};\n\nexport const conversionUtil = (\n value: BigNumber | string,\n {\n fromCurrency = null,\n toCurrency = fromCurrency,\n fromNumericBase,\n toNumericBase,\n fromDenomination,\n toDenomination,\n numberOfDecimals,\n conversionRate,\n invertConversionRate,\n }: Omit<ConverterOptions, \"value\">\n) => {\n if (fromCurrency !== toCurrency && !conversionRate) {\n return 0;\n }\n return converter({\n fromCurrency,\n toCurrency,\n fromNumericBase,\n toNumericBase,\n fromDenomination,\n toDenomination,\n numberOfDecimals,\n conversionRate,\n invertConversionRate,\n value,\n });\n};\n\nexport const getBigNumber = (value, base) => {\n if (!isValidBase(base)) {\n throw new Error(\"Must specificy valid base\");\n }\n\n // We don't include 'number' here, because BigNumber will throw if passed\n // a number primitive it considers unsafe.\n if (typeof value === \"string\" || value instanceof BigNumber) {\n return new BigNumber(value, base);\n }\n\n return new BigNumber(String(value), base);\n};\n\nexport const addCurrencies = (a, b, options: Record<string, unknown> = {}) => {\n const { aBase, bBase, ...conversionOptions } = options;\n\n if (!isValidBase(aBase) || !isValidBase(bBase)) {\n throw new Error(\"Must specify valid aBase and bBase\");\n }\n\n const value = getBigNumber(a, aBase).plus(getBigNumber(b, bBase));\n\n return converter({\n value,\n ...conversionOptions,\n } as ConverterOptions);\n};\n\nexport const subtractCurrencies = (a, b, options: Record<string, unknown> = {}) => {\n const { aBase, bBase, ...conversionOptions } = options;\n\n if (!isValidBase(aBase) || !isValidBase(bBase)) {\n throw new Error(\"Must specify valid aBase and bBase\");\n }\n\n const value = getBigNumber(a, aBase).minus(getBigNumber(b, bBase));\n\n return converter({\n value,\n ...conversionOptions,\n } as ConverterOptions);\n};\n\nexport const multiplyCurrencies = (a, b, options: Record<string, unknown> = {}) => {\n const { multiplicandBase, multiplierBase, ...conversionOptions } = options;\n\n if (!isValidBase(multiplicandBase) || !isValidBase(multiplierBase)) {\n throw new Error(\"Must specify valid multiplicandBase and multiplierBase\");\n }\n\n const value = getBigNumber(a, multiplicandBase).times(getBigNumber(b, multiplierBase));\n\n return converter({\n value,\n ...conversionOptions,\n } as ConverterOptions);\n};\n\nexport const conversionGreaterThan = ({ ...firstProps }: ConverterOptions, { ...secondProps }: ConverterOptions) => {\n const firstValue = converter({ ...firstProps });\n const secondValue = converter({ ...secondProps });\n\n return firstValue.gt(secondValue);\n};\n\nexport const conversionLessThan = ({ ...firstProps }: ConverterOptions, { ...secondProps }: ConverterOptions) => {\n const firstValue = converter({ ...firstProps });\n const secondValue = converter({ ...secondProps });\n\n return firstValue.lt(secondValue);\n};\n\nexport const conversionMax = ({ ...firstProps }, { ...secondProps }) => {\n const firstIsGreater = conversionGreaterThan({ ...firstProps }, { ...secondProps });\n\n return firstIsGreater ? firstProps.value : secondProps.value;\n};\n\nexport const conversionGTE = ({ ...firstProps }, { ...secondProps }) => {\n const firstValue = converter({ ...firstProps } as ConverterOptions);\n const secondValue = converter({ ...secondProps } as ConverterOptions);\n return firstValue.isGreaterThanOrEqualTo(secondValue);\n};\n\nexport const conversionLTE = ({ ...firstProps }, { ...secondProps }) => {\n const firstValue = converter({ ...firstProps } as ConverterOptions);\n const secondValue = converter({ ...secondProps } as ConverterOptions);\n return firstValue.isLessThanOrEqualTo(secondValue);\n};\n\nexport const toNegative = (n, options = {}) => multiplyCurrencies(n, -1, options);\n\nexport const decGWEIToHexWEI = (decGWEI: BigNumber): BigNumber => {\n return conversionUtil(decGWEI, {\n fromNumericBase: \"dec\",\n toNumericBase: \"hex\",\n fromDenomination: \"GWEI\",\n toDenomination: \"WEI\",\n } as ConverterOptions);\n};\n\nexport const hexWEIToDecGWEI = (decGWEI: BigNumber | string): BigNumber => {\n return conversionUtil(decGWEI, {\n fromNumericBase: \"hex\",\n toNumericBase: \"dec\",\n fromDenomination: \"WEI\",\n toDenomination: \"GWEI\",\n } as ConverterOptions);\n};\n","import { get } from \"@toruslabs/http-helpers\";\nimport { SafeEventEmitterProvider } from \"@toruslabs/openlogin-jrpc\";\nimport BigNumber from \"bignumber.js\";\n\nimport { METHOD_TYPES } from \"../utils/constants\";\nimport { decGWEIToHexWEI, hexWEIToDecGWEI } from \"../utils/conversionUtils\";\nimport {\n EthereumGasFeeEstimates,\n EthereumLegacyGasFeeEstimates,\n GasEstimatesAPIResponse,\n GasEstimatesLegacyAPIResponse,\n GasFeeTimeBounds,\n} from \"./IGasFeeController\";\n\nexport function normalizeGWEIDecimalNumbers(n: string | number): number | BigNumber {\n const numberAsWEIHex = decGWEIToHexWEI(new BigNumber(n));\n const numberAsGWEI = hexWEIToDecGWEI(numberAsWEIHex);\n return numberAsGWEI;\n}\n\nexport async function fetchGasEstimates(url: string): Promise<EthereumGasFeeEstimates> {\n const estimates = await get<GasEstimatesAPIResponse>(url);\n const normalizedEstimates = {\n estimatedBaseFee: normalizeGWEIDecimalNumbers(estimates.estimatedBaseFee).toString(10),\n low: {\n ...estimates.low,\n suggestedMaxPriorityFeePerGas: normalizeGWEIDecimalNumbers(estimates.low.suggestedMaxPriorityFeePerGas).toString(10),\n suggestedMaxFeePerGas: normalizeGWEIDecimalNumbers(estimates.low.suggestedMaxFeePerGas).toString(10),\n },\n medium: {\n ...estimates.medium,\n suggestedMaxPriorityFeePerGas: normalizeGWEIDecimalNumbers(estimates.medium.suggestedMaxPriorityFeePerGas).toString(10),\n suggestedMaxFeePerGas: normalizeGWEIDecimalNumbers(estimates.medium.suggestedMaxFeePerGas).toString(10),\n },\n high: {\n ...estimates.high,\n suggestedMaxPriorityFeePerGas: normalizeGWEIDecimalNumbers(estimates.high.suggestedMaxPriorityFeePerGas).toString(10),\n suggestedMaxFeePerGas: normalizeGWEIDecimalNumbers(estimates.high.suggestedMaxFeePerGas).toString(10),\n },\n };\n return normalizedEstimates;\n}\n\nexport interface FeeHistoryResponse {\n baseFeePerGas: string[];\n gasUsedRatio: string[];\n oldestBlock: string;\n reward: string[][];\n}\n\nexport async function fetchGasEstimatesViaEthFeeHistory(provider: SafeEventEmitterProvider): Promise<EthereumGasFeeEstimates> {\n const noOfBlocks = 10;\n const newestBlock = \"latest\";\n // get the 10, 50 and 95th percentile of the tip fees from the last 10 blocks\n const percentileValues = [10, 50, 95];\n const feeHistory = await provider.request<[number, string, number[]], FeeHistoryResponse>({\n method: \"eth_feeHistory\",\n params: [noOfBlocks, newestBlock, percentileValues],\n });\n // this is in hex wei\n const finalBaseFeePerGas = feeHistory.baseFeePerGas[feeHistory.baseFeePerGas.length - 1];\n // this is in hex wei\n const priorityFeeCalcs = feeHistory.reward.reduce(\n (acc, curr) => {\n return {\n slow: acc.slow.plus(new BigNumber(curr[0], 16)),\n average: acc.average.plus(new BigNumber(curr[1], 16)),\n fast: acc.fast.plus(new BigNumber(curr[2], 16)),\n };\n },\n { slow: new BigNumber(0), average: new BigNumber(0), fast: new BigNumber(0) }\n );\n return {\n estimatedBaseFee: hexWEIToDecGWEI(finalBaseFeePerGas).toString(10),\n high: {\n maxWaitTimeEstimate: 30_000,\n minWaitTimeEstimate: 15_000,\n suggestedMaxFeePerGas: hexWEIToDecGWEI(priorityFeeCalcs.fast.plus(finalBaseFeePerGas).toString(16)).toString(),\n suggestedMaxPriorityFeePerGas: hexWEIToDecGWEI(priorityFeeCalcs.fast.toString(16)).toString(),\n },\n medium: {\n maxWaitTimeEstimate: 45_000,\n minWaitTimeEstimate: 15_000,\n suggestedMaxFeePerGas: hexWEIToDecGWEI(priorityFeeCalcs.average.plus(finalBaseFeePerGas).toString(16)).toString(),\n suggestedMaxPriorityFeePerGas: hexWEIToDecGWEI(priorityFeeCalcs.average.toString(16)).toString(),\n },\n low: {\n maxWaitTimeEstimate: 60_000,\n minWaitTimeEstimate: 15_000,\n suggestedMaxFeePerGas: hexWEIToDecGWEI(priorityFeeCalcs.slow.plus(finalBaseFeePerGas).toString(16)).toString(),\n suggestedMaxPriorityFeePerGas: hexWEIToDecGWEI(priorityFeeCalcs.slow.toString(16)).toString(),\n },\n };\n}\n\n/**\n * Hit the legacy MetaSwaps gasPrices estimate api and return the low, medium\n * high values from that API.\n */\nexport async function fetchLegacyGasPriceEstimates(url: string): Promise<EthereumLegacyGasFeeEstimates> {\n const result = await get<GasEstimatesLegacyAPIResponse>(url, {\n referrer: url,\n referrerPolicy: \"no-referrer-when-downgrade\",\n method: \"GET\",\n });\n // this returns decimal gwei\n return {\n low: result.SafeGasPrice,\n medium: result.ProposeGasPrice,\n high: result.FastGasPrice,\n };\n}\n\nexport async function fetchEthGasPriceEstimate(provider: SafeEventEmitterProvider): Promise<{ gasPrice: string }> {\n const gasPrice = await provider.request<never, string>({ method: METHOD_TYPES.ETH_GET_GAS_PRICE });\n return {\n gasPrice: hexWEIToDecGWEI(gasPrice).toString(),\n };\n}\n\nexport function calculateTimeEstimate(\n maxPriorityFeePerGas: string,\n maxFeePerGas: string,\n gasFeeEstimates: EthereumGasFeeEstimates\n): GasFeeTimeBounds {\n // all are in dec gwei\n const { low, medium, high, estimatedBaseFee } = gasFeeEstimates;\n\n const maxPriorityFeePerGasInWEI = new BigNumber(decGWEIToHexWEI(new BigNumber(maxPriorityFeePerGas)), 16);\n const maxFeePerGasInWEI = new BigNumber(decGWEIToHexWEI(new BigNumber(maxFeePerGas)), 16);\n const estimatedBaseFeeInWEI = new BigNumber(decGWEIToHexWEI(new BigNumber(estimatedBaseFee)), 16);\n\n const effectiveMaxPriorityFee = BigNumber.min(maxPriorityFeePerGasInWEI, maxFeePerGasInWEI.minus(estimatedBaseFeeInWEI));\n\n const lowMaxPriorityFeeInWEI = new BigNumber(decGWEIToHexWEI(new BigNumber(low.suggestedMaxPriorityFeePerGas)), 16);\n const mediumMaxPriorityFeeInWEI = new BigNumber(decGWEIToHexWEI(new BigNumber(medium.suggestedMaxPriorityFeePerGas)), 16);\n const highMaxPriorityFeeInWEI = new BigNumber(decGWEIToHexWEI(new BigNumber(high.suggestedMaxPriorityFeePerGas)), 16);\n\n let lowerTimeBound: null | number;\n let upperTimeBound: string | number;\n\n if (effectiveMaxPriorityFee.lt(lowMaxPriorityFeeInWEI)) {\n lowerTimeBound = null;\n upperTimeBound = \"unknown\";\n } else if (effectiveMaxPriorityFee.gte(lowMaxPriorityFeeInWEI) && effectiveMaxPriorityFee.lt(mediumMaxPriorityFeeInWEI)) {\n lowerTimeBound = low.minWaitTimeEstimate;\n upperTimeBound = low.maxWaitTimeEstimate;\n } else if (effectiveMaxPriorityFee.gte(mediumMaxPriorityFeeInWEI) && effectiveMaxPriorityFee.lt(highMaxPriorityFeeInWEI)) {\n lowerTimeBound = medium.minWaitTimeEstimate;\n upperTimeBound = medium.maxWaitTimeEstimate;\n } else if (effectiveMaxPriorityFee.eq(highMaxPriorityFeeInWEI)) {\n lowerTimeBound = high.minWaitTimeEstimate;\n upperTimeBound = high.maxWaitTimeEstimate;\n } else {\n lowerTimeBound = 0;\n upperTimeBound = high.maxWaitTimeEstimate;\n }\n\n return {\n lowerTimeBound,\n upperTimeBound,\n };\n}\n","import { addHexPrefix, isHexString } from \"@ethereumjs/util\";\nimport { BaseController } from \"@toruslabs/base-controllers\";\nimport { SafeEventEmitterProvider } from \"@toruslabs/openlogin-jrpc\";\nimport { cloneDeep } from \"lodash\";\nimport log from \"loglevel\";\n\nimport NetworkController from \"../Network/NetworkController\";\nimport { GAS_ESTIMATE_TYPES } from \"../utils/constants\";\nimport { idleTimeTracker } from \"../utils/helpers\";\nimport { EthereumNetworkState } from \"../utils/interfaces\";\nimport {\n calculateTimeEstimate,\n fetchEthGasPriceEstimate as defaultFetchEthGasPriceEstimate,\n fetchGasEstimates as defaultFetchGasEstimates,\n fetchGasEstimatesViaEthFeeHistory as defaultFetchGasEstimatesViaEthFeeHistory,\n fetchLegacyGasPriceEstimates as defaultFetchLegacyGasPriceEstimates,\n} from \"./gasUtil\";\nimport { EthereumGasConfig, EthereumGasFeeEstimates, EthereumGasState, EthereumLegacyGasFeeEstimates, GasFeeTimeBounds } from \"./IGasFeeController\";\nconst GAS_FEE_API = \"https://mock-gas-server.herokuapp.com/\";\nconst LEGACY_GAS_PRICES_API_URL = \"https://api.metaswap.codefi.network/gasPrices\";\n\ninterface IGasFeeControllerOptions {\n config?: Partial<EthereumGasConfig>;\n state?: Partial<EthereumGasState>;\n getNetworkIdentifier: NetworkController[\"getNetworkIdentifier\"];\n getProvider: NetworkController[\"getProvider\"];\n getCurrentNetworkEIP1559Compatibility: NetworkController[\"getEIP1559Compatibility\"];\n getCurrentAccountEIP1559Compatibility: (address: string) => boolean;\n getCurrentNetworkLegacyGasAPICompatibility: () => boolean;\n fetchGasEstimates?: (url: string) => Promise<EthereumGasFeeEstimates>;\n fetchEthGasPriceEstimate?: (provider: SafeEventEmitterProvider) => Promise<{ gasPrice: string }>;\n fetchLegacyGasPriceEstimates?: (url: string) => Promise<EthereumLegacyGasFeeEstimates>;\n fetchGasEstimatesViaEthFeeHistory?: (provider: SafeEventEmitterProvider) => Promise<EthereumGasFeeEstimates>;\n onNetworkStateChange: (listener: (networkState: EthereumNetworkState) => void) => void;\n}\n\n/**\n * Returns gas prices in dec gwei\n */\nexport default class GasFeeController extends BaseController<EthereumGasConfig, EthereumGasState> {\n name = \"GasFeeController\";\n\n private intervalId: number;\n\n private provider: SafeEventEmitterProvider;\n\n private currentChainId: string;\n\n private getNetworkIdentifier: NetworkController[\"getNetworkIdentifier\"];\n\n private getProvider: NetworkController[\"getProvider\"];\n\n private fetchGasEstimates: (url: string) => Promise<EthereumGasFeeEstimates>;\n\n private fetchGasEstimatesViaEthFeeHistory: (provider: SafeEventEmitterProvider) => Promise<EthereumGasFeeEstimates>;\n\n private fetchEthGasPriceEstimate: (provider: SafeEventEmitterProvider) => Promise<{ gasPrice: string }>;\n\n private fetchLegacyGasPriceEstimates: (url: string) => Promise<EthereumLegacyGasFeeEstimates>;\n\n private getCurrentNetworkEIP1559Compatibility: NetworkController[\"getEIP1559Compatibility\"];\n\n private getCurrentAccountEIP1559Compatibility: (address?: string) => boolean;\n\n private getCurrentNetworkLegacyGasAPICompatibility: () => boolean;\n\n constructor({\n config,\n state,\n getNetworkIdentifier,\n getProvider,\n fetchGasEstimates = defaultFetchGasEstimates,\n fetchEthGasPriceEstimate = defaultFetchEthGasPriceEstimate,\n fetchLegacyGasPriceEstimates = defaultFetchLegacyGasPriceEstimates,\n fetchGasEstimatesViaEthFeeHistory = defaultFetchGasEstimatesViaEthFeeHistory,\n getCurrentNetworkLegacyGasAPICompatibility,\n getCurrentNetworkEIP1559Compatibility,\n getCurrentAccountEIP1559Compatibility,\n onNetworkStateChange,\n }: IGasFeeControllerOptions) {\n super({ config, state });\n this.getNetworkIdentifier = getNetworkIdentifier;\n this.getProvider = getProvider;\n this.fetchGasEstimates = fetchGasEstimates;\n this.fetchEthGasPriceEstimate = fetchEthGasPriceEstimate;\n this.fetchLegacyGasPriceEstimates = fetchLegacyGasPriceEstimates;\n this.getCurrentNetworkEIP1559Compatibility = getCurrentNetworkEIP1559Compatibility;\n this.getCurrentNetworkLegacyGasAPICompatibility = getCurrentNetworkLegacyGasAPICompatibility;\n this.getCurrentAccountEIP1559Compatibility = getCurrentAccountEIP1559Compatibility;\n this.fetchGasEstimatesViaEthFeeHistory = fetchGasEstimatesViaEthFeeHistory;\n\n this.defaultConfig = {\n interval: 30_000,\n legacyAPIEndpoint: LEGACY_GAS_PRICES_API_URL,\n EIP1559APIEndpoint: GAS_FEE_API,\n };\n\n this.defaultState = {\n gasFeeEstimates: {} as EthereumGasFeeEstimates,\n estimatedGasFeeTimeBounds: {},\n gasEstimateType: GAS_ESTIMATE_TYPES.NONE,\n };\n // Initialize.\n this.currentChainId = this.getNetworkIdentifier();\n this.provider = this.getProvider();\n this.initialize();\n onNetworkStateChange(() => {\n this.onNetworkStateChange();\n });\n }\n\n async onNetworkStateChange() {\n this.provider = this.getProvider();\n const newChainId = this.getNetworkIdentifier();\n if (this.currentChainId !== newChainId) {\n this.currentChainId = newChainId;\n await this.resetPolling();\n }\n }\n\n async resetPolling() {\n this.stopPolling();\n await this.getGasFeeEstimatesAndStartPolling();\n }\n\n async fetchGasFeeEstimates() {\n return this._fetchGasFeeEstimateData();\n }\n\n async getGasFeeEstimatesAndStartPolling() {\n await this._fetchGasFeeEstimateData();\n this._startPolling();\n }\n\n disconnectPoller() {\n this.stopPolling();\n }\n\n /**\n * Prepare to discard this controller.\n *\n * This stops any active polling.\n */\n destroy() {\n this.stopPolling();\n }\n\n stopPolling() {\n if (this.intervalId) {\n clearInterval(this.intervalId);\n }\n this.resetState();\n }\n\n /**\n * Gets and sets gasFeeEstimates in state\n *\n * @returns GasFeeEstimates\n */\n private async _fetchGasFeeEstimateData(): Promise<EthereumGasState> {\n let isEIP1559Compatible: boolean;\n const isLegacyGasAPICompatible = this.getCurrentNetworkLegacyGasAPICompatibility();\n\n const chainId = this.getNetworkIdentifier();\n if (chainId === \"loading\") return;\n let chainIdInt: number;\n if (typeof chainId === \"string\" && isHexString(addHexPrefix(chainId))) {\n chainIdInt = Number.parseInt(chainId, 16);\n }\n try {\n isEIP1559Compatible = await this.getEIP1559Compatibility();\n log.info(\"eip1559 compatible\", isEIP1559Compatible);\n } catch (error) {\n log.warn(error);\n isEIP1559Compatible = false;\n }\n\n let newState = cloneDeep(this.defaultState);\n\n try {\n if (isEIP1559Compatible) {\n let estimates: EthereumGasFeeEstimates;\n try {\n estimates = await this.fetchGasEstimates(this.config.EIP1559APIEndpoint.replace(\"<chain_id>\", `${chainIdInt}`));\n } catch (error) {\n estimates = await this.fetchGasEstimatesViaEthFeeHistory(this.provider);\n }\n const { suggestedMaxPriorityFeePerGas, suggestedMaxFeePerGas } = estimates.medium;\n const estimatedGasFeeTimeBounds = this.getTimeEstimate(suggestedMaxPriorityFeePerGas, suggestedMaxFeePerGas);\n newState = {\n gasFeeEstimates: estimates,\n estimatedGasFeeTimeBounds,\n gasEstimateType: GAS_ESTIMATE_TYPES.FEE_MARKET,\n };\n } else if (isLegacyGasAPICompatible) {\n const estimates = await this.fetchLegacyGasPriceEstimates(this.config.legacyAPIEndpoint.replace(\"<chain_id>\", `${chainIdInt}`));\n newState = {\n gasFeeEstimates: estimates,\n estimatedGasFeeTimeBounds: {},\n gasEstimateType: GAS_ESTIMATE_TYPES.LEGACY,\n };\n } else {\n throw new Error(\"Main gas fee/price estimation failed. Use fallback\");\n }\n } catch {\n try {\n const estimates = await this.fetchEthGasPriceEstimate(this.provider);\n newState = {\n gasFeeEstimates: estimates,\n estimatedGasFeeTimeBounds: {},\n gasEstimateType: GAS_ESTIMATE_TYPES.ETH_GASPRICE,\n };\n } catch (error) {\n throw new Error(`Gas fee/price estimation failed. Message: ${(error as Error).message}`);\n }\n }\n this.update(newState);\n\n return newState;\n }\n\n private async _startPolling() {\n this._poll();\n }\n\n private async _poll() {\n if (this.intervalId) {\n window.clearInterval(this.intervalId);\n }\n this.intervalId = window.setInterval(async () => {\n if (!idleTimeTracker.checkIfIdle()) {\n await this._fetchGasFeeEstimateData();\n }\n }, this.config.interval);\n }\n\n private resetState() {\n this.update(cloneDeep(this.defaultState));\n }\n\n private async getEIP1559Compatibility(): Promise<boolean> {\n const currentNetworkIsEIP1559Compatible = await this.getCurrentNetworkEIP1559Compatibility();\n const currentAccountIsEIP1559Compatible = this.getCurrentAccountEIP1559Compatibility?.() ?? true;\n\n return currentNetworkIsEIP1559Compatible && currentAccountIsEIP1559Compatible;\n }\n\n private getTimeEstimate(maxPriorityFeePerGas: string, maxFeePerGas: string): GasFeeTimeBounds {\n if (!this.state.gasFeeEstimates || this.state.gasEstimateType !== GAS_ESTIMATE_TYPES.FEE_MARKET) {\n return {};\n }\n return calculateTimeEstimate(maxPriorityFeePerGas, maxFeePerGas, this.state.gasFeeEstimates as EthereumGasFeeEstimates);\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@metamask/eth-sig-util\");","import { TypedTransaction } from \"@ethereumjs/tx\";\nimport { addHexPrefix, bigIntToBytes, ecsign, stripHexPrefix } from \"@ethereumjs/util\";\nimport {\n concatSig,\n decrypt,\n EthEncryptedData,\n getEncryptionPublicKey,\n MessageTypes,\n personalSign,\n signTypedData,\n SignTypedDataVersion,\n TypedDataV1,\n TypedMessage,\n} from \"@metamask/eth-sig-util\";\nimport { BaseConfig, BaseKeyringController, IKeyringController, KeyringControllerState } from \"@toruslabs/base-controllers\";\nimport { SigningKey, Wallet } from \"ethers\";\n\nexport default class KeyringController extends BaseKeyringController<Partial<BaseConfig>, KeyringControllerState> implements IKeyringController {\n constructor({ config, state }: { config: Partial<BaseConfig>; state: Partial<KeyringControllerState> }) {\n super({ config, state });\n this.defaultState = { wallets: [] };\n this.initialize();\n }\n\n async signTransaction<T, U>(tx: T, address: string): Promise<U> {\n const txPayload = tx as unknown as TypedTransaction;\n const wallet = this._getWalletForAccount(address);\n const privKey = this.getBufferPrivateKey(wallet.privateKey);\n const signedTx = txPayload.sign(privKey);\n // Newer versions of Ethereumjs-tx are immutable and return a new tx object\n return signedTx === undefined ? (tx as unknown as U) : (signedTx as unknown as U);\n }\n\n getAccounts(): string[] {\n return this.state.wallets.map((w) => w.publicKey);\n }\n\n importAccount(accountPrivateKey: string): string {\n const hexPrivateKey = addHexPrefix(accountPrivateKey);\n const signingKey = new SigningKey(hexPrivateKey);\n const wallet = new Wallet(signingKey.privateKey);\n const { address } = wallet;\n\n const existingWallet = this.state.wallets.find((w) => w.address === address);\n if (existingWallet) return existingWallet.address;\n\n this.update({\n wallets: [\n ...this.state.wallets,\n {\n publicKey: signingKey.publicKey,\n privateKey: accountPrivateKey,\n address,\n },\n ],\n });\n return address;\n }\n\n removeAccount(address: string): void {\n const newWallets = [...this.state.wallets];\n const idx = newWallets.findIndex((w) => w.address === address);\n if (idx !== -1) {\n newWallets.splice(idx, 1);\n this.update({ wallets: newWallets });\n }\n }\n\n getBufferPrivateKey(privateKey: string) {\n const stripped = stripHexPrefix(privateKey);\n return Buffer.from(stripped, \"hex\");\n }\n\n // For eth_sign, we need to sign arbitrary data:\n signMessage(data: string, address: string) {\n const wallet = this._getWalletForAccount(address);\n const privKey = this.getBufferPrivateKey(wallet.privateKey);\n const messageSig = ecsign(Buffer.from(stripHexPrefix(data), \"hex\"), privKey);\n const sig = concatSig(Buffer.from(bigIntToBytes(messageSig.v)), Buffer.from(messageSig.r), Buffer.from(messageSig.s));\n return sig;\n }\n\n // For personal_sign, we need to prefix the message: ensure input is hashed and not buffer of utf-8\n async signPersonalMessage(data: string, address: string) {\n const wallet = this._getWalletForAccount(address);\n const privKey = this.getBufferPrivateKey(wallet.privateKey);\n const sig = personalSign({ privateKey: privKey, data });\n return sig;\n }\n\n // personal_signTypedData, signs data along with the schema\n async signTypedData<V extends SignTypedDataVersion, T extends MessageTypes>(\n typedData: V extends \"V1\" ? TypedDataV1 : TypedMessage<T>,\n address: string,\n version: V\n ) {\n const wallet = this._getWalletForAccount(address);\n const privKey = this.getBufferPrivateKey(wallet.privateKey);\n return signTypedData({ privateKey: privKey, data: typedData, version });\n }\n\n signEncryptionPublicKey(address: string) {\n const wallet = this._getWalletForAccount(address);\n return getEncryptionPublicKey(stripHexPrefix(wallet.privateKey));\n }\n\n decryptMessage(data: EthEncryptedData, address: string) {\n const wallet = this._getWalletForAccount(address);\n return decrypt({ encryptedData: data, privateKey: stripHexPrefix(wallet.privateKey) });\n }\n\n private _getWalletForAccount(account: string) {\n const address = account.toLowerCase();\n const wallet = this.state.wallets.find((w) => w.address.toLowerCase() === address);\n if (!wallet) throw new Error(\"Torus Keyring - Unable to find matching address.\");\n return wallet;\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@metamask/rpc-errors\");","import { SignTypedDataVersion } from \"@metamask/eth-sig-util\";\nimport { providerErrors, rpcErrors } from \"@metamask/rpc-errors\";\nimport { BaseConfig, BaseController, BaseState } from \"@toruslabs/base-controllers\";\nimport { JRPCRequest, Json } from \"@toruslabs/openlogin-jrpc\";\n\nimport NetworkController from \"../Network/NetworkController\";\nimport { MessageStatus } from \"../utils/constants\";\nimport { AbstractMessage, BaseRequestParams, MessageStatusType, UserRequestApprovalParams } from \"../utils/interfaces\";\n\nexport interface MessageControllerState<M extends AbstractMessage> extends BaseState {\n unapprovedMessages: Record<string, M>;\n unapprovedMessagesCount: number;\n}\n\nexport default abstract class AbstractMessageController<M extends AbstractMessage, P extends BaseRequestParams> extends BaseController<\n BaseConfig,\n MessageControllerState<M>\n> {\n protected messages: M[];\n\n protected getNetworkIdentifier: NetworkController[\"getNetworkIdentifier\"];\n\n /**\n * Controller in charge of managing - storing, adding, removing, updating - Messages.\n *\n */\n constructor({\n config,\n state,\n getNetworkIdentifier,\n }: {\n config?: Partial<BaseConfig>;\n state?: Partial<MessageControllerState<M>>;\n getNetworkIdentifier: NetworkController[\"getNetworkIdentifier\"];\n }) {\n super({ config, state });\n this.defaultState = {\n unapprovedMessages: {},\n unapprovedMessagesCount: 0,\n };\n this.messages = [];\n this.defaultConfig = {};\n this.getNetworkIdentifier = getNetworkIdentifier;\n super.initialize();\n }\n\n getMessage(messageId: string) {\n return this.messages.find((message) => message.id === messageId);\n }\n\n getAllMessages() {\n return this.messages;\n }\n\n setMetadata(messageId: string, metadata: Json) {\n const message = this.getMessage(messageId);\n if (!message) {\n throw new Error(`${this.name}: Message not found for id: ${messageId}.`);\n }\n message.metadata = metadata;\n this.updateMessage(message);\n }\n\n getUnapprovedMessages() {\n return this.messages\n .filter((message) => message.status === MessageStatus.UNAPPROVED)\n .reduce((result: { [key: string]: M }, message: M) => {\n result[message.id] = message;\n return result;\n }, {}) as { [key: string]: M };\n }\n\n async addMessage(message: M) {\n this.messages.push(message);\n this.saveMessageList();\n }\n\n approveMessage(messageId: string, messageParams: P): Promise<P> {\n this.setMessageStatus(messageId, MessageStatus.APPROVED);\n return this.prepMessageForSigning(messageParams);\n }\n\n setMessageStatus(messageId: string, status: MessageStatusType) {\n const message = this.getMessage(messageId);\n if (!message) {\n throw new Error(`${this.name}: Message not found for id: ${messageId}.`);\n }\n message.status = status;\n this.updateMessage(message);\n this.emit(`${messageId}:${status}`, message);\n if (status === MessageStatus.REJECTED || status === MessageStatus.SIGNED || status === MessageStatus.FAILED) {\n this.emit(`${messageId}:finished`, message);\n }\n }\n\n async waitForFinishStatus(msgParams: P, messageName: string): Promise<string> {\n return new Promise((resolve, reject) => {\n const handleFinished = (msg: M) => {\n if (msg.status === MessageStatus.REJECTED) {\n return reject(providerErrors.userRejectedRequest(`${messageName} Signature: User denied message signature`));\n }\n if (msg.status === MessageStatus.FAILED) {\n return reject(rpcErrors.internal(`${messageName} Signature: failed to sign message ${msg.error}`));\n }\n if (msg.status === MessageStatus.SIGNED) {\n return resolve(msg.rawSig as string);\n }\n\n return reject(rpcErrors.internal(`${messageName} Signature: Unknown problem: ${JSON.stringify(msgParams)}`));\n };\n this.once(`${msgParams.id}:finished`, handleFinished);\n });\n }\n\n protected updateMessage(message: M) {\n const index = this.messages.findIndex((msg) => message.id === msg.id);\n if (index !== -1) {\n this.messages[index] = message;\n }\n this.saveMessageList();\n }\n\n protected saveMessageList() {\n const unapprovedMessages = this.getUnapprovedMessages();\n const unapprovedMessagesCount = Object.keys(unapprovedMessages).length;\n this.update({ unapprovedMessages, unapprovedMessagesCount });\n }\n\n abstract prepMessageForSigning(messageParams: P): Promise<P>;\n\n abstract addUnapprovedMessage(\n messageParams: P,\n request: JRPCRequest<P> & UserRequestApprovalParams,\n version?: SignTypedDataVersion\n ): Promise<string>;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"jsonschema\");","import { addHexPrefix, bytesToHex, isValidAddress, stripHexPrefix } from \"@ethereumjs/util\";\nimport { EthEncryptedData, TYPED_MESSAGE_SCHEMA, TypedDataV1Field, typedSignatureHash } from \"@metamask/eth-sig-util\";\nimport { validate } from \"jsonschema\";\n\nimport { DecryptMessageParams, EncryptionPublicKeyParams, MessageParams, TypedMessageParams } from \"../utils/interfaces\";\n\nconst hexRe = /^[0-9A-Fa-f]+$/gu;\n\nexport function validateAddress(address: string, propertyName: string) {\n if (!address || typeof address !== \"string\" || !isValidAddress(address)) {\n throw new Error(`Invalid \"${propertyName}\" address: ${address} must be a valid string.`);\n }\n}\n\nexport function validateSignMessageData(messageData: MessageParams) {\n const { from, data } = messageData;\n validateAddress(from, \"from\");\n\n if (!data || typeof data !== \"string\") {\n throw new Error(`Invalid message \"data\": ${data} must be a valid string.`);\n }\n}\n\nexport function normalizeMessageData(data: string): string {\n try {\n const stripped = stripHexPrefix(data);\n if (stripped.match(hexRe)) {\n return addHexPrefix(stripped);\n }\n } catch (e) {}\n return bytesToHex(Buffer.from(data, \"utf8\"));\n}\n\nexport function validateTypedSignMessageDataV1(messageData: TypedMessageParams) {\n validateAddress(messageData.from, \"from\");\n\n if (!messageData.data || !Array.isArray(messageData.data)) {\n throw new Error(`Invalid message \"data\": ${messageData.data} must be a valid array.`);\n }\n\n try {\n // typedSignatureHash will throw if the data is invalid.\n typedSignatureHash(messageData.data as TypedDataV1Field[]);\n } catch (e) {\n throw new Error(`Expected EIP712 typed data.`);\n }\n}\n\nexport function validateTypedSignMessageDataV3V4(messageData: TypedMessageParams, currentChainId: string) {\n validateAddress(messageData.from, \"from\");\n\n if (!messageData.data || Array.isArray(messageData.data) || (typeof messageData.data !== \"object\" && typeof messageData.data !== \"string\")) {\n throw new Error(`Invalid message \"data\": Must be a valid string or object.`);\n }\n\n let data;\n if (typeof messageData.data === \"object\") {\n data = messageData.data;\n } else {\n try {\n data = JSON.parse(messageData.data);\n } catch (e) {\n throw new Error(\"Data must be passed as a valid JSON string.\");\n }\n }\n\n const validation = validate(data, TYPED_MESSAGE_SCHEMA);\n if (validation.errors.length > 0) {\n throw new Error(\"Data must conform to EIP-712 schema. See https://git.io/fNtcx.\");\n }\n\n if (!currentChainId) {\n throw new Error(\"Current chainId cannot be null or undefined.\");\n }\n\n let { chainId } = data.domain;\n if (chainId) {\n if (typeof chainId === \"string\") {\n chainId = parseInt(chainId, chainId.startsWith(\"0x\") ? 16 : 10);\n }\n\n const activeChainId = parseInt(currentChainId, 16);\n if (Number.isNaN(activeChainId)) {\n throw new Error(`Cannot sign messages for chainId \"${chainId}\", because MetaMask is switching networks.`);\n }\n\n if (chainId !== activeChainId) {\n throw new Error(`Provided chainId \"${chainId}\" must match the active chainId \"${activeChainId}\"`);\n }\n }\n}\n\nexport function validateEncryptionPublicKeyMessageData(messageData: EncryptionPublicKeyParams) {\n const { from } = messageData;\n validateAddress(from, \"from\");\n}\n\nexport function validateDecryptedMessageData(messageData: DecryptMessageParams) {\n const { from } = messageData;\n validateAddress(from, \"from\");\n}\n\nexport function parseDecryptMessageData(data: string): EthEncryptedData {\n const stripped = stripHexPrefix(data);\n const buffer = Buffer.from(stripped, \"hex\");\n return JSON.parse(buffer.toString(\"utf8\")) as EthEncryptedData;\n}\n","// import { isValidAddress } from \"@ethereumjs/util\";\nimport { BaseConfig, randomId } from \"@toruslabs/base-controllers\";\nimport { JRPCRequest } from \"@toruslabs/openlogin-jrpc\";\nimport log from \"loglevel\";\n\nimport KeyringController from \"../Keyring/KeyringController\";\nimport NetworkController from \"../Network/NetworkController\";\nimport { MESSAGE_EVENTS, MessageStatus, METHOD_TYPES } from \"../utils/constants\";\nimport { DecryptMessage, DecryptMessageParams, Message, UserRequestApprovalParams } from \"../utils/interfaces\";\nimport AbstractMessageController, { MessageControllerState } from \"./AbstractMessageController\";\nimport { normalizeMessageData, parseDecryptMessageData, validateDecryptedMessageData } from \"./utils\";\n\nexport class DecryptMessageController extends AbstractMessageController<DecryptMessage, DecryptMessageParams> {\n override name = \"DecryptMessageController\";\n\n protected decryptMessage: KeyringController[\"decryptMessage\"];\n\n constructor({\n config,\n state,\n decryptMessage,\n getNetworkIdentifier,\n }: {\n config: Partial<BaseConfig>;\n state: Partial<MessageControllerState<Message>>;\n decryptMessage: KeyringController[\"decryptMessage\"];\n getNetworkIdentifier: NetworkController[\"getNetworkIdentifier\"];\n }) {\n super({ config, state, getNetworkIdentifier });\n this.decryptMessage = decryptMessage;\n this.initialize();\n }\n\n async processDecryptMessage(messageId: string): Promise<string> {\n try {\n const msgObject = this.getMessage(messageId);\n const cleanMsgParams = await this.approveMessage(messageId, msgObject.messageParams);\n const parsedData = parseDecryptMessageData(cleanMsgParams.data);\n const rawSig = this.decryptMessage(parsedData, cleanMsgParams.from);\n this.updateMessage({ ...msgObject, rawSig });\n this.setMessageStatus(messageId, MessageStatus.SIGNED);\n return rawSig;\n } catch (error) {\n log.error(error);\n this.setMessageStatus(messageId, MessageStatus.FAILED);\n }\n }\n\n async addNewUnapprovedMessage(\n messageParams: DecryptMessageParams,\n req: JRPCRequest<DecryptMessageParams> & UserRequestApprovalParams\n ): Promise<string> {\n await this.addUnapprovedMessage(messageParams, req);\n return this.waitForFinishStatus(messageParams, this.name);\n }\n\n async addUnapprovedMessage(messageParams: DecryptMessageParams, req?: JRPCRequest<DecryptMessageParams> & UserRequestApprovalParams) {\n validateDecryptedMessageData(messageParams);\n if (req) {\n messageParams.origin = req.origin;\n }\n messageParams.data = normalizeMessageData(messageParams.data);\n const messageId = randomId();\n const messageData: DecryptMessage = {\n id: messageId,\n messageParams,\n status: MessageStatus.UNAPPROVED,\n time: Date.now(),\n type: METHOD_TYPES.ETH_DECRYPT,\n };\n await this.addMessage(messageData);\n this.emit(MESSAGE_EVENTS.UNAPPROVED_MESSAGE, messageData);\n return messageId;\n }\n\n prepMessageForSigning(messageParams: DecryptMessageParams): Promise<DecryptMessageParams> {\n return Promise.resolve({ ...messageParams });\n }\n}\n","// import { isValidAddress } from \"@ethereumjs/util\";\nimport { BaseConfig, randomId } from \"@toruslabs/base-controllers\";\nimport { JRPCRequest } from \"@toruslabs/openlogin-jrpc\";\nimport log from \"loglevel\";\n\nimport KeyringController from \"../Keyring/KeyringController\";\nimport NetworkController from \"../Network/NetworkController\";\nimport { MESSAGE_EVENTS, MessageStatus, METHOD_TYPES } from \"../utils/constants\";\nimport { EncryptionPublicKey, EncryptionPublicKeyParams, UserRequestApprovalParams } from \"../utils/interfaces\";\nimport AbstractMessageController, { MessageControllerState } from \"./AbstractMessageController\";\nimport { validateEncryptionPublicKeyMessageData } from \"./utils\";\n\nexport class EncryptionPublicKeyController extends AbstractMessageController<EncryptionPublicKey, EncryptionPublicKeyParams> {\n override name = \"EncryptionPublicKeyController\";\n\n protected signEncryptionPublicKey: KeyringController[\"signEncryptionPublicKey\"];\n\n constructor({\n config,\n state,\n signEncryptionPublicKey,\n getNetworkIdentifier,\n }: {\n config: Partial<BaseConfig>;\n state: Partial<MessageControllerState<EncryptionPublicKey>>;\n signEncryptionPublicKey: KeyringController[\"signEncryptionPublicKey\"];\n getNetworkIdentifier: NetworkController[\"getNetworkIdentifier\"];\n }) {\n super({ config, state, getNetworkIdentifier });\n this.signEncryptionPublicKey = signEncryptionPublicKey;\n this.initialize();\n }\n\n async processGetEncryptionPublicKey(messageId: string): Promise<string> {\n try {\n const msgObject = this.getMessage(messageId);\n const cleanMsgParams = await this.approveMessage(messageId, msgObject.messageParams);\n const publicKey = this.signEncryptionPublicKey(cleanMsgParams.from);\n this.updateMessage({ ...msgObject, rawSig: publicKey });\n this.setMessageStatus(messageId, MessageStatus.SIGNED);\n return publicKey;\n } catch (error) {\n log.error(error);\n this.setMessageStatus(messageId, MessageStatus.FAILED);\n }\n }\n\n async addNewUnapprovedMessage(\n messageParams: EncryptionPublicKeyParams,\n req: JRPCRequest<EncryptionPublicKeyParams> & UserRequestApprovalParams\n ): Promise<string> {\n await this.addUnapprovedMessage(messageParams, req);\n return this.waitForFinishStatus(messageParams, this.name);\n }\n\n async addUnapprovedMessage(\n messageParams: EncryptionPublicKeyParams,\n req?: JRPCRequest<EncryptionPublicKeyParams> & UserRequestApprovalParams\n ): Promise<string> {\n validateEncryptionPublicKeyMessageData(messageParams);\n if (req) {\n messageParams.origin = req.origin;\n }\n const messageId = randomId();\n const messageData: EncryptionPublicKey = {\n id: messageId,\n messageParams,\n status: MessageStatus.UNAPPROVED,\n time: Date.now(),\n type: METHOD_TYPES.ETH_GET_ENCRYPTION_PUBLIC_KEY,\n };\n await this.addMessage(messageData);\n this.emit(MESSAGE_EVENTS.UNAPPROVED_MESSAGE, messageData);\n return messageId;\n }\n\n prepMessageForSigning(messageParams: EncryptionPublicKeyParams): Promise<EncryptionPublicKeyParams> {\n // From should be the public key for the encryption\n return Promise.resolve({ ...messageParams, from: messageParams.data });\n }\n}\n","import { BaseConfig, randomId } from \"@toruslabs/base-controllers\";\nimport { JRPCRequest } from \"@toruslabs/openlogin-jrpc\";\nimport log from \"loglevel\";\n\nimport KeyringController from \"../Keyring/KeyringController\";\nimport NetworkController from \"../Network/NetworkController\";\nimport { MESSAGE_EVENTS, MessageStatus, METHOD_TYPES } from \"../utils/constants\";\nimport { Message, MessageParams, UserRequestApprovalParams } from \"../utils/interfaces\";\nimport AbstractMessageController, { MessageControllerState } from \"./AbstractMessageController\";\nimport { normalizeMessageData, validateSignMessageData } from \"./utils\";\n\nexport class MessageController extends AbstractMessageController<Message, MessageParams> {\n override name = \"MessageController\";\n\n protected signMessage: KeyringController[\"signMessage\"];\n\n constructor({\n config,\n state,\n signMessage,\n getNetworkIdentifier,\n }: {\n config: Partial<BaseConfig>;\n state: Partial<MessageControllerState<Message>>;\n signMessage: KeyringController[\"signMessage\"];\n getNetworkIdentifier: NetworkController[\"getNetworkIdentifier\"];\n }) {\n super({ config, state, getNetworkIdentifier });\n this.signMessage = signMessage;\n this.initialize();\n }\n\n async processSignMessage(messageId: string): Promise<string> {\n try {\n const msgObject = this.getMessage(messageId);\n const cleanMsgParams = await this.approveMessage(messageId, msgObject.messageParams);\n const rawSig = this.signMessage(cleanMsgParams.data, cleanMsgParams.from);\n this.updateMessage({ ...msgObject, rawSig });\n this.setMessageStatus(messageId, MessageStatus.SIGNED);\n return rawSig;\n } catch (error) {\n log.error(error);\n this.setMessageStatus(messageId, MessageStatus.FAILED);\n }\n }\n\n async addNewUnapprovedMessage(messageParams: MessageParams, req: JRPCRequest<MessageParams> & UserRequestApprovalParams): Promise<string> {\n await this.addUnapprovedMessage(messageParams, req);\n return this.waitForFinishStatus(messageParams, this.name);\n }\n\n async addUnapprovedMessage(messageParams: MessageParams, req: JRPCRequest<MessageParams> & UserRequestApprovalParams): Promise<string> {\n validateSignMessageData(messageParams);\n if (req) {\n messageParams.origin = req.origin;\n }\n messageParams.data = normalizeMessageData(messageParams.data);\n const messageId = randomId();\n const messageData: Message = {\n id: messageId,\n messageParams,\n status: MessageStatus.UNAPPROVED,\n time: Date.now(),\n type: METHOD_TYPES.ETH_SIGN,\n };\n await this.addMessage(messageData);\n this.emit(MESSAGE_EVENTS.UNAPPROVED_MESSAGE, messageData);\n return messageId;\n }\n\n prepMessageForSigning(messageParams: MessageParams): Promise<MessageParams> {\n return Promise.resolve(messageParams);\n }\n}\n","import { BaseConfig, randomId } from \"@toruslabs/base-controllers\";\nimport { JRPCRequest } from \"@toruslabs/openlogin-jrpc\";\nimport log from \"loglevel\";\n\nimport KeyringController from \"../Keyring/KeyringController\";\nimport NetworkController from \"../Network/NetworkController\";\nimport { MESSAGE_EVENTS, MessageStatus, METHOD_TYPES } from \"../utils/constants\";\nimport { Message, MessageParams, UserRequestApprovalParams } from \"../utils/interfaces\";\nimport AbstractMessageController, { MessageControllerState } from \"./AbstractMessageController\";\nimport { normalizeMessageData, validateSignMessageData } from \"./utils\";\n\nexport class PersonalMessageController extends AbstractMessageController<Message, MessageParams> {\n override name = \"PersonalMessageController\";\n\n protected signPersonalMessage: KeyringController[\"signPersonalMessage\"];\n\n constructor({\n config,\n state,\n signPersonalMessage,\n getNetworkIdentifier,\n }: {\n config: Partial<BaseConfig>;\n state: Partial<MessageControllerState<Message>>;\n signPersonalMessage: KeyringController[\"signPersonalMessage\"];\n getNetworkIdentifier: NetworkController[\"getNetworkIdentifier\"];\n }) {\n super({ config, state, getNetworkIdentifier });\n this.signPersonalMessage = signPersonalMessage;\n this.initialize();\n }\n\n async processPersonalSignMessage(messageId: string): Promise<string> {\n try {\n const msgObject = this.getMessage(messageId);\n const cleanMsgParams = await this.approveMessage(messageId, msgObject.messageParams);\n const rawSig = await this.signPersonalMessage(cleanMsgParams.data, cleanMsgParams.from);\n this.updateMessage({ ...msgObject, rawSig });\n this.setMessageStatus(messageId, MessageStatus.SIGNED);\n return rawSig;\n } catch (error) {\n log.error(error);\n this.setMessageStatus(messageId, MessageStatus.FAILED);\n }\n }\n\n async addNewUnapprovedMessage(messageParams: MessageParams, req: JRPCRequest<MessageParams> & UserRequestApprovalParams): Promise<string> {\n await this.addUnapprovedMessage(messageParams, req);\n return this.waitForFinishStatus(messageParams, this.name);\n }\n\n async addUnapprovedMessage(messageParams: MessageParams, req: JRPCRequest<MessageParams> & UserRequestApprovalParams): Promise<string> {\n validateSignMessageData(messageParams);\n if (req) {\n messageParams.origin = req.origin;\n }\n messageParams.data = normalizeMessageData(messageParams.data);\n const messageId = messageParams.id || randomId();\n const messageData: Message = {\n id: messageId,\n messageParams,\n status: MessageStatus.UNAPPROVED,\n time: Date.now(),\n type: METHOD_TYPES.PERSONAL_SIGN,\n };\n await this.addMessage(messageData);\n this.emit(MESSAGE_EVENTS.UNAPPROVED_MESSAGE, messageData);\n return messageId;\n }\n\n prepMessageForSigning(messageParams: MessageParams): Promise<MessageParams> {\n return Promise.resolve(messageParams);\n }\n}\n","import { MessageTypes, SignTypedDataVersion, TypedDataV1, TypedMessage as EthSigTypedMessage } from \"@metamask/eth-sig-util\";\nimport { BaseConfig, randomId } from \"@toruslabs/base-controllers\";\nimport { JRPCRequest } from \"@toruslabs/openlogin-jrpc\";\nimport log from \"loglevel\";\n\nimport KeyringController from \"../Keyring/KeyringController\";\nimport NetworkController from \"../Network/NetworkController\";\nimport { MESSAGE_EVENTS, MessageStatus, METHOD_TYPES } from \"../utils/constants\";\nimport { METHOD_TYPES_TYPE, TypedMessage, TypedMessageParams, UserRequestApprovalParams } from \"../utils/interfaces\";\nimport AbstractMessageController, { MessageControllerState } from \"./AbstractMessageController\";\nimport { validateTypedSignMessageDataV1, validateTypedSignMessageDataV3V4 } from \"./utils\";\n\nfunction getMessageType(version: SignTypedDataVersion): METHOD_TYPES_TYPE {\n switch (version) {\n case SignTypedDataVersion.V1:\n return METHOD_TYPES.ETH_SIGN_TYPED_DATA;\n case SignTypedDataVersion.V3:\n return METHOD_TYPES.ETH_SIGN_TYPED_DATA_V3;\n case SignTypedDataVersion.V4:\n return METHOD_TYPES.ETH_SIGN_TYPED_DATA_V4;\n default:\n return METHOD_TYPES.ETH_SIGN_TYPED_DATA;\n }\n}\n\nexport class TypedMessageController extends AbstractMessageController<TypedMessage, TypedMessageParams> {\n override name = \"TypedMessageController\";\n\n protected signTypedData: KeyringController[\"signTypedData\"];\n\n constructor({\n config,\n state,\n signTypedData,\n getNetworkIdentifier,\n }: {\n config: Partial<BaseConfig>;\n state: Partial<MessageControllerState<TypedMessage>>;\n signTypedData: KeyringController[\"signTypedData\"];\n getNetworkIdentifier: NetworkController[\"getNetworkIdentifier\"];\n }) {\n super({ config, state, getNetworkIdentifier });\n this.signTypedData = signTypedData;\n this.initialize();\n }\n\n async processPersonalSignMessage(messageId: string): Promise<string> {\n try {\n const msgObject = this.getMessage(messageId);\n const cleanMsgParams = await this.approveMessage(messageId, msgObject.messageParams);\n const rawSig = await this.signTypedData(\n cleanMsgParams.data as TypedDataV1 | EthSigTypedMessage<MessageTypes>,\n cleanMsgParams.from,\n cleanMsgParams.version\n );\n this.updateMessage({ ...msgObject, rawSig });\n this.setMessageStatus(messageId, MessageStatus.SIGNED);\n return rawSig;\n } catch (error) {\n log.error(error);\n this.setMessageStatus(messageId, MessageStatus.FAILED);\n }\n }\n\n async addNewUnapprovedMessage(\n messageParams: TypedMessageParams,\n req: JRPCRequest<TypedMessageParams> & UserRequestApprovalParams,\n version: SignTypedDataVersion\n ): Promise<string> {\n await this.addUnapprovedMessage(messageParams, req, version);\n return this.waitForFinishStatus(messageParams, this.name);\n }\n\n async addUnapprovedMessage(\n messageParams: TypedMessageParams,\n req: JRPCRequest<TypedMessageParams> & UserRequestApprovalParams,\n version: SignTypedDataVersion\n ): Promise<string> {\n if (version === SignTypedDataVersion.V1) {\n validateTypedSignMessageDataV1(messageParams);\n }\n\n if (version === SignTypedDataVersion.V3 || version === SignTypedDataVersion.V4) {\n const currentChainId = this.getNetworkIdentifier();\n validateTypedSignMessageDataV3V4(messageParams, currentChainId);\n }\n\n if (typeof messageParams.data !== \"string\" && (version === SignTypedDataVersion.V3 || version === SignTypedDataVersion.V4)) {\n messageParams.data = JSON.stringify(messageParams.data);\n }\n\n if (req) {\n messageParams.origin = req.origin;\n }\n messageParams.version = version;\n const messageId = randomId();\n const messageData: TypedMessage = {\n id: messageId,\n messageParams,\n status: MessageStatus.UNAPPROVED,\n time: Date.now(),\n type: getMessageType(version),\n };\n await this.addMessage(messageData);\n this.emit(MESSAGE_EVENTS.UNAPPROVED_MESSAGE, messageData);\n return messageId;\n }\n\n prepMessageForSigning(messageParams: TypedMessageParams): Promise<TypedMessageParams> {\n return Promise.resolve(messageParams);\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@toruslabs/openlogin-jrpc\");","import { InPageWalletProviderState, PROVIDER_JRPC_METHODS } from \"@toruslabs/base-controllers\";\nimport {\n createAsyncMiddleware,\n createScaffoldMiddleware,\n JRPCEngineEndCallback,\n JRPCEngineNextCallback,\n JRPCMiddleware,\n JRPCRequest,\n JRPCResponse,\n mergeMiddleware,\n} from \"@toruslabs/openlogin-jrpc\";\n\nimport { METHOD_TYPES, TRANSACTION_ENVELOPE_TYPES } from \"../utils/constants\";\nimport {\n BlockParams,\n EthereumTransactionMeta,\n MessageParams,\n TransactionParams,\n TransactionRPCMeta,\n TypedMessageParams,\n UserRequestApprovalParams,\n} from \"../utils/interfaces\";\n\nexport interface IProviderHandlers {\n version: string;\n requestAccounts?: (req: JRPCRequest<string[]>) => Promise<string[]>;\n getAccounts: (req: JRPCRequest<string[]>) => Promise<string[]>;\n\n // All operations which open popup window or modal should operate with a windowId parameter\n processTransaction?: (txParams: TransactionParams, req: JRPCRequest<TransactionParams> & UserRequestApprovalParams) => Promise<string>;\n\n processEthSignMessage?: (msgParams: MessageParams, req: JRPCRequest<MessageParams> & UserRequestApprovalParams) => Promise<string>;\n processTypedMessage?: (msgParams: TypedMessageParams, req: JRPCRequest<TypedMessageParams> & UserRequestApprovalParams) => Promise<string>;\n processTypedMessageV3?: (msgParams: TypedMessageParams, req: JRPCRequest<TypedMessageParams> & UserRequestApprovalParams) => Promise<string>;\n processTypedMessageV4?: (msgParams: TypedMessageParams, req: JRPCRequest<TypedMessageParams> & UserRequestApprovalParams) => Promise<string>;\n processPersonalMessage?: (msgParams: MessageParams, req: JRPCRequest<MessageParams> & UserRequestApprovalParams) => Promise<string>;\n\n processEncryptionPublicKey?: (address: string, req: JRPCRequest<string> & UserRequestApprovalParams) => Promise<string>;\n processDecryptMessage?: (msgParams: MessageParams, req: JRPCRequest<MessageParams> & UserRequestApprovalParams) => Promise<string>;\n\n getPendingNonce?: (\n nonceParams: { address: string; blockReference: string },\n req: JRPCRequest<{ address: string; blockReference: string }>\n ) => Promise<string>;\n getPendingTransactionByHash?: (hash: string, req: JRPCRequest<string>) => Promise<EthereumTransactionMeta>;\n\n getProviderState: (\n req: JRPCRequest<[]>,\n res: JRPCResponse<InPageWalletProviderState>,\n next: JRPCEngineNextCallback,\n end: JRPCEngineEndCallback\n ) => void;\n}\n\nexport function createGetAccountsMiddleware({ getAccounts }: { getAccounts: IProviderHandlers[\"getAccounts\"] }): JRPCMiddleware<never, string[]> {\n return createAsyncMiddleware(async (request, response, next) => {\n const { method } = request;\n if (method !== METHOD_TYPES.GET_ACCOUNTS) return next();\n\n if (!getAccounts) throw new Error(\"WalletMiddleware - opts.getAccounts not provided\");\n\n const accounts = await getAccounts(request);\n response.result = accounts;\n });\n}\n\nexport function createProcessTransactionMiddleware({\n processTransaction,\n}: {\n processTransaction: IProviderHandlers[\"processTransaction\"];\n}): JRPCMiddleware<TransactionParams, string> {\n return createAsyncMiddleware(async (request, response, next) => {\n const { method } = request;\n if (method !== METHOD_TYPES.ETH_TRANSACTION) return next();\n\n if (!processTransaction) throw new Error(\"WalletMiddleware - opts.processTransaction not provided\");\n\n response.result = await processTransaction(request.params, request);\n });\n}\n\nexport function createProcessEthSignMessage({\n processEthSignMessage,\n}: {\n processEthSignMessage: IProviderHandlers[\"processEthSignMessage\"];\n}): JRPCMiddleware<MessageParams, string> {\n return createAsyncMiddleware(async (request, response, next) => {\n const { method } = request;\n if (method !== METHOD_TYPES.ETH_SIGN) return next();\n\n if (!processEthSignMessage) throw new Error(\"WalletMiddleware - opts.processEthSignMessage not provided\");\n\n response.result = await processEthSignMessage(request.params, request);\n });\n}\n\nexport function createProcessTypedMessage({\n processTypedMessage,\n}: {\n processTypedMessage: IProviderHandlers[\"processTypedMessage\"];\n}): JRPCMiddleware<MessageParams, string> {\n return createAsyncMiddleware(async (request, response, next) => {\n const { method } = request;\n if (method !== METHOD_TYPES.ETH_SIGN_TYPED_DATA) return next();\n\n if (!processTypedMessage) throw new Error(\"WalletMiddleware - opts.processTypedMessage not provided\");\n response.result = await processTypedMessage(request.params, request);\n });\n}\n\nexport function createProcessTypedMessageV3({\n processTypedMessageV3,\n}: {\n processTypedMessageV3: IProviderHandlers[\"processTypedMessageV3\"];\n}): JRPCMiddleware<TypedMessageParams, string> {\n return createAsyncMiddleware(async (request, response, next) => {\n const { method } = request;\n if (method !== METHOD_TYPES.ETH_SIGN_TYPED_DATA_V3) return next();\n\n if (!processTypedMessageV3) throw new Error(\"WalletMiddleware - opts.processTypedMessageV3 is not provided\");\n\n response.result = await processTypedMessageV3(request.params, request);\n });\n}\n\nexport function createProcessTypedMessageV4({\n processTypedMessageV4,\n}: {\n processTypedMessageV4: IProviderHandlers[\"processTypedMessageV4\"];\n}): JRPCMiddleware<TypedMessageParams, string> {\n return createAsyncMiddleware(async (request, response, next) => {\n const { method } = request;\n if (method !== METHOD_TYPES.ETH_SIGN_TYPED_DATA_V4) return next();\n\n if (!processTypedMessageV4) throw new Error(\"WalletMiddleware - opts.processTypedMessageV4 is not provided\");\n\n response.result = await processTypedMessageV4(request.params, request);\n });\n}\n\nexport function createProcessPersonalMessage({\n processPersonalMessage,\n}: {\n processPersonalMessage: IProviderHandlers[\"processPersonalMessage\"];\n}): JRPCMiddleware<MessageParams, string> {\n return createAsyncMiddleware(async (request, response, next) => {\n const { method } = request;\n if (method !== METHOD_TYPES.PERSONAL_SIGN) return next();\n\n if (!processPersonalMessage) throw new Error(\"WalletMiddleware - opts.processPersonalMessage is not provided\");\n\n response.result = await processPersonalMessage(request.params, request);\n });\n}\n\nexport function createPendingNonceMiddleware({\n getPendingNonce,\n}: {\n getPendingNonce: IProviderHandlers[\"getPendingNonce\"];\n}): JRPCMiddleware<{ address: string; blockReference: BlockParams }, string> {\n return createAsyncMiddleware(async (request, response, next) => {\n const { params, method } = request;\n if (method !== METHOD_TYPES.ETH_GET_TRANSACTION_COUNT) return next();\n\n const { blockReference } = params;\n if (blockReference !== \"pending\") return next();\n response.result = await getPendingNonce(params, request);\n });\n}\n\nexport function formatTxMetaForRpcResult(txMeta: EthereumTransactionMeta): TransactionRPCMeta {\n const { r, s, v, txReceipt, transaction, transactionHash, accessList } = txMeta;\n const { to, data, nonce, gas, from, value, gasPrice, maxFeePerGas, maxPriorityFeePerGas } = transaction;\n\n const formattedTxMeta: TransactionRPCMeta = {\n v,\n r,\n s,\n to,\n gas,\n from,\n hash: transactionHash,\n nonce,\n input: data || \"0x\",\n value: value || \"0x0\",\n accessList: accessList || null,\n blockHash: txReceipt?.blockHash || null,\n blockNumber: txReceipt?.blockNumber || null,\n transactionIndex: txReceipt?.transactionIndex || null,\n type: null,\n };\n\n if (maxFeePerGas && maxPriorityFeePerGas) {\n formattedTxMeta.maxFeePerGas = maxFeePerGas;\n formattedTxMeta.maxPriorityFeePerGas = maxPriorityFeePerGas;\n formattedTxMeta.type = TRANSACTION_ENVELOPE_TYPES.FEE_MARKET;\n } else {\n formattedTxMeta.gasPrice = gasPrice;\n formattedTxMeta.type = TRANSACTION_ENVELOPE_TYPES.LEGACY;\n }\n\n return formattedTxMeta;\n}\n\nexport function createPendingTxMiddleware({\n getPendingTransactionByHash,\n}: {\n getPendingTransactionByHash: IProviderHandlers[\"getPendingTransactionByHash\"];\n}): JRPCMiddleware<string, TransactionRPCMeta> {\n return createAsyncMiddleware(async (request, response, next) => {\n const { params, method } = request;\n if (method !== METHOD_TYPES.ETH_GET_TRANSACTION_BY_HASH) return next();\n\n if (!getPendingTransactionByHash) throw new Error(\"WalletMiddleware - opts.getPendingTransactionByHash not provided\");\n\n const txMeta = await getPendingTransactionByHash(params, request);\n if (!txMeta) {\n return next();\n }\n response.result = formatTxMetaForRpcResult(txMeta);\n return undefined;\n });\n}\n\nexport function createProcessEncryptionPublicKeyMiddleware({\n processEncryptionPublicKey,\n}: {\n processEncryptionPublicKey: IProviderHandlers[\"processEncryptionPublicKey\"];\n}): JRPCMiddleware<string, string> {\n return createAsyncMiddleware(async (request, response, next) => {\n const { params, method } = request;\n if (method !== METHOD_TYPES.ETH_GET_ENCRYPTION_PUBLIC_KEY) return next();\n\n if (!processEncryptionPublicKey) throw new Error(\"WalletMiddleware - opts.processEncryptionPublicKey not provided\");\n\n response.result = await processEncryptionPublicKey(params, request);\n });\n}\n\nexport function createProcessDecryptMessageMiddleware({\n processDecryptMessage,\n}: {\n processDecryptMessage: IProviderHandlers[\"processDecryptMessage\"];\n}): JRPCMiddleware<MessageParams, string> {\n return createAsyncMiddleware(async (request, response, next) => {\n const { params, method } = request;\n if (method !== METHOD_TYPES.ETH_DECRYPT) return next();\n\n if (!processDecryptMessage) throw new Error(\"WalletMiddleware - opts.processDecryptMessage not provided\");\n\n response.result = await processDecryptMessage(params, request);\n });\n}\n\nexport function createRequestAccountsMiddleware({\n requestAccounts,\n}: {\n requestAccounts: IProviderHandlers[\"requestAccounts\"];\n}): JRPCMiddleware<string[], unknown> {\n return createAsyncMiddleware(async (request, response, next) => {\n const { method } = request;\n if (method !== \"eth_requestAccounts\") return next();\n\n if (!requestAccounts) throw new Error(\"WalletMiddleware - opts.requestAccounts not provided\");\n // This calls the UI login function\n const accounts = await requestAccounts(request);\n response.result = accounts;\n return undefined;\n });\n}\n\nexport function createEthereumMiddleware(providerHandlers: IProviderHandlers): JRPCMiddleware<unknown, unknown> {\n const {\n requestAccounts,\n getAccounts,\n processTransaction,\n processEthSignMessage,\n processTypedMessage,\n processTypedMessageV3,\n processTypedMessageV4,\n processPersonalMessage,\n getPendingNonce,\n getPendingTransactionByHash,\n processEncryptionPublicKey,\n processDecryptMessage,\n getProviderState,\n version,\n } = providerHandlers;\n return mergeMiddleware([\n createScaffoldMiddleware({\n version,\n [PROVIDER_JRPC_METHODS.GET_PROVIDER_STATE]: getProviderState as JRPCMiddleware<unknown, unknown>,\n }),\n createRequestAccountsMiddleware({ requestAccounts }) as JRPCMiddleware<unknown, unknown>,\n createGetAccountsMiddleware({ getAccounts }) as JRPCMiddleware<unknown, unknown>,\n createProcessTransactionMiddleware({ processTransaction }) as JRPCMiddleware<unknown, unknown>,\n createProcessEthSignMessage({ processEthSignMessage }) as JRPCMiddleware<unknown, unknown>,\n createProcessTypedMessage({ processTypedMessage }) as JRPCMiddleware<unknown, unknown>,\n createProcessTypedMessageV3({ processTypedMessageV3 }) as JRPCMiddleware<unknown, unknown>,\n createProcessTypedMessageV4({ processTypedMessageV4 }) as JRPCMiddleware<unknown, unknown>,\n createProcessPersonalMessage({ processPersonalMessage }) as JRPCMiddleware<unknown, unknown>,\n createPendingNonceMiddleware({ getPendingNonce }) as JRPCMiddleware<unknown, unknown>,\n createPendingTxMiddleware({ getPendingTransactionByHash }) as JRPCMiddleware<unknown, unknown>,\n createProcessEncryptionPublicKeyMiddleware({ processEncryptionPublicKey }) as JRPCMiddleware<unknown, unknown>,\n createProcessDecryptMessageMiddleware({ processDecryptMessage }) as JRPCMiddleware<unknown, unknown>,\n ]);\n}\n","import { createFetchMiddleware, ProviderConfig } from \"@toruslabs/base-controllers\";\nimport {\n JRPCEngineEndCallback,\n JRPCEngineNextCallback,\n JRPCMiddleware,\n JRPCRequest,\n JRPCResponse,\n mergeMiddleware,\n providerFromMiddleware,\n} from \"@toruslabs/openlogin-jrpc\";\n\nimport PollingBlockTracker from \"../Block/PollingBlockTracker\";\n\nexport function createChainIdMiddleware(chainId: string): JRPCMiddleware<unknown, string> {\n return (req: JRPCRequest<unknown>, res: JRPCResponse<string>, next: JRPCEngineNextCallback, end: JRPCEngineEndCallback) => {\n if (req.method === \"eth_chainId\") {\n res.result = chainId;\n return end();\n }\n if (req.method === \"net_version\") {\n // convert to decimal\n res.result = Number.parseInt(chainId, 16).toString(10);\n return end();\n }\n return next();\n };\n}\n\nexport function createProviderConfigMiddleware(providerConfig: ProviderConfig): JRPCMiddleware<unknown, ProviderConfig> {\n return (req: JRPCRequest<unknown>, res: JRPCResponse<ProviderConfig>, next: JRPCEngineNextCallback, end: JRPCEngineEndCallback) => {\n if (req.method === \"eth_provider_config\") {\n res.result = providerConfig;\n return end();\n }\n return next();\n };\n}\n\nexport function createJsonRpcClient(providerConfig: ProviderConfig): {\n networkMiddleware: JRPCMiddleware<unknown, unknown>;\n blockTracker: PollingBlockTracker;\n} {\n const { chainId, rpcTarget } = providerConfig;\n const fetchMiddleware = createFetchMiddleware({ rpcTarget });\n const blockProvider = providerFromMiddleware(fetchMiddleware as JRPCMiddleware<unknown, unknown>);\n const blockTracker = new PollingBlockTracker({ config: { provider: blockProvider }, state: {} });\n\n const networkMiddleware = mergeMiddleware([\n createChainIdMiddleware(chainId) as JRPCMiddleware<unknown, unknown>,\n createProviderConfigMiddleware(providerConfig) as JRPCMiddleware<unknown, unknown>,\n // No need for the following middlewares for web because all browser sessions are quite short lived and each session is limited to scope of a window/tab\n // createBlockRefRewriteMiddleware({ blockTracker }),\n // createBlockCacheMiddleware({ blockTracker }),\n // createInflightCacheMiddleware(),\n // createBlockTrackerInspectorMiddleware({ blockTracker }),\n fetchMiddleware as JRPCMiddleware<unknown, unknown>,\n ]);\n return { networkMiddleware, blockTracker };\n}\n","import { BaseController, createEventEmitterProxy, createSwappableProxy, INetworkController } from \"@toruslabs/base-controllers\";\nimport { JRPCEngine, JRPCMiddleware, providerFromEngine, SafeEventEmitterProvider } from \"@toruslabs/openlogin-jrpc\";\nimport { Mutex } from \"async-mutex\";\nimport log from \"loglevel\";\n\nimport PollingBlockTracker from \"../Block/PollingBlockTracker\";\nimport { SUPPORTED_NETWORKS } from \"../utils/constants\";\nimport { EthereumNetworkConfig, EthereumNetworkState, EthereumProviderConfig } from \"../utils/interfaces\";\nimport { createEthereumMiddleware, IProviderHandlers } from \"./createEthereumMiddleware\";\nimport { createJsonRpcClient } from \"./createJsonRpcClient\";\n\nexport default class NetworkController\n extends BaseController<EthereumNetworkConfig, EthereumNetworkState>\n implements INetworkController<EthereumNetworkConfig, EthereumNetworkState>\n{\n name = \"NetworkController\";\n\n providerProxy: SafeEventEmitterProvider;\n\n blockTrackerProxy: PollingBlockTracker;\n\n private mutex: Mutex = new Mutex();\n\n private provider?: SafeEventEmitterProvider = null;\n\n private blockTracker?: PollingBlockTracker = null;\n\n private baseProviderHandlers: IProviderHandlers;\n\n constructor({ config, state }: { config?: Partial<EthereumNetworkConfig>; state?: Partial<EthereumNetworkState> }) {\n super({ config, state });\n\n this.defaultState = {\n chainId: \"loading\",\n properties: { EIPS_1559: undefined },\n providerConfig: SUPPORTED_NETWORKS.mainnet,\n };\n\n // when a new network is set,\n // we set to loading first and\n // then when connection succeeds,\n // we update the network\n this.initialize();\n }\n\n getNetworkIdentifier(): string {\n return this.state.chainId;\n }\n\n getNetworkRPCUrl(): string {\n return this.state.providerConfig.rpcTarget;\n }\n\n /**\n * Called by orchestrator once while initializing the class\n * @param providerHandlers - JRPC handlers for provider\n * @returns - provider - Returns the providerProxy\n */\n public initializeProvider(providerHandlers: IProviderHandlers): SafeEventEmitterProvider {\n this.baseProviderHandlers = providerHandlers;\n this.configureProvider();\n this.lookupNetwork(); // Not awaiting this, because we don't want to block the initialization\n return this.providerProxy;\n }\n\n getProvider(): SafeEventEmitterProvider {\n return this.providerProxy;\n }\n\n getBlockTracker(): PollingBlockTracker {\n return this.blockTrackerProxy;\n }\n\n getProviderConfig(): EthereumProviderConfig {\n return this.state.providerConfig;\n }\n\n setProviderConfig(config: EthereumProviderConfig): void {\n this.update({\n providerConfig: { ...config },\n });\n this.refreshNetwork();\n }\n\n async getEIP1559Compatibility(): Promise<boolean> {\n const { EIPS_1559 } = this.state.properties;\n // log.info('checking eip 1559 compatibility')\n if (EIPS_1559 !== undefined) {\n return EIPS_1559 as boolean;\n }\n const latestBlock = await this.blockTracker.getLatestBlock();\n const supportsEIP1559 = latestBlock && latestBlock.baseFeePerGas !== undefined;\n this.update({ properties: { EIPS_1559: supportsEIP1559 } });\n return supportsEIP1559;\n }\n\n /**\n * Refreshes the current network code\n */\n async lookupNetwork(): Promise<void> {\n const { chainId, rpcTarget } = this.getProviderConfig();\n if (!chainId || !rpcTarget || !this.provider) {\n this.update({ chainId: \"loading\", properties: {} });\n return;\n }\n const releaseLock = await this.mutex.acquire();\n try {\n // use eth_chainId\n const [networkChainId] = await Promise.all([this.provider.request<never, string>({ method: \"eth_chainId\" }), this.getEIP1559Compatibility()]);\n log.info(\"network fetched chain id\", networkChainId);\n // update chain ID\n this.update({\n chainId: networkChainId,\n });\n this.emit(\"networkDidChange\");\n } catch {\n this.update({\n chainId: \"loading\",\n });\n } finally {\n releaseLock();\n }\n }\n\n private configureProvider(): void {\n const { chainId, rpcTarget, ...rest } = this.getProviderConfig();\n if (!chainId || !rpcTarget) {\n throw new Error(\"chainId and rpcTarget must be provider in providerConfig\");\n }\n this.configureStandardProvider({ chainId, rpcTarget, ...rest });\n }\n\n private setNetworkClient({\n networkMiddleware,\n blockTracker,\n }: {\n networkMiddleware: JRPCMiddleware<unknown, unknown>;\n blockTracker: PollingBlockTracker;\n }): void {\n const ethereumMiddleware = createEthereumMiddleware(this.baseProviderHandlers);\n const engine = new JRPCEngine();\n engine.push(ethereumMiddleware);\n engine.push(networkMiddleware);\n const provider = providerFromEngine(engine);\n this.setProvider({ provider, blockTracker });\n }\n\n private setProvider({ provider, blockTracker }: { provider: SafeEventEmitterProvider; blockTracker: PollingBlockTracker }): void {\n if (this.providerProxy) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.providerProxy.setTarget(provider);\n } else {\n this.providerProxy = createSwappableProxy<SafeEventEmitterProvider>(provider);\n }\n\n if (this.blockTrackerProxy) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.blockTrackerProxy.setTarget(blockTracker);\n } else {\n this.blockTrackerProxy = createEventEmitterProxy<PollingBlockTracker>(blockTracker, {\n eventFilter: \"skipInternal\",\n });\n }\n\n // set new provider and blockTracker\n this.provider = provider;\n provider.setMaxListeners(10);\n this.blockTracker = blockTracker;\n }\n\n private configureStandardProvider(providerConfig: EthereumProviderConfig): void {\n const networkClient = createJsonRpcClient(providerConfig);\n log.info(\"networkClient\", networkClient);\n this.setNetworkClient(networkClient);\n }\n\n private refreshNetwork() {\n this.update({ chainId: \"loading\", properties: {} });\n this.configureProvider();\n this.lookupNetwork();\n }\n}\n","import { get } from \"@toruslabs/http-helpers\";\nimport { BrowserProvider, Contract } from \"ethers\";\nimport log from \"loglevel\";\n\nimport { erc721Abi, erc1155Abi } from \"../utils/abis\";\nimport { CONTRACT_TYPE_ERC721, CONTRACT_TYPE_ERC1155, ERC721_INTERFACE_ID, ERC1155_INTERFACE_ID, OLD_ERC721_LIST } from \"../utils/constants\";\nimport { sanitizeNftMetdataUrl } from \"../utils/helpers\";\nimport { CustomNftInfo, CustomNftItemInfo, NftStandardType } from \"../utils/interfaces\";\n\ninterface INftOptions {\n contractAddress: string;\n contractName?: string;\n contractSymbol?: string;\n contractImage?: string;\n contractSupply?: string;\n contractFallbackLogo?: string;\n nftStandard?: \"erc721\" | \"erc1155\";\n contractDescription?: string;\n chainId: string;\n provider: BrowserProvider;\n}\n\nexport class NftHandler {\n public contractAddress: string;\n\n public contractName: string;\n\n public contractSymbol: string;\n\n public contractImage: string;\n\n public contractSupply?: string;\n\n public contractFallbackLogo?: string;\n\n public nftStandard: \"erc721\" | \"erc1155\";\n\n public contractDescription?: string;\n\n public chainId: string;\n\n public provider: BrowserProvider;\n\n public isSpecial?: boolean;\n\n constructor({\n chainId,\n contractAddress,\n contractImage,\n contractName,\n contractSymbol,\n nftStandard,\n provider,\n contractDescription,\n contractFallbackLogo,\n contractSupply,\n }: INftOptions) {\n this.chainId = chainId;\n this.contractAddress = contractAddress;\n this.contractImage = contractImage;\n this.contractName = contractName;\n this.contractSymbol = contractSymbol;\n this.nftStandard = nftStandard;\n this.provider = provider;\n this.contractDescription = contractDescription;\n this.contractFallbackLogo = contractFallbackLogo;\n this.contractSupply = contractSupply;\n }\n\n async getNftMetadata(userAddress: string, tokenInfo: Partial<CustomNftItemInfo>): Promise<CustomNftItemInfo> {\n const returnNftItem: CustomNftItemInfo = { description: \"\", image: \"\", name: \"\", tokenBalance: \"\", tokenId: \"\", decimals: \"1\", ...tokenInfo };\n\n const [tokenURI, balance] = await Promise.all([\n this.getCollectibleTokenURI(returnNftItem.tokenId, this.nftStandard),\n !returnNftItem.tokenBalance ? this.fetchNftBalance(userAddress, returnNftItem.tokenId) : Promise.resolve(\"0\"),\n ]);\n returnNftItem.tokenBalance = returnNftItem.tokenBalance || balance;\n // some people put full json object in uri\n try {\n const object = JSON.parse(tokenURI);\n returnNftItem.image = returnNftItem.image || sanitizeNftMetdataUrl(object.image);\n returnNftItem.name = returnNftItem.name || object.name;\n returnNftItem.description = returnNftItem.description || object.description;\n returnNftItem.decimals = returnNftItem.decimals || object.decimals;\n } catch (error) {\n log.warn(\"Token uri is not a valid json object\", error);\n }\n const finalTokenMetaUri = sanitizeNftMetdataUrl(tokenURI);\n try {\n if (!returnNftItem.description || !returnNftItem.image || !returnNftItem.name) {\n // this call might fail, if metadata url available in smart contract is not reachable\n const object = await get<{ name: string; description: string; image: string; decimals?: string }>(finalTokenMetaUri);\n returnNftItem.image = returnNftItem.image || sanitizeNftMetdataUrl(object.image);\n returnNftItem.name = returnNftItem.name || object.name;\n returnNftItem.description = returnNftItem.description || object.description;\n returnNftItem.decimals = returnNftItem.decimals || object.decimals;\n }\n } catch (error) {\n log.error(\"Failed to fetch nft metadata\", error);\n }\n return returnNftItem;\n }\n\n async getContractMetadata(): Promise<Omit<CustomNftInfo, \"assets\">> {\n const returnNft: Omit<CustomNftInfo, \"assets\"> = {\n chainId: this.chainId,\n contractAddress: this.contractAddress,\n contractName: this.contractName,\n contractSymbol: this.contractSymbol,\n nftStandard: this.nftStandard,\n contractImage: this.contractImage,\n contractDescription: this.contractDescription,\n contractFallbackLogo: this.contractFallbackLogo,\n contractSupply: this.contractSupply,\n };\n if (!this.nftStandard) {\n const { standard, isSpecial } = await this.checkNftStandard();\n returnNft.nftStandard = standard;\n this.nftStandard = standard;\n this.isSpecial = isSpecial;\n }\n if (!this.contractName || !this.contractSymbol || !this.contractDescription) {\n const abi = this.nftStandard === CONTRACT_TYPE_ERC721 ? erc721Abi : erc1155Abi;\n const contract = new Contract(this.contractAddress, abi, this.provider);\n const [name, symbol] = await Promise.all([contract.name(), contract.symbol()]);\n returnNft.contractName = name;\n returnNft.contractSymbol = symbol;\n if (!this.contractName) this.contractName = name;\n if (!this.contractSymbol) this.contractSymbol = symbol;\n }\n\n return returnNft;\n }\n\n async fetchNftBalance(userAddress: string, tokenId: string): Promise<string> {\n const { standard } = await this.checkNftStandard();\n const abi = standard === CONTRACT_TYPE_ERC721 ? erc721Abi : erc1155Abi;\n const contract = new Contract(this.contractAddress, abi, this.provider);\n if (standard === CONTRACT_TYPE_ERC1155) {\n const balance = await contract.balanceOf(userAddress, tokenId);\n return balance;\n }\n let owner = \"\";\n try {\n owner = await contract.ownerOf(tokenId);\n } catch {\n throw new Error(\"Token id doesn't exists\");\n }\n if (owner.toLowerCase() === userAddress.toLowerCase()) {\n return \"1\";\n }\n return \"0\";\n }\n\n private async checkNftStandard(): Promise<{ isSpecial: boolean; standard: NftStandardType }> {\n // For Cryptokitties\n if (this.nftStandard && this.isSpecial !== undefined) return;\n if (Object.prototype.hasOwnProperty.call(OLD_ERC721_LIST, this.contractAddress.toLowerCase())) {\n this.nftStandard = CONTRACT_TYPE_ERC721;\n this.isSpecial = true;\n return { standard: CONTRACT_TYPE_ERC721, isSpecial: true };\n }\n const isErc721 = await this.contractSupportsInterface(CONTRACT_TYPE_ERC721, ERC721_INTERFACE_ID);\n if (isErc721) {\n this.nftStandard = CONTRACT_TYPE_ERC721;\n this.isSpecial = false;\n return { standard: CONTRACT_TYPE_ERC721, isSpecial: false };\n }\n const isErc1155 = await this.contractSupportsInterface(CONTRACT_TYPE_ERC1155, ERC1155_INTERFACE_ID);\n if (isErc1155) {\n this.nftStandard = CONTRACT_TYPE_ERC1155;\n this.isSpecial = false;\n return { standard: CONTRACT_TYPE_ERC1155, isSpecial: false };\n }\n\n throw new Error(\"Unsupported nft standard\");\n }\n\n private async contractSupportsInterface(standard: NftStandardType, interfaceId: string): Promise<boolean> {\n const abi = standard === CONTRACT_TYPE_ERC721 ? erc721Abi : erc1155Abi;\n const contract = new Contract(this.contractAddress, abi, this.provider);\n return contract.supportsInterface(interfaceId);\n }\n\n private async getCollectibleTokenURI(tokenId: string, standard: NftStandardType = CONTRACT_TYPE_ERC721): Promise<string> {\n const method = standard === CONTRACT_TYPE_ERC721 ? \"tokenURI\" : \"uri\";\n const abi = standard === CONTRACT_TYPE_ERC721 ? erc721Abi : erc1155Abi;\n const contract = new Contract(this.contractAddress, abi, this.provider);\n return contract[method](tokenId);\n }\n}\n","import { BaseController, PreferencesState } from \"@toruslabs/base-controllers\";\nimport { SafeEventEmitterProvider } from \"@toruslabs/openlogin-jrpc\";\nimport { BrowserProvider } from \"ethers\";\nimport { merge } from \"lodash\";\nimport log from \"loglevel\";\n\nimport PreferencesController from \"../Preferences/PreferencesController\";\nimport { SIMPLEHASH_SUPPORTED_CHAINS } from \"../utils/constants\";\nimport { idleTimeTracker } from \"../utils/helpers\";\nimport { CustomNftInfo, CustomNftItemInfo, EthereumNetworkState, ExtendedAddressPreferences } from \"../utils/interfaces\";\nimport { NftsControllerConfig, NftsControllerState } from \"./INftsController\";\nimport { NftHandler } from \"./NftHandler\";\n\nexport interface INftsControllerOptions {\n config?: Partial<NftsControllerConfig>;\n state?: Partial<NftsControllerState>;\n provider: SafeEventEmitterProvider;\n getCustomNfts?: PreferencesController[\"getCustomNfts\"];\n getSimpleHashNfts: PreferencesController[\"getSimpleHashNfts\"];\n onPreferencesStateChange: (listener: (preferencesState: PreferencesState<ExtendedAddressPreferences>) => void) => void;\n onNetworkStateChange: (listener: (networkState: EthereumNetworkState) => void) => void;\n}\n\nconst DEFAULT_INTERVAL = 180 * 1000;\n\nexport class NftsController extends BaseController<NftsControllerConfig, NftsControllerState> {\n name = \"NftsController\";\n\n private provider: SafeEventEmitterProvider;\n\n private ethersProvider: BrowserProvider;\n\n private _timer: number;\n\n private getCustomNfts: PreferencesController[\"getCustomNfts\"];\n\n private getSimpleHashNfts: PreferencesController[\"getSimpleHashNfts\"];\n\n constructor({ config, state, provider, getCustomNfts, getSimpleHashNfts, onPreferencesStateChange, onNetworkStateChange }: INftsControllerOptions) {\n super({ config, state });\n\n this.provider = provider;\n this.ethersProvider = new BrowserProvider(this.provider, \"any\");\n\n this.getCustomNfts = getCustomNfts;\n this.getSimpleHashNfts = getSimpleHashNfts;\n\n this.defaultConfig = {\n interval: DEFAULT_INTERVAL,\n selectedAddress: \"\",\n chainId: \"\",\n };\n\n this.defaultState = {\n nfts: {},\n };\n this.initialize();\n onPreferencesStateChange((preferencesState) => {\n if (preferencesState.selectedAddress !== this.config.selectedAddress) {\n this.configure({ selectedAddress: preferencesState.selectedAddress });\n this.restartNftDetection();\n }\n });\n\n onNetworkStateChange((networkState) => {\n const { chainId } = networkState.providerConfig;\n if (chainId !== this.config.chainId) {\n this.configure({ chainId });\n this.restartNftDetection();\n }\n });\n }\n\n get userSelectedAddress(): string {\n return this.config.selectedAddress;\n }\n\n get userNfts() {\n if (!this.userSelectedAddress) return [];\n return this.state.nfts[this.userSelectedAddress] ?? [];\n }\n\n get interval(): number {\n return this.config.interval;\n }\n\n set interval(interval: number) {\n if (this._timer) window.clearInterval(this._timer);\n if (!interval) {\n return;\n }\n this._timer = window.setInterval(() => {\n if (!idleTimeTracker.checkIfIdle()) {\n this.detectNewNfts();\n this.refreshNftBalances();\n }\n }, interval);\n }\n\n public startNftDetection(selectedAddress: string) {\n this.configure({ selectedAddress });\n this.restartNftDetection();\n }\n\n /**\n * Restart nft detection polling period and call detectNewNfts\n * in case of address change or user session initialization.\n *\n */\n public restartNftDetection() {\n if (!this.userSelectedAddress) {\n return;\n }\n this.detectNewNfts();\n this.refreshNftBalances();\n this.config.interval = DEFAULT_INTERVAL;\n }\n\n public detectNewNfts() {\n const userAddress = this.userSelectedAddress;\n if (!userAddress) return;\n const currentChainId = this.config.chainId;\n const nftsToDetect: CustomNftInfo[] = []; // object[]\n if (!currentChainId) {\n this.update({ nfts: { [userAddress]: [...nftsToDetect] } });\n return;\n }\n\n if (this.getCustomNfts) {\n const customNfts = this.getCustomNfts(userAddress);\n\n const reducedNfts = customNfts.reduce(\n (acc, x) => {\n // first aggregate by contract address\n if (x.network === currentChainId) {\n const newAsset: CustomNftItemInfo = {\n description: \"\",\n image: \"\",\n name: \"\",\n tokenBalance: \"\",\n tokenId: x.nft_id,\n customNftId: x.id.toString(),\n };\n if (acc[x.nft_address]) {\n acc[x.nft_address].assets.push(newAsset);\n } else {\n const objToPush: CustomNftInfo = {\n assets: [newAsset],\n chainId: x.network,\n contractAddress: x.nft_address,\n contractName: \"\",\n contractSymbol: \"\",\n contractImage: \"\",\n nftStandard: x.nft_contract_standard,\n contractDescription: \"\",\n } as CustomNftInfo;\n acc[x.nft_address] = objToPush;\n }\n }\n return acc;\n },\n {} as Record<string, CustomNftInfo>\n );\n nftsToDetect.push(...Object.values(reducedNfts));\n }\n this.update({ nfts: { [userAddress]: [...nftsToDetect] } });\n }\n\n async refreshNftBalances() {\n const userAddress = this.userSelectedAddress;\n if (userAddress === \"\") return;\n const oldNfts = [...this.userNfts];\n const nonZeroNfts: CustomNftInfo[] = [];\n try {\n const currentChainId = this.config.chainId;\n if (SIMPLEHASH_SUPPORTED_CHAINS.includes(currentChainId)) {\n const simpleHashBalances = await this.getSimpleHashNfts(userAddress, currentChainId);\n nonZeroNfts.push(...simpleHashBalances);\n this.update({ nfts: { [userAddress]: nonZeroNfts } });\n }\n if (oldNfts.length > 0) {\n this.getNftBalancesUsingHandler(oldNfts);\n }\n } catch (error) {\n log.error(error, \"unable to fetch nft balances\");\n }\n }\n\n async getNftBalancesUsingHandler(customNfts: CustomNftInfo[]) {\n if (!this.userSelectedAddress) return;\n const userAddress = this.userSelectedAddress;\n const currentNetworkNfts = customNfts;\n const promiseSettledResult = await Promise.allSettled(\n currentNetworkNfts.map(async (x) => {\n try {\n const tokenInstance = new NftHandler({\n ...x,\n provider: this.ethersProvider,\n });\n const contractData = await tokenInstance.getContractMetadata();\n const assetData = await Promise.allSettled(x.assets.map((y) => tokenInstance.getNftMetadata(userAddress, y)));\n return {\n ...contractData,\n assets: assetData.filter((z) => z.status === \"fulfilled\").map((z) => (z as PromiseFulfilledResult<CustomNftItemInfo>).value),\n } as CustomNftInfo;\n } catch (error) {\n log.warn(\"Invalid contract address while fetching\", error);\n return undefined;\n }\n })\n );\n const nonZeroTokens = promiseSettledResult.filter((x) => x.status === \"fulfilled\").map((x) => (x as PromiseFulfilledResult<CustomNftInfo>).value);\n\n this.update({ nfts: { [userAddress]: merge(this.userNfts, nonZeroTokens) } });\n }\n}\n","import {\n ACTIVITY_ACTION_RECEIVE,\n ACTIVITY_ACTION_SEND,\n ACTIVITY_ACTION_TOPUP,\n BasePreferencesController,\n CustomNft,\n CustomToken,\n IPreferencesController,\n PreferencesConfig,\n PreferencesState,\n TransactionStatus,\n UserInfo,\n} from \"@toruslabs/base-controllers\";\nimport { get, patch, post, remove } from \"@toruslabs/http-helpers\";\nimport { SafeEventEmitterProvider } from \"@toruslabs/openlogin-jrpc\";\nimport { Mutex } from \"async-mutex\";\nimport log from \"loglevel\";\n\nimport PollingBlockTracker from \"../Block/PollingBlockTracker\";\nimport KeyringController from \"../Keyring/KeyringController\";\nimport NetworkController from \"../Network/NetworkController\";\nimport { SUPPORTED_NETWORKS } from \"../utils/constants\";\nimport { formatDate, formatPastTx, formatTime, getEthTxStatus } from \"../utils/helpers\";\nimport type {\n CustomNetworkPayload,\n CustomNetworks,\n CustomNftInfo,\n CustomTokenInfo,\n EthereumUser,\n ExtendedAddressPreferences,\n FetchCommonTransaction,\n FetchedTransaction,\n FormattedTransactionActivity,\n TransactionPayload,\n} from \"../utils/interfaces\";\n\ninterface IPreferencesControllerOptions {\n config?: Partial<PreferencesConfig> & Pick<PreferencesConfig, \"api\" | \"commonApiHost\" | \"signInPrefix\">;\n state?: Partial<PreferencesState<ExtendedAddressPreferences>>;\n provider: SafeEventEmitterProvider;\n // TODO: Require later\n blockTracker?: PollingBlockTracker;\n signAuthMessage?: KeyringController[\"signAuthMessage\"];\n getProviderConfig?: NetworkController[\"getProviderConfig\"];\n}\n\nexport default class PreferencesController\n extends BasePreferencesController<ExtendedAddressPreferences, PreferencesConfig, PreferencesState<ExtendedAddressPreferences>>\n implements IPreferencesController<ExtendedAddressPreferences, PreferencesConfig, PreferencesState<ExtendedAddressPreferences>>\n{\n private _handle?: number;\n\n private _mutex: Mutex = new Mutex();\n\n private getProviderConfig: NetworkController[\"getProviderConfig\"];\n\n private provider: SafeEventEmitterProvider;\n\n private blockTracker: PollingBlockTracker;\n\n constructor({ config, state, provider, blockTracker, signAuthMessage, getProviderConfig }: IPreferencesControllerOptions) {\n super({ config, state, defaultPreferences: { formattedPastTransactions: [], fetchedPastTx: [], paymentTx: [] }, signAuthMessage });\n this.provider = provider;\n this.getProviderConfig = getProviderConfig;\n this.blockTracker = blockTracker;\n log.info(this.blockTracker);\n }\n\n public async poll(interval?: number): Promise<void> {\n const releaseLock = await this._mutex.acquire();\n if (interval) this.configure({ pollInterval: interval });\n if (this._handle) window.clearTimeout(this._handle);\n // call here\n const storeSelectedAddress = this.state.selectedAddress;\n if (!storeSelectedAddress) return;\n if (!this.getAddressState(storeSelectedAddress)?.jwtToken) return;\n // This should never throw\n await this.sync(storeSelectedAddress);\n releaseLock();\n this._handle = window.setTimeout(() => {\n this.poll(this.config.pollInterval);\n }, this.config.pollInterval);\n }\n\n public async initPreferences(params: {\n address: string;\n jwtToken?: string;\n calledFromEmbed?: boolean;\n userInfo?: UserInfo;\n rehydrate?: boolean;\n locale?: string;\n type?: string;\n }): Promise<void> {\n const { address, jwtToken, calledFromEmbed, userInfo, rehydrate, locale = \"en-US\", type } = params;\n await super.init(address, userInfo, jwtToken, { type, email: userInfo.email });\n const { aggregateVerifier, verifier, verifierId } = userInfo || {};\n const userExists = await this.sync(address);\n if (!userExists) {\n const accountState = this.getAddressState(address);\n await this.createUser({\n selectedCurrency: accountState.selectedCurrency,\n theme: accountState.theme,\n verifier: aggregateVerifier || verifier,\n verifierId,\n locale,\n address,\n });\n }\n if (!rehydrate)\n await this.storeUserLogin({ verifier: aggregateVerifier || verifier, verifierId, options: { calledFromEmbed, rehydrate }, address });\n }\n\n public getSelectedAddress(): string {\n return this.state.selectedAddress;\n }\n\n async sync(address: string): Promise<boolean> {\n try {\n const user = await this.getUser<EthereumUser>(address);\n if (user) {\n const {\n default_currency: defaultCurrency,\n contacts,\n theme,\n locale,\n public_address: userPublicAddress,\n default_public_address: defaultPublicAddress,\n customNetworks,\n customTokens,\n customNfts,\n } = user || {};\n\n // update latest data in state.\n this.updateState(\n {\n contacts,\n theme,\n selectedCurrency: defaultCurrency,\n locale,\n defaultPublicAddress: defaultPublicAddress || userPublicAddress,\n customTokens,\n customNfts,\n customNetworks,\n },\n address\n );\n return true;\n }\n return false;\n } catch (error) {\n log.error(error);\n return false;\n } finally {\n Promise.all([\n this.getWalletOrders<FetchedTransaction>(address).catch((error) => {\n log.error(\"unable to fetch wallet orders\", error);\n }),\n this.getTopUpOrders<FetchCommonTransaction>(address).catch((error) => {\n log.error(\"unable to fetch top up orders\", error);\n }),\n ])\n .then((data) => {\n const [walletTx, paymentTx] = data;\n if (paymentTx) {\n this.calculatePaymentTx(paymentTx, address);\n }\n // eslint-disable-next-line promise/always-return\n if (walletTx && walletTx.length > 0) {\n this.updateState({ fetchedPastTx: [...walletTx] }, address);\n this.calculatePastTx(walletTx, address);\n }\n })\n .catch((error) => log.error(error));\n }\n }\n\n public async patchNewTx(tx: TransactionPayload, address: string): Promise<void> {\n const formattedTx = formatPastTx(tx);\n const storePastTx = this.getAddressState(address)?.formattedPastTransactions;\n const duplicateIndex = storePastTx.findIndex((x) => x.transaction_hash === tx.transaction_hash && x.networkType === tx.network);\n if (tx.status === TransactionStatus.submitted || tx.status === TransactionStatus.confirmed) {\n if (duplicateIndex === -1) {\n // No duplicate found\n\n const finalTx = this.cancelTxCalculate([...storePastTx, formattedTx]);\n tx.is_cancel = formattedTx.is_cancel;\n tx.to = tx.to.toLowerCase();\n tx.from = tx.from.toLowerCase();\n\n this.updateState({ formattedPastTransactions: finalTx }, address);\n this.postPastTx<TransactionPayload>(tx, address);\n } else {\n // avoid overriding is_cancel\n formattedTx.is_cancel = storePastTx[duplicateIndex].is_cancel;\n storePastTx[duplicateIndex] = formattedTx;\n this.updateState({ formattedPastTransactions: this.cancelTxCalculate([...storePastTx]) }, address);\n }\n }\n }\n\n public recalculatePastTx(address?: string) {\n // This triggers store update which calculates past Tx status for that network\n const selectedAddress = address || this.state.selectedAddress;\n const state = this.getAddressState(selectedAddress);\n if (!state?.fetchedPastTx) return;\n this.calculatePastTx(state.fetchedPastTx, selectedAddress);\n }\n\n public async refetchEtherscanTx(address?: string) {\n const selectedAddress = address || this.state.selectedAddress;\n if (this.getAddressState(selectedAddress)?.jwtToken) {\n // const selectedNetwork = this.getProviderConfig().rpcTarget;\n // if (ETHERSCAN_SUPPORTED_NETWORKS.has(selectedNetwork)) {\n // const data = await this.fetchEtherscanTx({ selectedAddress, selectedNetwork });\n // if (data.length) {\n // this.emit(\"addEtherscanTransactions\", data, selectedNetwork);\n // }\n // }\n }\n }\n\n async fetchEtherscanTx<T>(parameters: { selectedAddress: string; selectedNetwork: string }): Promise<T[]> {\n try {\n const url = new URL(`${this.config.api}/etherscan`);\n Object.keys(parameters).forEach((key) => url.searchParams.append(key, parameters[key as keyof typeof parameters]));\n const response = await get<{ success: boolean; data: T[] }>(url.href, this.headers(parameters.selectedAddress));\n return response.success ? response.data : [];\n } catch (error) {\n log.error(\"unable to fetch etherscan tx\", error);\n return [];\n }\n }\n\n public async getEtherScanTokens(address: string, chainId: string): Promise<CustomTokenInfo[]> {\n const selectedAddress = address;\n const apiUrl = new URL(this.config.api);\n apiUrl.pathname = `/tokens`;\n apiUrl.searchParams.append(\"chainId\", chainId);\n apiUrl.searchParams.append(\"address\", selectedAddress);\n const result = await get<{ data: CustomTokenInfo[] }>(apiUrl.href, this.headers(this.state.selectedAddress));\n return result.data;\n }\n\n public async getSimpleHashNfts(address: string, chainId: string): Promise<CustomNftInfo[]> {\n const selectedAddress = address;\n const apiUrl = new URL(this.config.api);\n apiUrl.pathname = `/nfts`;\n apiUrl.searchParams.append(\"chainId\", chainId);\n apiUrl.searchParams.append(\"address\", selectedAddress);\n const result = await get<{ data: CustomNftInfo[] }>(apiUrl.href, this.headers(this.state.selectedAddress));\n return result.data;\n }\n\n public getCustomTokens(address?: string): CustomToken[] {\n return this.getAddressState(address)?.customTokens ?? [];\n }\n\n public getCustomNfts(address?: string): CustomNft[] {\n return this.getAddressState(address)?.customNfts ?? [];\n }\n\n // Custom Network methods\n public async addCustomNetwork({ type, network }: { type: string; network: CustomNetworkPayload }): Promise<number> {\n try {\n const apiUrl = new URL(this.config.api);\n apiUrl.pathname = `/customnetwork/${type}`;\n const { selectedAddress } = this.state;\n const payload = {\n network_name: network.displayName,\n rpc_url: network.rpcTarget,\n chain_id: network.chainId,\n symbol: network.ticker,\n block_explorer_url: network.blockExplorerUrl || undefined,\n is_test_net: network.isTestnet || false,\n };\n const res = await post<{ data: CustomNetworks }>(apiUrl.href, payload, this.headers(selectedAddress), { useAPIKey: true });\n await this.sync(selectedAddress);\n\n return res.data.id;\n } catch {\n log.error(\"error adding custom network\");\n return null;\n }\n }\n\n async deleteCustomNetwork(id: number) {\n try {\n const { selectedAddress } = this.state;\n const apiUrl = new URL(this.config.api);\n apiUrl.pathname = `/customnetwork/${id}`;\n await remove(apiUrl.href, {}, this.headers(selectedAddress), { useAPIKey: true });\n await this.sync(selectedAddress);\n return true;\n } catch {\n log.error(\"error deleting custom network\");\n return false;\n }\n }\n\n async editCustomNetwork({ network, id }: { network: CustomNetworkPayload; id: number | null }) {\n try {\n const { selectedAddress } = this.state;\n const apiUrl = new URL(this.config.api);\n apiUrl.pathname = `/customnetwork/${id}`;\n\n const payload = {\n network_name: network.displayName,\n rpc_url: network.rpcTarget,\n chain_id: network.chainId,\n symbol: network.ticker || undefined,\n block_explorer_url: network.blockExplorerUrl || undefined,\n is_test_net: network.isTestnet || false,\n };\n await patch(apiUrl.href, payload, this.headers(selectedAddress), { useAPIKey: true });\n await this.sync(selectedAddress);\n return true;\n } catch {\n log.error(\"error editing custom network\");\n return false;\n }\n }\n\n private calculatePaymentTx(txs: FetchCommonTransaction[], address: string) {\n const accumulator: FetchCommonTransaction[] = [];\n for (const x of txs) {\n let action = \"\";\n const lowerCaseAction = x.action.toLowerCase();\n if (ACTIVITY_ACTION_TOPUP.includes(lowerCaseAction)) action = ACTIVITY_ACTION_TOPUP;\n else if (ACTIVITY_ACTION_SEND.includes(lowerCaseAction)) action = ACTIVITY_ACTION_SEND;\n else if (ACTIVITY_ACTION_RECEIVE.includes(lowerCaseAction)) action = ACTIVITY_ACTION_RECEIVE;\n\n accumulator.push({\n id: x.id,\n date: new Date(x.date).toDateString(),\n from: x.from,\n slicedFrom: x.slicedFrom,\n action,\n to: x.to,\n slicedTo: x.slicedTo,\n totalAmount: x.totalAmount,\n totalAmountString: x.totalAmountString,\n currencyAmount: x.currencyAmount,\n currencyAmountString: x.currencyAmountString,\n amount: x.amount,\n ethRate: x.ethRate,\n status: x.status.toLowerCase(),\n etherscanLink: x.etherscanLink || \"\",\n blockExplorerLink: \"\",\n currencyUsed: x.currencyUsed,\n });\n }\n this.updateState({ paymentTx: accumulator }, address);\n }\n\n private async calculatePastTx(txs: FetchedTransaction[], address: string) {\n const pastTx = [];\n const pendingTx = [];\n const lowerCaseSelectedAddress = address.toLowerCase();\n for (const x of txs) {\n if (\n x.network === SUPPORTED_NETWORKS[this.getProviderConfig().chainId].chainId &&\n x.to &&\n x.from &&\n (lowerCaseSelectedAddress === x.from.toLowerCase() || lowerCaseSelectedAddress === x.to.toLowerCase())\n ) {\n if (x.status !== \"confirmed\") {\n pendingTx.push(x);\n } else {\n const finalObject = formatPastTx(x, lowerCaseSelectedAddress);\n pastTx.push(finalObject);\n }\n }\n }\n const pendingTxPromises = pendingTx.map((x) => getEthTxStatus(x.transaction_hash, this.provider).catch((error) => log.error(error)));\n const resolvedTxStatuses = await Promise.all(pendingTxPromises);\n for (const [index, element] of pendingTx.entries()) {\n const finalObject = formatPastTx(element, lowerCaseSelectedAddress);\n finalObject.status = resolvedTxStatuses[index] || TransactionStatus.submitted;\n pastTx.push(finalObject);\n if (lowerCaseSelectedAddress === element.from.toLowerCase() && finalObject.status && finalObject.status !== element.status)\n this.patchPastTx({ id: element.id, status: finalObject.status, updated_at: new Date().toISOString() }, address);\n }\n\n const finalTx = this.cancelTxCalculate(pastTx);\n\n this.updateState({ formattedPastTransactions: [...finalTx] }, address);\n }\n\n private cancelTxCalculate(pastTx: FormattedTransactionActivity[]) {\n const nonceMap: Record<string, FormattedTransactionActivity[]> = {};\n for (const x of pastTx) {\n if (!nonceMap[x.nonce]) nonceMap[x.nonce] = [x];\n else {\n nonceMap[x.nonce].push(x);\n }\n }\n\n for (const [, value] of Object.entries(nonceMap)) {\n // has duplicate\n if (value.length > 1) {\n // get latest and mark it as is_cancel\n const latestTxs = value.sort((a, b) => {\n const aDate = new Date(a.date).getTime();\n const bDate = new Date(b.date).getTime();\n return bDate - aDate;\n });\n const latestCancelTx = latestTxs[0];\n latestCancelTx.is_cancel = true;\n latestTxs.slice(1).forEach((x) => {\n x.hasCancel = true;\n x.status = latestCancelTx.status === \"confirmed\" ? TransactionStatus.cancelled : TransactionStatus.cancelling;\n x.cancelDateInitiated = `${formatTime(new Date(latestCancelTx.date).getTime())} - ${formatDate(latestCancelTx.date)}`;\n x.etherscanLink = latestCancelTx.etherscanLink;\n x.cancelGas = latestCancelTx.gas;\n x.cancelGasPrice = latestCancelTx.gasPrice;\n });\n }\n }\n\n return pastTx;\n }\n}\n","import BigNumber from \"bignumber.js\";\nimport { BrowserProvider, Contract } from \"ethers\";\nimport log from \"loglevel\";\n\nimport { ecr20Abi } from \"../utils/abis\";\n\nexport interface ITokenOptions {\n address: string;\n symbol: string;\n decimals: number;\n name: string;\n provider: BrowserProvider;\n}\n\nexport class TokenHandler {\n public address: string;\n\n public symbol: string;\n\n public decimals: number;\n\n public name: string;\n\n public contract: Contract;\n\n constructor({ address, symbol, decimals, name, provider }: ITokenOptions) {\n this.address = address;\n\n this.contract = new Contract(address, ecr20Abi, provider);\n this.symbol = symbol;\n this.decimals = decimals;\n this.name = name;\n }\n\n public async getSymbol(): Promise<string> {\n if (!this.symbol || this.symbol === \"ERC20\") this.symbol = await this.contract.symbol();\n return this.symbol;\n }\n\n public async getDecimals(): Promise<number> {\n try {\n if (!this.decimals) this.decimals = await this.contract.decimals();\n return this.decimals;\n } catch (error) {\n log.warn(`Could not get decimals for token ${this.address}`, error);\n return 0;\n }\n }\n\n public async getName(): Promise<string> {\n if (!this.name) this.name = await this.contract.name();\n return this.name;\n }\n\n public async getUserBalance(userAddress: string) {\n if (!this.decimals) await this.getDecimals();\n const balance = await this.contract.balanceOf(userAddress);\n return new BigNumber(balance).toString(16);\n }\n}\n","import { BaseConfig, BaseController, BaseState, PreferencesState } from \"@toruslabs/base-controllers\";\nimport { get } from \"@toruslabs/http-helpers\";\nimport log from \"loglevel\";\n\nimport { COINGECKO_PLATFORMS_CHAIN_CODE_MAP, COINGECKO_SUPPORTED_CURRENCIES } from \"../utils/constants\";\nimport { idleTimeTracker } from \"../utils/helpers\";\nimport { CustomTokenInfo, EthereumNetworkState, ExtendedAddressPreferences } from \"../utils/interfaces\";\nimport { TokensControllerState } from \"./ITokensController\";\n\nexport interface CoinGeckoResponse {\n [address: string]: {\n [currency: string]: number;\n };\n}\n\ntype ContractExchangeRates = Record<string, number | undefined>;\n\nexport const DEFAULT_CURRENCY = \"eth\";\n\nexport interface ITokenRatesControllerState extends BaseState {\n contractExchangeRates: ContractExchangeRates;\n}\n\nexport interface ITokenRatesControllerConfig extends BaseConfig {\n pollInterval: number;\n api: string;\n currencyApi: string;\n chainId: string;\n selectedAddress: string;\n nativeCurrency: string;\n tokens: CustomTokenInfo[];\n}\n\nexport interface TokenRatesControllerOptions {\n config: Partial<ITokenRatesControllerConfig>;\n state: Partial<ITokenRatesControllerState>;\n onPreferencesStateChange: (listener: (preferencesState: PreferencesState<ExtendedAddressPreferences>) => void) => void;\n onTokensStateChange: (listener: (tokensState: TokensControllerState) => void) => void;\n onNetworkStateChange: (listener: (networkState: EthereumNetworkState) => void) => void;\n}\n\nexport class TokenRatesController extends BaseController<ITokenRatesControllerConfig, ITokenRatesControllerState> {\n private conversionInterval: number;\n\n constructor({ config, state, onPreferencesStateChange, onNetworkStateChange, onTokensStateChange }: TokenRatesControllerOptions) {\n super({ config, state });\n this.defaultState = {\n ...this.defaultState,\n contractExchangeRates: {},\n };\n this.initialize();\n\n onPreferencesStateChange((preferencesState) => {\n const { selectedAddress } = preferencesState;\n this.configure({ selectedAddress });\n });\n\n onNetworkStateChange((networkState) => {\n const { chainId, ticker } = networkState.providerConfig;\n this.configure({ chainId, nativeCurrency: ticker });\n });\n\n onTokensStateChange((tokensState) => {\n const { tokens } = tokensState;\n const currentUserTokens = tokens[this.config.selectedAddress];\n if (currentUserTokens?.length > 0 && this.config.tokens !== tokens[this.config.selectedAddress]) {\n this.configure({ tokens: tokens[this.config.selectedAddress] });\n this.updateExchangeRates();\n }\n });\n }\n\n /**\n * Creates a new poll, using setInterval, to periodically call updateConversionRate. The id of the interval is\n * stored at the controller's conversionInterval property. If it is called and such an id already exists, the\n * previous interval is clear and a new one is created.\n */\n public scheduleConversionInterval(): void {\n if (this.conversionInterval) {\n window.clearInterval(this.conversionInterval);\n }\n this.conversionInterval = window.setInterval(() => {\n if (!idleTimeTracker.checkIfIdle()) {\n this.updateExchangeRates();\n }\n }, this.config.pollInterval);\n }\n\n public async updateExchangeRates() {\n const chainCodes = COINGECKO_PLATFORMS_CHAIN_CODE_MAP[this.config.chainId];\n let newContractExchangeRates: ContractExchangeRates = {};\n if (!chainCodes) {\n log.info(`ChainId ${this.config.chainId} not supported by coingecko`);\n this.config.tokens.forEach((token) => {\n newContractExchangeRates[token.tokenAddress] = undefined;\n });\n } else {\n newContractExchangeRates = await this.fetchExchangeRates(this.config.nativeCurrency, chainCodes);\n }\n this.update({ contractExchangeRates: newContractExchangeRates });\n }\n\n private async fetchExchangeRates(nativeCurrency: string, chainCodes: { platform: string; currency: string }): Promise<ContractExchangeRates> {\n const contractAddresses = this.config.tokens.map((token) => token.tokenAddress);\n\n const isNativeCurrencySupported = COINGECKO_SUPPORTED_CURRENCIES.has(nativeCurrency.toLowerCase());\n if (isNativeCurrencySupported) {\n const response = await get<CoinGeckoResponse>(\n `${this.config.api}/simple/token_price/${chainCodes.platform}?contract_addresses=${contractAddresses.join(\n \",\"\n )}&vs_currencies=${nativeCurrency.toLowerCase()}&include_market_cap=false&include_24hr_vol=false&include_24hr_change=false&include_last_updated_at=false`\n );\n const newContractExchangeRates: ContractExchangeRates = {};\n Object.keys(response).forEach((contractAddress) => {\n newContractExchangeRates[contractAddress] = response[contractAddress][nativeCurrency.toLowerCase()] || 0;\n });\n return newContractExchangeRates;\n }\n const [response, currencyResponse] = await Promise.all([\n get<CoinGeckoResponse>(\n `${this.config.api}/simple/token_price/${chainCodes.platform}?contract_addresses=${contractAddresses.join(\n \",\"\n )}&vs_currencies=${DEFAULT_CURRENCY}&include_market_cap=false&include_24hr_vol=false&include_24hr_change=false&include_last_updated_at=false`\n ),\n get<Record<string, string>>(`${this.config.currencyApi}/currency?fsym=${nativeCurrency.toUpperCase()}&tsyms=${DEFAULT_CURRENCY.toUpperCase()}`),\n ]);\n const newContractExchangeRates: ContractExchangeRates = {};\n Object.keys(response).forEach((contractAddress) => {\n newContractExchangeRates[contractAddress] =\n response[contractAddress][DEFAULT_CURRENCY] * Number.parseFloat(currencyResponse[DEFAULT_CURRENCY]) || 0;\n });\n return newContractExchangeRates;\n }\n}\n","import { BaseController, PreferencesState } from \"@toruslabs/base-controllers\";\nimport { SafeEventEmitterProvider } from \"@toruslabs/openlogin-jrpc\";\nimport { BrowserProvider, Contract, toQuantity } from \"ethers\";\nimport log from \"loglevel\";\n\nimport NetworkController from \"../Network/NetworkController\";\nimport PreferencesController from \"../Preferences/PreferencesController\";\nimport { singleBalanceCheckerAbi } from \"../utils/abis\";\nimport { ETHERSCAN_SUPPORTED_CHAINS } from \"../utils/constants\";\nimport { SINGLE_CALL_BALANCES_ADDRESSES } from \"../utils/contractAddresses\";\nimport { idleTimeTracker, toChecksumAddressByChainId } from \"../utils/helpers\";\nimport { CustomTokenInfo, EthereumNetworkState, ExtendedAddressPreferences } from \"../utils/interfaces\";\nimport { TokensControllerConfig, TokensControllerState } from \"./ITokensController\";\nimport { TokenHandler } from \"./TokenHandler\";\n\nexport interface ITokensControllerOptions {\n config?: Partial<TokensControllerConfig>;\n state?: Partial<TokensControllerState>;\n provider: SafeEventEmitterProvider;\n getCustomTokens?: PreferencesController[\"getCustomTokens\"];\n getEtherScanTokens: PreferencesController[\"getEtherScanTokens\"];\n getProviderConfig: NetworkController[\"getProviderConfig\"];\n onPreferencesStateChange: (listener: (preferencesState: PreferencesState<ExtendedAddressPreferences>) => void) => void;\n onNetworkStateChange: (listener: (networkState: EthereumNetworkState) => void) => void;\n}\n\nfunction getObjectFromArrayBasedonKey(oldArray: CustomTokenInfo[], key: string) {\n return oldArray.reduce((acc: Record<string, CustomTokenInfo>, x) => {\n const xkey = x[key as keyof CustomTokenInfo];\n if (typeof xkey === \"boolean\") return acc;\n acc[xkey] = x;\n return acc;\n }, {});\n}\n\nconst mergeTokenArrays = (oldArray: CustomTokenInfo[], newArray: CustomTokenInfo[]): CustomTokenInfo[] => {\n const oldMap = getObjectFromArrayBasedonKey(oldArray || [], \"tokenAddress\");\n const newMap = getObjectFromArrayBasedonKey(newArray || [], \"tokenAddress\");\n const finalArr = newArray;\n Object.keys(oldMap).forEach((x) => {\n if (!newMap[x] && oldMap[x].isEtherScan) finalArr.push(oldMap[x]);\n });\n return finalArr;\n};\n\nconst DEFAULT_INTERVAL = 180 * 1000;\n\nexport class TokensController extends BaseController<TokensControllerConfig, TokensControllerState> {\n name = \"TokensController\";\n\n private provider: SafeEventEmitterProvider;\n\n private ethersProvider: BrowserProvider;\n\n private _timer: number;\n\n private getProviderConfig: NetworkController[\"getProviderConfig\"];\n\n private getCustomTokens: PreferencesController[\"getCustomTokens\"];\n\n private getEtherScanTokens: PreferencesController[\"getEtherScanTokens\"];\n\n constructor({\n config,\n state,\n provider,\n getCustomTokens,\n getEtherScanTokens,\n getProviderConfig,\n onPreferencesStateChange,\n onNetworkStateChange,\n }: ITokensControllerOptions) {\n super({ config, state });\n\n this.provider = provider;\n this.ethersProvider = new BrowserProvider(this.provider, \"any\");\n\n this.getCustomTokens = getCustomTokens;\n this.getEtherScanTokens = getEtherScanTokens;\n this.getProviderConfig = getProviderConfig;\n\n this.defaultConfig = {\n interval: DEFAULT_INTERVAL,\n selectedAddress: \"\",\n chainId: \"\",\n };\n\n this.defaultState = {\n tokens: {},\n };\n this.initialize();\n\n onPreferencesStateChange((preferencesState) => {\n if (preferencesState.selectedAddress !== this.config.selectedAddress) {\n this.configure({ selectedAddress: preferencesState.selectedAddress });\n this.restartTokenDetection();\n }\n });\n\n onNetworkStateChange((networkState) => {\n const { chainId } = networkState.providerConfig;\n if (chainId !== this.config.chainId) {\n this.configure({ chainId });\n this.restartTokenDetection();\n }\n });\n }\n\n get userSelectedAddress(): string {\n return this.config.selectedAddress;\n }\n\n get userTokens() {\n if (!this.userSelectedAddress) return [];\n return this.state.tokens[this.userSelectedAddress] ?? [];\n }\n\n get interval(): number {\n return this.config.interval;\n }\n\n set interval(interval: number) {\n if (this._timer) window.clearInterval(this._timer);\n if (!interval) {\n return;\n }\n this._timer = window.setInterval(() => {\n if (!idleTimeTracker.checkIfIdle()) {\n this.detectNewTokens();\n this.refreshTokenBalances();\n }\n }, interval);\n }\n\n public startTokenDetection(selectedAddress: string) {\n this.configure({ selectedAddress });\n this.restartTokenDetection();\n }\n\n /**\n * Restart token detection polling period and call detectNewTokens\n * in case of address change or user session initialization.\n *\n */\n public restartTokenDetection() {\n if (!this.userSelectedAddress) {\n return;\n }\n this.detectNewTokens();\n this.refreshTokenBalances();\n this.config.interval = DEFAULT_INTERVAL;\n }\n\n public detectNewTokens() {\n const userAddress = this.userSelectedAddress;\n if (!userAddress) return;\n const currentChainId = this.config.chainId;\n const tokens: CustomTokenInfo[] = []; // object[]\n if (!currentChainId) {\n this.update({ tokens: { [userAddress]: [...tokens] } });\n return;\n }\n\n const networkConfig = this.getProviderConfig();\n\n if (networkConfig?.isErc20 && networkConfig?.tokenAddress) {\n tokens.push({\n tokenAddress: networkConfig.tokenAddress,\n name: networkConfig.tickerName,\n logo: networkConfig.logo,\n erc20: true,\n symbol: networkConfig.ticker,\n decimals: \"18\",\n chainId: currentChainId,\n });\n }\n if (this.getCustomTokens) {\n const customTokens = this.getCustomTokens(userAddress);\n tokens.push(\n ...customTokens.reduce((acc, x) => {\n if (x.network === currentChainId)\n acc.push({\n tokenAddress: x.token_address,\n name: x.token_name,\n logo: \"eth.svg\",\n erc20: true,\n symbol: x.token_symbol,\n decimals: x.decimals,\n balance: \"\",\n customTokenId: x.id.toString(),\n chainId: x.network,\n });\n return acc;\n }, [] as CustomTokenInfo[])\n );\n }\n this.update({ tokens: { [userAddress]: [...tokens] } });\n }\n\n async refreshTokenBalances() {\n const userAddress = this.userSelectedAddress;\n if (userAddress === \"\") return;\n const oldTokens = [...this.userTokens];\n const tokenAddresses = oldTokens.map((x) => x.tokenAddress);\n const nonZeroTokens: CustomTokenInfo[] = [];\n try {\n const currentChainId = this.config.chainId;\n if (ETHERSCAN_SUPPORTED_CHAINS.includes(currentChainId)) {\n const etherscanBalances = await this.getEtherScanTokens(userAddress, currentChainId);\n nonZeroTokens.push(...etherscanBalances);\n }\n if (tokenAddresses.length > 0) {\n const currentSingleCallAddress = SINGLE_CALL_BALANCES_ADDRESSES[currentChainId];\n if (currentSingleCallAddress) {\n const ethContract = new Contract(currentSingleCallAddress, singleBalanceCheckerAbi, this.ethersProvider);\n const result = await ethContract.balances([userAddress], tokenAddresses);\n tokenAddresses.forEach((_, index) => {\n const balance = toQuantity(result[index]);\n if (balance && balance !== \"0x0\") {\n nonZeroTokens.push({ ...oldTokens[index], balance, chainId: currentChainId });\n }\n });\n } else {\n this.getTokenBalancesUsingHandler(oldTokens);\n }\n }\n } catch (error) {\n log.error(error, \"unable to fetch token balances using single call balance address\");\n this.getTokenBalancesUsingHandler(oldTokens);\n } finally {\n this.update({ tokens: { [userAddress]: nonZeroTokens } });\n }\n }\n\n async getTokenBalancesUsingHandler(customTokens: CustomTokenInfo[]) {\n if (!this.userSelectedAddress) return;\n const currentNetworkTokens = customTokens;\n const promiseSettledResult = await Promise.allSettled(\n currentNetworkTokens.map(async (x) => {\n try {\n const tokenInstance = new TokenHandler({\n address: x.tokenAddress,\n decimals: Number.parseInt(x.decimals),\n name: x.name,\n symbol: x.symbol,\n provider: this.ethersProvider,\n });\n const balance = await tokenInstance.getUserBalance(this.userSelectedAddress);\n return {\n decimals: tokenInstance.decimals.toString(),\n erc20: true,\n logo: x.logo || \"eth.svg\",\n name: tokenInstance.name,\n symbol: tokenInstance.symbol,\n tokenAddress: toChecksumAddressByChainId(tokenInstance.address, x.chainId),\n balance: `0x${balance}`,\n customTokenId: x.customTokenId,\n network: x.chainId,\n chainId: x.chainId,\n } as CustomTokenInfo;\n } catch (error) {\n log.warn(\"Invalid contract address while fetching\", error);\n return undefined;\n }\n })\n );\n const nonZeroTokens = promiseSettledResult\n .filter((x) => x.status === \"fulfilled\")\n .map((x) => (x as PromiseFulfilledResult<CustomTokenInfo>).value);\n\n this.update({ tokens: { [this.userSelectedAddress]: mergeTokenArrays(this.userTokens, nonZeroTokens) } });\n }\n}\n","// import assert from 'assert'\nimport { SafeEventEmitterProvider } from \"@toruslabs/openlogin-jrpc\";\nimport { Mutex, MutexInterface } from \"async-mutex\";\n\nimport PollingBlockTracker from \"../Block/PollingBlockTracker\";\nimport { METHOD_TYPES } from \"../utils/constants\";\nimport { EthereumTransactionMeta, Nonce, NonceDetails, NonceLockRes } from \"../utils/interfaces\";\nimport TransactionStateManager from \"./TransactionStateManager\";\n\ninterface INonceTrackerOptions {\n provider: SafeEventEmitterProvider;\n blockTracker: PollingBlockTracker;\n getPendingTransactions: TransactionStateManager[\"getPendingTransactions\"];\n getConfirmedTransactions: TransactionStateManager[\"getConfirmedTransactions\"];\n}\n\nclass NonceTracker {\n private provider: SafeEventEmitterProvider;\n\n private blockTracker: PollingBlockTracker;\n\n private getPendingTransactions: TransactionStateManager[\"getPendingTransactions\"];\n\n private getConfirmedTransactions: TransactionStateManager[\"getConfirmedTransactions\"];\n\n private lockMap: Record<string, Mutex>;\n\n constructor({ provider, blockTracker, getPendingTransactions, getConfirmedTransactions }: INonceTrackerOptions) {\n this.provider = provider;\n this.blockTracker = blockTracker;\n this.getPendingTransactions = getPendingTransactions;\n this.getConfirmedTransactions = getConfirmedTransactions;\n this.lockMap = {};\n }\n\n public async getGlobalLock(): Promise<{ releaseLock: MutexInterface.Releaser }> {\n const globalMutex = this._lookupMutex(\"global\");\n // await global mutex free\n const releaseLock = await globalMutex.acquire();\n return { releaseLock };\n }\n\n /**\n this will return an object with the `nextNonce` \n `nonceDetails`, and the releaseLock.\n Note: releaseLock must be called after adding a signed tx \n to pending transactions (or discarding).\n */\n public async getNonceLock(address: string): Promise<NonceLockRes> {\n // await global mutex free\n await this._globalMutexFree();\n // await lock free, then take lock\n const releaseLock = await this._takeMutex(address);\n try {\n // evaluate multiple nextNonce strategies\n const nonceDetails = {} as NonceDetails;\n const networkNonceResult = await this._getNetworkNextNonce(address);\n\n const highestLocallyConfirmed = this._getHighestLocallyConfirmed(address);\n const nextNetworkNonce = networkNonceResult.nonce;\n const highestSuggested = Math.max(nextNetworkNonce, highestLocallyConfirmed);\n\n const pendingTxs = this.getPendingTransactions(address);\n const localNonceResult = this._getHighestContinuousFrom(pendingTxs, highestSuggested);\n\n nonceDetails.params = {\n highestLocallyConfirmed,\n highestSuggested,\n nextNetworkNonce,\n };\n nonceDetails.local = localNonceResult;\n nonceDetails.network = networkNonceResult;\n\n const nextNonce = Math.max(networkNonceResult.nonce, localNonceResult.nonce);\n\n // return nonce and release cb\n return { nextNonce, nonceDetails, releaseLock };\n } catch (error) {\n // release lock if we encounter an error\n releaseLock();\n throw error;\n }\n }\n\n private async _globalMutexFree() {\n const globalMutex = this._lookupMutex(\"global\");\n const releaseLock = await globalMutex.acquire();\n releaseLock();\n }\n\n private async _takeMutex(lockId: string) {\n const mutex = this._lookupMutex(lockId);\n const releaseLock = await mutex.acquire();\n return releaseLock;\n }\n\n private _lookupMutex(lockId: string): Mutex {\n let mutex = this.lockMap[lockId];\n if (!mutex) {\n mutex = new Mutex();\n this.lockMap[lockId] = mutex;\n }\n return mutex;\n }\n\n private async _getNetworkNextNonce(address: string) {\n // calculate next nonce\n // we need to make sure our base count\n // and pending count are from the same block\n const block = await this.blockTracker.getLatestBlock();\n const baseCountStr = await this.provider.request<[string, string], string>({\n method: METHOD_TYPES.ETH_GET_TRANSACTION_COUNT,\n params: [address, block.idempotencyKey],\n });\n const baseCount = Number.parseInt(baseCountStr, 16);\n const nonceDetails = { block, baseCount };\n return { name: \"network\", nonce: baseCount, details: nonceDetails };\n }\n\n private _getHighestLocallyConfirmed(address: string): number {\n const confirmedTransactions = this.getConfirmedTransactions(address);\n const highest = this._getHighestNonce(confirmedTransactions);\n return Number.isInteger(highest) ? highest + 1 : 0;\n }\n\n private _getHighestNonce(txList: EthereumTransactionMeta[]): number {\n const nonces = txList.map((txMeta) => {\n const { nonce } = txMeta.transaction;\n return Number.parseInt(nonce, 16);\n });\n const highestNonce = Math.max.apply(null, nonces);\n return highestNonce;\n }\n\n private _getHighestContinuousFrom(txList: EthereumTransactionMeta[], startPoint: number): Nonce {\n const nonces = new Set(\n txList.map((txMeta) => {\n const { nonce } = txMeta.transaction;\n return Number.parseInt(nonce, 16);\n })\n );\n\n let highest = startPoint;\n while (nonces.has(highest)) {\n highest += 1;\n }\n\n return { name: \"local\", nonce: highest, details: { startPoint, highest } };\n }\n}\n\nexport default NonceTracker;\n","import {\n BASE_TX_EVENT_TYPE,\n ITransactionController,\n TransactionStatus,\n TX_CONFIRMED_EVENT_TYPE,\n TX_DROPPED_EVENT_TYPE,\n TX_EVENTS,\n TX_FAILED_EVENT_TYPE,\n TX_WARNING_EVENT_TYPE,\n} from \"@toruslabs/base-controllers\";\nimport { SafeEventEmitter, SafeEventEmitterProvider } from \"@toruslabs/openlogin-jrpc\";\nimport log from \"loglevel\";\n\nimport { METHOD_TYPES } from \"../utils/constants\";\nimport { EthereumBlock, EthereumTransactionMeta, TransactionParams, TransactionReceipt } from \"../utils/interfaces\";\nimport NonceTracker from \"./NonceTracker\";\nimport TransactionStateManager from \"./TransactionStateManager\";\n\nexport default class PendingTransactionTracker extends SafeEventEmitter {\n DROPPED_BUFFER_COUNT = 3;\n\n private nonceTracker: NonceTracker;\n\n private provider: SafeEventEmitterProvider;\n\n private approveTransaction: ITransactionController<EthereumTransactionMeta>[\"approveTransaction\"];\n\n private droppedBlocksBufferByHash: Map<string, number>;\n\n private getConfirmedTransactions: TransactionStateManager[\"getConfirmedTransactions\"];\n\n private getPendingTransactions: TransactionStateManager[\"getPendingTransactions\"];\n\n private publishTransaction: (rawTx: string) => Promise<string>;\n\n constructor({\n provider,\n nonceTracker,\n approveTransaction,\n publishTransaction,\n getPendingTransactions,\n getConfirmedTransactions,\n }: {\n provider: SafeEventEmitterProvider;\n nonceTracker: NonceTracker;\n approveTransaction: ITransactionController<EthereumTransactionMeta>[\"approveTransaction\"];\n publishTransaction: (rawTx: string) => Promise<string>;\n getPendingTransactions: TransactionStateManager[\"getPendingTransactions\"];\n getConfirmedTransactions: TransactionStateManager[\"getConfirmedTransactions\"];\n }) {\n super();\n this.provider = provider;\n this.nonceTracker = nonceTracker;\n this.approveTransaction = approveTransaction;\n this.publishTransaction = publishTransaction;\n this.getPendingTransactions = getPendingTransactions;\n this.getConfirmedTransactions = getConfirmedTransactions;\n this.droppedBlocksBufferByHash = new Map();\n }\n\n /**\n checks the network for signed txs and releases the nonce global lock if it is\n */\n public async updatePendingTxs(): Promise<void> {\n // in order to keep the nonceTracker accurate we block it while updating pending transactions\n const nonceGlobalLock = await this.nonceTracker.getGlobalLock();\n try {\n const pendingTxs = this.getPendingTransactions();\n await Promise.all(pendingTxs.map((txMeta) => this._checkPendingTx(txMeta)));\n } catch (error) {\n log.error(\"PendingTransactionTracker - Error updating pending transactions\");\n log.error(error);\n }\n nonceGlobalLock.releaseLock();\n }\n\n public async resubmitPendingTxs(block: EthereumBlock) {\n const pending = this.getPendingTransactions();\n // only try resubmitting if their are transactions to resubmit\n if (pending.length === 0) return;\n // Keep this as a for loop because we want to wait for each item to be submitted\n for (const txMeta of pending) {\n try {\n await this._resubmitTx(txMeta, block.idempotencyKey);\n } catch (error: unknown) {\n /*\n Dont marked as failed if the error is a \"known\" transaction warning\n \"there is already a transaction with the same sender-nonce\n but higher/same gas price\"\n\n Also don't mark as failed if it has ever been broadcast successfully.\n A successful broadcast means it may still be mined.\n */\n const errorMessage = (error as { value: Error }).value?.message?.toLowerCase() || (error as Error).message.toLowerCase();\n const isKnownTx =\n // geth\n errorMessage.includes(\"replacement transaction underpriced\") ||\n errorMessage.includes(\"known transaction\") ||\n // parity\n errorMessage.includes(\"gas price too low to replace\") ||\n errorMessage.includes(\"transaction with the same hash was already imported\") ||\n // other\n errorMessage.includes(\"gateway timeout\") ||\n errorMessage.includes(\"nonce too low\");\n // ignore resubmit warnings, return early\n if (isKnownTx) return;\n // encountered real error - transition to error state\n txMeta.warning = {\n error: errorMessage,\n message: \"There was an error when resubmitting this transaction.\",\n };\n this.emit(TX_EVENTS.TX_WARNING, { txMeta, error, txId: txMeta.id } as TX_WARNING_EVENT_TYPE<TransactionParams, EthereumTransactionMeta>);\n }\n }\n }\n\n async _resubmitTx(txMeta: EthereumTransactionMeta, latestBlockNumber?: string) {\n if (!txMeta.firstRetryBlockNumber) {\n this.emit(TX_EVENTS.TX_BLOCK_UPDATE, { txMeta, latestBlockNumber, txId: txMeta.id } as BASE_TX_EVENT_TYPE);\n }\n\n const firstRetryBlockNumber = txMeta.firstRetryBlockNumber || latestBlockNumber;\n const txBlockDistance = Number.parseInt(latestBlockNumber, 16) - Number.parseInt(firstRetryBlockNumber, 16);\n\n const retryCount = txMeta.retryCount || 0;\n\n // Exponential backoff to limit retries at publishing (capped at last 15 mins)\n if (txBlockDistance <= Math.min(50, 2 ** retryCount)) return undefined;\n\n // Only auto-submit already-signed txs:\n if (!(\"rawTx\" in txMeta)) return this.approveTransaction(txMeta.id);\n\n const { rawTx } = txMeta;\n const txHash = await this.publishTransaction(rawTx as string);\n\n // Increment successful tries:\n this.emit(TX_EVENTS.TX_RETRY, { txMeta, txId: txMeta.id } as BASE_TX_EVENT_TYPE);\n return txHash;\n }\n\n async _checkPendingTx(foundTx: EthereumTransactionMeta): Promise<void> {\n const txMeta = foundTx;\n const txHash = txMeta.transactionHash;\n const txId = txMeta.id;\n\n // Only check submitted txs\n if (txMeta.status !== TransactionStatus.submitted) return;\n\n // extra check in case there was an uncaught error during the\n // signature and submission process\n if (!txHash) {\n const noTxHashError = new Error(\"We had an error while submitting this transaction, please try again.\");\n noTxHashError.name = \"NoTxHashError\";\n this.emit(TX_EVENTS.TX_FAILED, { txId, error: noTxHashError } as TX_FAILED_EVENT_TYPE);\n return;\n }\n\n // If another tx with the same nonce is mined, set as failed.\n if (this._checkIfNonceIsTaken(txMeta)) {\n this.emit(TX_EVENTS.TX_DROPPED, { txId } as TX_DROPPED_EVENT_TYPE);\n return;\n }\n\n try {\n const transactionReceipt = await this.provider.request<[string], TransactionReceipt>({\n method: METHOD_TYPES.ETH_GET_TRANSACTION_RECEIPT,\n params: [txHash],\n });\n if (transactionReceipt?.blockNumber) {\n const { baseFeePerGas, timestamp } = await this.provider.request<[string, boolean], EthereumBlock>({\n method: METHOD_TYPES.ETH_GET_BLOCK_BY_HASH,\n params: [transactionReceipt.blockHash, false],\n });\n this.emit(TX_EVENTS.TX_CONFIRMED, {\n txId,\n txReceipt: transactionReceipt,\n baseFeePerGas,\n blockTimestamp: timestamp,\n } as TX_CONFIRMED_EVENT_TYPE);\n return;\n }\n } catch (error) {\n log.error(\"error while loading tx\", error);\n txMeta.warning = {\n error: (error as Error).message,\n message: \"There was a problem loading this transaction.\",\n };\n this.emit(TX_EVENTS.TX_WARNING, { txMeta } as TX_WARNING_EVENT_TYPE<TransactionParams, EthereumTransactionMeta>);\n }\n\n if (await this._checkIfTxWasDropped(txMeta)) {\n this.emit(TX_EVENTS.TX_DROPPED, { txId } as TX_DROPPED_EVENT_TYPE);\n }\n }\n\n async _checkIfTxWasDropped(txMeta: EthereumTransactionMeta): Promise<boolean> {\n const {\n transactionHash: txHash,\n transaction: { nonce, from },\n } = txMeta;\n const networkNextNonce = await this.provider.request<[string, string], string>({\n method: METHOD_TYPES.ETH_GET_TRANSACTION_COUNT,\n params: [from, \"latest\"],\n });\n\n if (Number.parseInt(nonce, 16) >= Number.parseInt(networkNextNonce, 16)) {\n return false;\n }\n\n if (!this.droppedBlocksBufferByHash.has(txHash)) {\n this.droppedBlocksBufferByHash.set(txHash, 0);\n }\n\n const currentBlockBuffer = this.droppedBlocksBufferByHash.get(txHash);\n\n if (currentBlockBuffer < this.DROPPED_BUFFER_COUNT) {\n this.droppedBlocksBufferByHash.set(txHash, currentBlockBuffer + 1);\n return false;\n }\n\n this.droppedBlocksBufferByHash.delete(txHash);\n return true;\n }\n\n _checkIfNonceIsTaken(txMeta: EthereumTransactionMeta) {\n const address = txMeta.transaction.from;\n const completed = this.getConfirmedTransactions(address);\n return completed.some((otherMeta) => {\n if (otherMeta.id === txMeta.id) {\n return false;\n }\n return otherMeta.transaction.nonce === txMeta.transaction.nonce;\n });\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@ethereumjs/common\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@ethereumjs/tx\");","import { addHexPrefix, stripHexPrefix } from \"@ethereumjs/util\";\nimport { SafeEventEmitterProvider } from \"@toruslabs/openlogin-jrpc\";\nimport { BN } from \"bn.js\";\nimport { cloneDeep } from \"lodash\";\nimport log from \"loglevel\";\n\nimport PollingBlockTracker from \"../Block/PollingBlockTracker\";\nimport { EthereumTransactionMeta, TransactionParams } from \"../utils/interfaces\";\nexport default class TransactionGasUtil {\n provider: SafeEventEmitterProvider;\n\n blockTracker: PollingBlockTracker;\n\n constructor(provider: SafeEventEmitterProvider, blockTracker: PollingBlockTracker) {\n this.provider = provider;\n this.blockTracker = blockTracker;\n }\n\n public async analyzeGasUsage(txMeta: EthereumTransactionMeta) {\n const block = await this.blockTracker.getLatestBlock();\n // fallback to block gasLimit\n const blockGasLimitBN = new BN(stripHexPrefix(block.gasLimit), 16);\n const saferGasLimitBN = blockGasLimitBN.mul(new BN(19)).div(new BN(20));\n let estimatedGasHex = addHexPrefix(saferGasLimitBN.toString(\"hex\"));\n let simulationFails: Record<string, unknown>;\n\n try {\n estimatedGasHex = await this.estimateTxGas(txMeta);\n } catch (error) {\n log.warn(error);\n simulationFails = {\n reason: (error as Error).message,\n errorKey: (error as Error & { errorKey: string }).errorKey,\n debug: { blockNumber: block.idempotencyKey, blockGasLimit: block.gasLimit },\n };\n }\n return { blockGasLimit: block.gasLimit, estimatedGasHex, simulationFails };\n }\n\n /**\n Adds a gas buffer with out exceeding the block gas limit\n */\n public addGasBuffer(initialGasLimitHex: string, blockGasLimitHex: string, multiplier = 1.5): string {\n const initialGasLimitBn = new BN(stripHexPrefix(initialGasLimitHex), 16);\n const blockGasLimitBn = new BN(stripHexPrefix(blockGasLimitHex), 16);\n const upperGasLimitBn = blockGasLimitBn.muln(0.9);\n const bufferedGasLimitBn = initialGasLimitBn.muln(multiplier);\n\n // if initialGasLimit is above blockGasLimit, dont modify it\n if (initialGasLimitBn.gt(upperGasLimitBn)) return addHexPrefix(initialGasLimitBn.toString(\"hex\"));\n // if bufferedGasLimit is below blockGasLimit, use bufferedGasLimit\n if (bufferedGasLimitBn.lt(upperGasLimitBn)) return addHexPrefix(bufferedGasLimitBn.toString(\"hex\"));\n // otherwise use blockGasLimit\n return addHexPrefix(upperGasLimitBn.toString(\"hex\"));\n }\n\n /**\n Estimates the tx's gas usage\n */\n private async estimateTxGas(txMeta: EthereumTransactionMeta): Promise<string> {\n const txParams = cloneDeep(txMeta.transaction);\n\n // `eth_estimateGas` can fail if the user has insufficient balance for the\n // value being sent, or for the gas cost. We don't want to check their\n // balance here, we just want the gas estimate. The gas price is removed\n // to skip those balance checks. We check balance elsewhere. We also delete\n // maxFeePerGas and maxPriorityFeePerGas to support EIP-1559 txs.\n delete txParams.gasPrice;\n delete txParams.maxFeePerGas;\n delete txParams.maxPriorityFeePerGas;\n\n return this.provider.request<[TransactionParams], string>({ method: \"eth_estimateGas\", params: [txParams] });\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"fast-json-patch\");","import jsonDiffer, { Operation } from \"fast-json-patch\";\nimport { cloneDeep } from \"lodash\";\n\nimport { EthereumTransactionMeta } from \"../utils/interfaces\";\n\n/**\n Generates an array of history objects sense the previous state.\n The object has the keys\n op (the operation performed),\n path (the key and if a nested object then each key will be seperated with a `/`)\n value\n with the first entry having the note and a timestamp when the change took place\n*/\nfunction generateHistoryEntry(previousState: Record<string, unknown>, newState: Record<string, unknown>, note?: string): Record<string, unknown>[] {\n const entry = jsonDiffer.compare(previousState, newState) as unknown as Record<string, unknown>[];\n // Add a note to the first op, since it breaks if we append it to the entry\n if (entry[0]) {\n if (note) {\n entry[0].note = note;\n }\n\n entry[0].timestamp = Date.now();\n }\n return entry;\n}\n\n/**\n Recovers previous txMeta state obj\n*/\nfunction replayHistory(_shortHistory: Record<string, unknown>[]): Record<string, unknown> {\n const shortHistory = cloneDeep(_shortHistory);\n return shortHistory.reduce((val: Record<string, unknown>, entry: unknown) => jsonDiffer.applyPatch(val, entry as Operation[]).newDocument);\n}\n\nfunction snapshotFromTxMeta(txMeta: EthereumTransactionMeta): EthereumTransactionMeta {\n const shallow = { ...txMeta };\n delete shallow.history;\n return cloneDeep(shallow);\n}\n\nexport { generateHistoryEntry, replayHistory, snapshotFromTxMeta };\n","import { addHexPrefix, isHexString, isValidAddress } from \"@ethereumjs/util\";\nimport { rpcErrors } from \"@metamask/rpc-errors\";\nimport { randomId, TRANSACTION_TYPE, TRANSACTION_TYPES, TransactionStatus } from \"@toruslabs/base-controllers\";\nimport { SafeEventEmitterProvider } from \"@toruslabs/openlogin-jrpc\";\nimport { Interface } from \"ethers\";\nimport log from \"loglevel\";\n\nimport { ecr20Abi, erc721Abi, erc1155Abi } from \"../utils/abis\";\nimport {\n CONTRACT_TYPE_ERC20,\n CONTRACT_TYPE_ERC721,\n CONTRACT_TYPE_ERC1155,\n CONTRACT_TYPE_ETH,\n METHOD_TYPES,\n TRANSACTION_ENVELOPE_TYPES,\n} from \"../utils/constants\";\nimport { EthereumTransactionMeta, TRANSACTION_ENVELOPE_TYPES_TYPE, TransactionParams } from \"../utils/interfaces\";\n\nconst erc20Interface = new Interface(ecr20Abi);\nconst erc721Interface = new Interface(erc721Abi);\nconst erc1155Interface = new Interface(erc1155Abi);\n\n// functions that handle normalizing of that key in txParams\ntype NormalizableTransactionParams = keyof Omit<TransactionParams, \"accessList\">;\nconst normalizers: Partial<\n Record<\n NormalizableTransactionParams,\n (param: NormalizableTransactionParams, ...args: unknown[]) => TransactionParams[NormalizableTransactionParams]\n >\n> = {\n from: (from: string, LowerCase = true) => (LowerCase ? addHexPrefix(from).toLowerCase() : addHexPrefix(from)),\n to: (to: string, LowerCase = true) => (LowerCase ? addHexPrefix(to).toLowerCase() : addHexPrefix(to)),\n nonce: (nonce: string) => addHexPrefix(nonce),\n customNonceValue: (nonce: string) => addHexPrefix(nonce),\n value: (value: string) => addHexPrefix(value),\n data: (data: string) => addHexPrefix(data),\n gas: (gas: string) => addHexPrefix(gas),\n gasPrice: (gasPrice: string) => addHexPrefix(gasPrice),\n type: addHexPrefix as (str: string) => TRANSACTION_ENVELOPE_TYPES_TYPE,\n maxFeePerGas: addHexPrefix,\n maxPriorityFeePerGas: addHexPrefix,\n};\n\n/**\n * normalizes txParams\n */\nexport function normalizeTxParameters(txParameters: TransactionParams, lowerCase = true): TransactionParams {\n // apply only keys in the normalizers\n const normalizedTxParameters: TransactionParams = { id: txParameters.id || randomId(), from: txParameters.from };\n for (const key in normalizers) {\n const currentKey = key as NormalizableTransactionParams;\n if (txParameters[currentKey])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n normalizedTxParameters[currentKey] = normalizers[currentKey](txParameters[currentKey] as NormalizableTransactionParams, lowerCase) as any;\n }\n return normalizedTxParameters;\n}\n\nexport function transactionMatchesNetwork(transaction: EthereumTransactionMeta, chainId: string) {\n if (typeof transaction.chainId !== \"undefined\") {\n return transaction.chainId === chainId;\n }\n return false;\n}\n\n/**\n * Determines if the maxFeePerGas and maxPriorityFeePerGas fields are supplied\n * and valid inputs. This will return false for non hex string inputs.\n * the transaction to check\n * @returns true if transaction uses valid EIP1559 fields\n */\nexport function isEIP1559Transaction(transaction: Partial<EthereumTransactionMeta>) {\n return (\n isHexString(addHexPrefix(transaction?.transaction?.maxFeePerGas)) && isHexString(addHexPrefix(transaction?.transaction?.maxPriorityFeePerGas))\n );\n}\n\n/**\n * Determine if the maxFeePerGas and maxPriorityFeePerGas fields are not\n * supplied and that the gasPrice field is valid if it is provided. This will\n * return false if gasPrice is a non hex string.\n * transaction -\n * the transaction to check\n * @returns true if transaction uses valid Legacy fields OR lacks\n * EIP1559 fields\n */\nexport function isLegacyTransaction(transaction: EthereumTransactionMeta) {\n return (\n typeof transaction.transaction.maxFeePerGas === \"undefined\" &&\n typeof transaction.transaction.maxPriorityFeePerGas === \"undefined\" &&\n (typeof transaction.transaction.gasPrice === \"undefined\" || isHexString(addHexPrefix(transaction.transaction.gasPrice)))\n );\n}\n\n/**\n * Given two fields, ensure that the second field is not included in txParams,\n * and if it is throw an invalidParams error.\n */\nexport function ensureMutuallyExclusiveFieldsNotProvided(\n txParams: TransactionParams,\n fieldBeingValidated: NormalizableTransactionParams,\n mutuallyExclusiveField: NormalizableTransactionParams\n) {\n if (typeof txParams[mutuallyExclusiveField] !== \"undefined\") {\n throw rpcErrors.invalidParams(\n `Invalid transaction params: specified ${fieldBeingValidated} but also included ${mutuallyExclusiveField}, these cannot be mixed`\n );\n }\n}\n\n/**\n * Ensures that the provided value for field is a string, throws an\n * invalidParams error if field is not a string.\n */\nexport function ensureFieldIsString(txParams: TransactionParams, field: NormalizableTransactionParams) {\n if (typeof txParams[field] !== \"string\") {\n throw rpcErrors.invalidParams(`Invalid transaction params: ${field} is not a string. got: (${txParams[field]})`);\n }\n}\n\n/**\n * Ensures that the provided txParams has the proper 'type' specified for the\n * given field, if it is provided. If types do not match throws an\n * invalidParams error.\n */\nfunction ensureProperTransactionEnvelopeTypeProvided(txParams: TransactionParams, field: NormalizableTransactionParams) {\n switch (field) {\n case \"maxFeePerGas\":\n case \"maxPriorityFeePerGas\":\n if (txParams.type && txParams.type !== TRANSACTION_ENVELOPE_TYPES.FEE_MARKET) {\n throw rpcErrors.invalidParams(\n `Invalid transaction envelope type: specified type \"${txParams.type}\" but ` +\n `including maxFeePerGas and maxPriorityFeePerGas requires type: \"${TRANSACTION_ENVELOPE_TYPES.FEE_MARKET}\"`\n );\n }\n break;\n case \"gasPrice\":\n default:\n if (txParams.type && txParams.type === TRANSACTION_ENVELOPE_TYPES.FEE_MARKET) {\n throw rpcErrors.invalidParams(\n `Invalid transaction envelope type: specified type \"${txParams.type}\" but ` +\n \"included a gasPrice instead of maxFeePerGas and maxPriorityFeePerGas\"\n );\n }\n }\n}\n\n/**\n * validates the from field in txParams\n */\nexport function validateFrom(txParams: TransactionParams) {\n if (!(typeof txParams.from === \"string\")) {\n throw rpcErrors.invalidParams(`Invalid \"from\" address \"${txParams.from}\": not a string.`);\n }\n if (!isValidAddress(txParams.from)) {\n throw rpcErrors.invalidParams('Invalid \"from\" address.');\n }\n}\n\n/**\n * validates the to field in txParams\n */\nexport function validateRecipient(txParameters: TransactionParams) {\n if (txParameters.to === \"0x\" || txParameters.to === null) {\n if (txParameters.data) {\n delete txParameters.to;\n } else {\n throw rpcErrors.invalidParams('Invalid \"to\" address.');\n }\n } else if (txParameters.to !== undefined && !isValidAddress(txParameters.to)) {\n throw rpcErrors.invalidParams('Invalid \"to\" address.');\n }\n return txParameters;\n}\n\n/**\n * Validates the given tx parameters\n * @throws if the tx params contains invalid fields\n */\nexport function validateTxParameters(txParams: TransactionParams, eip1559Compatibility = true) {\n if (!txParams || typeof txParams !== \"object\" || Array.isArray(txParams)) {\n throw rpcErrors.invalidParams(\"Invalid transaction params: must be an object.\");\n }\n if (!txParams.to && !txParams.data) {\n throw rpcErrors.invalidParams(\n 'Invalid transaction params: must specify \"data\" for contract deployments, or \"to\" (and optionally \"data\") for all other types of transactions.'\n );\n }\n\n if (isEIP1559Transaction({ transaction: txParams }) && !eip1559Compatibility) {\n throw rpcErrors.invalidParams(\n \"Invalid transaction params: params specify an EIP-1559 transaction but the current network does not support EIP-1559\"\n );\n }\n\n Object.entries(txParams).forEach(([key, value]) => {\n // validate types\n switch (key) {\n case \"from\":\n validateFrom(txParams);\n break;\n case \"to\":\n validateRecipient(txParams);\n break;\n case \"gasPrice\":\n ensureProperTransactionEnvelopeTypeProvided(txParams, \"gasPrice\");\n ensureMutuallyExclusiveFieldsNotProvided(txParams, \"gasPrice\", \"maxFeePerGas\");\n ensureMutuallyExclusiveFieldsNotProvided(txParams, \"gasPrice\", \"maxPriorityFeePerGas\");\n ensureFieldIsString(txParams, \"gasPrice\");\n break;\n case \"maxFeePerGas\":\n ensureProperTransactionEnvelopeTypeProvided(txParams, \"maxFeePerGas\");\n ensureMutuallyExclusiveFieldsNotProvided(txParams, \"maxFeePerGas\", \"gasPrice\");\n ensureFieldIsString(txParams, \"maxFeePerGas\");\n break;\n case \"maxPriorityFeePerGas\":\n ensureProperTransactionEnvelopeTypeProvided(txParams, \"maxPriorityFeePerGas\");\n ensureMutuallyExclusiveFieldsNotProvided(txParams, \"maxPriorityFeePerGas\", \"gasPrice\");\n ensureFieldIsString(txParams, \"maxPriorityFeePerGas\");\n break;\n case \"value\":\n ensureFieldIsString(txParams, \"value\");\n if (value.toString().includes(\"-\")) {\n throw rpcErrors.invalidParams(`Invalid transaction value \"${value}\": not a positive number.`);\n }\n\n if (value.toString().includes(\".\")) {\n throw rpcErrors.invalidParams(`Invalid transaction value of \"${value}\": number must be in wei.`);\n }\n break;\n case \"chainId\":\n if (typeof value !== \"number\" && typeof value !== \"string\") {\n throw rpcErrors.invalidParams(`Invalid transaction params: ${key} is not a Number or hex string. got: (${value})`);\n }\n break;\n default:\n ensureFieldIsString(txParams, key as NormalizableTransactionParams);\n }\n });\n}\n\nexport function normalizeAndValidateTxParams(txParams: TransactionParams, lowerCase = true) {\n const normalizedTxParams = normalizeTxParameters(txParams, lowerCase);\n validateTxParameters(normalizedTxParams);\n return normalizedTxParams;\n}\n\n/**\n * @returns an array of states that can be considered final\n */\nexport function getFinalStates() {\n return [\n TransactionStatus.rejected, // the user has responded no!\n TransactionStatus.confirmed, // the tx has been included in a block.\n TransactionStatus.failed, // the tx failed for some reason, included on tx data.\n TransactionStatus.dropped, // the tx nonce was already used\n ];\n}\n\nexport function parseStandardTokenTransactionData(data: string) {\n try {\n const txDesc = erc20Interface.parseTransaction({ data });\n if (txDesc) return { name: txDesc.name, methodParams: txDesc.args.toArray(), type: CONTRACT_TYPE_ERC20 };\n } catch {\n // ignore and next try to parse with erc721 ABI\n }\n\n try {\n const txDesc = erc721Interface.parseTransaction({ data });\n if (txDesc) return { name: txDesc.name, methodParams: txDesc.args.toArray(), type: CONTRACT_TYPE_ERC721 };\n } catch {\n // ignore and next try to parse with erc1155 ABI\n }\n\n try {\n const txDesc = erc1155Interface.parseTransaction({ data });\n if (txDesc) return { name: txDesc.name, methodParams: txDesc.args.toArray(), type: CONTRACT_TYPE_ERC1155 };\n } catch {\n // ignore and return undefined\n }\n\n return undefined;\n}\n\nexport const readAddressAsContract = async (\n provider: SafeEventEmitterProvider,\n address: string\n): Promise<{ contractCode: string; isContractAddress: boolean }> => {\n let contractCode;\n try {\n contractCode = await provider.request<[string, string], string>({ method: METHOD_TYPES.ETH_GET_CODE, params: [address, \"latest\"] });\n } catch (e) {\n contractCode = null;\n }\n\n const isContractAddress = contractCode ? contractCode !== \"0x\" && contractCode !== \"0x0\" : false;\n return { contractCode, isContractAddress };\n};\n\nexport async function determineTransactionType(txParams: TransactionParams, provider: SafeEventEmitterProvider) {\n const { data, to } = txParams;\n let name: string = \"\";\n let methodParams = [];\n let type = \"\";\n try {\n ({ name, methodParams, type } = (data && parseStandardTokenTransactionData(data)) || {});\n } catch (error) {\n log.debug(\"Failed to parse transaction data\", error);\n }\n let result: TRANSACTION_TYPE;\n let contractCode = \"\";\n if (data && !to) {\n result = TRANSACTION_TYPES.DEPLOY_CONTRACT;\n } else {\n const { contractCode: resultCode, isContractAddress } = await readAddressAsContract(provider, to);\n contractCode = resultCode;\n if (isContractAddress) {\n const valueExists = txParams.value && Number(txParams.value) !== 0;\n const tokenMethodName: TRANSACTION_TYPE = [\n TRANSACTION_TYPES.TOKEN_METHOD_APPROVE,\n TRANSACTION_TYPES.TOKEN_METHOD_TRANSFER,\n TRANSACTION_TYPES.TOKEN_METHOD_TRANSFER_FROM,\n TRANSACTION_TYPES.COLLECTIBLE_METHOD_SAFE_TRANSFER_FROM,\n TRANSACTION_TYPES.SET_APPROVAL_FOR_ALL,\n ].find((x) => x.toLowerCase() === name?.toLowerCase());\n\n result = data && tokenMethodName && !valueExists ? tokenMethodName : TRANSACTION_TYPES.CONTRACT_INTERACTION;\n } else {\n result = TRANSACTION_TYPES.SENT_ETHER;\n }\n }\n return { type: type || CONTRACT_TYPE_ETH, category: result, methodParams, getCodeResponse: contractCode };\n}\n","import {\n BaseTransactionStateManager,\n ITransactionStateManager,\n randomId,\n TransactionConfig,\n transactionMatchesNetwork,\n TransactionState,\n TransactionStatus,\n TX_EVENTS,\n TX_STATUS_UPDATE_EVENT_TYPE,\n} from \"@toruslabs/base-controllers\";\nimport { keyBy, mapValues, omitBy, pickBy, sortBy } from \"lodash\";\n\nimport NetworkController from \"../Network/NetworkController\";\nimport { DappSuggestedGasFees, EthereumTransactionMeta, TransactionParams } from \"../utils/interfaces\";\nimport { generateHistoryEntry, replayHistory, snapshotFromTxMeta } from \"./TransactionStateHistoryHelper\";\nimport { getFinalStates, normalizeAndValidateTxParams } from \"./TransactionUtils\";\n\nexport default class TransactionStateManager\n extends BaseTransactionStateManager<TransactionParams, EthereumTransactionMeta>\n implements ITransactionStateManager<TransactionParams>\n{\n constructor({\n config,\n state,\n getCurrentChainId,\n }: {\n config?: Partial<TransactionConfig>;\n state?: Partial<TransactionState<TransactionParams, EthereumTransactionMeta>>;\n getCurrentChainId: NetworkController[\"getNetworkIdentifier\"];\n }) {\n super({ config, state, getCurrentChainId });\n }\n\n generateTxMeta(opts: Partial<EthereumTransactionMeta> = {}): EthereumTransactionMeta {\n const chainId = this.getCurrentChainId();\n if (chainId === \"loading\") throw new Error(\"Torus is having trouble connecting to the network\");\n let dappSuggestedGasFees: DappSuggestedGasFees = null;\n\n // If we are dealing with a transaction suggested by a dapp and not\n // an internally created transaction, we need to keep record of\n // the originally submitted gasParams.\n if (opts.transaction && typeof opts.origin === \"string\" && opts.origin !== \"torus\") {\n if (typeof opts.transaction.gasPrice !== \"undefined\") {\n dappSuggestedGasFees = {\n gasPrice: opts.transaction.gasPrice,\n };\n } else if (typeof opts.transaction.maxFeePerGas !== \"undefined\" || typeof opts.transaction.maxPriorityFeePerGas !== \"undefined\") {\n dappSuggestedGasFees = {\n maxPriorityFeePerGas: opts.transaction.maxPriorityFeePerGas,\n maxFeePerGas: opts.transaction.maxFeePerGas,\n };\n }\n\n if (typeof opts.transaction.gas !== \"undefined\") {\n dappSuggestedGasFees = {\n ...dappSuggestedGasFees,\n gas: opts.transaction.gas,\n };\n }\n }\n\n return {\n id: opts.transaction.id || randomId(),\n time: Date.now(),\n status: TransactionStatus.unapproved,\n loadingDefaults: true,\n chainId,\n dappSuggestedGasFees,\n ...opts,\n } as EthereumTransactionMeta;\n }\n\n addTransactionToState(txMeta: EthereumTransactionMeta): EthereumTransactionMeta {\n if (txMeta.transaction) {\n txMeta.transaction = normalizeAndValidateTxParams(txMeta.transaction, false);\n }\n this.once(`${txMeta.id}:signed`, () => {\n this.removeAllListeners(`${txMeta.id}:rejected`);\n });\n this.once(`${txMeta.id}:rejected`, () => {\n this.removeAllListeners(`${txMeta.id}:signed`);\n });\n // initialize history\n txMeta.history = [];\n // capture initial snapshot of txMeta for history\n const snapshot = snapshotFromTxMeta(txMeta);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n txMeta.history.push(snapshot as any);\n\n const transactions = this.getTransactions({\n filterToCurrentNetwork: false,\n });\n const { txHistoryLimit } = this.config;\n\n // checks if the length of the tx history is longer then desired persistence\n // limit and then if it is removes the oldest confirmed or rejected tx.\n // Pending or unapproved transactions will not be removed by this\n // operation. For safety of presenting a fully functional transaction UI\n // representation, this function will not break apart transactions with the\n // same nonce, per network. Not accounting for transactions of the same\n // nonce and network combo can result in confusing or broken experiences\n // in the UI.\n //\n // we will send UI only collected groups of transactions *per page* so at\n // some point in the future, this persistence limit can be adjusted. When\n // we do that I think we should figure out a better storage solution for\n // transaction history entries.\n const nonceNetworkSet = new Set();\n\n const txsToDelete = transactions\n .reverse()\n .filter((tx) => {\n const { nonce } = tx.transaction;\n const { chainId, status } = tx;\n const key = `${nonce}-${chainId}`;\n if (nonceNetworkSet.has(key)) {\n return false;\n }\n if (nonceNetworkSet.size < txHistoryLimit - 1 || getFinalStates().includes(status) === false) {\n nonceNetworkSet.add(key);\n return false;\n }\n return true;\n })\n .map((tx) => tx.id);\n\n this._deleteTransactions(txsToDelete);\n this._addTransactionsToState([txMeta]);\n return txMeta;\n }\n\n /**\n Removes transaction from the given address for the current network\n from the txList\n */\n wipeTransactions(address: string): void {\n const { transactions } = this.state;\n const chainId = this.getCurrentChainId();\n\n this.update({\n transactions: omitBy(transactions, (txMeta: EthereumTransactionMeta) => {\n const transactionMatch = transactionMatchesNetwork(txMeta, chainId);\n return txMeta.transaction.from === address && transactionMatch;\n }),\n });\n }\n\n getTransactions({\n searchCriteria = {},\n initialList = undefined,\n filterToCurrentNetwork = true,\n limit = undefined,\n }: {\n searchCriteria?: Record<string, (val: unknown) => boolean> | Record<string, unknown>;\n initialList?: EthereumTransactionMeta[];\n filterToCurrentNetwork?: boolean;\n limit?: number;\n } = {}): EthereumTransactionMeta[] {\n const chainId = this.getCurrentChainId();\n // searchCriteria is an object that might have values that aren't predicate\n // methods. When providing any other value type (string, number, etc), we\n // consider this shorthand for \"check the value at key for strict equality\n // with the provided value\". To conform this object to be only methods, we\n // mapValues (lodash) such that every value on the object is a method that\n // returns a boolean.\n const predicateMethods: unknown = mapValues(searchCriteria, (predicate) =>\n typeof predicate === \"function\" ? predicate : (v: unknown) => v === predicate\n );\n\n // If an initial list is provided we need to change it back into an object\n // first, so that it matches the shape of our state. This is done by the\n // lodash keyBy method. This is the edge case for this method, typically\n // initialList will be undefined.\n const transactionsToFilter = initialList ? keyBy(initialList, \"id\") : this.state.transactions;\n\n // Combine sortBy and pickBy to transform our state object into an array of\n // matching transactions that are sorted by time.\n const filteredTransactions = sortBy(\n pickBy(transactionsToFilter, (txMeta) => {\n // default matchesCriteria to the value of transactionMatchesNetwork\n // when filterToCurrentNetwork is true.\n const transactionMatches = transactionMatchesNetwork(txMeta, chainId);\n if (filterToCurrentNetwork && !transactionMatches) {\n return false;\n }\n // iterate over the predicateMethods keys to check if the transaction\n // matches the searchCriteria\n for (const [key, predicate] of Object.entries(predicateMethods)) {\n // We return false early as soon as we know that one of the specified\n // search criteria do not match the transaction. This prevents\n // needlessly checking all criteria when we already know the criteria\n // are not fully satisfied. We check both txParams and the base\n // object as predicate keys can be either.\n if (key in txMeta.transaction) {\n if (predicate(txMeta.transaction[key as keyof TransactionParams]) === false) {\n return false;\n }\n } else if (predicate(txMeta[key as keyof EthereumTransactionMeta]) === false) {\n return false;\n }\n }\n\n return true;\n }),\n \"time\"\n );\n\n if (limit !== undefined) {\n // We need to have all transactions of a given nonce in order to display\n // necessary details in the UI. We use the size of this set to determine\n // whether we have reached the limit provided, thus ensuring that all\n // transactions of nonces we include will be sent to the UI.\n const nonces = new Set();\n const txs = [];\n // By default, the transaction list we filter from is sorted by time ASC.\n // To ensure that filtered results prefers the newest transactions we\n // iterate from right to left, inserting transactions into front of a new\n // array. The original order is preserved, but we ensure that newest txs\n // are preferred.\n for (let i = filteredTransactions.length - 1; i > -1; i -= 1) {\n const txMeta = filteredTransactions[i];\n const { nonce } = txMeta.transaction;\n if (!nonces.has(nonce)) {\n if (nonces.size < limit) {\n nonces.add(nonce);\n } else {\n continue;\n }\n }\n // Push transaction into the beginning of our array to ensure the\n // original order is preserved.\n txs.unshift(txMeta);\n }\n return txs;\n }\n\n return filteredTransactions;\n }\n\n getApprovedTransactions(address?: string): EthereumTransactionMeta[] {\n const searchCriteria: { status: TransactionStatus; from?: string } = { status: TransactionStatus.approved };\n if (address) {\n searchCriteria.from = address;\n }\n return this.getTransactions({ searchCriteria });\n }\n\n getSubmittedTransactions(address?: string): EthereumTransactionMeta[] {\n const searchCriteria: { status: TransactionStatus; from?: string } = { status: TransactionStatus.submitted };\n if (address) {\n searchCriteria.from = address;\n }\n return this.getTransactions({ searchCriteria });\n }\n\n getPendingTransactions(address?: string): EthereumTransactionMeta[] {\n const submitted = this.getSubmittedTransactions(address);\n const approved = this.getApprovedTransactions(address);\n return [...submitted, ...approved];\n }\n\n getConfirmedTransactions(address?: string): EthereumTransactionMeta[] {\n const searchCriteria: { status: TransactionStatus; from?: string } = { status: TransactionStatus.confirmed };\n if (address) {\n searchCriteria.from = address;\n }\n return this.getTransactions({ searchCriteria });\n }\n\n getUnapprovedTxList(): Record<string, EthereumTransactionMeta> {\n const chainId = this.getCurrentChainId();\n\n return pickBy(this.state.transactions, (transaction) => {\n const transactionMatches = transactionMatchesNetwork(transaction, chainId);\n return transaction.status === TransactionStatus.unapproved && transactionMatches;\n });\n }\n\n updateTransactionInState(txMeta: EthereumTransactionMeta, note?: string) {\n // validate txParams\n if (txMeta.transaction) {\n txMeta.transaction = normalizeAndValidateTxParams(txMeta.transaction, false);\n }\n\n // create txMeta snapshot for history\n const currentState = snapshotFromTxMeta(txMeta);\n // recover previous tx state obj\n const previousState = replayHistory(txMeta.history);\n // generate history entry and add to history\n const entry = generateHistoryEntry(previousState, currentState as unknown as Record<string, unknown>, note);\n if (entry.length > 0) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n txMeta.history.push(entry as any);\n }\n\n // commit txMeta to state\n this.updateTransaction(txMeta);\n }\n\n protected override _setTransactionStatus(txId: string, status: TransactionStatus, isFinalStep?: boolean): void {\n const txMeta = this.getTransaction(txId);\n if (!txMeta) {\n return;\n }\n txMeta.status = status;\n this.updateTransactionInState(txMeta);\n this.emit(TX_EVENTS.TX_STATUS_UPDATE, { txId, status } as TX_STATUS_UPDATE_EVENT_TYPE);\n if (this.isFinalState(status) || isFinalStep) {\n this.emit(`${txMeta.id}:finished`, txMeta);\n } else {\n this.emit(`${txMeta.id}:${status}`, txId);\n }\n }\n}\n","import { Common, Hardfork } from \"@ethereumjs/common\";\nimport { TransactionFactory, TypedTransaction } from \"@ethereumjs/tx\";\nimport { addHexPrefix, stripHexPrefix } from \"@ethereumjs/util\";\nimport { providerErrors, rpcErrors } from \"@metamask/rpc-errors\";\nimport {\n ITransactionController,\n TRANSACTION_TYPES,\n TransactionConfig,\n TransactionState,\n TransactionStatus,\n TX_CONFIRMED_EVENT_TYPE,\n TX_DROPPED_EVENT_TYPE,\n TX_EVENTS,\n TX_FAILED_EVENT_TYPE,\n TX_WARNING_EVENT_TYPE,\n} from \"@toruslabs/base-controllers\";\nimport { JRPCRequest, SafeEventEmitterProvider } from \"@toruslabs/openlogin-jrpc\";\nimport BigNumber from \"bignumber.js\";\nimport { keccak256 } from \"ethers\";\nimport log from \"loglevel\";\n\nimport PollingBlockTracker from \"../Block/PollingBlockTracker\";\nimport GasFeeController from \"../Gas/GasFeeController\";\nimport { type EthereumGasFeeEstimates, EthereumLegacyGasFeeEstimates } from \"../Gas/IGasFeeController\";\nimport KeyringController from \"../Keyring/KeyringController\";\nimport NetworkController from \"../Network/NetworkController\";\nimport PreferencesController from \"../Preferences/PreferencesController\";\nimport { CHAIN_ID_TO_GAS_LIMIT_BUFFER_MAP, GAS_ESTIMATE_TYPES, METHOD_TYPES, TRANSACTION_ENVELOPE_TYPES } from \"../utils/constants\";\nimport { decGWEIToHexWEI } from \"../utils/conversionUtils\";\nimport { bnLessThan, GAS_LIMITS, getChainType } from \"../utils/helpers\";\nimport {\n EthereumBlock,\n EthereumTransactionMeta,\n NonceLockRes,\n TransactionParams,\n TransactionReceipt,\n UserRequestApprovalParams,\n} from \"../utils/interfaces\";\nimport NonceTracker from \"./NonceTracker\";\nimport PendingTransactionTracker from \"./PendingTransactionTracker\";\nimport TransactionGasUtil from \"./TransactionGasUtil\";\nimport TransactionStateManager from \"./TransactionStateManager\";\nimport { determineTransactionType, isEIP1559Transaction, normalizeTxParameters, validateTxParameters } from \"./TransactionUtils\";\n\nexport default class TransactionController extends TransactionStateManager implements ITransactionController<TransactionParams> {\n getSelectedAddress: PreferencesController[\"getSelectedAddress\"];\n\n getEIP1559GasFeeEstimates: GasFeeController[\"fetchGasFeeEstimates\"];\n\n public nonceTracker: NonceTracker;\n\n public pendingTxTracker: PendingTransactionTracker;\n\n public txGasUtil: TransactionGasUtil;\n\n private _getCurrentNetworkEIP1559Compatibility: NetworkController[\"getEIP1559Compatibility\"];\n\n private _getCurrentAccountEIP1559Compatibility: (address?: string) => Promise<boolean>;\n\n private getProviderConfig: NetworkController[\"getProviderConfig\"];\n\n private signEthTx: KeyringController[\"signTransaction\"];\n\n private provider: SafeEventEmitterProvider;\n\n private blockTracker: PollingBlockTracker;\n\n private inProcessOfSigning: Set<string> = new Set();\n\n constructor({\n config,\n state,\n provider,\n blockTracker,\n signEthTx,\n getCurrentChainId,\n getCurrentNetworkEIP1559Compatibility,\n getProviderConfig,\n getCurrentAccountEIP1559Compatibility,\n getSelectedAddress,\n getEIP1559GasFeeEstimates,\n }: {\n config?: Partial<TransactionConfig>;\n state?: Partial<TransactionState<TransactionParams, EthereumTransactionMeta>>;\n provider: SafeEventEmitterProvider;\n blockTracker: PollingBlockTracker;\n signEthTx: KeyringController[\"signTransaction\"];\n getCurrentChainId: NetworkController[\"getNetworkIdentifier\"];\n getProviderConfig: NetworkController[\"getProviderConfig\"];\n getCurrentNetworkEIP1559Compatibility: NetworkController[\"getEIP1559Compatibility\"];\n getCurrentAccountEIP1559Compatibility: (address?: string) => Promise<boolean>; // used only if keyring supports EIP-1559\n getSelectedAddress: PreferencesController[\"getSelectedAddress\"];\n getEIP1559GasFeeEstimates: GasFeeController[\"fetchGasFeeEstimates\"];\n }) {\n super({ config, state, getCurrentChainId });\n this.blockTracker = blockTracker;\n this.getProviderConfig = getProviderConfig;\n this._getCurrentNetworkEIP1559Compatibility = getCurrentNetworkEIP1559Compatibility;\n this._getCurrentAccountEIP1559Compatibility = getCurrentAccountEIP1559Compatibility;\n this.getSelectedAddress = getSelectedAddress;\n this.getEIP1559GasFeeEstimates = getEIP1559GasFeeEstimates;\n this.signEthTx = signEthTx;\n this.provider = provider;\n this.txGasUtil = new TransactionGasUtil(this.provider, this.blockTracker);\n this.nonceTracker = new NonceTracker({\n provider,\n blockTracker,\n getConfirmedTransactions: this.getConfirmedTransactions.bind(this),\n getPendingTransactions: this.getSubmittedTransactions.bind(this), // nonce tracker should only care about submitted transactions\n });\n this.pendingTxTracker = new PendingTransactionTracker({\n provider,\n nonceTracker: this.nonceTracker,\n getPendingTransactions: this.getPendingTransactions.bind(this), // pending tx tracker should only care about submitted and approved transactions\n getConfirmedTransactions: this.getConfirmedTransactions.bind(this),\n approveTransaction: this.approveTransaction.bind(this),\n publishTransaction: (rawTx) => this.provider.request<[string], string>({ method: METHOD_TYPES.ETH_SEND_RAW_TRANSACTION, params: [rawTx] }),\n });\n this._setupListeners();\n }\n\n addTransactionUnapproved(txMeta: EthereumTransactionMeta) {\n this.addTransactionToState(txMeta);\n this.emit(`${txMeta.id}:unapproved`, txMeta);\n }\n\n async addNewUnapprovedTransaction(\n txParams: TransactionParams,\n req: JRPCRequest<TransactionParams> & UserRequestApprovalParams & { origin: string }\n ): Promise<string> {\n const txMeta = await this.createTransaction(txParams, req);\n return this.processApproval(txMeta);\n }\n\n async processApproval(txMeta: EthereumTransactionMeta): Promise<string> {\n return new Promise((resolve, reject) => {\n const handleFinished = (msg: EthereumTransactionMeta) => {\n if (msg.status === TransactionStatus.rejected) {\n return reject(providerErrors.userRejectedRequest(`Transaction Signature: User denied message signature`));\n }\n if (msg.status === TransactionStatus.failed) {\n return reject(rpcErrors.internal(`Transaction Signature: failed to sign message ${msg.error}`));\n }\n if (msg.status === TransactionStatus.submitted) {\n return resolve(msg.transactionHash);\n }\n\n return reject(rpcErrors.internal(`Transaction Signature: Unknown problem: ${JSON.stringify(txMeta.transaction)}`));\n };\n this.once(`${txMeta.id}:finished`, handleFinished);\n });\n }\n\n async approveTransaction(transactionID: string): Promise<void> {\n const txMeta = this.getTransaction(transactionID);\n if (this.inProcessOfSigning.has(transactionID)) {\n return;\n }\n this.inProcessOfSigning.add(transactionID);\n let nonceLock: NonceLockRes;\n try {\n this.setTxStatusApproved(transactionID);\n const fromAddress = txMeta.transaction.from;\n const { customNonceValue } = txMeta.transaction;\n const customNonceValueNumber = Number(customNonceValue);\n nonceLock = await this.nonceTracker.getNonceLock(fromAddress);\n // add nonce to txParams\n // if txMeta has previousGasParams then it is a retry at same nonce with\n // higher gas settings and therefor the nonce should not be recalculated\n const nonce = nonceLock.nextNonce;\n const customOrNonce = customNonceValueNumber === 0 ? customNonceValue : customNonceValue || nonce;\n txMeta.transaction.nonce = addHexPrefix(customOrNonce.toString(16));\n // add nonce debugging information to txMeta\n txMeta.nonceDetails = nonceLock.nonceDetails;\n this.updateTransactionInState(txMeta, \"transactions#approveTransaction\");\n // sign transaction\n const rawTx = await this.signTransaction(transactionID);\n await this.publishTransaction(transactionID, rawTx);\n nonceLock.releaseLock();\n } catch (err) {\n try {\n this.setTxStatusFailed(transactionID, err as Error);\n } catch (err2) {\n log.error(err2);\n }\n // must set transaction to submitted/failed before releasing lock\n if (nonceLock) {\n nonceLock.releaseLock();\n }\n // continue with error chain\n throw err;\n } finally {\n this.inProcessOfSigning.delete(transactionID);\n }\n }\n\n async signTransaction(txId: string): Promise<string> {\n const txMeta = this.getTransaction(txId);\n const chainId = this.getCurrentChainId();\n const type = isEIP1559Transaction(txMeta) ? TRANSACTION_ENVELOPE_TYPES.FEE_MARKET : TRANSACTION_ENVELOPE_TYPES.LEGACY;\n const txParams: TransactionParams = {\n ...txMeta.transaction,\n type,\n chainId,\n gasLimit: txMeta.transaction.gas,\n };\n const fromAddress = txParams.from;\n const common = await this.getCommonConfiguration(fromAddress);\n const unsignedEthTx = TransactionFactory.fromTxData(txParams, { common });\n const signedEthTx = await this.signEthTx<TypedTransaction, TypedTransaction>(unsignedEthTx, fromAddress);\n txMeta.r = addHexPrefix(signedEthTx.r.toString(16));\n txMeta.s = addHexPrefix(signedEthTx.s.toString(16));\n txMeta.v = addHexPrefix(signedEthTx.v.toString(16));\n this.updateTransactionInState(txMeta, \"transactions#signTransaction: add r, s, v values\");\n this.setTxStatusSigned(txId);\n const rawTx = addHexPrefix(Buffer.from(signedEthTx.serialize()).toString(\"hex\"));\n return rawTx;\n }\n\n async publishTransaction(txId: string, rawTx: string): Promise<void> {\n const txMeta = this.getTransaction(txId);\n txMeta.rawTransaction = rawTx;\n this.updateTransactionInState(txMeta, \"transactions#publishTransaction\");\n let txHash: string;\n try {\n txHash = await this.provider.request<[string], string>({ method: METHOD_TYPES.ETH_SEND_RAW_TRANSACTION, params: [rawTx] });\n } catch (error) {\n if ((error as Error).message.toLowerCase().includes(\"known transaction\")) {\n txHash = keccak256(addHexPrefix(rawTx));\n txHash = addHexPrefix(txHash);\n } else {\n throw error;\n }\n }\n this.setTxHash(txId, txHash);\n this.setTxStatusSubmitted(txId);\n }\n\n async confirmTransaction(params: TX_CONFIRMED_EVENT_TYPE): Promise<void> {\n const { txId, txReceipt } = params as TX_CONFIRMED_EVENT_TYPE & {\n baseFeePerGas?: string;\n blockTimestamp?: string;\n txReceipt: TransactionReceipt;\n };\n log.info(params, \"confirm params\");\n const txMeta = this.getTransaction(txId);\n if (!txMeta) return;\n try {\n txMeta.txReceipt = {\n ...txReceipt,\n };\n this.setTxStatusConfirmed(txId);\n this.markNonceDuplicatesDropped(txId);\n this.updateTransactionInState(txMeta, \"transactions#confirmTransaction - add txReceipt\");\n } catch (error) {\n log.error(error);\n }\n }\n\n cancelTransaction?(transactionID: string): Promise<void> {\n throw new Error(`Method not implemented. ${transactionID}`);\n }\n\n async getEIP1559Compatibility(fromAddress?: string) {\n const currentNetworkIsCompatible = await this._getCurrentNetworkEIP1559Compatibility();\n const fromAccountIsCompatible = await this._getCurrentAccountEIP1559Compatibility(fromAddress);\n return currentNetworkIsCompatible && fromAccountIsCompatible;\n }\n\n async addTransactionGasDefaults(txMeta: EthereumTransactionMeta) {\n let updateTxMeta = txMeta;\n try {\n updateTxMeta = await this.addTxGasDefaults(txMeta);\n } catch (error) {\n log.warn(error);\n updateTxMeta = this.getTransaction(txMeta.id);\n updateTxMeta.loadingDefaults = false;\n this.updateTransactionInState(txMeta, \"Failed to calculate gas defaults.\");\n throw error;\n }\n updateTxMeta.loadingDefaults = false;\n\n this.updateTransactionInState(updateTxMeta, \"Added new unapproved transaction.\");\n\n return updateTxMeta;\n }\n\n async addTxGasDefaults(txMeta: EthereumTransactionMeta) {\n const eip1559Compatibility = txMeta.transaction.type !== TRANSACTION_ENVELOPE_TYPES.LEGACY && (await this.getEIP1559Compatibility());\n\n const {\n gasPrice: defaultGasPrice,\n maxFeePerGas: defaultMaxFeePerGas,\n maxPriorityFeePerGas: defaultMaxPriorityFeePerGas,\n } = await this.getDefaultGasFees(txMeta, eip1559Compatibility);\n const { gasLimit: defaultGasLimit, simulationFails } = await this.getDefaultGasLimit(txMeta);\n\n txMeta = this.getTransaction(txMeta.id);\n if (simulationFails) {\n txMeta.simulationFails = simulationFails;\n }\n\n if (eip1559Compatibility) {\n // If the dapp has suggested a gas price, but no maxFeePerGas or maxPriorityFeePerGas\n // then we set maxFeePerGas and maxPriorityFeePerGas to the suggested gasPrice.\n if (txMeta.transaction.gasPrice && !txMeta.transaction.maxFeePerGas && !txMeta.transaction.maxPriorityFeePerGas) {\n txMeta.transaction.maxFeePerGas = txMeta.transaction.gasPrice;\n // If the dapp has suggested a gas price, but no maxFeePerGas or maxPriorityFeePerGas\n // then we set maxFeePerGas to the suggested gasPrice.\n\n txMeta.transaction.maxPriorityFeePerGas = bnLessThan(\n typeof defaultMaxPriorityFeePerGas === \"string\" ? stripHexPrefix(defaultMaxPriorityFeePerGas) : defaultMaxPriorityFeePerGas,\n typeof txMeta.transaction.gasPrice === \"string\" ? stripHexPrefix(txMeta.transaction.gasPrice) : txMeta.transaction.gasPrice\n )\n ? defaultMaxPriorityFeePerGas\n : txMeta.transaction.gasPrice;\n } else {\n if (defaultMaxFeePerGas && !txMeta.transaction.maxFeePerGas) {\n // If the dapp has not set the gasPrice or the maxFeePerGas, then we set maxFeePerGas\n // with the one returned by the gasFeeController, if that is available.\n txMeta.transaction.maxFeePerGas = defaultMaxFeePerGas;\n }\n\n if (defaultMaxPriorityFeePerGas && !txMeta.transaction.maxPriorityFeePerGas) {\n // If the dapp has not set the gasPrice or the maxPriorityFeePerGas, then we set maxPriorityFeePerGas\n // with the one returned by the gasFeeController, if that is available.\n txMeta.transaction.maxPriorityFeePerGas = defaultMaxPriorityFeePerGas;\n }\n\n if (defaultGasPrice && !txMeta.transaction.maxFeePerGas) {\n // If the dapp has not set the gasPrice or the maxFeePerGas, and no maxFeePerGas is available\n // from the gasFeeController, then we set maxFeePerGas to the defaultGasPrice, assuming it is\n // available.\n txMeta.transaction.maxFeePerGas = defaultGasPrice;\n }\n\n if (txMeta.transaction.maxFeePerGas && !txMeta.transaction.maxPriorityFeePerGas) {\n // If the dapp has not set the gasPrice or the maxPriorityFeePerGas, and no maxPriorityFeePerGas is\n // available from the gasFeeController, then we set maxPriorityFeePerGas to\n // txMeta.transaction.maxFeePerGas, which will either be the gasPrice from the controller, the maxFeePerGas\n // set by the dapp, or the maxFeePerGas from the controller.\n txMeta.transaction.maxPriorityFeePerGas = txMeta.transaction.maxFeePerGas;\n }\n }\n\n // We remove the gasPrice param entirely when on an eip1559 compatible network\n\n delete txMeta.transaction.gasPrice;\n } else {\n // We ensure that maxFeePerGas and maxPriorityFeePerGas are not in the transaction params\n // when not on a EIP1559 compatible network\n\n delete txMeta.transaction.maxPriorityFeePerGas;\n delete txMeta.transaction.maxFeePerGas;\n }\n\n // If we have gotten to this point, and none of gasPrice, maxPriorityFeePerGas or maxFeePerGas are\n // set on transaction, it means that either we are on a non-EIP1559 network and the dapp didn't suggest\n // a gas price, or we are on an EIP1559 network, and none of gasPrice, maxPriorityFeePerGas or maxFeePerGas\n // were available from either the dapp or the network.\n if (defaultGasPrice && !txMeta.transaction.gasPrice && !txMeta.transaction.maxPriorityFeePerGas && !txMeta.transaction.maxFeePerGas) {\n txMeta.transaction.gasPrice = defaultGasPrice;\n }\n\n if (defaultGasLimit && !txMeta.transaction.gas) {\n txMeta.transaction.gas = defaultGasLimit;\n }\n return txMeta;\n }\n\n setTxHash(txId: string, txHash: string) {\n // Add the tx hash to the persisted meta-tx object\n const txMeta = this.getTransaction(txId);\n txMeta.transactionHash = txHash;\n this.updateTransactionInState(txMeta, \"transactions#setTxHash\");\n }\n\n getUnapprovedTxCount = () => Object.keys(this.getUnapprovedTxList()).length;\n\n getPendingTxCount = (account?: string) => this.getPendingTransactions(account).length;\n\n async getDefaultGasFees(\n txMeta: EthereumTransactionMeta,\n eip1559Compatibility: boolean\n ): Promise<{ maxFeePerGas?: string; maxPriorityFeePerGas?: string; gasPrice?: string }> {\n if (\n (!eip1559Compatibility && txMeta.transaction.gasPrice) ||\n (eip1559Compatibility && txMeta.transaction.maxFeePerGas && txMeta.transaction.maxPriorityFeePerGas)\n ) {\n return {};\n }\n\n try {\n const { gasFeeEstimates, gasEstimateType } = await this.getEIP1559GasFeeEstimates();\n if (eip1559Compatibility && gasEstimateType === GAS_ESTIMATE_TYPES.FEE_MARKET) {\n // this is in dec gwei\n const { medium: { suggestedMaxPriorityFeePerGas, suggestedMaxFeePerGas } = {} } = <EthereumGasFeeEstimates>gasFeeEstimates;\n\n if (suggestedMaxPriorityFeePerGas && suggestedMaxFeePerGas) {\n return {\n // send to controller in hex wei\n maxFeePerGas: addHexPrefix(decGWEIToHexWEI(new BigNumber(suggestedMaxFeePerGas)).toString(16)),\n maxPriorityFeePerGas: addHexPrefix(decGWEIToHexWEI(new BigNumber(suggestedMaxPriorityFeePerGas)).toString(16)),\n };\n }\n } else if (gasEstimateType === GAS_ESTIMATE_TYPES.LEGACY) {\n const { medium } = <EthereumLegacyGasFeeEstimates>gasFeeEstimates;\n // The LEGACY type includes low, medium and high estimates of\n // gas price values.\n return {\n gasPrice: addHexPrefix(decGWEIToHexWEI(new BigNumber(medium)).toString(16)),\n };\n } else if (gasEstimateType === GAS_ESTIMATE_TYPES.ETH_GASPRICE) {\n const { gasPrice } = <{ gasPrice?: string }>gasFeeEstimates;\n // The ETH_GASPRICE type just includes a single gas price property,\n // which we can assume was retrieved from eth_gasPrice\n return {\n gasPrice: addHexPrefix(decGWEIToHexWEI(new BigNumber(gasPrice)).toString(16)),\n };\n }\n } catch (error) {\n log.error(error);\n }\n\n const gasPrice = await this.provider.request<never, string>({ method: METHOD_TYPES.ETH_GET_GAS_PRICE });\n\n return { gasPrice: gasPrice && addHexPrefix(gasPrice) };\n }\n\n private async getDefaultGasLimit(txMeta: EthereumTransactionMeta) {\n const chainId = this.getCurrentChainId();\n const customNetworkGasBuffer = CHAIN_ID_TO_GAS_LIMIT_BUFFER_MAP[chainId];\n const chainType = getChainType(chainId);\n\n if (txMeta.transaction.gas) {\n return {};\n }\n if (txMeta.transaction.to && txMeta.transactionCategory === TRANSACTION_TYPES.SENT_ETHER && chainType !== \"custom\" && !txMeta.transaction.data) {\n // This is a standard ether simple send, gas requirement is exactly 21k\n return { gasLimit: GAS_LIMITS.SIMPLE };\n }\n\n const { blockGasLimit, estimatedGasHex, simulationFails } = await this.txGasUtil.analyzeGasUsage(txMeta);\n\n // add additional gas buffer to our estimation for safety\n const gasLimit = this.txGasUtil.addGasBuffer(addHexPrefix(estimatedGasHex), blockGasLimit, customNetworkGasBuffer);\n return { gasLimit, simulationFails };\n }\n\n private async createTransaction(\n txParameters: TransactionParams,\n req: JRPCRequest<TransactionParams> & UserRequestApprovalParams\n ): Promise<EthereumTransactionMeta> {\n const normalizedTxParameters = normalizeTxParameters(txParameters);\n const eip1559Compatibility = await this.getEIP1559Compatibility(txParameters.from);\n validateTxParameters(normalizedTxParameters, eip1559Compatibility);\n\n let txMeta = this.generateTxMeta({\n transaction: normalizedTxParameters,\n origin: req.origin,\n });\n\n const { type, category, methodParams } = await determineTransactionType(txParameters, this.provider);\n txMeta.type = type;\n txMeta.transactionCategory = category;\n txMeta.methodParams = methodParams;\n txMeta.transaction.value = txMeta.transaction.value ? addHexPrefix(txMeta.transaction.value) : \"0x0\";\n this.emit(`${txMeta.id}:unapproved`, txMeta);\n txMeta = this.addTransactionToState(txMeta);\n txMeta = await this.addTransactionGasDefaults(txMeta);\n\n this.emit(TX_EVENTS.TX_UNAPPROVED, { txMeta, req });\n\n return txMeta;\n }\n\n private _setupListeners() {\n this.setupBlockTrackerListener();\n this.pendingTxTracker.on(TX_EVENTS.TX_WARNING, (data: TX_WARNING_EVENT_TYPE<TransactionParams, EthereumTransactionMeta>) => {\n this.updateTransactionInState(data.txMeta);\n });\n this.pendingTxTracker.on(TX_EVENTS.TX_DROPPED, (data: TX_DROPPED_EVENT_TYPE) => this.setTxStatusDropped(data.txId));\n this.pendingTxTracker.on(\n TX_EVENTS.TX_BLOCK_UPDATE,\n ({ txMeta, latestBlockNumber }: { txMeta: EthereumTransactionMeta; latestBlockNumber: string; txId: string }) => {\n if (!txMeta.firstRetryBlockNumber) {\n txMeta.firstRetryBlockNumber = latestBlockNumber;\n this.updateTransactionInState(txMeta);\n }\n }\n );\n this.pendingTxTracker.on(TX_EVENTS.TX_RETRY, (txMeta) => {\n if (!(\"retryCount\" in txMeta)) {\n txMeta.retryCount = 0;\n }\n txMeta.retryCount += 1;\n this.updateTransactionInState(txMeta);\n });\n\n this.pendingTxTracker.on(TX_EVENTS.TX_FAILED, (data: TX_FAILED_EVENT_TYPE) => {\n this.setTxStatusFailed(data.txId, data.error);\n });\n this.pendingTxTracker.on(TX_EVENTS.TX_CONFIRMED, (data: TX_CONFIRMED_EVENT_TYPE) => this.confirmTransaction(data));\n }\n\n private setupBlockTrackerListener() {\n let listenersAreActive = false;\n const latestBlockHandler = this.onLatestBlock.bind(this);\n this.on(TX_EVENTS.TX_STATUS_UPDATE, () => {\n const pendingTxs = this.getPendingTransactions();\n if (!listenersAreActive && pendingTxs.length > 0) {\n this.blockTracker.on(\"latest\", latestBlockHandler);\n listenersAreActive = true;\n } else if (listenersAreActive && !pendingTxs.length) {\n this.blockTracker.removeListener(\"latest\", latestBlockHandler);\n listenersAreActive = false;\n }\n });\n }\n\n private async onLatestBlock(blockNumber: EthereumBlock) {\n try {\n await this.pendingTxTracker.updatePendingTxs();\n } catch (error) {\n log.error(error);\n }\n\n try {\n await this.pendingTxTracker.resubmitPendingTxs(blockNumber);\n } catch (error) {\n log.error(error);\n }\n }\n\n private async getCommonConfiguration(fromAddress: string) {\n const { chainId, displayName } = this.getProviderConfig();\n const supportsEIP1559 = await this.getEIP1559Compatibility(fromAddress);\n const hardfork = supportsEIP1559 ? Hardfork.Paris : Hardfork.Berlin;\n return Common.custom({\n chainId: chainId === \"loading\" ? 0 : Number.parseInt(chainId, 16),\n defaultHardfork: hardfork,\n name: displayName,\n networkId: chainId === \"loading\" ? 0 : Number.parseInt(chainId, 16),\n });\n }\n\n private markNonceDuplicatesDropped(txId: string) {\n const txMeta = this.getTransaction(txId);\n const { nonce, from } = txMeta.transaction;\n const sameNonceTxs = this.getTransactions({ searchCriteria: { from, nonce } });\n if (!sameNonceTxs.length) return;\n sameNonceTxs.forEach((tx) => {\n if (tx.id === txId) return;\n this.updateTransactionInState(txMeta, \"transactions/pending-tx-tracker#event: tx:confirmed reference to confirmed txHash with same nonce\");\n if (tx.status !== TransactionStatus.failed) this.setTxStatusDropped(tx.id);\n });\n }\n}\n","export { default as AccountTrackerController } from \"./Account/AccountTrackerController\";\nexport { default as PollingBlockTracker } from \"./Block/PollingBlockTracker\";\nexport { default as CurrencyController } from \"./Currency/CurrencyController\";\nexport { default as GasFeeController } from \"./Gas/GasFeeController\";\nexport * from \"./Gas/IGasFeeController\";\nexport { default as KeyringController } from \"./Keyring/KeyringController\";\nexport * from \"./Message/AbstractMessageController\";\nexport * from \"./Message/DecryptMessageController\";\nexport * from \"./Message/EncryptionPublicKeyController\";\nexport * from \"./Message/MessageController\";\nexport * from \"./Message/PersonalMessageController\";\nexport * from \"./Message/TypedMessageController\";\nexport * from \"./Message/utils\";\nexport * from \"./Network/createEthereumMiddleware\";\nexport * from \"./Network/createJsonRpcClient\";\nexport { default as NetworkController } from \"./Network/NetworkController\";\nexport * from \"./Nfts/INftsController\";\nexport * from \"./Nfts/NftHandler\";\nexport * from \"./Nfts/NftsController\";\nexport { default as PreferencesController } from \"./Preferences/PreferencesController\";\nexport * from \"./Tokens/ITokensController\";\nexport * from \"./Tokens/TokenHandler\";\nexport * from \"./Tokens/TokenRatesController\";\nexport * from \"./Tokens/TokensController\";\nexport { default as NonceTracker } from \"./Transaction/NonceTracker\";\nexport { default as PendingTransactionTracker } from \"./Transaction/PendingTransactionTracker\";\nexport { default as TransactionController } from \"./Transaction/TransactionController\";\nexport { default as TransactionGasUtil } from \"./Transaction/TransactionGasUtil\";\nexport * from \"./Transaction/TransactionStateHistoryHelper\";\nexport { default as TransactionStateManager } from \"./Transaction/TransactionStateManager\";\nexport * from \"./Transaction/TransactionUtils\";\nexport * from \"./utils/constants\";\nexport * from \"./utils/helpers\";\nexport * from \"./utils/interfaces\";\n\n/**\n * Pending controllers\n * - Transaction Controllers\n// * - AA Controller\n */\n\n/**\n * Backend apis\n * - Preferences Controller\n */\n"],"names":["ecr20Abi","constant","inputs","name","outputs","type","payable","erc721Abi","stateMutability","erc1155Abi","internalType","singleBalanceCheckerAbi","LOCALHOST","CONTRACT_TYPE_ETH","CONTRACT_TYPE_ERC20","CONTRACT_TYPE_ERC721","CONTRACT_TYPE_ERC1155","ERC1155_INTERFACE_ID","ERC721_INTERFACE_ID","ERC721_METADATA_INTERFACE_ID","ERC721_ENUMERABLE_INTERFACE_ID","MAINNET_CHAIN_ID","POLYGON_CHAIN_ID","BSC_MAINNET_CHAIN_ID","AVALANCHE_MAINNET_CHAIN_ID","XDAI_CHAIN_ID","ARBITRUM_MAINNET_CHAIN_ID","OPTIMISM_MAINNET_CHAIN_ID","CELO_MAINNET_CHAIN_ID","GOERLI_CHAIN_ID","SEPOLIA_CHAIN_ID","POLYGON_MUMBAI_CHAIN_ID","BSC_TESTNET_CHAIN_ID","AVALANCHE_TESTNET_CHAIN_ID","ARBITRUM_TESTNET_CHAIN_ID","OPTIMISM_TESTNET_CHAIN_ID","SUPPORTED_NETWORKS","blockExplorerUrl","chainId","displayName","logo","rpcTarget","process","env","VITE_APP_INFURA_PROJECT_KEY","ticker","tickerName","isTestnet","METHOD_TYPES","GET_ACCOUNTS","ETH_TRANSACTION","ETH_REQUEST_ACCOUNTS","ETH_SEND_RAW_TRANSACTION","ETH_SIGN","ETH_SIGN_TYPED_DATA","ETH_SIGN_TYPED_DATA_V3","ETH_SIGN_TYPED_DATA_V4","PERSONAL_SIGN","ETH_GET_TRANSACTION_COUNT","ETH_GET_TRANSACTION_BY_HASH","ETH_GET_ENCRYPTION_PUBLIC_KEY","ETH_DECRYPT","ETH_GET_TRANSACTION_RECEIPT","WATCH_ASSET","ETH_GET_BLOCK_BY_HASH","ETH_GET_CODE","ETH_GET_GAS_PRICE","TRANSACTION_ENVELOPE_TYPES","LEGACY","ACCESS_LIST","FEE_MARKET","GAS_ESTIMATE_TYPES","ETH_GASPRICE","NONE","CHAIN_ID_TO_GAS_LIMIT_BUFFER_MAP","OLD_ERC721_LIST","erc20","symbol","decimals","TEST_CHAINS","ETHERSCAN_SUPPORTED_CHAINS","SIMPLEHASH_SUPPORTED_CHAINS","COINGECKO_SUPPORTED_CURRENCIES","Set","COINGECKO_PLATFORMS_CHAIN_CODE_MAP","platform","currency","MessageStatus","UNAPPROVED","SIGNED","PENDING","APPROVED","REJECTED","FAILED","MESSAGE_EVENTS","UNAPPROVED_MESSAGE","SINGLE_CALL_BALANCES_ADDRESSES","BaseController","Mutex","BrowserProvider","Contract","toQuantity","log","ZERO_ADDRESS","AccountTrackerController","constructor","_ref","config","state","provider","blockTracker","getIdentities","onPreferencesStateChange","getCurrentChainId","_defineProperty","defaultState","accounts","defaultConfig","_currentBlock","initialize","ethersProvider","on","block","configure","refresh","info","refreshNeeded","syncAccounts","addresses","Object","keys","existing","newAddresses","filter","address","indexOf","oldAddresses","isUpdated","forEach","balance","update","_objectSpread","releaseLock","mutex","acquire","currentBlock","_updateAccounts","error","length","_updateAccountsViaBalanceChecker","Promise","all","map","x","_updateAccount","request","method","params","deployedContractAddress","ethContract","result","balances","index","warn","addHexPrefix","isValidAddress","toChecksumAddress","ACTIVITY_ACTION_RECEIVE","ACTIVITY_ACTION_SEND","addressSlicer","formatSmallNumbers","significantDigits","TransactionStatus","BigNumber","getEtherScanHashLink","txHash","formatPastTx","lowerCaseSelectedAddress","_x$to","totalAmountString","Number","parseFloat","total_amount","type_name","currencyAmountString","currency_amount","selected_currency","finalObject","id","created_at","toString","date","Date","from","from_aa_address","slicedFrom","to","slicedTo","action","toLowerCase","totalAmount","currencyAmount","amount","status","etherscanLink","transaction_hash","network","networkType","ethRate","currencyUsed","type_image_link","transaction_category","contract_address","nonce","is_cancel","gas","gasPrice","getEthTxStatus","hash","submitted","confirmed","rejected","undefined","err","formatDate","inputDate","monthList","day","getDate","month","getMonth","year","getFullYear","formatTime","time","toTimeString","slice","idleTimeTracker","activityThresholdTime","isIdle","idleTimeout","resetTimer","window","clearTimeout","setTimeout","addEventListener","document","checkIfIdle","isAddressByChainId","_chainId","toChecksumAddressByChainId","GAS_LIMITS","SIMPLE","BASE_TOKEN_ESTIMATE","bnLessThan","a","b","lt","getIpfsEndpoint","path","sanitizeNftMetdataUrl","url","finalUri","startsWith","ipfsPath","split","getChainType","includes","BaseBlockTracker","timeout","DEFAULT_POLLING_INTERVAL","DEFAULT_RETRY_TIMEOUT","SEC","PollingBlockTracker","Error","pollingInterval","retryTimeout","setSkipCacheFlag","checkForLatestBlock","_updateLatestBlock","getLatestBlock","_start","_synchronize","catch","emit","_isRunning","newErr","stack","emitErr","latestBlock","_fetchLatestBlock","_newPotentialLatest","blockHash","idempotencyKey","number","timestamp","baseFeePerGas","gasLimit","message","BaseCurrencyController","get","CurrencyController","onNetworkChanged","commonDenomination","commonDenominatorPrice","networkState","providerConfig","toUpperCase","nativeCurrency","setNativeCurrency","updateConversionRate","setCommonDenomination","getCommonDenomination","setCommonDenominatorPrice","getCommonDenominatorPrice","scheduleConversionInterval","conversionInterval","clearInterval","setInterval","pollInterval","currentCurrency","getCurrentCurrency","getNativeCurrency","conversionRate","retrieveConversionRate","currentCurrencyRate","commonDenominationRate","setConversionRate","setConversionDate","Math","floor","now","fromCurrency","toCurrency","apiUrl","api","parsedResponse","stripHexPrefix","BN","BIG_NUMBER_WEI_MULTIPLIER","BIG_NUMBER_GWEI_MULTIPLIER","BIG_NUMBER_ETH_MULTIPLIER","toBigNumber","hex","n","dec","String","toNormalizedDenomination","WEI","bigNumber","div","GWEI","ETH","toSpecifiedDenomination","times","dp","ROUND_HALF_UP","baseChange","isValidBase","base","isInteger","converter","value","fromNumericBase","fromDenomination","toNumericBase","toDenomination","numberOfDecimals","invertConversionRate","roundDown","convertedValue","rate","ROUND_HALF_DOWN","ROUND_DOWN","conversionUtil","_ref2","getBigNumber","addCurrencies","options","arguments","aBase","bBase","conversionOptions","_objectWithoutProperties","_excluded","plus","subtractCurrencies","_excluded2","minus","multiplyCurrencies","multiplicandBase","multiplierBase","_excluded3","conversionGreaterThan","_ref3","_ref4","secondProps","assign","_objectDestructuringEmpty","firstProps","firstValue","secondValue","gt","conversionLessThan","_ref5","_ref6","conversionMax","_ref7","_ref8","firstIsGreater","conversionGTE","_ref9","_ref10","isGreaterThanOrEqualTo","conversionLTE","_ref11","_ref12","isLessThanOrEqualTo","toNegative","decGWEIToHexWEI","decGWEI","hexWEIToDecGWEI","normalizeGWEIDecimalNumbers","numberAsWEIHex","numberAsGWEI","fetchGasEstimates","estimates","normalizedEstimates","estimatedBaseFee","low","suggestedMaxPriorityFeePerGas","suggestedMaxFeePerGas","medium","high","fetchGasEstimatesViaEthFeeHistory","noOfBlocks","newestBlock","percentileValues","feeHistory","finalBaseFeePerGas","priorityFeeCalcs","reward","reduce","acc","curr","slow","average","fast","maxWaitTimeEstimate","minWaitTimeEstimate","fetchLegacyGasPriceEstimates","referrer","referrerPolicy","SafeGasPrice","ProposeGasPrice","FastGasPrice","fetchEthGasPriceEstimate","calculateTimeEstimate","maxPriorityFeePerGas","maxFeePerGas","gasFeeEstimates","maxPriorityFeePerGasInWEI","maxFeePerGasInWEI","estimatedBaseFeeInWEI","effectiveMaxPriorityFee","min","lowMaxPriorityFeeInWEI","mediumMaxPriorityFeeInWEI","highMaxPriorityFeeInWEI","lowerTimeBound","upperTimeBound","gte","eq","isHexString","cloneDeep","defaultFetchEthGasPriceEstimate","defaultFetchGasEstimates","defaultFetchGasEstimatesViaEthFeeHistory","defaultFetchLegacyGasPriceEstimates","GAS_FEE_API","LEGACY_GAS_PRICES_API_URL","GasFeeController","getNetworkIdentifier","getProvider","getCurrentNetworkLegacyGasAPICompatibility","getCurrentNetworkEIP1559Compatibility","getCurrentAccountEIP1559Compatibility","onNetworkStateChange","interval","legacyAPIEndpoint","EIP1559APIEndpoint","estimatedGasFeeTimeBounds","gasEstimateType","currentChainId","newChainId","resetPolling","stopPolling","getGasFeeEstimatesAndStartPolling","fetchGasFeeEstimates","_fetchGasFeeEstimateData","_startPolling","disconnectPoller","destroy","intervalId","resetState","isEIP1559Compatible","isLegacyGasAPICompatible","chainIdInt","parseInt","getEIP1559Compatibility","newState","replace","getTimeEstimate","_poll","_this$getCurrentAccou","_this$getCurrentAccou2","currentNetworkIsEIP1559Compatible","currentAccountIsEIP1559Compatible","call","bigIntToBytes","ecsign","concatSig","decrypt","getEncryptionPublicKey","personalSign","signTypedData","BaseKeyringController","SigningKey","Wallet","KeyringController","wallets","signTransaction","tx","txPayload","wallet","_getWalletForAccount","privKey","getBufferPrivateKey","privateKey","signedTx","sign","getAccounts","w","publicKey","importAccount","accountPrivateKey","hexPrivateKey","signingKey","existingWallet","find","removeAccount","newWallets","idx","findIndex","splice","stripped","Buffer","signMessage","data","messageSig","sig","v","r","s","signPersonalMessage","typedData","version","signEncryptionPublicKey","decryptMessage","encryptedData","account","providerErrors","rpcErrors","AbstractMessageController","unapprovedMessages","unapprovedMessagesCount","messages","getMessage","messageId","getAllMessages","setMetadata","metadata","updateMessage","getUnapprovedMessages","addMessage","push","saveMessageList","approveMessage","messageParams","setMessageStatus","prepMessageForSigning","waitForFinishStatus","msgParams","messageName","resolve","reject","handleFinished","msg","userRejectedRequest","internal","rawSig","JSON","stringify","once","bytesToHex","TYPED_MESSAGE_SCHEMA","typedSignatureHash","validate","hexRe","validateAddress","propertyName","validateSignMessageData","messageData","normalizeMessageData","match","e","validateTypedSignMessageDataV1","Array","isArray","validateTypedSignMessageDataV3V4","parse","validation","errors","domain","activeChainId","isNaN","validateEncryptionPublicKeyMessageData","validateDecryptedMessageData","parseDecryptMessageData","buffer","randomId","DecryptMessageController","processDecryptMessage","msgObject","cleanMsgParams","parsedData","addNewUnapprovedMessage","req","addUnapprovedMessage","origin","EncryptionPublicKeyController","processGetEncryptionPublicKey","MessageController","processSignMessage","PersonalMessageController","processPersonalSignMessage","SignTypedDataVersion","getMessageType","V1","V3","V4","TypedMessageController","PROVIDER_JRPC_METHODS","createAsyncMiddleware","createScaffoldMiddleware","mergeMiddleware","createGetAccountsMiddleware","response","next","createProcessTransactionMiddleware","processTransaction","createProcessEthSignMessage","processEthSignMessage","createProcessTypedMessage","processTypedMessage","createProcessTypedMessageV3","processTypedMessageV3","createProcessTypedMessageV4","processTypedMessageV4","createProcessPersonalMessage","processPersonalMessage","createPendingNonceMiddleware","getPendingNonce","blockReference","formatTxMetaForRpcResult","txMeta","txReceipt","transaction","transactionHash","accessList","formattedTxMeta","input","blockNumber","transactionIndex","createPendingTxMiddleware","getPendingTransactionByHash","createProcessEncryptionPublicKeyMiddleware","processEncryptionPublicKey","createProcessDecryptMessageMiddleware","createRequestAccountsMiddleware","requestAccounts","createEthereumMiddleware","providerHandlers","getProviderState","GET_PROVIDER_STATE","createFetchMiddleware","providerFromMiddleware","createChainIdMiddleware","res","end","createProviderConfigMiddleware","createJsonRpcClient","fetchMiddleware","blockProvider","networkMiddleware","createEventEmitterProxy","createSwappableProxy","JRPCEngine","providerFromEngine","NetworkController","properties","EIPS_1559","mainnet","getNetworkRPCUrl","initializeProvider","baseProviderHandlers","configureProvider","lookupNetwork","providerProxy","getBlockTracker","blockTrackerProxy","getProviderConfig","setProviderConfig","refreshNetwork","supportsEIP1559","networkChainId","_this$getProviderConf","rest","configureStandardProvider","setNetworkClient","ethereumMiddleware","engine","setProvider","setTarget","eventFilter","setMaxListeners","networkClient","NftHandler","contractAddress","contractImage","contractName","contractSymbol","nftStandard","contractDescription","contractFallbackLogo","contractSupply","getNftMetadata","userAddress","tokenInfo","returnNftItem","description","image","tokenBalance","tokenId","tokenURI","getCollectibleTokenURI","fetchNftBalance","object","finalTokenMetaUri","getContractMetadata","returnNft","standard","isSpecial","checkNftStandard","abi","contract","balanceOf","owner","ownerOf","prototype","hasOwnProperty","isErc721","contractSupportsInterface","isErc1155","interfaceId","supportsInterface","merge","DEFAULT_INTERVAL","NftsController","getCustomNfts","getSimpleHashNfts","selectedAddress","nfts","preferencesState","restartNftDetection","userSelectedAddress","userNfts","_this$state$nfts$this","_timer","detectNewNfts","refreshNftBalances","startNftDetection","nftsToDetect","customNfts","reducedNfts","newAsset","nft_id","customNftId","nft_address","assets","objToPush","nft_contract_standard","values","oldNfts","nonZeroNfts","simpleHashBalances","getNftBalancesUsingHandler","currentNetworkNfts","promiseSettledResult","allSettled","tokenInstance","contractData","assetData","y","z","nonZeroTokens","ACTIVITY_ACTION_TOPUP","BasePreferencesController","patch","post","remove","PreferencesController","signAuthMessage","defaultPreferences","formattedPastTransactions","fetchedPastTx","paymentTx","poll","_this$getAddressState","_mutex","_handle","storeSelectedAddress","getAddressState","jwtToken","sync","initPreferences","calledFromEmbed","userInfo","rehydrate","locale","init","email","aggregateVerifier","verifier","verifierId","userExists","accountState","createUser","selectedCurrency","theme","storeUserLogin","getSelectedAddress","user","getUser","default_currency","defaultCurrency","contacts","public_address","userPublicAddress","default_public_address","defaultPublicAddress","customNetworks","customTokens","updateState","getWalletOrders","getTopUpOrders","then","walletTx","calculatePaymentTx","calculatePastTx","patchNewTx","_this$getAddressState2","formattedTx","storePastTx","duplicateIndex","finalTx","cancelTxCalculate","postPastTx","recalculatePastTx","refetchEtherscanTx","_this$getAddressState3","fetchEtherscanTx","parameters","URL","key","searchParams","append","href","headers","success","getEtherScanTokens","pathname","getCustomTokens","_this$getAddressState4","_this$getAddressState5","_this$getAddressState6","_this$getAddressState7","addCustomNetwork","payload","network_name","rpc_url","chain_id","block_explorer_url","is_test_net","useAPIKey","deleteCustomNetwork","editCustomNetwork","txs","accumulator","lowerCaseAction","toDateString","blockExplorerLink","pastTx","pendingTx","pendingTxPromises","resolvedTxStatuses","element","entries","patchPastTx","updated_at","toISOString","nonceMap","latestTxs","sort","aDate","getTime","bDate","latestCancelTx","hasCancel","cancelled","cancelling","cancelDateInitiated","cancelGas","cancelGasPrice","TokenHandler","getSymbol","getDecimals","getName","getUserBalance","DEFAULT_CURRENCY","TokenRatesController","onTokensStateChange","contractExchangeRates","tokensState","tokens","currentUserTokens","updateExchangeRates","chainCodes","newContractExchangeRates","token","tokenAddress","fetchExchangeRates","contractAddresses","isNativeCurrencySupported","has","join","currencyResponse","currencyApi","getObjectFromArrayBasedonKey","oldArray","xkey","mergeTokenArrays","newArray","oldMap","newMap","finalArr","isEtherScan","TokensController","restartTokenDetection","userTokens","_this$state$tokens$th","detectNewTokens","refreshTokenBalances","startTokenDetection","networkConfig","isErc20","token_address","token_name","token_symbol","customTokenId","oldTokens","tokenAddresses","etherscanBalances","currentSingleCallAddress","_","getTokenBalancesUsingHandler","currentNetworkTokens","NonceTracker","getPendingTransactions","getConfirmedTransactions","lockMap","getGlobalLock","globalMutex","_lookupMutex","getNonceLock","_globalMutexFree","_takeMutex","nonceDetails","networkNonceResult","_getNetworkNextNonce","highestLocallyConfirmed","_getHighestLocallyConfirmed","nextNetworkNonce","highestSuggested","max","pendingTxs","localNonceResult","_getHighestContinuousFrom","local","nextNonce","lockId","baseCountStr","baseCount","details","confirmedTransactions","highest","_getHighestNonce","txList","nonces","highestNonce","apply","startPoint","TX_EVENTS","SafeEventEmitter","PendingTransactionTracker","nonceTracker","approveTransaction","publishTransaction","droppedBlocksBufferByHash","Map","updatePendingTxs","nonceGlobalLock","_checkPendingTx","resubmitPendingTxs","pending","_resubmitTx","_value","errorMessage","isKnownTx","warning","TX_WARNING","txId","latestBlockNumber","firstRetryBlockNumber","TX_BLOCK_UPDATE","txBlockDistance","retryCount","rawTx","TX_RETRY","foundTx","noTxHashError","TX_FAILED","_checkIfNonceIsTaken","TX_DROPPED","transactionReceipt","TX_CONFIRMED","blockTimestamp","_checkIfTxWasDropped","networkNextNonce","set","currentBlockBuffer","DROPPED_BUFFER_COUNT","delete","completed","some","otherMeta","TransactionGasUtil","analyzeGasUsage","blockGasLimitBN","saferGasLimitBN","mul","estimatedGasHex","simulationFails","estimateTxGas","reason","errorKey","debug","blockGasLimit","addGasBuffer","initialGasLimitHex","blockGasLimitHex","multiplier","initialGasLimitBn","blockGasLimitBn","upperGasLimitBn","muln","bufferedGasLimitBn","txParams","jsonDiffer","generateHistoryEntry","previousState","note","entry","compare","replayHistory","_shortHistory","shortHistory","val","applyPatch","newDocument","snapshotFromTxMeta","shallow","history","TRANSACTION_TYPES","Interface","erc20Interface","erc721Interface","erc1155Interface","normalizers","LowerCase","customNonceValue","normalizeTxParameters","txParameters","lowerCase","normalizedTxParameters","currentKey","transactionMatchesNetwork","isEIP1559Transaction","_transaction$transact","_transaction$transact2","isLegacyTransaction","ensureMutuallyExclusiveFieldsNotProvided","fieldBeingValidated","mutuallyExclusiveField","invalidParams","ensureFieldIsString","field","ensureProperTransactionEnvelopeTypeProvided","validateFrom","validateRecipient","validateTxParameters","eip1559Compatibility","normalizeAndValidateTxParams","normalizedTxParams","getFinalStates","failed","dropped","parseStandardTokenTransactionData","txDesc","parseTransaction","methodParams","args","toArray","readAddressAsContract","contractCode","isContractAddress","determineTransactionType","DEPLOY_CONTRACT","resultCode","valueExists","tokenMethodName","TOKEN_METHOD_APPROVE","TOKEN_METHOD_TRANSFER","TOKEN_METHOD_TRANSFER_FROM","COLLECTIBLE_METHOD_SAFE_TRANSFER_FROM","SET_APPROVAL_FOR_ALL","_name","CONTRACT_INTERACTION","SENT_ETHER","category","getCodeResponse","BaseTransactionStateManager","keyBy","mapValues","omitBy","pickBy","sortBy","TransactionStateManager","generateTxMeta","opts","dappSuggestedGasFees","unapproved","loadingDefaults","addTransactionToState","removeAllListeners","snapshot","transactions","getTransactions","filterToCurrentNetwork","txHistoryLimit","nonceNetworkSet","txsToDelete","reverse","size","add","_deleteTransactions","_addTransactionsToState","wipeTransactions","transactionMatch","searchCriteria","initialList","limit","predicateMethods","predicate","transactionsToFilter","filteredTransactions","transactionMatches","i","unshift","getApprovedTransactions","approved","getSubmittedTransactions","getUnapprovedTxList","updateTransactionInState","currentState","updateTransaction","_setTransactionStatus","isFinalStep","getTransaction","TX_STATUS_UPDATE","isFinalState","Common","Hardfork","TransactionFactory","keccak256","TransactionController","signEthTx","getEIP1559GasFeeEstimates","_getCurrentNetworkEIP1559Compatibility","_getCurrentAccountEIP1559Compatibility","txGasUtil","bind","pendingTxTracker","_setupListeners","addTransactionUnapproved","addNewUnapprovedTransaction","createTransaction","processApproval","transactionID","inProcessOfSigning","nonceLock","setTxStatusApproved","fromAddress","customNonceValueNumber","customOrNonce","setTxStatusFailed","err2","common","getCommonConfiguration","unsignedEthTx","fromTxData","signedEthTx","setTxStatusSigned","serialize","rawTransaction","setTxHash","setTxStatusSubmitted","confirmTransaction","setTxStatusConfirmed","markNonceDuplicatesDropped","cancelTransaction","currentNetworkIsCompatible","fromAccountIsCompatible","addTransactionGasDefaults","updateTxMeta","addTxGasDefaults","defaultGasPrice","defaultMaxFeePerGas","defaultMaxPriorityFeePerGas","getDefaultGasFees","defaultGasLimit","getDefaultGasLimit","customNetworkGasBuffer","chainType","transactionCategory","TX_UNAPPROVED","setupBlockTrackerListener","setTxStatusDropped","listenersAreActive","latestBlockHandler","onLatestBlock","removeListener","hardfork","Paris","Berlin","custom","defaultHardfork","networkId","sameNonceTxs","default"],"sourceRoot":""}
1
+ {"version":3,"file":"ethereumControllers.cjs.js","mappings":"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","sources":["webpack://@toruslabs/ethereum-controllers/webpack/bootstrap","webpack://@toruslabs/ethereum-controllers/webpack/runtime/compat get default export","webpack://@toruslabs/ethereum-controllers/webpack/runtime/define property getters","webpack://@toruslabs/ethereum-controllers/webpack/runtime/hasOwnProperty shorthand","webpack://@toruslabs/ethereum-controllers/webpack/runtime/make namespace object","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"@babel/runtime/helpers/objectSpread2\"","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"@babel/runtime/helpers/defineProperty\"","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"@toruslabs/base-controllers\"","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"async-mutex\"","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"ethers\"","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"loglevel\"","webpack://@toruslabs/ethereum-controllers/./src/utils/abis.ts","webpack://@toruslabs/ethereum-controllers/./src/utils/constants.ts","webpack://@toruslabs/ethereum-controllers/./src/utils/contractAddresses.ts","webpack://@toruslabs/ethereum-controllers/./src/Account/AccountTrackerController.ts","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"@ethereumjs/util\"","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"bignumber.js\"","webpack://@toruslabs/ethereum-controllers/./src/utils/helpers.ts","webpack://@toruslabs/ethereum-controllers/./src/Block/PollingBlockTracker.ts","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"@toruslabs/http-helpers\"","webpack://@toruslabs/ethereum-controllers/./src/Currency/CurrencyController.ts","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"lodash\"","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"@babel/runtime/helpers/objectDestructuringEmpty\"","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"@babel/runtime/helpers/objectWithoutProperties\"","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"bn.js\"","webpack://@toruslabs/ethereum-controllers/./src/utils/conversionUtils.ts","webpack://@toruslabs/ethereum-controllers/./src/Gas/gasUtil.ts","webpack://@toruslabs/ethereum-controllers/./src/Gas/GasFeeController.ts","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"@metamask/eth-sig-util\"","webpack://@toruslabs/ethereum-controllers/./src/Keyring/KeyringController.ts","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"@metamask/rpc-errors\"","webpack://@toruslabs/ethereum-controllers/./src/Message/AbstractMessageController.ts","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"jsonschema\"","webpack://@toruslabs/ethereum-controllers/./src/Message/utils.ts","webpack://@toruslabs/ethereum-controllers/./src/Message/DecryptMessageController.ts","webpack://@toruslabs/ethereum-controllers/./src/Message/EncryptionPublicKeyController.ts","webpack://@toruslabs/ethereum-controllers/./src/Message/MessageController.ts","webpack://@toruslabs/ethereum-controllers/./src/Message/PersonalMessageController.ts","webpack://@toruslabs/ethereum-controllers/./src/Message/TypedMessageController.ts","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"@toruslabs/openlogin-jrpc\"","webpack://@toruslabs/ethereum-controllers/./src/Network/createEthereumMiddleware.ts","webpack://@toruslabs/ethereum-controllers/./src/Network/createJsonRpcClient.ts","webpack://@toruslabs/ethereum-controllers/./src/Network/NetworkController.ts","webpack://@toruslabs/ethereum-controllers/./src/Nfts/NftHandler.ts","webpack://@toruslabs/ethereum-controllers/./src/Nfts/NftsController.ts","webpack://@toruslabs/ethereum-controllers/./src/Preferences/PreferencesController.ts","webpack://@toruslabs/ethereum-controllers/./src/Tokens/TokenHandler.ts","webpack://@toruslabs/ethereum-controllers/./src/Tokens/TokenRatesController.ts","webpack://@toruslabs/ethereum-controllers/./src/Tokens/TokensController.ts","webpack://@toruslabs/ethereum-controllers/./src/Transaction/NonceTracker.ts","webpack://@toruslabs/ethereum-controllers/./src/Transaction/PendingTransactionTracker.ts","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"@ethereumjs/common\"","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"@ethereumjs/tx\"","webpack://@toruslabs/ethereum-controllers/./src/Transaction/TransactionGasUtil.ts","webpack://@toruslabs/ethereum-controllers/external commonjs2 \"fast-json-patch\"","webpack://@toruslabs/ethereum-controllers/./src/Transaction/TransactionStateHistoryHelper.ts","webpack://@toruslabs/ethereum-controllers/./src/Transaction/TransactionUtils.ts","webpack://@toruslabs/ethereum-controllers/./src/Transaction/TransactionStateManager.ts","webpack://@toruslabs/ethereum-controllers/./src/Transaction/TransactionController.ts","webpack://@toruslabs/ethereum-controllers/./src/index.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@babel/runtime/helpers/objectSpread2\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@babel/runtime/helpers/defineProperty\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@toruslabs/base-controllers\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"async-mutex\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"ethers\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"loglevel\");","export const ecr20Abi = [\n {\n constant: true,\n inputs: [],\n name: \"name\",\n outputs: [\n {\n name: \"\",\n type: \"string\",\n },\n ],\n payable: false,\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n name: \"_spender\",\n type: \"address\",\n },\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n name: \"success\",\n type: \"bool\",\n },\n ],\n payable: false,\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n payable: false,\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n name: \"_from\",\n type: \"address\",\n },\n {\n name: \"_to\",\n type: \"address\",\n },\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n name: \"success\",\n type: \"bool\",\n },\n ],\n payable: false,\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n payable: false,\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n name: \"_owner\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n name: \"balance\",\n type: \"uint256\",\n },\n ],\n payable: false,\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n name: \"\",\n type: \"string\",\n },\n ],\n payable: false,\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n name: \"_to\",\n type: \"address\",\n },\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n name: \"success\",\n type: \"bool\",\n },\n ],\n payable: false,\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n name: \"_spender\",\n type: \"address\",\n },\n {\n name: \"_value\",\n type: \"uint256\",\n },\n {\n name: \"_extraData\",\n type: \"bytes\",\n },\n ],\n name: \"approveAndCall\",\n outputs: [\n {\n name: \"success\",\n type: \"bool\",\n },\n ],\n payable: false,\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n name: \"_owner\",\n type: \"address\",\n },\n {\n name: \"_spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n name: \"remaining\",\n type: \"uint256\",\n },\n ],\n payable: false,\n type: \"function\",\n },\n {\n inputs: [\n {\n name: \"_initialAmount\",\n type: \"uint256\",\n },\n {\n name: \"_tokenName\",\n type: \"string\",\n },\n {\n name: \"_decimalUnits\",\n type: \"uint8\",\n },\n {\n name: \"_tokenSymbol\",\n type: \"string\",\n },\n ],\n type: \"constructor\",\n },\n {\n payable: false,\n type: \"fallback\",\n },\n];\n\nexport const erc721Abi = [\n {\n constant: true,\n inputs: [\n {\n name: \"interfaceID\",\n type: \"bytes4\",\n },\n ],\n name: \"supportsInterface\",\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"name\",\n outputs: [\n {\n name: \"_name\",\n type: \"string\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n name: \"_tokenId\",\n type: \"uint256\",\n },\n ],\n name: \"getApproved\",\n outputs: [\n {\n name: \"\",\n type: \"address\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n name: \"_approved\",\n type: \"address\",\n },\n {\n name: \"_tokenId\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [],\n payable: true,\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n name: \"_from\",\n type: \"address\",\n },\n {\n name: \"_to\",\n type: \"address\",\n },\n {\n name: \"_tokenId\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [],\n payable: true,\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n name: \"_owner\",\n type: \"address\",\n },\n {\n name: \"_index\",\n type: \"uint256\",\n },\n ],\n name: \"tokenOfOwnerByIndex\",\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n name: \"_from\",\n type: \"address\",\n },\n {\n name: \"_to\",\n type: \"address\",\n },\n {\n name: \"_tokenId\",\n type: \"uint256\",\n },\n ],\n name: \"safeTransferFrom\",\n outputs: [],\n payable: true,\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n name: \"_index\",\n type: \"uint256\",\n },\n ],\n name: \"tokenByIndex\",\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n name: \"_tokenId\",\n type: \"uint256\",\n },\n ],\n name: \"ownerOf\",\n outputs: [\n {\n name: \"\",\n type: \"address\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n name: \"_owner\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n name: \"_symbol\",\n type: \"string\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n name: \"_tokenId\",\n type: \"uint256\",\n },\n ],\n name: \"tokenURI\",\n outputs: [\n {\n name: \"\",\n type: \"string\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n];\n\nexport const erc1155Abi = [\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_owner\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"_id\",\n type: \"uint256\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"_owners\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"_ids\",\n type: \"uint256[]\",\n },\n ],\n name: \"balanceOfBatch\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"_operator\",\n type: \"address\",\n },\n ],\n name: \"isApprovedForAll\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"isOperator\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"_to\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"_id\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"_amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"_data\",\n type: \"bytes\",\n },\n ],\n name: \"safeTransferFrom\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_operator\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"_approved\",\n type: \"bool\",\n },\n ],\n name: \"setApprovalForAll\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"_interfaceID\",\n type: \"bytes4\",\n },\n ],\n name: \"supportsInterface\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"_id\",\n type: \"uint256\",\n },\n ],\n name: \"uri\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n];\n\nexport const singleBalanceCheckerAbi = [\n {\n payable: true,\n stateMutability: \"payable\",\n type: \"fallback\",\n },\n {\n constant: true,\n inputs: [\n {\n name: \"user\",\n type: \"address\",\n },\n {\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"tokenBalance\",\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n name: \"users\",\n type: \"address[]\",\n },\n {\n name: \"tokens\",\n type: \"address[]\",\n },\n ],\n name: \"balances\",\n outputs: [\n {\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n];\n","import { EthereumProviderConfig } from \"./interfaces\";\n\nexport const LOCALHOST = \"localhost\";\n\nexport const CONTRACT_TYPE_ETH = \"eth\";\nexport const CONTRACT_TYPE_ERC20 = \"erc20\";\nexport const CONTRACT_TYPE_ERC721 = \"erc721\";\nexport const CONTRACT_TYPE_ERC1155 = \"erc1155\";\n\nexport const ERC1155_INTERFACE_ID = \"0xd9b67a26\";\nexport const ERC721_INTERFACE_ID = \"0x80ac58cd\";\nexport const ERC721_METADATA_INTERFACE_ID = \"0x5b5e139f\";\nexport const ERC721_ENUMERABLE_INTERFACE_ID = \"0x780e9d63\";\n\nexport const MAINNET_CHAIN_ID = \"0x1\";\nexport const POLYGON_CHAIN_ID = \"0x89\";\nexport const BSC_MAINNET_CHAIN_ID = \"0x38\";\nexport const AVALANCHE_MAINNET_CHAIN_ID = \"0xa86a\";\nexport const XDAI_CHAIN_ID = \"0x64\";\nexport const ARBITRUM_MAINNET_CHAIN_ID = \"0xa4b1\";\nexport const OPTIMISM_MAINNET_CHAIN_ID = \"0xa\";\nexport const CELO_MAINNET_CHAIN_ID = \"0xa4ec\";\n\nexport const GOERLI_CHAIN_ID = \"0x5\";\nexport const SEPOLIA_CHAIN_ID = \"0xaa36a7\";\nexport const POLYGON_MUMBAI_CHAIN_ID = \"0x13881\";\nexport const BSC_TESTNET_CHAIN_ID = \"0x61\";\nexport const AVALANCHE_TESTNET_CHAIN_ID = \"0xa869\";\nexport const ARBITRUM_TESTNET_CHAIN_ID = \"0x66eeb\";\nexport const OPTIMISM_TESTNET_CHAIN_ID = \"0x1a4\";\n\nexport const SUPPORTED_NETWORKS: Record<string, EthereumProviderConfig> = {\n [MAINNET_CHAIN_ID]: {\n blockExplorerUrl: \"https://etherscan.io\",\n chainId: MAINNET_CHAIN_ID,\n displayName: \"Main Ethereum Network\",\n logo: \"eth.svg\",\n rpcTarget: `https://mainnet.infura.io/v3/${process.env.VITE_APP_INFURA_PROJECT_KEY}`,\n ticker: \"ETH\",\n tickerName: \"Ethereum\",\n },\n [POLYGON_CHAIN_ID]: {\n blockExplorerUrl: \"https://polygonscan.com\",\n chainId: POLYGON_CHAIN_ID,\n displayName: \"Polygon Mainnet\",\n logo: \"matic-network-logo.svg\",\n rpcTarget: `https://polygon-mainnet.infura.io/v3/${process.env.VITE_APP_INFURA_PROJECT_KEY}`,\n ticker: \"MATIC\",\n tickerName: \"Matic Network Token\",\n },\n [BSC_MAINNET_CHAIN_ID]: {\n blockExplorerUrl: \"https://bscscan.com\",\n chainId: BSC_MAINNET_CHAIN_ID,\n displayName: \"Binance Smart Chain Mainnet\",\n logo: \"bnb.png\",\n rpcTarget: `https://bsc-dataseed.binance.org`,\n ticker: \"BNB\",\n tickerName: \"Binance Coin\",\n },\n [AVALANCHE_MAINNET_CHAIN_ID]: {\n blockExplorerUrl: \"https://snowtrace.io\",\n chainId: AVALANCHE_MAINNET_CHAIN_ID,\n displayName: \"Avalanche Mainnet C-Chain\",\n logo: \"avax.svg\",\n rpcTarget: `https://api.avax.network/ext/bc/C/rpc`,\n ticker: \"AVAX\",\n tickerName: \"Avalanche\",\n },\n [OPTIMISM_MAINNET_CHAIN_ID]: {\n blockExplorerUrl: \"https://optimistic.etherscan.io\",\n chainId: OPTIMISM_MAINNET_CHAIN_ID,\n displayName: \"Optimism\",\n logo: \"optimism.svg\",\n rpcTarget: `https://optimism-mainnet.infura.io/v3/${process.env.VITE_APP_INFURA_PROJECT_KEY}`,\n ticker: \"ETH\",\n tickerName: \"Ethereum\",\n },\n [CELO_MAINNET_CHAIN_ID]: {\n blockExplorerUrl: \"https://explorer.celo.org\",\n chainId: CELO_MAINNET_CHAIN_ID,\n displayName: \"Celo Mainnet\",\n logo: \"celo.svg\",\n rpcTarget: `https://celo-mainnet.infura.io/v3/${process.env.VITE_APP_INFURA_PROJECT_KEY}`,\n ticker: \"CELO\",\n tickerName: \"Celo\",\n },\n [ARBITRUM_MAINNET_CHAIN_ID]: {\n blockExplorerUrl: \"https://arbiscan.io\",\n chainId: ARBITRUM_MAINNET_CHAIN_ID,\n displayName: \"Arbitrum One\",\n logo: \"eth.svg\",\n rpcTarget: `https://arbitrum-mainnet.infura.io/v3/${process.env.VITE_APP_INFURA_PROJECT_KEY}`,\n ticker: \"ETH\",\n tickerName: \"Ethereum\",\n },\n [XDAI_CHAIN_ID]: {\n blockExplorerUrl: \"https://blockscout.com/poa/xdai\",\n chainId: XDAI_CHAIN_ID,\n displayName: \"xDai\",\n logo: \"xdai.svg\",\n rpcTarget: `https://rpc.gnosischain.com`,\n ticker: \"DAI\",\n tickerName: \"xDai Network Token\",\n },\n [GOERLI_CHAIN_ID]: {\n blockExplorerUrl: \"https://goerli.etherscan.io\",\n chainId: GOERLI_CHAIN_ID,\n displayName: \"Goerli Test Network\",\n logo: \"eth.svg\",\n rpcTarget: `https://goerli.infura.io/v3/${process.env.VITE_APP_INFURA_PROJECT_KEY}`,\n ticker: \"ETH\",\n tickerName: \"Ethereum\",\n isTestnet: true,\n },\n [SEPOLIA_CHAIN_ID]: {\n blockExplorerUrl: \"https://sepolia.etherscan.io\",\n chainId: SEPOLIA_CHAIN_ID,\n displayName: \"Sepolia Test Network\",\n logo: \"eth.svg\",\n rpcTarget: `https://sepolia.infura.io/v3/${process.env.VITE_APP_INFURA_PROJECT_KEY}`,\n ticker: \"ETH\",\n tickerName: \"Ethereum\",\n isTestnet: true,\n },\n [POLYGON_MUMBAI_CHAIN_ID]: {\n blockExplorerUrl: \"https://mumbai.polygonscan.com\",\n chainId: POLYGON_MUMBAI_CHAIN_ID,\n displayName: \"Polygon Mumbai\",\n logo: \"matic-network-logo.svg\",\n rpcTarget: `https://polygon-mumbai.infura.io/v3/${process.env.VITE_APP_INFURA_PROJECT_KEY}`,\n ticker: \"MATIC\",\n tickerName: \"Matic Network Token\",\n isTestnet: true,\n },\n [BSC_TESTNET_CHAIN_ID]: {\n blockExplorerUrl: \"https://testnet.bscscan.com\",\n chainId: BSC_TESTNET_CHAIN_ID,\n displayName: \"Binance Smart Chain Testnet\",\n logo: \"bnb.png\",\n rpcTarget: `https://data-seed-prebsc-1-s1.binance.org:8545`,\n ticker: \"BNB\",\n tickerName: \"Binance Coin\",\n isTestnet: true,\n },\n [AVALANCHE_TESTNET_CHAIN_ID]: {\n blockExplorerUrl: \"https://testnet.snowtrace.io\",\n chainId: AVALANCHE_TESTNET_CHAIN_ID,\n displayName: \"Avalanche Testnet C-Chain\",\n logo: \"avax.png\",\n rpcTarget: `https://api.avax-test.network/ext/bc/C/rpc`,\n ticker: \"AVAX\",\n tickerName: \"Avalanche\",\n isTestnet: true,\n },\n [ARBITRUM_TESTNET_CHAIN_ID]: {\n blockExplorerUrl: \"https://testnet.arbiscan.io\",\n chainId: ARBITRUM_TESTNET_CHAIN_ID,\n displayName: \"Arbitrum Goerli\",\n logo: \"eth.svg\",\n rpcTarget: `https://arbitrum-rinkeby.infura.io/v3/${process.env.VITE_APP_INFURA_PROJECT_KEY}`,\n ticker: \"ETH\",\n tickerName: \"Ethereum\",\n isTestnet: true,\n },\n [OPTIMISM_TESTNET_CHAIN_ID]: {\n blockExplorerUrl: \"https://goerli-optimism.etherscan.io\",\n chainId: OPTIMISM_TESTNET_CHAIN_ID,\n displayName: \"Optimism Goerli\",\n logo: \"optimism.svg\",\n rpcTarget: `https://optimism-goerli.infura.io/v3/${process.env.VITE_APP_INFURA_PROJECT_KEY}`,\n ticker: \"ETH\",\n tickerName: \"Ethereum\",\n isTestnet: true,\n },\n};\n\nexport const METHOD_TYPES = {\n GET_ACCOUNTS: \"eth_accounts\",\n ETH_TRANSACTION: \"eth_sendTransaction\",\n ETH_REQUEST_ACCOUNTS: \"eth_requestAccounts\",\n ETH_SEND_RAW_TRANSACTION: \"eth_sendRawTransaction\",\n ETH_SIGN: \"eth_sign\",\n ETH_SIGN_TYPED_DATA: \"eth_signTypedData\",\n ETH_SIGN_TYPED_DATA_V3: \"eth_signTypedData_v3\",\n ETH_SIGN_TYPED_DATA_V4: \"eth_signTypedData_v4\",\n PERSONAL_SIGN: \"personal_sign\",\n ETH_GET_TRANSACTION_COUNT: \"eth_getTransactionCount\",\n ETH_GET_TRANSACTION_BY_HASH: \"eth_getTransactionByHash\",\n ETH_GET_ENCRYPTION_PUBLIC_KEY: \"eth_getEncryptionPublicKey\",\n ETH_DECRYPT: \"eth_decrypt\",\n ETH_GET_TRANSACTION_RECEIPT: \"eth_getTransactionReceipt\",\n WATCH_ASSET: \"wallet_watchAsset\",\n ETH_GET_BLOCK_BY_HASH: \"eth_getBlockByHash\",\n ETH_GET_CODE: \"eth_getCode\",\n ETH_GET_GAS_PRICE: \"eth_gasPrice\",\n} as const;\n\nexport const TRANSACTION_ENVELOPE_TYPES = {\n LEGACY: \"0x0\",\n ACCESS_LIST: \"0x1\",\n FEE_MARKET: \"0x2\",\n} as const;\n\nexport const GAS_ESTIMATE_TYPES = {\n // Fee Market describes the way gas is set after the london hardfork, and was\n // defined by EIP-1559.\n FEE_MARKET: \"fee-market\",\n // Legacy describes gasPrice estimates from before london hardfork, when the\n // user is connected to mainnet and are presented with fast/average/slow\n // estimate levels to choose from.\n LEGACY: \"legacy\",\n // EthGasPrice describes a gasPrice estimate received from eth_gasPrice. Post\n // london this value should only be used for legacy type transactions when on\n // networks that support EIP-1559. This type of estimate is the most accurate\n // to display on custom networks that don't support EIP-1559.\n ETH_GASPRICE: \"eth_gasPrice\",\n // NoEstimate describes the state of the controller before receiving its first\n // estimate.\n NONE: \"none\",\n} as const;\n\n// https://help.optimism.io/hc/en-us/articles/4411895794715-Transaction-fees\nexport const CHAIN_ID_TO_GAS_LIMIT_BUFFER_MAP: Record<string, number> = {\n [OPTIMISM_MAINNET_CHAIN_ID]: 1,\n [OPTIMISM_TESTNET_CHAIN_ID]: 1,\n};\n\nexport const OLD_ERC721_LIST: Record<string, { name?: string; logo?: string; erc20?: boolean; symbol?: string; decimals?: number }> = {\n \"0x06012c8cf97bead5deae237070f9587f8e7a266d\": {\n name: \"Cryptokitties\",\n logo: \"dapp-cryptokitty.svg\",\n erc20: true,\n symbol: \"CK\",\n decimals: 0,\n },\n};\n\nexport const TEST_CHAINS = [GOERLI_CHAIN_ID, SEPOLIA_CHAIN_ID];\n\nexport const ETHERSCAN_SUPPORTED_CHAINS = [\n MAINNET_CHAIN_ID,\n GOERLI_CHAIN_ID,\n SEPOLIA_CHAIN_ID,\n BSC_MAINNET_CHAIN_ID,\n BSC_TESTNET_CHAIN_ID,\n OPTIMISM_MAINNET_CHAIN_ID,\n OPTIMISM_TESTNET_CHAIN_ID,\n AVALANCHE_MAINNET_CHAIN_ID,\n AVALANCHE_TESTNET_CHAIN_ID,\n ARBITRUM_MAINNET_CHAIN_ID,\n ARBITRUM_TESTNET_CHAIN_ID,\n POLYGON_CHAIN_ID,\n POLYGON_MUMBAI_CHAIN_ID,\n CELO_MAINNET_CHAIN_ID,\n];\n\nexport const SIMPLEHASH_SUPPORTED_CHAINS = [\n MAINNET_CHAIN_ID,\n POLYGON_CHAIN_ID,\n POLYGON_MUMBAI_CHAIN_ID,\n BSC_MAINNET_CHAIN_ID,\n BSC_TESTNET_CHAIN_ID,\n ARBITRUM_MAINNET_CHAIN_ID,\n ARBITRUM_TESTNET_CHAIN_ID,\n OPTIMISM_MAINNET_CHAIN_ID,\n OPTIMISM_TESTNET_CHAIN_ID,\n CELO_MAINNET_CHAIN_ID,\n AVALANCHE_MAINNET_CHAIN_ID,\n AVALANCHE_TESTNET_CHAIN_ID,\n GOERLI_CHAIN_ID,\n];\n\nexport const COINGECKO_SUPPORTED_CURRENCIES = new Set([\n \"btc\",\n \"eth\",\n \"ltc\",\n \"bch\",\n \"bnb\",\n \"eos\",\n \"xrp\",\n \"xlm\",\n \"link\",\n \"dot\",\n \"yfi\",\n \"usd\",\n \"aed\",\n \"ars\",\n \"aud\",\n \"bdt\",\n \"bhd\",\n \"bmd\",\n \"brl\",\n \"cad\",\n \"chf\",\n \"clp\",\n \"cny\",\n \"czk\",\n \"dkk\",\n \"eur\",\n \"gbp\",\n \"hkd\",\n \"huf\",\n \"idr\",\n \"ils\",\n \"inr\",\n \"jpy\",\n \"krw\",\n \"kwd\",\n \"lkr\",\n \"mmk\",\n \"mxn\",\n \"myr\",\n \"ngn\",\n \"nok\",\n \"nzd\",\n \"php\",\n \"pkr\",\n \"pln\",\n \"rub\",\n \"sar\",\n \"sek\",\n \"sgd\",\n \"thb\",\n \"try\",\n \"twd\",\n \"uah\",\n \"vef\",\n \"vnd\",\n \"zar\",\n \"xdr\",\n \"xag\",\n \"xau\",\n \"bits\",\n \"sats\",\n]);\n\nexport const COINGECKO_PLATFORMS_CHAIN_CODE_MAP: Record<string, { platform: string; currency: string }> = {\n [POLYGON_CHAIN_ID]: {\n platform: \"polygon-pos\",\n currency: \"matic\",\n },\n [BSC_MAINNET_CHAIN_ID]: {\n platform: \"binance-smart-chain\",\n currency: \"bnb\",\n },\n [MAINNET_CHAIN_ID]: {\n platform: \"ethereum\",\n currency: \"eth\",\n },\n [ARBITRUM_MAINNET_CHAIN_ID]: {\n platform: \"arbitrum-one\",\n currency: \"eth\",\n },\n [OPTIMISM_MAINNET_CHAIN_ID]: {\n platform: \"optimistic-ethereum\",\n currency: \"eth\",\n },\n [CELO_MAINNET_CHAIN_ID]: {\n platform: \"celo\",\n currency: \"celo\",\n },\n [XDAI_CHAIN_ID]: {\n platform: \"xdai\",\n currency: \"xDAI\",\n },\n [AVALANCHE_MAINNET_CHAIN_ID]: {\n platform: \"avalanche\",\n currency: \"avax\",\n },\n};\n\nexport const MessageStatus = {\n UNAPPROVED: \"unapproved\",\n SIGNED: \"signed\",\n PENDING: \"pending\",\n APPROVED: \"approved\",\n REJECTED: \"rejected\",\n FAILED: \"failed\",\n} as const;\n\nexport const MESSAGE_EVENTS = {\n UNAPPROVED_MESSAGE: \"unapprovedMessage\",\n};\n","import {\n ARBITRUM_MAINNET_CHAIN_ID,\n AVALANCHE_MAINNET_CHAIN_ID,\n BSC_MAINNET_CHAIN_ID,\n GOERLI_CHAIN_ID,\n MAINNET_CHAIN_ID,\n OPTIMISM_MAINNET_CHAIN_ID,\n POLYGON_CHAIN_ID,\n} from \"../utils/constants\";\n\nexport const SINGLE_CALL_BALANCES_ADDRESSES: Record<string, string> = {\n [MAINNET_CHAIN_ID]: \"0xb1f8e55c7f64d203c1400b9d8555d050f94adf39\",\n [GOERLI_CHAIN_ID]: \"0x9788C4E93f9002a7ad8e72633b11E8d1ecd51f9b\",\n // [SEPOLIA_CHAIN_ID]: SINGLE_CALL_BALANCES_ADDRESS_SEPOLIA,\n // [FANTOM_CHAIN_ID]: \"0x07f697424ABe762bB808c109860c04eA488ff92B\",\n [BSC_MAINNET_CHAIN_ID]: \"0x2352c63A83f9Fd126af8676146721Fa00924d7e4\",\n [OPTIMISM_MAINNET_CHAIN_ID]: \"0xB1c568e9C3E6bdaf755A60c7418C269eb11524FC\",\n [POLYGON_CHAIN_ID]: \"0x2352c63A83f9Fd126af8676146721Fa00924d7e4\",\n [AVALANCHE_MAINNET_CHAIN_ID]: \"0xD023D153a0DFa485130ECFdE2FAA7e612EF94818\",\n [ARBITRUM_MAINNET_CHAIN_ID]: \"0x151E24A486D7258dd7C33Fb67E4bB01919B7B32c\",\n};\n","import { AccountTrackerConfig, AccountTrackerState, BaseController, IAccountTrackerController, PreferencesState } from \"@toruslabs/base-controllers\";\nimport { SafeEventEmitterProvider } from \"@toruslabs/openlogin-jrpc\";\nimport { Mutex } from \"async-mutex\";\nimport { BrowserProvider, Contract, toQuantity } from \"ethers\";\nimport log from \"loglevel\";\n\nimport PollingBlockTracker from \"../Block/PollingBlockTracker\";\nimport NetworkController from \"../Network/NetworkController\";\nimport { singleBalanceCheckerAbi } from \"../utils/abis\";\nimport { SINGLE_CALL_BALANCES_ADDRESSES } from \"../utils/contractAddresses\";\nimport { EthereumBlock, ExtendedAddressPreferences } from \"../utils/interfaces\";\n\ninterface AccountTrackerControllerOptions {\n config: AccountTrackerConfig<EthereumBlock>;\n state: Partial<AccountTrackerState>;\n provider: SafeEventEmitterProvider;\n blockTracker?: PollingBlockTracker;\n getIdentities: () => PreferencesState<ExtendedAddressPreferences>[\"identities\"];\n onPreferencesStateChange: (listener: (preferencesState: PreferencesState<ExtendedAddressPreferences>) => void) => void;\n getCurrentChainId: NetworkController[\"getNetworkIdentifier\"];\n}\n\nconst ZERO_ADDRESS = \"0x0000000000000000000000000000000000000000\";\n\n/**\n * Tracks accounts based on blocks.\n * If block tracker provides latest block, we query accounts from it.\n * Preferences state changes also retrigger accounts update.\n * Network state changes also retrigger accounts update.\n */\nclass AccountTrackerController\n extends BaseController<AccountTrackerConfig<EthereumBlock>, AccountTrackerState>\n implements IAccountTrackerController<AccountTrackerConfig<EthereumBlock>, AccountTrackerState>\n{\n private provider!: SafeEventEmitterProvider;\n\n private blockTracker!: PollingBlockTracker;\n\n private mutex = new Mutex();\n\n private ethersProvider!: BrowserProvider;\n\n private getIdentities!: AccountTrackerControllerOptions[\"getIdentities\"];\n\n private getCurrentChainId: NetworkController[\"getNetworkIdentifier\"];\n\n constructor({\n config,\n state,\n provider,\n blockTracker,\n getIdentities,\n onPreferencesStateChange,\n getCurrentChainId,\n }: AccountTrackerControllerOptions) {\n super({ config, state });\n this.defaultState = {\n accounts: {},\n };\n this.defaultConfig = {\n _currentBlock: null,\n };\n this.initialize();\n this.provider = provider;\n this.blockTracker = blockTracker;\n this.ethersProvider = new BrowserProvider(this.provider, \"any\");\n\n // Initiate block tracker internal tracking.\n this.blockTracker.on(\"latest\", (block: EthereumBlock) => {\n this.configure({ _currentBlock: block });\n this.refresh();\n });\n\n this.getIdentities = getIdentities;\n this.getCurrentChainId = getCurrentChainId;\n\n onPreferencesStateChange(() => {\n log.info(\"onPreferencesStateChange called\");\n const refreshNeeded = this.syncAccounts();\n if (refreshNeeded) this.refresh();\n });\n }\n\n syncAccounts(): boolean {\n const { accounts } = this.state;\n const addresses = Object.keys(this.getIdentities());\n const existing = Object.keys(accounts);\n const newAddresses = addresses.filter((address) => existing.indexOf(address) === -1);\n const oldAddresses = existing.filter((address) => addresses.indexOf(address) === -1);\n let isUpdated = false;\n newAddresses.forEach((address) => {\n isUpdated = true;\n accounts[address] = { balance: \"0x0\" };\n });\n oldAddresses.forEach((address) => {\n isUpdated = true;\n delete accounts[address];\n });\n this.update({ accounts: { ...accounts } });\n return isUpdated;\n }\n\n async refresh(): Promise<void> {\n const releaseLock = await this.mutex.acquire();\n try {\n const currentBlock = this.config._currentBlock;\n if (!currentBlock) return;\n this._updateAccounts();\n } catch (error) {\n } finally {\n releaseLock();\n }\n }\n\n private async _updateAccounts(): Promise<void> {\n const { accounts } = this.state;\n const addresses = Object.keys(accounts);\n const chainId = this.getCurrentChainId();\n if (chainId === \"loading\") return;\n\n if (addresses.length > 0) {\n if (SINGLE_CALL_BALANCES_ADDRESSES[chainId]) {\n await this._updateAccountsViaBalanceChecker(addresses, SINGLE_CALL_BALANCES_ADDRESSES[chainId]);\n return;\n }\n log.info(\"falling back to ethQuery.getBalance\");\n await Promise.all(addresses.map((x) => this._updateAccount(x)));\n }\n }\n\n private async _updateAccount(address: string): Promise<void> {\n const balance = await this.provider.request<[string, string], string>({ method: \"eth_getBalance\", params: [address, \"latest\"] });\n const { accounts } = this.state;\n if (!accounts[address]) return;\n accounts[address] = { balance: toQuantity(balance) };\n this.update({ accounts });\n }\n\n private async _updateAccountsViaBalanceChecker(addresses: string[], deployedContractAddress: string) {\n const ethContract = new Contract(deployedContractAddress, singleBalanceCheckerAbi, this.ethersProvider);\n try {\n const result: string[] = await ethContract.balances(addresses, [ZERO_ADDRESS]);\n const { accounts } = this.state;\n addresses.forEach((address, index) => {\n const balance = toQuantity(result[index]);\n if (!accounts[address]) return;\n accounts[address] = { balance };\n });\n return this.update({ accounts });\n } catch (error) {\n log.warn(\"Torus - Account Tracker single call balance fetch failed\", error);\n return Promise.all(addresses.map((x) => this._updateAccount(x)));\n }\n }\n}\n\nexport default AccountTrackerController;\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@ethereumjs/util\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"bignumber.js\");","import { addHexPrefix, isValidAddress, toChecksumAddress } from \"@ethereumjs/util\";\nimport {\n ACTIVITY_ACTION_RECEIVE,\n ACTIVITY_ACTION_SEND,\n addressSlicer,\n formatSmallNumbers,\n significantDigits,\n TransactionStatus,\n} from \"@toruslabs/base-controllers\";\nimport { SafeEventEmitterProvider } from \"@toruslabs/openlogin-jrpc\";\nimport BigNumber from \"bignumber.js\";\nimport log from \"loglevel\";\n\nimport {\n CONTRACT_TYPE_ERC20,\n CONTRACT_TYPE_ERC721,\n CONTRACT_TYPE_ERC1155,\n MAINNET_CHAIN_ID,\n METHOD_TYPES,\n SUPPORTED_NETWORKS,\n TEST_CHAINS,\n} from \"./constants\";\nimport { FormattedTransactionActivity, TransactionPayload, TransactionReceipt } from \"./interfaces\";\n\nexport function getEtherScanHashLink(txHash: string, chainId: string) {\n if (!SUPPORTED_NETWORKS[chainId]) return \"\";\n return `${SUPPORTED_NETWORKS[chainId].blockExplorerUrl}/tx/${txHash}`;\n}\n\nexport const formatPastTx = (x: TransactionPayload, lowerCaseSelectedAddress?: string): FormattedTransactionActivity => {\n let totalAmountString = \"\";\n if (x.type === CONTRACT_TYPE_ERC721 || x.type === CONTRACT_TYPE_ERC1155) totalAmountString = x.symbol;\n else if (x.type === CONTRACT_TYPE_ERC20) totalAmountString = formatSmallNumbers(Number.parseFloat(x.total_amount), x.symbol, true);\n else totalAmountString = formatSmallNumbers(Number.parseFloat(x.total_amount), x.type_name, true);\n const currencyAmountString =\n x.type === CONTRACT_TYPE_ERC721 || x.type === CONTRACT_TYPE_ERC1155\n ? \"\"\n : formatSmallNumbers(Number.parseFloat(x.currency_amount), x.selected_currency, true);\n const finalObject: FormattedTransactionActivity = {\n id: x.created_at.toString(),\n date: new Date(x.created_at).toString(),\n from: x.from,\n from_aa_address: x.from_aa_address,\n slicedFrom: typeof x.from === \"string\" ? addressSlicer(x.from) : \"\",\n to: x.to,\n slicedTo: typeof x.to === \"string\" ? addressSlicer(x.to) : \"\",\n action: lowerCaseSelectedAddress === x.to?.toLowerCase() || \"\" ? ACTIVITY_ACTION_RECEIVE : ACTIVITY_ACTION_SEND,\n totalAmount: x.total_amount,\n totalAmountString,\n currencyAmount: x.currency_amount,\n currencyAmountString,\n amount: `${totalAmountString} / ${currencyAmountString}`,\n status: x.status,\n etherscanLink: getEtherScanHashLink(x.transaction_hash, x.network || MAINNET_CHAIN_ID),\n networkType: x.network,\n ethRate:\n Number.parseFloat(x?.total_amount) && Number.parseFloat(x?.currency_amount)\n ? `1 ${x.symbol} = ${significantDigits(Number.parseFloat(x.currency_amount) / Number.parseFloat(x.total_amount))}`\n : \"\",\n currencyUsed: x.selected_currency,\n type: x.type,\n type_name: x.type_name,\n type_image_link: x.type_image_link,\n transaction_hash: x.transaction_hash,\n transaction_category: x.transaction_category,\n // TODO: // figure out how to handle these values.\n // isEtherscan: x.isEtherscan,\n // input: x.input || \"\",\n // token_id: x.token_id || \"\",\n contract_address: x.contract_address || \"\",\n nonce: x.nonce || \"\",\n is_cancel: !!x.is_cancel || false,\n gas: x.gas || \"\",\n gasPrice: x.gasPrice || \"\",\n };\n return finalObject;\n};\n\n/**\n * Ref - https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_gettransactionreceipt\n */\nexport const getEthTxStatus = async (hash: string, provider: SafeEventEmitterProvider): Promise<TransactionStatus | undefined> => {\n try {\n const result = await provider.request<[string], TransactionReceipt>({ method: METHOD_TYPES.ETH_GET_TRANSACTION_RECEIPT, params: [hash] });\n if (result === null) return TransactionStatus.submitted;\n if (result && result.status === \"0x1\") return TransactionStatus.confirmed;\n if (result && result.status === \"0x0\") return TransactionStatus.rejected;\n return undefined;\n } catch (err) {\n log.warn(\"unable to fetch transaction status\", err);\n return undefined;\n }\n};\n\nexport function formatDate(inputDate: string) {\n const monthList = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\n const date = new Date(inputDate);\n const day = date.getDate();\n const month = monthList[date.getMonth()];\n const year = date.getFullYear();\n return `${day} ${month} ${year}`;\n}\n\nexport function formatTime(time: number) {\n return new Date(time).toTimeString().slice(0, 8);\n}\n\nexport const idleTimeTracker = ((activityThresholdTime: number): { checkIfIdle: () => boolean } => {\n let isIdle = false;\n let idleTimeout: number = null;\n\n const resetTimer = () => {\n if (idleTimeout) {\n window.clearTimeout(idleTimeout);\n }\n isIdle = false;\n idleTimeout = window.setTimeout(() => {\n isIdle = true;\n }, activityThresholdTime * 1000);\n };\n\n window.addEventListener(\"load\", resetTimer);\n document.addEventListener(\"mousemove\", resetTimer);\n document.addEventListener(\"keydown\", resetTimer);\n\n function checkIfIdle() {\n return isIdle;\n }\n return {\n checkIfIdle,\n };\n})(60 * 3);\n\nexport function isAddressByChainId(address: string, _chainId: string) {\n // TOOD: add rsk network checks.\n return isValidAddress(address);\n}\n\nexport function toChecksumAddressByChainId(address: string, chainId: string) {\n // TOOD: add rsk network checks.\n if (!isAddressByChainId(address, chainId)) return address;\n return toChecksumAddress(address);\n}\n\nexport const GAS_LIMITS = {\n // maximum gasLimit of a simple send\n SIMPLE: addHexPrefix((21_000).toString(16)),\n // a base estimate for token transfers.\n BASE_TOKEN_ESTIMATE: addHexPrefix((100_000).toString(16)),\n};\n\nexport function bnLessThan(a: string | number, b: string | number) {\n if (a === null || a === undefined || b === null || b === undefined) {\n return null;\n }\n return new BigNumber(a, 10).lt(b, 10);\n}\n\nexport const getIpfsEndpoint = (path: string) => `https://infura-ipfs.io/${path}`;\n\nexport function sanitizeNftMetdataUrl(url: string): string {\n let finalUri = url;\n if (url?.startsWith(\"ipfs\")) {\n const ipfsPath = url.split(\"ipfs://\")[1];\n finalUri = getIpfsEndpoint(ipfsPath);\n }\n return finalUri;\n}\n\nexport function getChainType(chainId: string) {\n if (chainId === MAINNET_CHAIN_ID) {\n return \"mainnet\";\n } else if ((TEST_CHAINS as string[]).includes(chainId)) {\n return \"testnet\";\n }\n return \"custom\";\n}\n","import { BaseBlockTracker, PollingBlockTrackerConfig, timeout } from \"@toruslabs/base-controllers\";\nimport { BlockParams } from \"ethers\";\nimport log from \"loglevel\";\n\nimport { idleTimeTracker } from \"../utils/helpers\";\nimport { EthereumBlock, PollingBlockTrackerState } from \"../utils/interfaces\";\n\nconst DEFAULT_POLLING_INTERVAL = 20;\nconst DEFAULT_RETRY_TIMEOUT = 2;\nconst SEC = 1000;\n\nclass PollingBlockTracker extends BaseBlockTracker<EthereumBlock, PollingBlockTrackerConfig, PollingBlockTrackerState> {\n constructor({ config, state = {} }: { config: Partial<PollingBlockTrackerConfig>; state: Partial<PollingBlockTrackerState> }) {\n if (!config.provider) {\n throw new Error(\"PollingBlockTracker - no provider specified.\");\n }\n\n super({ config, state });\n\n const pollingInterval = config.pollingInterval || DEFAULT_POLLING_INTERVAL;\n\n const retryTimeout = config.retryTimeout || DEFAULT_RETRY_TIMEOUT;\n\n // merge default + provided config.\n this.defaultConfig = {\n provider: config.provider,\n pollingInterval: pollingInterval * SEC,\n retryTimeout: retryTimeout * SEC,\n setSkipCacheFlag: config.setSkipCacheFlag || false,\n };\n\n this.initialize();\n }\n\n async checkForLatestBlock(): Promise<EthereumBlock> {\n await this._updateLatestBlock();\n return this.getLatestBlock();\n }\n\n // overrides the BaseBlockTracker._start method.\n protected _start(): void {\n this._synchronize().catch((err) => this.emit(\"error\", err));\n }\n\n private async _synchronize(): Promise<void> {\n while (this.state._isRunning) {\n if (idleTimeTracker.checkIfIdle()) return;\n try {\n await this._updateLatestBlock();\n await timeout(this.config.pollingInterval);\n } catch (err) {\n const newErr = new Error(`PollingBlockTracker - encountered an error while attempting to update latest block:\\n${(err as Error).stack}`);\n try {\n this.emit(\"error\", newErr);\n } catch (emitErr) {\n log.error(newErr);\n }\n await timeout(this.config.retryTimeout);\n }\n }\n }\n\n private async _updateLatestBlock(): Promise<void> {\n // fetch + set latest block\n const latestBlock = await this._fetchLatestBlock();\n this._newPotentialLatest(latestBlock);\n }\n\n private async _fetchLatestBlock(): Promise<EthereumBlock> {\n try {\n const block = await this.config.provider.request<[string, boolean], { [K in keyof BlockParams]: string }>({\n method: \"eth_getBlockByNumber\",\n params: [\"latest\", false],\n });\n return {\n blockHash: block.hash,\n idempotencyKey: block.number,\n timestamp: block.timestamp,\n baseFeePerGas: block.baseFeePerGas,\n gasLimit: block.gasLimit,\n };\n } catch (error) {\n log.error(\"Polling Block Tracker: \", error);\n throw new Error(`PollingBlockTracker - encountered error fetching block:\\n${(error as Error).message}`);\n }\n }\n}\n\nexport default PollingBlockTracker;\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@toruslabs/http-helpers\");","import { BaseCurrencyController, BaseCurrencyControllerConfig, BaseCurrencyControllerState } from \"@toruslabs/base-controllers\";\nimport { get } from \"@toruslabs/http-helpers\";\nimport log from \"loglevel\";\n\nimport { idleTimeTracker } from \"../utils/helpers\";\nimport { EthereumNetworkState } from \"../utils/interfaces\";\n\nexport interface IEthereumCurrencyControllerState extends BaseCurrencyControllerState {\n commonDenomination: string;\n commonDenominatorPrice: number;\n}\n\nexport default class CurrencyController extends BaseCurrencyController<BaseCurrencyControllerConfig, IEthereumCurrencyControllerState> {\n private conversionInterval: number;\n\n constructor({\n config,\n state,\n onNetworkChanged,\n }: {\n config: Partial<BaseCurrencyControllerConfig>;\n state: Partial<IEthereumCurrencyControllerState>;\n onNetworkChanged: (listener: (networkState: EthereumNetworkState) => void) => void;\n }) {\n super({ config, state });\n this.defaultState = {\n ...this.defaultState,\n commonDenomination: \"USD\",\n commonDenominatorPrice: 0,\n };\n this.initialize();\n onNetworkChanged((networkState) => {\n // to be called as (listener) => this.networkController.on('networkDidChange', listener);\n if (networkState.providerConfig.ticker.toUpperCase() !== this.state.nativeCurrency.toUpperCase()) {\n this.setNativeCurrency(networkState.providerConfig.ticker);\n this.updateConversionRate();\n }\n });\n }\n\n public setCommonDenomination(commonDenomination: string): void {\n this.update({ commonDenomination });\n }\n\n public getCommonDenomination(): string {\n return this.state.commonDenomination;\n }\n\n public setCommonDenominatorPrice(commonDenominatorPrice: number): void {\n this.update({ commonDenominatorPrice });\n }\n\n public getCommonDenominatorPrice(): number {\n return this.state.commonDenominatorPrice;\n }\n\n /**\n * Creates a new poll, using setInterval, to periodically call updateConversionRate. The id of the interval is\n * stored at the controller's conversionInterval property. If it is called and such an id already exists, the\n * previous interval is clear and a new one is created.\n */\n public scheduleConversionInterval(): void {\n if (this.conversionInterval) {\n window.clearInterval(this.conversionInterval);\n }\n this.conversionInterval = window.setInterval(() => {\n if (!idleTimeTracker.checkIfIdle()) {\n this.updateConversionRate();\n }\n }, this.config.pollInterval);\n }\n\n /**\n * Updates the conversionRate and conversionDate properties associated with the currentCurrency. Updated info is\n * fetched from an external API\n */\n public async updateConversionRate() {\n const currentCurrency = this.getCurrentCurrency();\n const nativeCurrency = this.getNativeCurrency();\n const commonDenomination = this.getCommonDenomination();\n const conversionRate = await this.retrieveConversionRate(nativeCurrency, currentCurrency, commonDenomination);\n\n const currentCurrencyRate = Number.parseFloat(conversionRate[currentCurrency.toUpperCase()]);\n const commonDenominationRate = Number.parseFloat(conversionRate[commonDenomination.toUpperCase()]);\n // set conversion rate\n if (currentCurrencyRate || commonDenominationRate) {\n // ETC\n this.setConversionRate(currentCurrencyRate);\n this.setConversionDate(Math.floor(Date.now() / 1000).toString());\n if (currentCurrency.toUpperCase() === commonDenomination.toUpperCase()) {\n this.setCommonDenominatorPrice(currentCurrencyRate);\n } else {\n this.setCommonDenominatorPrice(commonDenominationRate);\n }\n } else {\n this.setConversionRate(0);\n this.setConversionDate(\"N/A\");\n }\n }\n\n private async retrieveConversionRate(fromCurrency: string, toCurrency: string, commonDenomination: string): Promise<Record<string, string>> {\n try {\n // query cryptocompare\n let apiUrl = `${this.config.api}/currency?fsym=${fromCurrency.toUpperCase()}&tsyms=${toCurrency.toUpperCase()}`;\n if (commonDenomination && commonDenomination.toUpperCase() !== toCurrency.toUpperCase()) {\n apiUrl += `,${commonDenomination.toUpperCase()}`;\n }\n const parsedResponse = await get<Record<string, string>>(apiUrl);\n\n return parsedResponse;\n } catch (error) {\n log.error(error, `CurrencyController - updateCommonDenominatorPrice: Failed to query rate for currency: ${fromCurrency}/ ${toCurrency}`);\n }\n\n return { [toCurrency.toUpperCase()]: \"0\", [commonDenomination.toUpperCase()]: \"0\" };\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"lodash\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@babel/runtime/helpers/objectDestructuringEmpty\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@babel/runtime/helpers/objectWithoutProperties\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"bn.js\");","// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\n/* Currency Conversion Utility\n * This utility function can be used for converting currency related values within metamask.\n * The caller should be able to pass it a value, along with information about the value's\n * numeric base, denomination and currency, and the desired numeric base, denomination and\n * currency. It should return a single value.\n *\n * @param {(number | string | BN)} value - The value to convert.\n * @param {Object} [options] - Options to specify details of the conversion\n * @param {string} [options.fromCurrency = 'ETH' | 'USD'] - The currency of the passed value\n * @param {string} [options.toCurrency = 'ETH' | 'USD'] - The desired currency of the result\n * @param {string} [options.fromNumericBase = 'hex' | 'dec' | 'BN'] - The numeric basic of the passed value.\n * @param {string} [options.toNumericBase = 'hex' | 'dec' | 'BN'] - The desired numeric basic of the result.\n * @param {string} [options.fromDenomination = 'WEI'] - The denomination of the passed value\n * @param {string} [options.numberOfDecimals] - The desired number of decimals in the result\n * @param {string} [options.roundDown] - The desired number of decimals to round down to\n * @param {number} [options.conversionRate] - The rate to use to make the fromCurrency -> toCurrency conversion\n * @returns {(number | string | BN)}\n *\n * The utility passes value along with the options as a single object to the `converter` function.\n * `converter` conditional modifies the supplied `value` property, depending\n * on the accompanying options.\n */\n\nimport { stripHexPrefix } from \"@ethereumjs/util\";\nimport BigNumber from \"bignumber.js\";\nimport BN from \"bn.js\";\n\n// Big Number Constants\nconst BIG_NUMBER_WEI_MULTIPLIER = new BigNumber(\"1000000000000000000\");\nconst BIG_NUMBER_GWEI_MULTIPLIER = new BigNumber(\"1000000000\");\nconst BIG_NUMBER_ETH_MULTIPLIER = new BigNumber(\"1\");\n\ntype NumericBase = \"hex\" | \"dec\" | \"BN\";\n\ntype EthDenomination = \"WEI\" | \"GWEI\" | \"ETH\";\n\ntype ConverterOptions = {\n value: BigNumber | string;\n fromNumericBase: NumericBase;\n fromDenomination: EthDenomination;\n fromCurrency: string;\n toNumericBase: NumericBase;\n toDenomination: EthDenomination;\n toCurrency: string;\n numberOfDecimals: number;\n conversionRate: number;\n invertConversionRate: boolean;\n roundDown?: number;\n};\n\n// Setter Maps\nconst toBigNumber = {\n hex: (n) => new BigNumber(stripHexPrefix(n), 16),\n dec: (n) => new BigNumber(String(n), 10),\n BN: (n) => new BigNumber(n.toString(16), 16),\n};\nconst toNormalizedDenomination = {\n WEI: (bigNumber) => bigNumber.div(BIG_NUMBER_WEI_MULTIPLIER),\n GWEI: (bigNumber) => bigNumber.div(BIG_NUMBER_GWEI_MULTIPLIER),\n ETH: (bigNumber) => bigNumber.div(BIG_NUMBER_ETH_MULTIPLIER),\n};\nconst toSpecifiedDenomination = {\n WEI: (bigNumber) => bigNumber.times(BIG_NUMBER_WEI_MULTIPLIER).dp(0, BigNumber.ROUND_HALF_UP),\n GWEI: (bigNumber) => bigNumber.times(BIG_NUMBER_GWEI_MULTIPLIER).dp(9, BigNumber.ROUND_HALF_UP),\n ETH: (bigNumber) => bigNumber.times(BIG_NUMBER_ETH_MULTIPLIER).dp(9, BigNumber.ROUND_HALF_UP),\n};\nconst baseChange = {\n hex: (n) => n.toString(16),\n dec: (n) => new BigNumber(n).toString(10),\n BN: (n) => new BN(n.toString(16)),\n};\n\n// Utility function for checking base types\nconst isValidBase = (base) => Number.isInteger(base) && base > 1;\n\n/**\n * Utility method to convert a value between denominations, formats and currencies.\n */\nconst converter = ({\n value,\n fromNumericBase,\n fromDenomination,\n fromCurrency,\n toNumericBase,\n toDenomination,\n toCurrency,\n numberOfDecimals,\n conversionRate,\n invertConversionRate,\n roundDown,\n}: ConverterOptions) => {\n let convertedValue = fromNumericBase ? toBigNumber[fromNumericBase](value) : value;\n\n if (fromDenomination) {\n convertedValue = toNormalizedDenomination[fromDenomination](convertedValue);\n }\n\n if (fromCurrency !== toCurrency) {\n if (conversionRate === null || conversionRate === undefined) {\n throw new Error(`Converting from ${fromCurrency} to ${toCurrency} requires a conversionRate, but one was not provided`);\n }\n let rate = toBigNumber.dec(conversionRate);\n if (invertConversionRate) {\n rate = new BigNumber(1).div(conversionRate);\n }\n convertedValue = convertedValue.times(rate);\n }\n\n if (toDenomination) {\n convertedValue = toSpecifiedDenomination[toDenomination](convertedValue);\n }\n\n if (numberOfDecimals) {\n convertedValue = convertedValue.dp(numberOfDecimals, BigNumber.ROUND_HALF_DOWN);\n }\n\n if (roundDown) {\n convertedValue = convertedValue.dp(roundDown, BigNumber.ROUND_DOWN);\n }\n\n if (toNumericBase) {\n convertedValue = baseChange[toNumericBase](convertedValue);\n }\n return convertedValue;\n};\n\nexport const conversionUtil = (\n value: BigNumber | string,\n {\n fromCurrency = null,\n toCurrency = fromCurrency,\n fromNumericBase,\n toNumericBase,\n fromDenomination,\n toDenomination,\n numberOfDecimals,\n conversionRate,\n invertConversionRate,\n }: Omit<ConverterOptions, \"value\">\n) => {\n if (fromCurrency !== toCurrency && !conversionRate) {\n return 0;\n }\n return converter({\n fromCurrency,\n toCurrency,\n fromNumericBase,\n toNumericBase,\n fromDenomination,\n toDenomination,\n numberOfDecimals,\n conversionRate,\n invertConversionRate,\n value,\n });\n};\n\nexport const getBigNumber = (value, base) => {\n if (!isValidBase(base)) {\n throw new Error(\"Must specificy valid base\");\n }\n\n // We don't include 'number' here, because BigNumber will throw if passed\n // a number primitive it considers unsafe.\n if (typeof value === \"string\" || value instanceof BigNumber) {\n return new BigNumber(value, base);\n }\n\n return new BigNumber(String(value), base);\n};\n\nexport const addCurrencies = (a, b, options: Record<string, unknown> = {}) => {\n const { aBase, bBase, ...conversionOptions } = options;\n\n if (!isValidBase(aBase) || !isValidBase(bBase)) {\n throw new Error(\"Must specify valid aBase and bBase\");\n }\n\n const value = getBigNumber(a, aBase).plus(getBigNumber(b, bBase));\n\n return converter({\n value,\n ...conversionOptions,\n } as ConverterOptions);\n};\n\nexport const subtractCurrencies = (a, b, options: Record<string, unknown> = {}) => {\n const { aBase, bBase, ...conversionOptions } = options;\n\n if (!isValidBase(aBase) || !isValidBase(bBase)) {\n throw new Error(\"Must specify valid aBase and bBase\");\n }\n\n const value = getBigNumber(a, aBase).minus(getBigNumber(b, bBase));\n\n return converter({\n value,\n ...conversionOptions,\n } as ConverterOptions);\n};\n\nexport const multiplyCurrencies = (a, b, options: Record<string, unknown> = {}) => {\n const { multiplicandBase, multiplierBase, ...conversionOptions } = options;\n\n if (!isValidBase(multiplicandBase) || !isValidBase(multiplierBase)) {\n throw new Error(\"Must specify valid multiplicandBase and multiplierBase\");\n }\n\n const value = getBigNumber(a, multiplicandBase).times(getBigNumber(b, multiplierBase));\n\n return converter({\n value,\n ...conversionOptions,\n } as ConverterOptions);\n};\n\nexport const conversionGreaterThan = ({ ...firstProps }: ConverterOptions, { ...secondProps }: ConverterOptions) => {\n const firstValue = converter({ ...firstProps });\n const secondValue = converter({ ...secondProps });\n\n return firstValue.gt(secondValue);\n};\n\nexport const conversionLessThan = ({ ...firstProps }: ConverterOptions, { ...secondProps }: ConverterOptions) => {\n const firstValue = converter({ ...firstProps });\n const secondValue = converter({ ...secondProps });\n\n return firstValue.lt(secondValue);\n};\n\nexport const conversionMax = ({ ...firstProps }, { ...secondProps }) => {\n const firstIsGreater = conversionGreaterThan({ ...firstProps }, { ...secondProps });\n\n return firstIsGreater ? firstProps.value : secondProps.value;\n};\n\nexport const conversionGTE = ({ ...firstProps }, { ...secondProps }) => {\n const firstValue = converter({ ...firstProps } as ConverterOptions);\n const secondValue = converter({ ...secondProps } as ConverterOptions);\n return firstValue.isGreaterThanOrEqualTo(secondValue);\n};\n\nexport const conversionLTE = ({ ...firstProps }, { ...secondProps }) => {\n const firstValue = converter({ ...firstProps } as ConverterOptions);\n const secondValue = converter({ ...secondProps } as ConverterOptions);\n return firstValue.isLessThanOrEqualTo(secondValue);\n};\n\nexport const toNegative = (n, options = {}) => multiplyCurrencies(n, -1, options);\n\nexport const decGWEIToHexWEI = (decGWEI: BigNumber): BigNumber => {\n return conversionUtil(decGWEI, {\n fromNumericBase: \"dec\",\n toNumericBase: \"hex\",\n fromDenomination: \"GWEI\",\n toDenomination: \"WEI\",\n } as ConverterOptions);\n};\n\nexport const hexWEIToDecGWEI = (decGWEI: BigNumber | string): BigNumber => {\n return conversionUtil(decGWEI, {\n fromNumericBase: \"hex\",\n toNumericBase: \"dec\",\n fromDenomination: \"WEI\",\n toDenomination: \"GWEI\",\n } as ConverterOptions);\n};\n","import { get } from \"@toruslabs/http-helpers\";\nimport { SafeEventEmitterProvider } from \"@toruslabs/openlogin-jrpc\";\nimport BigNumber from \"bignumber.js\";\n\nimport { METHOD_TYPES } from \"../utils/constants\";\nimport { decGWEIToHexWEI, hexWEIToDecGWEI } from \"../utils/conversionUtils\";\nimport {\n EthereumGasFeeEstimates,\n EthereumLegacyGasFeeEstimates,\n GasEstimatesAPIResponse,\n GasEstimatesLegacyAPIResponse,\n GasFeeTimeBounds,\n} from \"./IGasFeeController\";\n\nexport function normalizeGWEIDecimalNumbers(n: string | number): number | BigNumber {\n const numberAsWEIHex = decGWEIToHexWEI(new BigNumber(n));\n const numberAsGWEI = hexWEIToDecGWEI(numberAsWEIHex);\n return numberAsGWEI;\n}\n\nexport async function fetchGasEstimates(url: string): Promise<EthereumGasFeeEstimates> {\n const estimates = await get<GasEstimatesAPIResponse>(url);\n const normalizedEstimates = {\n estimatedBaseFee: normalizeGWEIDecimalNumbers(estimates.estimatedBaseFee).toString(10),\n low: {\n ...estimates.low,\n suggestedMaxPriorityFeePerGas: normalizeGWEIDecimalNumbers(estimates.low.suggestedMaxPriorityFeePerGas).toString(10),\n suggestedMaxFeePerGas: normalizeGWEIDecimalNumbers(estimates.low.suggestedMaxFeePerGas).toString(10),\n },\n medium: {\n ...estimates.medium,\n suggestedMaxPriorityFeePerGas: normalizeGWEIDecimalNumbers(estimates.medium.suggestedMaxPriorityFeePerGas).toString(10),\n suggestedMaxFeePerGas: normalizeGWEIDecimalNumbers(estimates.medium.suggestedMaxFeePerGas).toString(10),\n },\n high: {\n ...estimates.high,\n suggestedMaxPriorityFeePerGas: normalizeGWEIDecimalNumbers(estimates.high.suggestedMaxPriorityFeePerGas).toString(10),\n suggestedMaxFeePerGas: normalizeGWEIDecimalNumbers(estimates.high.suggestedMaxFeePerGas).toString(10),\n },\n };\n return normalizedEstimates;\n}\n\nexport interface FeeHistoryResponse {\n baseFeePerGas: string[];\n gasUsedRatio: string[];\n oldestBlock: string;\n reward: string[][];\n}\n\nexport async function fetchGasEstimatesViaEthFeeHistory(provider: SafeEventEmitterProvider): Promise<EthereumGasFeeEstimates> {\n const noOfBlocks = 10;\n const newestBlock = \"latest\";\n // get the 10, 50 and 95th percentile of the tip fees from the last 10 blocks\n const percentileValues = [10, 50, 95];\n const feeHistory = await provider.request<[number, string, number[]], FeeHistoryResponse>({\n method: \"eth_feeHistory\",\n params: [noOfBlocks, newestBlock, percentileValues],\n });\n // this is in hex wei\n const finalBaseFeePerGas = feeHistory.baseFeePerGas[feeHistory.baseFeePerGas.length - 1];\n // this is in hex wei\n const priorityFeeCalcs = feeHistory.reward.reduce(\n (acc, curr) => {\n return {\n slow: acc.slow.plus(new BigNumber(curr[0], 16)),\n average: acc.average.plus(new BigNumber(curr[1], 16)),\n fast: acc.fast.plus(new BigNumber(curr[2], 16)),\n };\n },\n { slow: new BigNumber(0), average: new BigNumber(0), fast: new BigNumber(0) }\n );\n return {\n estimatedBaseFee: hexWEIToDecGWEI(finalBaseFeePerGas).toString(10),\n high: {\n maxWaitTimeEstimate: 30_000,\n minWaitTimeEstimate: 15_000,\n suggestedMaxFeePerGas: hexWEIToDecGWEI(priorityFeeCalcs.fast.plus(finalBaseFeePerGas).toString(16)).toString(),\n suggestedMaxPriorityFeePerGas: hexWEIToDecGWEI(priorityFeeCalcs.fast.toString(16)).toString(),\n },\n medium: {\n maxWaitTimeEstimate: 45_000,\n minWaitTimeEstimate: 15_000,\n suggestedMaxFeePerGas: hexWEIToDecGWEI(priorityFeeCalcs.average.plus(finalBaseFeePerGas).toString(16)).toString(),\n suggestedMaxPriorityFeePerGas: hexWEIToDecGWEI(priorityFeeCalcs.average.toString(16)).toString(),\n },\n low: {\n maxWaitTimeEstimate: 60_000,\n minWaitTimeEstimate: 15_000,\n suggestedMaxFeePerGas: hexWEIToDecGWEI(priorityFeeCalcs.slow.plus(finalBaseFeePerGas).toString(16)).toString(),\n suggestedMaxPriorityFeePerGas: hexWEIToDecGWEI(priorityFeeCalcs.slow.toString(16)).toString(),\n },\n };\n}\n\n/**\n * Hit the legacy MetaSwaps gasPrices estimate api and return the low, medium\n * high values from that API.\n */\nexport async function fetchLegacyGasPriceEstimates(url: string): Promise<EthereumLegacyGasFeeEstimates> {\n const result = await get<GasEstimatesLegacyAPIResponse>(url, {\n referrer: url,\n referrerPolicy: \"no-referrer-when-downgrade\",\n method: \"GET\",\n });\n // this returns decimal gwei\n return {\n low: result.SafeGasPrice,\n medium: result.ProposeGasPrice,\n high: result.FastGasPrice,\n };\n}\n\nexport async function fetchEthGasPriceEstimate(provider: SafeEventEmitterProvider): Promise<{ gasPrice: string }> {\n const gasPrice = await provider.request<never, string>({ method: METHOD_TYPES.ETH_GET_GAS_PRICE });\n return {\n gasPrice: hexWEIToDecGWEI(gasPrice).toString(),\n };\n}\n\nexport function calculateTimeEstimate(\n maxPriorityFeePerGas: string,\n maxFeePerGas: string,\n gasFeeEstimates: EthereumGasFeeEstimates\n): GasFeeTimeBounds {\n // all are in dec gwei\n const { low, medium, high, estimatedBaseFee } = gasFeeEstimates;\n\n const maxPriorityFeePerGasInWEI = new BigNumber(decGWEIToHexWEI(new BigNumber(maxPriorityFeePerGas)), 16);\n const maxFeePerGasInWEI = new BigNumber(decGWEIToHexWEI(new BigNumber(maxFeePerGas)), 16);\n const estimatedBaseFeeInWEI = new BigNumber(decGWEIToHexWEI(new BigNumber(estimatedBaseFee)), 16);\n\n const effectiveMaxPriorityFee = BigNumber.min(maxPriorityFeePerGasInWEI, maxFeePerGasInWEI.minus(estimatedBaseFeeInWEI));\n\n const lowMaxPriorityFeeInWEI = new BigNumber(decGWEIToHexWEI(new BigNumber(low.suggestedMaxPriorityFeePerGas)), 16);\n const mediumMaxPriorityFeeInWEI = new BigNumber(decGWEIToHexWEI(new BigNumber(medium.suggestedMaxPriorityFeePerGas)), 16);\n const highMaxPriorityFeeInWEI = new BigNumber(decGWEIToHexWEI(new BigNumber(high.suggestedMaxPriorityFeePerGas)), 16);\n\n let lowerTimeBound: null | number;\n let upperTimeBound: string | number;\n\n if (effectiveMaxPriorityFee.lt(lowMaxPriorityFeeInWEI)) {\n lowerTimeBound = null;\n upperTimeBound = \"unknown\";\n } else if (effectiveMaxPriorityFee.gte(lowMaxPriorityFeeInWEI) && effectiveMaxPriorityFee.lt(mediumMaxPriorityFeeInWEI)) {\n lowerTimeBound = low.minWaitTimeEstimate;\n upperTimeBound = low.maxWaitTimeEstimate;\n } else if (effectiveMaxPriorityFee.gte(mediumMaxPriorityFeeInWEI) && effectiveMaxPriorityFee.lt(highMaxPriorityFeeInWEI)) {\n lowerTimeBound = medium.minWaitTimeEstimate;\n upperTimeBound = medium.maxWaitTimeEstimate;\n } else if (effectiveMaxPriorityFee.eq(highMaxPriorityFeeInWEI)) {\n lowerTimeBound = high.minWaitTimeEstimate;\n upperTimeBound = high.maxWaitTimeEstimate;\n } else {\n lowerTimeBound = 0;\n upperTimeBound = high.maxWaitTimeEstimate;\n }\n\n return {\n lowerTimeBound,\n upperTimeBound,\n };\n}\n","import { addHexPrefix, isHexString } from \"@ethereumjs/util\";\nimport { BaseController } from \"@toruslabs/base-controllers\";\nimport { SafeEventEmitterProvider } from \"@toruslabs/openlogin-jrpc\";\nimport { cloneDeep } from \"lodash\";\nimport log from \"loglevel\";\n\nimport NetworkController from \"../Network/NetworkController\";\nimport { GAS_ESTIMATE_TYPES } from \"../utils/constants\";\nimport { idleTimeTracker } from \"../utils/helpers\";\nimport { EthereumNetworkState } from \"../utils/interfaces\";\nimport {\n calculateTimeEstimate,\n fetchEthGasPriceEstimate as defaultFetchEthGasPriceEstimate,\n fetchGasEstimates as defaultFetchGasEstimates,\n fetchGasEstimatesViaEthFeeHistory as defaultFetchGasEstimatesViaEthFeeHistory,\n fetchLegacyGasPriceEstimates as defaultFetchLegacyGasPriceEstimates,\n} from \"./gasUtil\";\nimport { EthereumGasConfig, EthereumGasFeeEstimates, EthereumGasState, EthereumLegacyGasFeeEstimates, GasFeeTimeBounds } from \"./IGasFeeController\";\nconst GAS_FEE_API = \"https://mock-gas-server.herokuapp.com/\";\nconst LEGACY_GAS_PRICES_API_URL = \"https://api.metaswap.codefi.network/gasPrices\";\n\ninterface IGasFeeControllerOptions {\n config?: Partial<EthereumGasConfig>;\n state?: Partial<EthereumGasState>;\n getNetworkIdentifier: NetworkController[\"getNetworkIdentifier\"];\n getProvider: NetworkController[\"getProvider\"];\n getCurrentNetworkEIP1559Compatibility: NetworkController[\"getEIP1559Compatibility\"];\n getCurrentAccountEIP1559Compatibility: (address: string) => boolean;\n getCurrentNetworkLegacyGasAPICompatibility: () => boolean;\n fetchGasEstimates?: (url: string) => Promise<EthereumGasFeeEstimates>;\n fetchEthGasPriceEstimate?: (provider: SafeEventEmitterProvider) => Promise<{ gasPrice: string }>;\n fetchLegacyGasPriceEstimates?: (url: string) => Promise<EthereumLegacyGasFeeEstimates>;\n fetchGasEstimatesViaEthFeeHistory?: (provider: SafeEventEmitterProvider) => Promise<EthereumGasFeeEstimates>;\n onNetworkStateChange: (listener: (networkState: EthereumNetworkState) => void) => void;\n}\n\n/**\n * Returns gas prices in dec gwei\n */\nexport default class GasFeeController extends BaseController<EthereumGasConfig, EthereumGasState> {\n name = \"GasFeeController\";\n\n private intervalId: number;\n\n private provider: SafeEventEmitterProvider;\n\n private currentChainId: string;\n\n private getNetworkIdentifier: NetworkController[\"getNetworkIdentifier\"];\n\n private getProvider: NetworkController[\"getProvider\"];\n\n private fetchGasEstimates: (url: string) => Promise<EthereumGasFeeEstimates>;\n\n private fetchGasEstimatesViaEthFeeHistory: (provider: SafeEventEmitterProvider) => Promise<EthereumGasFeeEstimates>;\n\n private fetchEthGasPriceEstimate: (provider: SafeEventEmitterProvider) => Promise<{ gasPrice: string }>;\n\n private fetchLegacyGasPriceEstimates: (url: string) => Promise<EthereumLegacyGasFeeEstimates>;\n\n private getCurrentNetworkEIP1559Compatibility: NetworkController[\"getEIP1559Compatibility\"];\n\n private getCurrentAccountEIP1559Compatibility: (address?: string) => boolean;\n\n private getCurrentNetworkLegacyGasAPICompatibility: () => boolean;\n\n constructor({\n config,\n state,\n getNetworkIdentifier,\n getProvider,\n fetchGasEstimates = defaultFetchGasEstimates,\n fetchEthGasPriceEstimate = defaultFetchEthGasPriceEstimate,\n fetchLegacyGasPriceEstimates = defaultFetchLegacyGasPriceEstimates,\n fetchGasEstimatesViaEthFeeHistory = defaultFetchGasEstimatesViaEthFeeHistory,\n getCurrentNetworkLegacyGasAPICompatibility,\n getCurrentNetworkEIP1559Compatibility,\n getCurrentAccountEIP1559Compatibility,\n onNetworkStateChange,\n }: IGasFeeControllerOptions) {\n super({ config, state });\n this.getNetworkIdentifier = getNetworkIdentifier;\n this.getProvider = getProvider;\n this.fetchGasEstimates = fetchGasEstimates;\n this.fetchEthGasPriceEstimate = fetchEthGasPriceEstimate;\n this.fetchLegacyGasPriceEstimates = fetchLegacyGasPriceEstimates;\n this.getCurrentNetworkEIP1559Compatibility = getCurrentNetworkEIP1559Compatibility;\n this.getCurrentNetworkLegacyGasAPICompatibility = getCurrentNetworkLegacyGasAPICompatibility;\n this.getCurrentAccountEIP1559Compatibility = getCurrentAccountEIP1559Compatibility;\n this.fetchGasEstimatesViaEthFeeHistory = fetchGasEstimatesViaEthFeeHistory;\n\n this.defaultConfig = {\n interval: 30_000,\n legacyAPIEndpoint: LEGACY_GAS_PRICES_API_URL,\n EIP1559APIEndpoint: GAS_FEE_API,\n };\n\n this.defaultState = {\n gasFeeEstimates: {} as EthereumGasFeeEstimates,\n estimatedGasFeeTimeBounds: {},\n gasEstimateType: GAS_ESTIMATE_TYPES.NONE,\n };\n // Initialize.\n this.currentChainId = this.getNetworkIdentifier();\n this.provider = this.getProvider();\n this.initialize();\n onNetworkStateChange(() => {\n this.onNetworkStateChange();\n });\n }\n\n async onNetworkStateChange() {\n this.provider = this.getProvider();\n const newChainId = this.getNetworkIdentifier();\n if (this.currentChainId !== newChainId) {\n this.currentChainId = newChainId;\n await this.resetPolling();\n }\n }\n\n async resetPolling() {\n this.stopPolling();\n await this.getGasFeeEstimatesAndStartPolling();\n }\n\n async fetchGasFeeEstimates() {\n return this._fetchGasFeeEstimateData();\n }\n\n async getGasFeeEstimatesAndStartPolling() {\n await this._fetchGasFeeEstimateData();\n this._startPolling();\n }\n\n disconnectPoller() {\n this.stopPolling();\n }\n\n /**\n * Prepare to discard this controller.\n *\n * This stops any active polling.\n */\n destroy() {\n this.stopPolling();\n }\n\n stopPolling() {\n if (this.intervalId) {\n clearInterval(this.intervalId);\n }\n this.resetState();\n }\n\n /**\n * Gets and sets gasFeeEstimates in state\n *\n * @returns GasFeeEstimates\n */\n private async _fetchGasFeeEstimateData(): Promise<EthereumGasState> {\n let isEIP1559Compatible: boolean;\n const isLegacyGasAPICompatible = this.getCurrentNetworkLegacyGasAPICompatibility();\n\n const chainId = this.getNetworkIdentifier();\n if (chainId === \"loading\") return;\n let chainIdInt: number;\n if (typeof chainId === \"string\" && isHexString(addHexPrefix(chainId))) {\n chainIdInt = Number.parseInt(chainId, 16);\n }\n try {\n isEIP1559Compatible = await this.getEIP1559Compatibility();\n log.info(\"eip1559 compatible\", isEIP1559Compatible);\n } catch (error) {\n log.warn(error);\n isEIP1559Compatible = false;\n }\n\n let newState = cloneDeep(this.defaultState);\n\n try {\n if (isEIP1559Compatible) {\n let estimates: EthereumGasFeeEstimates;\n try {\n estimates = await this.fetchGasEstimates(this.config.EIP1559APIEndpoint.replace(\"<chain_id>\", `${chainIdInt}`));\n } catch (error) {\n estimates = await this.fetchGasEstimatesViaEthFeeHistory(this.provider);\n }\n const { suggestedMaxPriorityFeePerGas, suggestedMaxFeePerGas } = estimates.medium;\n const estimatedGasFeeTimeBounds = this.getTimeEstimate(suggestedMaxPriorityFeePerGas, suggestedMaxFeePerGas);\n newState = {\n gasFeeEstimates: estimates,\n estimatedGasFeeTimeBounds,\n gasEstimateType: GAS_ESTIMATE_TYPES.FEE_MARKET,\n };\n } else if (isLegacyGasAPICompatible) {\n const estimates = await this.fetchLegacyGasPriceEstimates(this.config.legacyAPIEndpoint.replace(\"<chain_id>\", `${chainIdInt}`));\n newState = {\n gasFeeEstimates: estimates,\n estimatedGasFeeTimeBounds: {},\n gasEstimateType: GAS_ESTIMATE_TYPES.LEGACY,\n };\n } else {\n throw new Error(\"Main gas fee/price estimation failed. Use fallback\");\n }\n } catch {\n try {\n const estimates = await this.fetchEthGasPriceEstimate(this.provider);\n newState = {\n gasFeeEstimates: estimates,\n estimatedGasFeeTimeBounds: {},\n gasEstimateType: GAS_ESTIMATE_TYPES.ETH_GASPRICE,\n };\n } catch (error) {\n throw new Error(`Gas fee/price estimation failed. Message: ${(error as Error).message}`);\n }\n }\n this.update(newState);\n\n return newState;\n }\n\n private async _startPolling() {\n this._poll();\n }\n\n private async _poll() {\n if (this.intervalId) {\n window.clearInterval(this.intervalId);\n }\n this.intervalId = window.setInterval(async () => {\n if (!idleTimeTracker.checkIfIdle()) {\n await this._fetchGasFeeEstimateData();\n }\n }, this.config.interval);\n }\n\n private resetState() {\n this.update(cloneDeep(this.defaultState));\n }\n\n private async getEIP1559Compatibility(): Promise<boolean> {\n const currentNetworkIsEIP1559Compatible = await this.getCurrentNetworkEIP1559Compatibility();\n const currentAccountIsEIP1559Compatible = this.getCurrentAccountEIP1559Compatibility?.() ?? true;\n\n return currentNetworkIsEIP1559Compatible && currentAccountIsEIP1559Compatible;\n }\n\n private getTimeEstimate(maxPriorityFeePerGas: string, maxFeePerGas: string): GasFeeTimeBounds {\n if (!this.state.gasFeeEstimates || this.state.gasEstimateType !== GAS_ESTIMATE_TYPES.FEE_MARKET) {\n return {};\n }\n return calculateTimeEstimate(maxPriorityFeePerGas, maxFeePerGas, this.state.gasFeeEstimates as EthereumGasFeeEstimates);\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@metamask/eth-sig-util\");","import { TypedTransaction } from \"@ethereumjs/tx\";\nimport { addHexPrefix, bigIntToBytes, ecsign, stripHexPrefix } from \"@ethereumjs/util\";\nimport {\n concatSig,\n decrypt,\n EthEncryptedData,\n getEncryptionPublicKey,\n MessageTypes,\n personalSign,\n signTypedData,\n SignTypedDataVersion,\n TypedDataV1,\n TypedMessage,\n} from \"@metamask/eth-sig-util\";\nimport { BaseConfig, BaseKeyringController, IKeyringController, KeyringControllerState } from \"@toruslabs/base-controllers\";\nimport { SigningKey, Wallet } from \"ethers\";\n\nexport default class KeyringController extends BaseKeyringController<Partial<BaseConfig>, KeyringControllerState> implements IKeyringController {\n constructor({ config, state }: { config: Partial<BaseConfig>; state: Partial<KeyringControllerState> }) {\n super({ config, state });\n this.defaultState = { wallets: [] };\n this.initialize();\n }\n\n async signTransaction<T, U>(tx: T, address: string): Promise<U> {\n const txPayload = tx as unknown as TypedTransaction;\n const wallet = this._getWalletForAccount(address);\n const privKey = this.getBufferPrivateKey(wallet.privateKey);\n const signedTx = txPayload.sign(privKey);\n // Newer versions of Ethereumjs-tx are immutable and return a new tx object\n return signedTx === undefined ? (tx as unknown as U) : (signedTx as unknown as U);\n }\n\n getAccounts(): string[] {\n return this.state.wallets.map((w) => w.publicKey);\n }\n\n importAccount(accountPrivateKey: string): string {\n const hexPrivateKey = addHexPrefix(accountPrivateKey);\n const signingKey = new SigningKey(hexPrivateKey);\n const wallet = new Wallet(signingKey.privateKey);\n const { address } = wallet;\n\n const existingWallet = this.state.wallets.find((w) => w.address === address);\n if (existingWallet) return existingWallet.address;\n\n this.update({\n wallets: [\n ...this.state.wallets,\n {\n publicKey: signingKey.publicKey,\n privateKey: accountPrivateKey,\n address,\n },\n ],\n });\n return address;\n }\n\n removeAccount(address: string): void {\n const newWallets = [...this.state.wallets];\n const idx = newWallets.findIndex((w) => w.address === address);\n if (idx !== -1) {\n newWallets.splice(idx, 1);\n this.update({ wallets: newWallets });\n }\n }\n\n getBufferPrivateKey(privateKey: string) {\n const stripped = stripHexPrefix(privateKey);\n return Buffer.from(stripped, \"hex\");\n }\n\n // For eth_sign, we need to sign arbitrary data:\n signMessage(data: string, address: string) {\n const wallet = this._getWalletForAccount(address);\n const privKey = this.getBufferPrivateKey(wallet.privateKey);\n const messageSig = ecsign(Buffer.from(stripHexPrefix(data), \"hex\"), privKey);\n const sig = concatSig(Buffer.from(bigIntToBytes(messageSig.v)), Buffer.from(messageSig.r), Buffer.from(messageSig.s));\n return sig;\n }\n\n // For personal_sign, we need to prefix the message: ensure input is hashed and not buffer of utf-8\n async signPersonalMessage(data: string, address: string) {\n const wallet = this._getWalletForAccount(address);\n const privKey = this.getBufferPrivateKey(wallet.privateKey);\n const sig = personalSign({ privateKey: privKey, data });\n return sig;\n }\n\n // personal_signTypedData, signs data along with the schema\n async signTypedData<V extends SignTypedDataVersion, T extends MessageTypes>(\n typedData: V extends \"V1\" ? TypedDataV1 : TypedMessage<T>,\n address: string,\n version: V\n ) {\n const wallet = this._getWalletForAccount(address);\n const privKey = this.getBufferPrivateKey(wallet.privateKey);\n return signTypedData({ privateKey: privKey, data: typedData, version });\n }\n\n signEncryptionPublicKey(address: string) {\n const wallet = this._getWalletForAccount(address);\n return getEncryptionPublicKey(stripHexPrefix(wallet.privateKey));\n }\n\n decryptMessage(data: EthEncryptedData, address: string) {\n const wallet = this._getWalletForAccount(address);\n return decrypt({ encryptedData: data, privateKey: stripHexPrefix(wallet.privateKey) });\n }\n\n private _getWalletForAccount(account: string) {\n const address = account.toLowerCase();\n const wallet = this.state.wallets.find((w) => w.address.toLowerCase() === address);\n if (!wallet) throw new Error(\"Torus Keyring - Unable to find matching address.\");\n return wallet;\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@metamask/rpc-errors\");","import { SignTypedDataVersion } from \"@metamask/eth-sig-util\";\nimport { providerErrors, rpcErrors } from \"@metamask/rpc-errors\";\nimport { BaseConfig, BaseController, BaseState } from \"@toruslabs/base-controllers\";\nimport { JRPCRequest, Json } from \"@toruslabs/openlogin-jrpc\";\n\nimport NetworkController from \"../Network/NetworkController\";\nimport { MessageStatus } from \"../utils/constants\";\nimport { AbstractMessage, BaseRequestParams, MessageStatusType, UserRequestApprovalParams } from \"../utils/interfaces\";\n\nexport interface MessageControllerState<M extends AbstractMessage> extends BaseState {\n unapprovedMessages: Record<string, M>;\n unapprovedMessagesCount: number;\n}\n\nexport default abstract class AbstractMessageController<M extends AbstractMessage, P extends BaseRequestParams> extends BaseController<\n BaseConfig,\n MessageControllerState<M>\n> {\n protected messages: M[];\n\n protected getNetworkIdentifier: NetworkController[\"getNetworkIdentifier\"];\n\n /**\n * Controller in charge of managing - storing, adding, removing, updating - Messages.\n *\n */\n constructor({\n config,\n state,\n getNetworkIdentifier,\n }: {\n config?: Partial<BaseConfig>;\n state?: Partial<MessageControllerState<M>>;\n getNetworkIdentifier: NetworkController[\"getNetworkIdentifier\"];\n }) {\n super({ config, state });\n this.defaultState = {\n unapprovedMessages: {},\n unapprovedMessagesCount: 0,\n };\n this.messages = [];\n this.defaultConfig = {};\n this.getNetworkIdentifier = getNetworkIdentifier;\n super.initialize();\n }\n\n getMessage(messageId: string) {\n return this.messages.find((message) => message.id === messageId);\n }\n\n getAllMessages() {\n return this.messages;\n }\n\n setMetadata(messageId: string, metadata: Json) {\n const message = this.getMessage(messageId);\n if (!message) {\n throw new Error(`${this.name}: Message not found for id: ${messageId}.`);\n }\n message.metadata = metadata;\n this.updateMessage(message);\n }\n\n getUnapprovedMessages() {\n return this.messages\n .filter((message) => message.status === MessageStatus.UNAPPROVED)\n .reduce((result: { [key: string]: M }, message: M) => {\n result[message.id] = message;\n return result;\n }, {}) as { [key: string]: M };\n }\n\n async addMessage(message: M) {\n this.messages.push(message);\n this.saveMessageList();\n }\n\n approveMessage(messageId: string, messageParams: P): Promise<P> {\n this.setMessageStatus(messageId, MessageStatus.APPROVED);\n return this.prepMessageForSigning(messageParams);\n }\n\n setMessageStatus(messageId: string, status: MessageStatusType) {\n const message = this.getMessage(messageId);\n if (!message) {\n throw new Error(`${this.name}: Message not found for id: ${messageId}.`);\n }\n message.status = status;\n this.updateMessage(message);\n this.emit(`${messageId}:${status}`, message);\n if (status === MessageStatus.REJECTED || status === MessageStatus.SIGNED || status === MessageStatus.FAILED) {\n this.emit(`${messageId}:finished`, message);\n }\n }\n\n async waitForFinishStatus(msgParams: P, messageName: string): Promise<string> {\n return new Promise((resolve, reject) => {\n const handleFinished = (msg: M) => {\n if (msg.status === MessageStatus.REJECTED) {\n return reject(providerErrors.userRejectedRequest(`${messageName} Signature: User denied message signature`));\n }\n if (msg.status === MessageStatus.FAILED) {\n return reject(rpcErrors.internal(`${messageName} Signature: failed to sign message ${msg.error}`));\n }\n if (msg.status === MessageStatus.SIGNED) {\n return resolve(msg.rawSig as string);\n }\n\n return reject(rpcErrors.internal(`${messageName} Signature: Unknown problem: ${JSON.stringify(msgParams)}`));\n };\n this.once(`${msgParams.id}:finished`, handleFinished);\n });\n }\n\n protected updateMessage(message: M) {\n const index = this.messages.findIndex((msg) => message.id === msg.id);\n if (index !== -1) {\n this.messages[index] = message;\n }\n this.saveMessageList();\n }\n\n protected saveMessageList() {\n const unapprovedMessages = this.getUnapprovedMessages();\n const unapprovedMessagesCount = Object.keys(unapprovedMessages).length;\n this.update({ unapprovedMessages, unapprovedMessagesCount });\n }\n\n abstract prepMessageForSigning(messageParams: P): Promise<P>;\n\n abstract addUnapprovedMessage(\n messageParams: P,\n request: JRPCRequest<P> & UserRequestApprovalParams,\n version?: SignTypedDataVersion\n ): Promise<string>;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"jsonschema\");","import { addHexPrefix, bytesToHex, isValidAddress, stripHexPrefix } from \"@ethereumjs/util\";\nimport { EthEncryptedData, TYPED_MESSAGE_SCHEMA, TypedDataV1Field, typedSignatureHash } from \"@metamask/eth-sig-util\";\nimport { validate } from \"jsonschema\";\n\nimport { DecryptMessageParams, EncryptionPublicKeyParams, MessageParams, TypedMessageParams } from \"../utils/interfaces\";\n\nconst hexRe = /^[0-9A-Fa-f]+$/gu;\n\nexport function validateAddress(address: string, propertyName: string) {\n if (!address || typeof address !== \"string\" || !isValidAddress(address)) {\n throw new Error(`Invalid \"${propertyName}\" address: ${address} must be a valid string.`);\n }\n}\n\nexport function validateSignMessageData(messageData: MessageParams) {\n const { from, data } = messageData;\n validateAddress(from, \"from\");\n\n if (!data || typeof data !== \"string\") {\n throw new Error(`Invalid message \"data\": ${data} must be a valid string.`);\n }\n}\n\nexport function normalizeMessageData(data: string): string {\n try {\n const stripped = stripHexPrefix(data);\n if (stripped.match(hexRe)) {\n return addHexPrefix(stripped);\n }\n } catch (e) {}\n return bytesToHex(Buffer.from(data, \"utf8\"));\n}\n\nexport function validateTypedSignMessageDataV1(messageData: TypedMessageParams) {\n validateAddress(messageData.from, \"from\");\n\n if (!messageData.data || !Array.isArray(messageData.data)) {\n throw new Error(`Invalid message \"data\": ${messageData.data} must be a valid array.`);\n }\n\n try {\n // typedSignatureHash will throw if the data is invalid.\n typedSignatureHash(messageData.data as TypedDataV1Field[]);\n } catch (e) {\n throw new Error(`Expected EIP712 typed data.`);\n }\n}\n\nexport function validateTypedSignMessageDataV3V4(messageData: TypedMessageParams, currentChainId: string) {\n validateAddress(messageData.from, \"from\");\n\n if (!messageData.data || Array.isArray(messageData.data) || (typeof messageData.data !== \"object\" && typeof messageData.data !== \"string\")) {\n throw new Error(`Invalid message \"data\": Must be a valid string or object.`);\n }\n\n let data;\n if (typeof messageData.data === \"object\") {\n data = messageData.data;\n } else {\n try {\n data = JSON.parse(messageData.data);\n } catch (e) {\n throw new Error(\"Data must be passed as a valid JSON string.\");\n }\n }\n\n const validation = validate(data, TYPED_MESSAGE_SCHEMA);\n if (validation.errors.length > 0) {\n throw new Error(\"Data must conform to EIP-712 schema. See https://git.io/fNtcx.\");\n }\n\n if (!currentChainId) {\n throw new Error(\"Current chainId cannot be null or undefined.\");\n }\n\n let { chainId } = data.domain;\n if (chainId) {\n if (typeof chainId === \"string\") {\n chainId = parseInt(chainId, chainId.startsWith(\"0x\") ? 16 : 10);\n }\n\n const activeChainId = parseInt(currentChainId, 16);\n if (Number.isNaN(activeChainId)) {\n throw new Error(`Cannot sign messages for chainId \"${chainId}\", because MetaMask is switching networks.`);\n }\n\n if (chainId !== activeChainId) {\n throw new Error(`Provided chainId \"${chainId}\" must match the active chainId \"${activeChainId}\"`);\n }\n }\n}\n\nexport function validateEncryptionPublicKeyMessageData(messageData: EncryptionPublicKeyParams) {\n const { from } = messageData;\n validateAddress(from, \"from\");\n}\n\nexport function validateDecryptedMessageData(messageData: DecryptMessageParams) {\n const { from } = messageData;\n validateAddress(from, \"from\");\n}\n\nexport function parseDecryptMessageData(data: string): EthEncryptedData {\n const stripped = stripHexPrefix(data);\n const buffer = Buffer.from(stripped, \"hex\");\n return JSON.parse(buffer.toString(\"utf8\")) as EthEncryptedData;\n}\n","// import { isValidAddress } from \"@ethereumjs/util\";\nimport { BaseConfig, randomId } from \"@toruslabs/base-controllers\";\nimport { JRPCRequest } from \"@toruslabs/openlogin-jrpc\";\nimport log from \"loglevel\";\n\nimport KeyringController from \"../Keyring/KeyringController\";\nimport NetworkController from \"../Network/NetworkController\";\nimport { MESSAGE_EVENTS, MessageStatus, METHOD_TYPES } from \"../utils/constants\";\nimport { DecryptMessage, DecryptMessageParams, Message, UserRequestApprovalParams } from \"../utils/interfaces\";\nimport AbstractMessageController, { MessageControllerState } from \"./AbstractMessageController\";\nimport { normalizeMessageData, parseDecryptMessageData, validateDecryptedMessageData } from \"./utils\";\n\nexport class DecryptMessageController extends AbstractMessageController<DecryptMessage, DecryptMessageParams> {\n override name = \"DecryptMessageController\";\n\n protected decryptMessage: KeyringController[\"decryptMessage\"];\n\n constructor({\n config,\n state,\n decryptMessage,\n getNetworkIdentifier,\n }: {\n config: Partial<BaseConfig>;\n state: Partial<MessageControllerState<Message>>;\n decryptMessage: KeyringController[\"decryptMessage\"];\n getNetworkIdentifier: NetworkController[\"getNetworkIdentifier\"];\n }) {\n super({ config, state, getNetworkIdentifier });\n this.decryptMessage = decryptMessage;\n this.initialize();\n }\n\n async processDecryptMessage(messageId: string): Promise<string> {\n try {\n const msgObject = this.getMessage(messageId);\n const cleanMsgParams = await this.approveMessage(messageId, msgObject.messageParams);\n const parsedData = parseDecryptMessageData(cleanMsgParams.data);\n const rawSig = this.decryptMessage(parsedData, cleanMsgParams.from);\n this.updateMessage({ ...msgObject, rawSig });\n this.setMessageStatus(messageId, MessageStatus.SIGNED);\n return rawSig;\n } catch (error) {\n log.error(error);\n this.setMessageStatus(messageId, MessageStatus.FAILED);\n }\n }\n\n async addNewUnapprovedMessage(\n messageParams: DecryptMessageParams,\n req: JRPCRequest<DecryptMessageParams> & UserRequestApprovalParams\n ): Promise<string> {\n await this.addUnapprovedMessage(messageParams, req);\n return this.waitForFinishStatus(messageParams, this.name);\n }\n\n async addUnapprovedMessage(messageParams: DecryptMessageParams, req?: JRPCRequest<DecryptMessageParams> & UserRequestApprovalParams) {\n validateDecryptedMessageData(messageParams);\n if (req) {\n messageParams.origin = req.origin;\n }\n messageParams.data = normalizeMessageData(messageParams.data);\n const messageId = messageParams.id || randomId();\n const messageData: DecryptMessage = {\n id: messageId,\n messageParams,\n status: MessageStatus.UNAPPROVED,\n time: Date.now(),\n type: METHOD_TYPES.ETH_DECRYPT,\n };\n await this.addMessage(messageData);\n this.emit(MESSAGE_EVENTS.UNAPPROVED_MESSAGE, messageData);\n return messageId;\n }\n\n prepMessageForSigning(messageParams: DecryptMessageParams): Promise<DecryptMessageParams> {\n return Promise.resolve({ ...messageParams });\n }\n}\n","// import { isValidAddress } from \"@ethereumjs/util\";\nimport { BaseConfig, randomId } from \"@toruslabs/base-controllers\";\nimport { JRPCRequest } from \"@toruslabs/openlogin-jrpc\";\nimport log from \"loglevel\";\n\nimport KeyringController from \"../Keyring/KeyringController\";\nimport NetworkController from \"../Network/NetworkController\";\nimport { MESSAGE_EVENTS, MessageStatus, METHOD_TYPES } from \"../utils/constants\";\nimport { EncryptionPublicKey, EncryptionPublicKeyParams, UserRequestApprovalParams } from \"../utils/interfaces\";\nimport AbstractMessageController, { MessageControllerState } from \"./AbstractMessageController\";\nimport { validateEncryptionPublicKeyMessageData } from \"./utils\";\n\nexport class EncryptionPublicKeyController extends AbstractMessageController<EncryptionPublicKey, EncryptionPublicKeyParams> {\n override name = \"EncryptionPublicKeyController\";\n\n protected signEncryptionPublicKey: KeyringController[\"signEncryptionPublicKey\"];\n\n constructor({\n config,\n state,\n signEncryptionPublicKey,\n getNetworkIdentifier,\n }: {\n config: Partial<BaseConfig>;\n state: Partial<MessageControllerState<EncryptionPublicKey>>;\n signEncryptionPublicKey: KeyringController[\"signEncryptionPublicKey\"];\n getNetworkIdentifier: NetworkController[\"getNetworkIdentifier\"];\n }) {\n super({ config, state, getNetworkIdentifier });\n this.signEncryptionPublicKey = signEncryptionPublicKey;\n this.initialize();\n }\n\n async processGetEncryptionPublicKey(messageId: string): Promise<string> {\n try {\n const msgObject = this.getMessage(messageId);\n const cleanMsgParams = await this.approveMessage(messageId, msgObject.messageParams);\n const publicKey = this.signEncryptionPublicKey(cleanMsgParams.from);\n this.updateMessage({ ...msgObject, rawSig: publicKey });\n this.setMessageStatus(messageId, MessageStatus.SIGNED);\n return publicKey;\n } catch (error) {\n log.error(error);\n this.setMessageStatus(messageId, MessageStatus.FAILED);\n }\n }\n\n async addNewUnapprovedMessage(\n messageParams: EncryptionPublicKeyParams,\n req: JRPCRequest<EncryptionPublicKeyParams> & UserRequestApprovalParams\n ): Promise<string> {\n await this.addUnapprovedMessage(messageParams, req);\n return this.waitForFinishStatus(messageParams, this.name);\n }\n\n async addUnapprovedMessage(\n messageParams: EncryptionPublicKeyParams,\n req?: JRPCRequest<EncryptionPublicKeyParams> & UserRequestApprovalParams\n ): Promise<string> {\n validateEncryptionPublicKeyMessageData(messageParams);\n if (req) {\n messageParams.origin = req.origin;\n }\n const messageId = messageParams.id || randomId();\n const messageData: EncryptionPublicKey = {\n id: messageId,\n messageParams,\n status: MessageStatus.UNAPPROVED,\n time: Date.now(),\n type: METHOD_TYPES.ETH_GET_ENCRYPTION_PUBLIC_KEY,\n };\n await this.addMessage(messageData);\n this.emit(MESSAGE_EVENTS.UNAPPROVED_MESSAGE, messageData);\n return messageId;\n }\n\n prepMessageForSigning(messageParams: EncryptionPublicKeyParams): Promise<EncryptionPublicKeyParams> {\n // From should be the public key for the encryption\n return Promise.resolve({ ...messageParams, from: messageParams.data });\n }\n}\n","import { BaseConfig, randomId } from \"@toruslabs/base-controllers\";\nimport { JRPCRequest } from \"@toruslabs/openlogin-jrpc\";\nimport log from \"loglevel\";\n\nimport KeyringController from \"../Keyring/KeyringController\";\nimport NetworkController from \"../Network/NetworkController\";\nimport { MESSAGE_EVENTS, MessageStatus, METHOD_TYPES } from \"../utils/constants\";\nimport { Message, MessageParams, UserRequestApprovalParams } from \"../utils/interfaces\";\nimport AbstractMessageController, { MessageControllerState } from \"./AbstractMessageController\";\nimport { normalizeMessageData, validateSignMessageData } from \"./utils\";\n\nexport class MessageController extends AbstractMessageController<Message, MessageParams> {\n override name = \"MessageController\";\n\n protected signMessage: KeyringController[\"signMessage\"];\n\n constructor({\n config,\n state,\n signMessage,\n getNetworkIdentifier,\n }: {\n config: Partial<BaseConfig>;\n state: Partial<MessageControllerState<Message>>;\n signMessage: KeyringController[\"signMessage\"];\n getNetworkIdentifier: NetworkController[\"getNetworkIdentifier\"];\n }) {\n super({ config, state, getNetworkIdentifier });\n this.signMessage = signMessage;\n this.initialize();\n }\n\n async processSignMessage(messageId: string): Promise<string> {\n try {\n const msgObject = this.getMessage(messageId);\n const cleanMsgParams = await this.approveMessage(messageId, msgObject.messageParams);\n const rawSig = this.signMessage(cleanMsgParams.data, cleanMsgParams.from);\n this.updateMessage({ ...msgObject, rawSig });\n this.setMessageStatus(messageId, MessageStatus.SIGNED);\n return rawSig;\n } catch (error) {\n log.error(error);\n this.setMessageStatus(messageId, MessageStatus.FAILED);\n }\n }\n\n async addNewUnapprovedMessage(messageParams: MessageParams, req: JRPCRequest<MessageParams> & UserRequestApprovalParams): Promise<string> {\n await this.addUnapprovedMessage(messageParams, req);\n return this.waitForFinishStatus(messageParams, this.name);\n }\n\n async addUnapprovedMessage(messageParams: MessageParams, req: JRPCRequest<MessageParams> & UserRequestApprovalParams): Promise<string> {\n validateSignMessageData(messageParams);\n if (req) {\n messageParams.origin = req.origin;\n }\n messageParams.data = normalizeMessageData(messageParams.data);\n const messageId = messageParams.id || randomId();\n const messageData: Message = {\n id: messageId,\n messageParams,\n status: MessageStatus.UNAPPROVED,\n time: Date.now(),\n type: METHOD_TYPES.ETH_SIGN,\n };\n await this.addMessage(messageData);\n this.emit(MESSAGE_EVENTS.UNAPPROVED_MESSAGE, messageData);\n return messageId;\n }\n\n prepMessageForSigning(messageParams: MessageParams): Promise<MessageParams> {\n return Promise.resolve(messageParams);\n }\n}\n","import { BaseConfig, randomId } from \"@toruslabs/base-controllers\";\nimport { JRPCRequest } from \"@toruslabs/openlogin-jrpc\";\nimport log from \"loglevel\";\n\nimport KeyringController from \"../Keyring/KeyringController\";\nimport NetworkController from \"../Network/NetworkController\";\nimport { MESSAGE_EVENTS, MessageStatus, METHOD_TYPES } from \"../utils/constants\";\nimport { Message, MessageParams, UserRequestApprovalParams } from \"../utils/interfaces\";\nimport AbstractMessageController, { MessageControllerState } from \"./AbstractMessageController\";\nimport { normalizeMessageData, validateSignMessageData } from \"./utils\";\n\nexport class PersonalMessageController extends AbstractMessageController<Message, MessageParams> {\n override name = \"PersonalMessageController\";\n\n protected signPersonalMessage: KeyringController[\"signPersonalMessage\"];\n\n constructor({\n config,\n state,\n signPersonalMessage,\n getNetworkIdentifier,\n }: {\n config: Partial<BaseConfig>;\n state: Partial<MessageControllerState<Message>>;\n signPersonalMessage: KeyringController[\"signPersonalMessage\"];\n getNetworkIdentifier: NetworkController[\"getNetworkIdentifier\"];\n }) {\n super({ config, state, getNetworkIdentifier });\n this.signPersonalMessage = signPersonalMessage;\n this.initialize();\n }\n\n async processPersonalSignMessage(messageId: string): Promise<string> {\n try {\n const msgObject = this.getMessage(messageId);\n const cleanMsgParams = await this.approveMessage(messageId, msgObject.messageParams);\n const rawSig = await this.signPersonalMessage(cleanMsgParams.data, cleanMsgParams.from);\n this.updateMessage({ ...msgObject, rawSig });\n this.setMessageStatus(messageId, MessageStatus.SIGNED);\n return rawSig;\n } catch (error) {\n log.error(error);\n this.setMessageStatus(messageId, MessageStatus.FAILED);\n }\n }\n\n async addNewUnapprovedMessage(messageParams: MessageParams, req: JRPCRequest<MessageParams> & UserRequestApprovalParams): Promise<string> {\n await this.addUnapprovedMessage(messageParams, req);\n return this.waitForFinishStatus(messageParams, this.name);\n }\n\n async addUnapprovedMessage(messageParams: MessageParams, req: JRPCRequest<MessageParams> & UserRequestApprovalParams): Promise<string> {\n validateSignMessageData(messageParams);\n if (req) {\n messageParams.origin = req.origin;\n }\n messageParams.data = normalizeMessageData(messageParams.data);\n const messageId = messageParams.id || randomId();\n const messageData: Message = {\n id: messageId,\n messageParams,\n status: MessageStatus.UNAPPROVED,\n time: Date.now(),\n type: METHOD_TYPES.PERSONAL_SIGN,\n };\n await this.addMessage(messageData);\n this.emit(MESSAGE_EVENTS.UNAPPROVED_MESSAGE, messageData);\n return messageId;\n }\n\n prepMessageForSigning(messageParams: MessageParams): Promise<MessageParams> {\n return Promise.resolve(messageParams);\n }\n}\n","import { MessageTypes, SignTypedDataVersion, TypedDataV1, TypedMessage as EthSigTypedMessage } from \"@metamask/eth-sig-util\";\nimport { BaseConfig, randomId } from \"@toruslabs/base-controllers\";\nimport { JRPCRequest } from \"@toruslabs/openlogin-jrpc\";\nimport log from \"loglevel\";\n\nimport KeyringController from \"../Keyring/KeyringController\";\nimport NetworkController from \"../Network/NetworkController\";\nimport { MESSAGE_EVENTS, MessageStatus, METHOD_TYPES } from \"../utils/constants\";\nimport { METHOD_TYPES_TYPE, TypedMessage, TypedMessageParams, UserRequestApprovalParams } from \"../utils/interfaces\";\nimport AbstractMessageController, { MessageControllerState } from \"./AbstractMessageController\";\nimport { validateTypedSignMessageDataV1, validateTypedSignMessageDataV3V4 } from \"./utils\";\n\nfunction getMessageType(version: SignTypedDataVersion): METHOD_TYPES_TYPE {\n switch (version) {\n case SignTypedDataVersion.V1:\n return METHOD_TYPES.ETH_SIGN_TYPED_DATA;\n case SignTypedDataVersion.V3:\n return METHOD_TYPES.ETH_SIGN_TYPED_DATA_V3;\n case SignTypedDataVersion.V4:\n return METHOD_TYPES.ETH_SIGN_TYPED_DATA_V4;\n default:\n return METHOD_TYPES.ETH_SIGN_TYPED_DATA;\n }\n}\n\nexport class TypedMessageController extends AbstractMessageController<TypedMessage, TypedMessageParams> {\n override name = \"TypedMessageController\";\n\n protected signTypedData: KeyringController[\"signTypedData\"];\n\n constructor({\n config,\n state,\n signTypedData,\n getNetworkIdentifier,\n }: {\n config: Partial<BaseConfig>;\n state: Partial<MessageControllerState<TypedMessage>>;\n signTypedData: KeyringController[\"signTypedData\"];\n getNetworkIdentifier: NetworkController[\"getNetworkIdentifier\"];\n }) {\n super({ config, state, getNetworkIdentifier });\n this.signTypedData = signTypedData;\n this.initialize();\n }\n\n async processPersonalSignMessage(messageId: string): Promise<string> {\n try {\n const msgObject = this.getMessage(messageId);\n const cleanMsgParams = await this.approveMessage(messageId, msgObject.messageParams);\n const msgData = cleanMsgParams.version === SignTypedDataVersion.V1 ? cleanMsgParams.data : JSON.parse(cleanMsgParams.data as string);\n const rawSig = await this.signTypedData(msgData as TypedDataV1 | EthSigTypedMessage<MessageTypes>, cleanMsgParams.from, cleanMsgParams.version);\n this.updateMessage({ ...msgObject, rawSig });\n this.setMessageStatus(messageId, MessageStatus.SIGNED);\n return rawSig;\n } catch (error) {\n log.error(error);\n this.setMessageStatus(messageId, MessageStatus.FAILED);\n }\n }\n\n async addNewUnapprovedMessage(\n messageParams: TypedMessageParams,\n req: JRPCRequest<TypedMessageParams> & UserRequestApprovalParams,\n version: SignTypedDataVersion\n ): Promise<string> {\n await this.addUnapprovedMessage(messageParams, req, version);\n return this.waitForFinishStatus(messageParams, this.name);\n }\n\n async addUnapprovedMessage(\n messageParams: TypedMessageParams,\n req: JRPCRequest<TypedMessageParams> & UserRequestApprovalParams,\n version: SignTypedDataVersion\n ): Promise<string> {\n if (version === SignTypedDataVersion.V1) {\n validateTypedSignMessageDataV1(messageParams);\n }\n\n if (version === SignTypedDataVersion.V3 || version === SignTypedDataVersion.V4) {\n const currentChainId = this.getNetworkIdentifier();\n validateTypedSignMessageDataV3V4(messageParams, currentChainId);\n }\n\n if (typeof messageParams.data !== \"string\" && (version === SignTypedDataVersion.V3 || version === SignTypedDataVersion.V4)) {\n messageParams.data = JSON.stringify(messageParams.data);\n }\n\n if (req) {\n messageParams.origin = req.origin;\n }\n messageParams.version = version;\n const messageId = messageParams.id || randomId();\n const messageData: TypedMessage = {\n id: messageId,\n messageParams,\n status: MessageStatus.UNAPPROVED,\n time: Date.now(),\n type: getMessageType(version),\n };\n await this.addMessage(messageData);\n this.emit(MESSAGE_EVENTS.UNAPPROVED_MESSAGE, messageData);\n return messageId;\n }\n\n prepMessageForSigning(messageParams: TypedMessageParams): Promise<TypedMessageParams> {\n return Promise.resolve(messageParams);\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@toruslabs/openlogin-jrpc\");","import { InPageWalletProviderState, PROVIDER_JRPC_METHODS } from \"@toruslabs/base-controllers\";\nimport {\n createAsyncMiddleware,\n createScaffoldMiddleware,\n JRPCEngineEndCallback,\n JRPCEngineNextCallback,\n JRPCMiddleware,\n JRPCRequest,\n JRPCResponse,\n mergeMiddleware,\n} from \"@toruslabs/openlogin-jrpc\";\n\nimport { METHOD_TYPES, TRANSACTION_ENVELOPE_TYPES } from \"../utils/constants\";\nimport {\n BlockParams,\n EncryptionPublicKeyParams,\n EthereumTransactionMeta,\n MessageParams,\n TransactionParams,\n TransactionRPCMeta,\n TypedMessageParams,\n UserRequestApprovalParams,\n} from \"../utils/interfaces\";\n\nexport interface IProviderHandlers {\n version: string;\n requestAccounts?: (req: JRPCRequest<string[]>) => Promise<string[]>;\n getAccounts: (req: JRPCRequest<string[]>) => Promise<string[]>;\n\n // All operations which open popup window or modal should operate with a windowId parameter\n processTransaction?: (txParams: TransactionParams, req: JRPCRequest<TransactionParams> & UserRequestApprovalParams) => Promise<string>;\n\n processEthSignMessage?: (msgParams: MessageParams, req: JRPCRequest<MessageParams> & UserRequestApprovalParams) => Promise<string>;\n processTypedMessage?: (msgParams: TypedMessageParams, req: JRPCRequest<TypedMessageParams> & UserRequestApprovalParams) => Promise<string>;\n processTypedMessageV3?: (msgParams: TypedMessageParams, req: JRPCRequest<TypedMessageParams> & UserRequestApprovalParams) => Promise<string>;\n processTypedMessageV4?: (msgParams: TypedMessageParams, req: JRPCRequest<TypedMessageParams> & UserRequestApprovalParams) => Promise<string>;\n processPersonalMessage?: (msgParams: MessageParams, req: JRPCRequest<MessageParams> & UserRequestApprovalParams) => Promise<string>;\n\n processEncryptionPublicKey?: (\n msgParams: EncryptionPublicKeyParams,\n req: JRPCRequest<EncryptionPublicKeyParams> & UserRequestApprovalParams\n ) => Promise<string>;\n processDecryptMessage?: (msgParams: MessageParams, req: JRPCRequest<MessageParams> & UserRequestApprovalParams) => Promise<string>;\n\n getPendingNonce?: (\n nonceParams: { address: string; blockReference: string },\n req: JRPCRequest<{ address: string; blockReference: string }>\n ) => Promise<string>;\n getPendingTransactionByHash?: (hash: string, req: JRPCRequest<string>) => Promise<EthereumTransactionMeta>;\n\n getProviderState: (\n req: JRPCRequest<[]>,\n res: JRPCResponse<InPageWalletProviderState>,\n next: JRPCEngineNextCallback,\n end: JRPCEngineEndCallback\n ) => void;\n}\n\nexport function createGetAccountsMiddleware({ getAccounts }: { getAccounts: IProviderHandlers[\"getAccounts\"] }): JRPCMiddleware<never, string[]> {\n return createAsyncMiddleware(async (request, response, next) => {\n const { method } = request;\n if (method !== METHOD_TYPES.GET_ACCOUNTS) return next();\n\n if (!getAccounts) throw new Error(\"WalletMiddleware - opts.getAccounts not provided\");\n\n const accounts = await getAccounts(request);\n response.result = accounts;\n });\n}\n\nexport function createProcessTransactionMiddleware({\n processTransaction,\n}: {\n processTransaction: IProviderHandlers[\"processTransaction\"];\n}): JRPCMiddleware<TransactionParams, string> {\n return createAsyncMiddleware(async (request, response, next) => {\n const { method } = request;\n if (method !== METHOD_TYPES.ETH_TRANSACTION) return next();\n\n if (!processTransaction) throw new Error(\"WalletMiddleware - opts.processTransaction not provided\");\n\n response.result = await processTransaction(request.params, request);\n });\n}\n\nexport function createProcessEthSignMessage({\n processEthSignMessage,\n}: {\n processEthSignMessage: IProviderHandlers[\"processEthSignMessage\"];\n}): JRPCMiddleware<MessageParams, string> {\n return createAsyncMiddleware(async (request, response, next) => {\n const { method } = request;\n if (method !== METHOD_TYPES.ETH_SIGN) return next();\n\n if (!processEthSignMessage) throw new Error(\"WalletMiddleware - opts.processEthSignMessage not provided\");\n\n response.result = await processEthSignMessage(request.params, request);\n });\n}\n\nexport function createProcessTypedMessage({\n processTypedMessage,\n}: {\n processTypedMessage: IProviderHandlers[\"processTypedMessage\"];\n}): JRPCMiddleware<TypedMessageParams, string> {\n return createAsyncMiddleware(async (request, response, next) => {\n const { method } = request;\n if (method !== METHOD_TYPES.ETH_SIGN_TYPED_DATA) return next();\n\n if (!processTypedMessage) throw new Error(\"WalletMiddleware - opts.processTypedMessage not provided\");\n response.result = await processTypedMessage(request.params, request);\n });\n}\n\nexport function createProcessTypedMessageV3({\n processTypedMessageV3,\n}: {\n processTypedMessageV3: IProviderHandlers[\"processTypedMessageV3\"];\n}): JRPCMiddleware<TypedMessageParams, string> {\n return createAsyncMiddleware(async (request, response, next) => {\n const { method } = request;\n if (method !== METHOD_TYPES.ETH_SIGN_TYPED_DATA_V3) return next();\n\n if (!processTypedMessageV3) throw new Error(\"WalletMiddleware - opts.processTypedMessageV3 is not provided\");\n\n response.result = await processTypedMessageV3(request.params, request);\n });\n}\n\nexport function createProcessTypedMessageV4({\n processTypedMessageV4,\n}: {\n processTypedMessageV4: IProviderHandlers[\"processTypedMessageV4\"];\n}): JRPCMiddleware<TypedMessageParams, string> {\n return createAsyncMiddleware(async (request, response, next) => {\n const { method } = request;\n if (method !== METHOD_TYPES.ETH_SIGN_TYPED_DATA_V4) return next();\n\n if (!processTypedMessageV4) throw new Error(\"WalletMiddleware - opts.processTypedMessageV4 is not provided\");\n\n response.result = await processTypedMessageV4(request.params, request);\n });\n}\n\nexport function createProcessPersonalMessage({\n processPersonalMessage,\n}: {\n processPersonalMessage: IProviderHandlers[\"processPersonalMessage\"];\n}): JRPCMiddleware<MessageParams, string> {\n return createAsyncMiddleware(async (request, response, next) => {\n const { method } = request;\n if (method !== METHOD_TYPES.PERSONAL_SIGN) return next();\n\n if (!processPersonalMessage) throw new Error(\"WalletMiddleware - opts.processPersonalMessage is not provided\");\n\n response.result = await processPersonalMessage(request.params, request);\n });\n}\n\nexport function createPendingNonceMiddleware({\n getPendingNonce,\n}: {\n getPendingNonce: IProviderHandlers[\"getPendingNonce\"];\n}): JRPCMiddleware<{ address: string; blockReference: BlockParams }, string> {\n return createAsyncMiddleware(async (request, response, next) => {\n const { params, method } = request;\n if (method !== METHOD_TYPES.ETH_GET_TRANSACTION_COUNT) return next();\n\n const { blockReference } = params;\n if (blockReference !== \"pending\") return next();\n response.result = await getPendingNonce(params, request);\n });\n}\n\nexport function formatTxMetaForRpcResult(txMeta: EthereumTransactionMeta): TransactionRPCMeta {\n const { r, s, v, txReceipt, transaction, transactionHash, accessList } = txMeta;\n const { to, data, nonce, gas, from, value, gasPrice, maxFeePerGas, maxPriorityFeePerGas } = transaction;\n\n const formattedTxMeta: TransactionRPCMeta = {\n v,\n r,\n s,\n to,\n gas,\n from,\n hash: transactionHash,\n nonce,\n input: data || \"0x\",\n value: value || \"0x0\",\n accessList: accessList || null,\n blockHash: txReceipt?.blockHash || null,\n blockNumber: txReceipt?.blockNumber || null,\n transactionIndex: txReceipt?.transactionIndex || null,\n type: null,\n };\n\n if (maxFeePerGas && maxPriorityFeePerGas) {\n formattedTxMeta.maxFeePerGas = maxFeePerGas;\n formattedTxMeta.maxPriorityFeePerGas = maxPriorityFeePerGas;\n formattedTxMeta.type = TRANSACTION_ENVELOPE_TYPES.FEE_MARKET;\n } else {\n formattedTxMeta.gasPrice = gasPrice;\n formattedTxMeta.type = TRANSACTION_ENVELOPE_TYPES.LEGACY;\n }\n\n return formattedTxMeta;\n}\n\nexport function createPendingTxMiddleware({\n getPendingTransactionByHash,\n}: {\n getPendingTransactionByHash: IProviderHandlers[\"getPendingTransactionByHash\"];\n}): JRPCMiddleware<string, TransactionRPCMeta> {\n return createAsyncMiddleware(async (request, response, next) => {\n const { params, method } = request;\n if (method !== METHOD_TYPES.ETH_GET_TRANSACTION_BY_HASH) return next();\n\n if (!getPendingTransactionByHash) throw new Error(\"WalletMiddleware - opts.getPendingTransactionByHash not provided\");\n\n const txMeta = await getPendingTransactionByHash(params, request);\n if (!txMeta) {\n return next();\n }\n response.result = formatTxMetaForRpcResult(txMeta);\n return undefined;\n });\n}\n\nexport function createProcessEncryptionPublicKeyMiddleware({\n processEncryptionPublicKey,\n}: {\n processEncryptionPublicKey: IProviderHandlers[\"processEncryptionPublicKey\"];\n}): JRPCMiddleware<EncryptionPublicKeyParams, string> {\n return createAsyncMiddleware(async (request, response, next) => {\n const { params, method } = request;\n if (method !== METHOD_TYPES.ETH_GET_ENCRYPTION_PUBLIC_KEY) return next();\n\n if (!processEncryptionPublicKey) throw new Error(\"WalletMiddleware - opts.processEncryptionPublicKey not provided\");\n\n response.result = await processEncryptionPublicKey(params, request);\n });\n}\n\nexport function createProcessDecryptMessageMiddleware({\n processDecryptMessage,\n}: {\n processDecryptMessage: IProviderHandlers[\"processDecryptMessage\"];\n}): JRPCMiddleware<MessageParams, string> {\n return createAsyncMiddleware(async (request, response, next) => {\n const { params, method } = request;\n if (method !== METHOD_TYPES.ETH_DECRYPT) return next();\n\n if (!processDecryptMessage) throw new Error(\"WalletMiddleware - opts.processDecryptMessage not provided\");\n\n response.result = await processDecryptMessage(params, request);\n });\n}\n\nexport function createRequestAccountsMiddleware({\n requestAccounts,\n}: {\n requestAccounts: IProviderHandlers[\"requestAccounts\"];\n}): JRPCMiddleware<string[], unknown> {\n return createAsyncMiddleware(async (request, response, next) => {\n const { method } = request;\n if (method !== \"eth_requestAccounts\") return next();\n\n if (!requestAccounts) throw new Error(\"WalletMiddleware - opts.requestAccounts not provided\");\n // This calls the UI login function\n const accounts = await requestAccounts(request);\n response.result = accounts;\n return undefined;\n });\n}\n\nexport function createEthereumMiddleware(providerHandlers: IProviderHandlers): JRPCMiddleware<unknown, unknown> {\n const {\n requestAccounts,\n getAccounts,\n processTransaction,\n processEthSignMessage,\n processTypedMessage,\n processTypedMessageV3,\n processTypedMessageV4,\n processPersonalMessage,\n getPendingNonce,\n getPendingTransactionByHash,\n processEncryptionPublicKey,\n processDecryptMessage,\n getProviderState,\n version,\n } = providerHandlers;\n return mergeMiddleware([\n createScaffoldMiddleware({\n version,\n [PROVIDER_JRPC_METHODS.GET_PROVIDER_STATE]: getProviderState as JRPCMiddleware<unknown, unknown>,\n }),\n createRequestAccountsMiddleware({ requestAccounts }) as JRPCMiddleware<unknown, unknown>,\n createGetAccountsMiddleware({ getAccounts }) as JRPCMiddleware<unknown, unknown>,\n createProcessTransactionMiddleware({ processTransaction }) as JRPCMiddleware<unknown, unknown>,\n createProcessEthSignMessage({ processEthSignMessage }) as JRPCMiddleware<unknown, unknown>,\n createProcessTypedMessage({ processTypedMessage }) as JRPCMiddleware<unknown, unknown>,\n createProcessTypedMessageV3({ processTypedMessageV3 }) as JRPCMiddleware<unknown, unknown>,\n createProcessTypedMessageV4({ processTypedMessageV4 }) as JRPCMiddleware<unknown, unknown>,\n createProcessPersonalMessage({ processPersonalMessage }) as JRPCMiddleware<unknown, unknown>,\n createPendingNonceMiddleware({ getPendingNonce }) as JRPCMiddleware<unknown, unknown>,\n createPendingTxMiddleware({ getPendingTransactionByHash }) as JRPCMiddleware<unknown, unknown>,\n createProcessEncryptionPublicKeyMiddleware({ processEncryptionPublicKey }) as JRPCMiddleware<unknown, unknown>,\n createProcessDecryptMessageMiddleware({ processDecryptMessage }) as JRPCMiddleware<unknown, unknown>,\n ]);\n}\n","import { createFetchMiddleware, ProviderConfig } from \"@toruslabs/base-controllers\";\nimport {\n JRPCEngineEndCallback,\n JRPCEngineNextCallback,\n JRPCMiddleware,\n JRPCRequest,\n JRPCResponse,\n mergeMiddleware,\n providerFromMiddleware,\n} from \"@toruslabs/openlogin-jrpc\";\n\nimport PollingBlockTracker from \"../Block/PollingBlockTracker\";\n\nexport function createChainIdMiddleware(chainId: string): JRPCMiddleware<unknown, string> {\n return (req: JRPCRequest<unknown>, res: JRPCResponse<string>, next: JRPCEngineNextCallback, end: JRPCEngineEndCallback) => {\n if (req.method === \"eth_chainId\") {\n res.result = chainId;\n return end();\n }\n if (req.method === \"net_version\") {\n // convert to decimal\n res.result = Number.parseInt(chainId, 16).toString(10);\n return end();\n }\n return next();\n };\n}\n\nexport function createProviderConfigMiddleware(providerConfig: ProviderConfig): JRPCMiddleware<unknown, ProviderConfig> {\n return (req: JRPCRequest<unknown>, res: JRPCResponse<ProviderConfig>, next: JRPCEngineNextCallback, end: JRPCEngineEndCallback) => {\n if (req.method === \"eth_provider_config\") {\n res.result = providerConfig;\n return end();\n }\n return next();\n };\n}\n\nexport function createJsonRpcClient(providerConfig: ProviderConfig): {\n networkMiddleware: JRPCMiddleware<unknown, unknown>;\n blockTracker: PollingBlockTracker;\n} {\n const { chainId, rpcTarget } = providerConfig;\n const fetchMiddleware = createFetchMiddleware({ rpcTarget });\n const blockProvider = providerFromMiddleware(fetchMiddleware as JRPCMiddleware<unknown, unknown>);\n const blockTracker = new PollingBlockTracker({ config: { provider: blockProvider }, state: {} });\n\n const networkMiddleware = mergeMiddleware([\n createChainIdMiddleware(chainId) as JRPCMiddleware<unknown, unknown>,\n createProviderConfigMiddleware(providerConfig) as JRPCMiddleware<unknown, unknown>,\n // No need for the following middlewares for web because all browser sessions are quite short lived and each session is limited to scope of a window/tab\n // createBlockRefRewriteMiddleware({ blockTracker }),\n // createBlockCacheMiddleware({ blockTracker }),\n // createInflightCacheMiddleware(),\n // createBlockTrackerInspectorMiddleware({ blockTracker }),\n fetchMiddleware as JRPCMiddleware<unknown, unknown>,\n ]);\n return { networkMiddleware, blockTracker };\n}\n","import { BaseController, createEventEmitterProxy, createSwappableProxy, INetworkController } from \"@toruslabs/base-controllers\";\nimport { JRPCEngine, JRPCMiddleware, providerFromEngine, SafeEventEmitterProvider } from \"@toruslabs/openlogin-jrpc\";\nimport { Mutex } from \"async-mutex\";\nimport log from \"loglevel\";\n\nimport PollingBlockTracker from \"../Block/PollingBlockTracker\";\nimport { SUPPORTED_NETWORKS } from \"../utils/constants\";\nimport { EthereumNetworkConfig, EthereumNetworkState, EthereumProviderConfig } from \"../utils/interfaces\";\nimport { createEthereumMiddleware, IProviderHandlers } from \"./createEthereumMiddleware\";\nimport { createJsonRpcClient } from \"./createJsonRpcClient\";\n\nexport default class NetworkController\n extends BaseController<EthereumNetworkConfig, EthereumNetworkState>\n implements INetworkController<EthereumNetworkConfig, EthereumNetworkState>\n{\n name = \"NetworkController\";\n\n providerProxy: SafeEventEmitterProvider;\n\n blockTrackerProxy: PollingBlockTracker;\n\n private mutex: Mutex = new Mutex();\n\n private provider?: SafeEventEmitterProvider = null;\n\n private blockTracker?: PollingBlockTracker = null;\n\n private baseProviderHandlers: IProviderHandlers;\n\n constructor({ config, state }: { config?: Partial<EthereumNetworkConfig>; state?: Partial<EthereumNetworkState> }) {\n super({ config, state });\n\n this.defaultState = {\n chainId: \"loading\",\n properties: { EIPS_1559: undefined },\n providerConfig: SUPPORTED_NETWORKS.mainnet,\n };\n\n // when a new network is set,\n // we set to loading first and\n // then when connection succeeds,\n // we update the network\n this.initialize();\n }\n\n getNetworkIdentifier(): string {\n return this.state.chainId;\n }\n\n getNetworkRPCUrl(): string {\n return this.state.providerConfig.rpcTarget;\n }\n\n /**\n * Called by orchestrator once while initializing the class\n * @param providerHandlers - JRPC handlers for provider\n * @returns - provider - Returns the providerProxy\n */\n public initializeProvider(providerHandlers: IProviderHandlers): SafeEventEmitterProvider {\n this.baseProviderHandlers = providerHandlers;\n this.configureProvider();\n this.lookupNetwork(); // Not awaiting this, because we don't want to block the initialization\n return this.providerProxy;\n }\n\n getProvider(): SafeEventEmitterProvider {\n return this.providerProxy;\n }\n\n getBlockTracker(): PollingBlockTracker {\n return this.blockTrackerProxy;\n }\n\n getProviderConfig(): EthereumProviderConfig {\n return this.state.providerConfig;\n }\n\n setProviderConfig(config: EthereumProviderConfig): void {\n this.update({\n providerConfig: { ...config },\n });\n this.refreshNetwork();\n }\n\n async getEIP1559Compatibility(): Promise<boolean> {\n const { EIPS_1559 } = this.state.properties;\n // log.info('checking eip 1559 compatibility')\n if (EIPS_1559 !== undefined) {\n return EIPS_1559 as boolean;\n }\n const latestBlock = await this.blockTracker.getLatestBlock();\n const supportsEIP1559 = latestBlock && latestBlock.baseFeePerGas !== undefined;\n this.update({ properties: { EIPS_1559: supportsEIP1559 } });\n return supportsEIP1559;\n }\n\n /**\n * Refreshes the current network code\n */\n async lookupNetwork(): Promise<void> {\n const { chainId, rpcTarget } = this.getProviderConfig();\n if (!chainId || !rpcTarget || !this.provider) {\n this.update({ chainId: \"loading\", properties: {} });\n return;\n }\n const releaseLock = await this.mutex.acquire();\n try {\n // use eth_chainId\n const [networkChainId] = await Promise.all([this.provider.request<never, string>({ method: \"eth_chainId\" }), this.getEIP1559Compatibility()]);\n log.info(\"network fetched chain id\", networkChainId);\n // update chain ID\n this.update({\n chainId: networkChainId,\n });\n this.emit(\"networkDidChange\");\n } catch {\n this.update({\n chainId: \"loading\",\n });\n } finally {\n releaseLock();\n }\n }\n\n private configureProvider(): void {\n const { chainId, rpcTarget, ...rest } = this.getProviderConfig();\n if (!chainId || !rpcTarget) {\n throw new Error(\"chainId and rpcTarget must be provider in providerConfig\");\n }\n this.configureStandardProvider({ chainId, rpcTarget, ...rest });\n }\n\n private setNetworkClient({\n networkMiddleware,\n blockTracker,\n }: {\n networkMiddleware: JRPCMiddleware<unknown, unknown>;\n blockTracker: PollingBlockTracker;\n }): void {\n const ethereumMiddleware = createEthereumMiddleware(this.baseProviderHandlers);\n const engine = new JRPCEngine();\n engine.push(ethereumMiddleware);\n engine.push(networkMiddleware);\n const provider = providerFromEngine(engine);\n this.setProvider({ provider, blockTracker });\n }\n\n private setProvider({ provider, blockTracker }: { provider: SafeEventEmitterProvider; blockTracker: PollingBlockTracker }): void {\n if (this.providerProxy) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.providerProxy.setTarget(provider);\n } else {\n this.providerProxy = createSwappableProxy<SafeEventEmitterProvider>(provider);\n }\n\n if (this.blockTrackerProxy) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.blockTrackerProxy.setTarget(blockTracker);\n } else {\n this.blockTrackerProxy = createEventEmitterProxy<PollingBlockTracker>(blockTracker, {\n eventFilter: \"skipInternal\",\n });\n }\n\n // set new provider and blockTracker\n this.provider = provider;\n provider.setMaxListeners(10);\n this.blockTracker = blockTracker;\n }\n\n private configureStandardProvider(providerConfig: EthereumProviderConfig): void {\n const networkClient = createJsonRpcClient(providerConfig);\n log.info(\"networkClient\", networkClient);\n this.setNetworkClient(networkClient);\n }\n\n private refreshNetwork() {\n this.update({ chainId: \"loading\", properties: {} });\n this.configureProvider();\n this.lookupNetwork();\n }\n}\n","import { get } from \"@toruslabs/http-helpers\";\nimport { BrowserProvider, Contract } from \"ethers\";\nimport log from \"loglevel\";\n\nimport { erc721Abi, erc1155Abi } from \"../utils/abis\";\nimport { CONTRACT_TYPE_ERC721, CONTRACT_TYPE_ERC1155, ERC721_INTERFACE_ID, ERC1155_INTERFACE_ID, OLD_ERC721_LIST } from \"../utils/constants\";\nimport { sanitizeNftMetdataUrl } from \"../utils/helpers\";\nimport { CustomNftInfo, CustomNftItemInfo, NftStandardType } from \"../utils/interfaces\";\n\ninterface INftOptions {\n contractAddress: string;\n contractName?: string;\n contractSymbol?: string;\n contractImage?: string;\n contractSupply?: string;\n contractFallbackLogo?: string;\n nftStandard?: \"erc721\" | \"erc1155\";\n contractDescription?: string;\n chainId: string;\n provider: BrowserProvider;\n}\n\nexport class NftHandler {\n public contractAddress: string;\n\n public contractName: string;\n\n public contractSymbol: string;\n\n public contractImage: string;\n\n public contractSupply?: string;\n\n public contractFallbackLogo?: string;\n\n public nftStandard: \"erc721\" | \"erc1155\";\n\n public contractDescription?: string;\n\n public chainId: string;\n\n public provider: BrowserProvider;\n\n public isSpecial?: boolean;\n\n constructor({\n chainId,\n contractAddress,\n contractImage,\n contractName,\n contractSymbol,\n nftStandard,\n provider,\n contractDescription,\n contractFallbackLogo,\n contractSupply,\n }: INftOptions) {\n this.chainId = chainId;\n this.contractAddress = contractAddress;\n this.contractImage = contractImage;\n this.contractName = contractName;\n this.contractSymbol = contractSymbol;\n this.nftStandard = nftStandard;\n this.provider = provider;\n this.contractDescription = contractDescription;\n this.contractFallbackLogo = contractFallbackLogo;\n this.contractSupply = contractSupply;\n }\n\n async getNftMetadata(userAddress: string, tokenInfo: Partial<CustomNftItemInfo>): Promise<CustomNftItemInfo> {\n const returnNftItem: CustomNftItemInfo = { description: \"\", image: \"\", name: \"\", tokenBalance: \"\", tokenId: \"\", decimals: \"1\", ...tokenInfo };\n\n const [tokenURI, balance] = await Promise.all([\n this.getCollectibleTokenURI(returnNftItem.tokenId, this.nftStandard),\n !returnNftItem.tokenBalance ? this.fetchNftBalance(userAddress, returnNftItem.tokenId) : Promise.resolve(\"0\"),\n ]);\n returnNftItem.tokenBalance = returnNftItem.tokenBalance || balance;\n // some people put full json object in uri\n try {\n const object = JSON.parse(tokenURI);\n returnNftItem.image = returnNftItem.image || sanitizeNftMetdataUrl(object.image);\n returnNftItem.name = returnNftItem.name || object.name;\n returnNftItem.description = returnNftItem.description || object.description;\n returnNftItem.decimals = returnNftItem.decimals || object.decimals;\n } catch (error) {\n log.warn(\"Token uri is not a valid json object\", error);\n }\n const finalTokenMetaUri = sanitizeNftMetdataUrl(tokenURI);\n try {\n if (!returnNftItem.description || !returnNftItem.image || !returnNftItem.name) {\n // this call might fail, if metadata url available in smart contract is not reachable\n const object = await get<{ name: string; description: string; image: string; decimals?: string }>(finalTokenMetaUri);\n returnNftItem.image = returnNftItem.image || sanitizeNftMetdataUrl(object.image);\n returnNftItem.name = returnNftItem.name || object.name;\n returnNftItem.description = returnNftItem.description || object.description;\n returnNftItem.decimals = returnNftItem.decimals || object.decimals;\n }\n } catch (error) {\n log.error(\"Failed to fetch nft metadata\", error);\n }\n return returnNftItem;\n }\n\n async getContractMetadata(): Promise<Omit<CustomNftInfo, \"assets\">> {\n const returnNft: Omit<CustomNftInfo, \"assets\"> = {\n chainId: this.chainId,\n contractAddress: this.contractAddress,\n contractName: this.contractName,\n contractSymbol: this.contractSymbol,\n nftStandard: this.nftStandard,\n contractImage: this.contractImage,\n contractDescription: this.contractDescription,\n contractFallbackLogo: this.contractFallbackLogo,\n contractSupply: this.contractSupply,\n };\n if (!this.nftStandard) {\n const { standard, isSpecial } = await this.checkNftStandard();\n returnNft.nftStandard = standard;\n this.nftStandard = standard;\n this.isSpecial = isSpecial;\n }\n if (!this.contractName || !this.contractSymbol || !this.contractDescription) {\n const abi = this.nftStandard === CONTRACT_TYPE_ERC721 ? erc721Abi : erc1155Abi;\n const contract = new Contract(this.contractAddress, abi, this.provider);\n const [name, symbol] = await Promise.all([contract.name(), contract.symbol()]);\n returnNft.contractName = name;\n returnNft.contractSymbol = symbol;\n if (!this.contractName) this.contractName = name;\n if (!this.contractSymbol) this.contractSymbol = symbol;\n }\n\n return returnNft;\n }\n\n async fetchNftBalance(userAddress: string, tokenId: string): Promise<string> {\n const { standard } = await this.checkNftStandard();\n const abi = standard === CONTRACT_TYPE_ERC721 ? erc721Abi : erc1155Abi;\n const contract = new Contract(this.contractAddress, abi, this.provider);\n if (standard === CONTRACT_TYPE_ERC1155) {\n const balance = await contract.balanceOf(userAddress, tokenId);\n return balance;\n }\n let owner = \"\";\n try {\n owner = await contract.ownerOf(tokenId);\n } catch {\n throw new Error(\"Token id doesn't exists\");\n }\n if (owner.toLowerCase() === userAddress.toLowerCase()) {\n return \"1\";\n }\n return \"0\";\n }\n\n private async checkNftStandard(): Promise<{ isSpecial: boolean; standard: NftStandardType }> {\n // For Cryptokitties\n if (this.nftStandard && this.isSpecial !== undefined) return;\n if (Object.prototype.hasOwnProperty.call(OLD_ERC721_LIST, this.contractAddress.toLowerCase())) {\n this.nftStandard = CONTRACT_TYPE_ERC721;\n this.isSpecial = true;\n return { standard: CONTRACT_TYPE_ERC721, isSpecial: true };\n }\n const isErc721 = await this.contractSupportsInterface(CONTRACT_TYPE_ERC721, ERC721_INTERFACE_ID);\n if (isErc721) {\n this.nftStandard = CONTRACT_TYPE_ERC721;\n this.isSpecial = false;\n return { standard: CONTRACT_TYPE_ERC721, isSpecial: false };\n }\n const isErc1155 = await this.contractSupportsInterface(CONTRACT_TYPE_ERC1155, ERC1155_INTERFACE_ID);\n if (isErc1155) {\n this.nftStandard = CONTRACT_TYPE_ERC1155;\n this.isSpecial = false;\n return { standard: CONTRACT_TYPE_ERC1155, isSpecial: false };\n }\n\n throw new Error(\"Unsupported nft standard\");\n }\n\n private async contractSupportsInterface(standard: NftStandardType, interfaceId: string): Promise<boolean> {\n const abi = standard === CONTRACT_TYPE_ERC721 ? erc721Abi : erc1155Abi;\n const contract = new Contract(this.contractAddress, abi, this.provider);\n return contract.supportsInterface(interfaceId);\n }\n\n private async getCollectibleTokenURI(tokenId: string, standard: NftStandardType = CONTRACT_TYPE_ERC721): Promise<string> {\n const method = standard === CONTRACT_TYPE_ERC721 ? \"tokenURI\" : \"uri\";\n const abi = standard === CONTRACT_TYPE_ERC721 ? erc721Abi : erc1155Abi;\n const contract = new Contract(this.contractAddress, abi, this.provider);\n return contract[method](tokenId);\n }\n}\n","import { BaseController, PreferencesState } from \"@toruslabs/base-controllers\";\nimport { SafeEventEmitterProvider } from \"@toruslabs/openlogin-jrpc\";\nimport { BrowserProvider } from \"ethers\";\nimport { merge } from \"lodash\";\nimport log from \"loglevel\";\n\nimport PreferencesController from \"../Preferences/PreferencesController\";\nimport { SIMPLEHASH_SUPPORTED_CHAINS } from \"../utils/constants\";\nimport { idleTimeTracker } from \"../utils/helpers\";\nimport { CustomNftInfo, CustomNftItemInfo, EthereumNetworkState, ExtendedAddressPreferences } from \"../utils/interfaces\";\nimport { NftsControllerConfig, NftsControllerState } from \"./INftsController\";\nimport { NftHandler } from \"./NftHandler\";\n\nexport interface INftsControllerOptions {\n config?: Partial<NftsControllerConfig>;\n state?: Partial<NftsControllerState>;\n provider: SafeEventEmitterProvider;\n getCustomNfts?: PreferencesController[\"getCustomNfts\"];\n getSimpleHashNfts: PreferencesController[\"getSimpleHashNfts\"];\n onPreferencesStateChange: (listener: (preferencesState: PreferencesState<ExtendedAddressPreferences>) => void) => void;\n onNetworkStateChange: (listener: (networkState: EthereumNetworkState) => void) => void;\n}\n\nconst DEFAULT_INTERVAL = 180 * 1000;\n\nexport class NftsController extends BaseController<NftsControllerConfig, NftsControllerState> {\n name = \"NftsController\";\n\n private provider: SafeEventEmitterProvider;\n\n private ethersProvider: BrowserProvider;\n\n private _timer: number;\n\n private getCustomNfts: PreferencesController[\"getCustomNfts\"];\n\n private getSimpleHashNfts: PreferencesController[\"getSimpleHashNfts\"];\n\n constructor({ config, state, provider, getCustomNfts, getSimpleHashNfts, onPreferencesStateChange, onNetworkStateChange }: INftsControllerOptions) {\n super({ config, state });\n\n this.provider = provider;\n this.ethersProvider = new BrowserProvider(this.provider, \"any\");\n\n this.getCustomNfts = getCustomNfts;\n this.getSimpleHashNfts = getSimpleHashNfts;\n\n this.defaultConfig = {\n interval: DEFAULT_INTERVAL,\n selectedAddress: \"\",\n chainId: \"\",\n };\n\n this.defaultState = {\n nfts: {},\n };\n this.initialize();\n onPreferencesStateChange((preferencesState) => {\n if (preferencesState.selectedAddress !== this.config.selectedAddress) {\n this.configure({ selectedAddress: preferencesState.selectedAddress });\n this.restartNftDetection();\n }\n });\n\n onNetworkStateChange((networkState) => {\n const { chainId } = networkState.providerConfig;\n if (chainId !== this.config.chainId) {\n this.configure({ chainId });\n this.restartNftDetection();\n }\n });\n }\n\n get userSelectedAddress(): string {\n return this.config.selectedAddress;\n }\n\n get userNfts() {\n if (!this.userSelectedAddress) return [];\n return this.state.nfts[this.userSelectedAddress] ?? [];\n }\n\n get interval(): number {\n return this.config.interval;\n }\n\n set interval(interval: number) {\n if (this._timer) window.clearInterval(this._timer);\n if (!interval) {\n return;\n }\n this._timer = window.setInterval(() => {\n if (!idleTimeTracker.checkIfIdle()) {\n this.detectNewNfts();\n this.refreshNftBalances();\n }\n }, interval);\n }\n\n public startNftDetection(selectedAddress: string) {\n this.configure({ selectedAddress });\n this.restartNftDetection();\n }\n\n /**\n * Restart nft detection polling period and call detectNewNfts\n * in case of address change or user session initialization.\n *\n */\n public restartNftDetection() {\n if (!this.userSelectedAddress) {\n return;\n }\n this.detectNewNfts();\n this.refreshNftBalances();\n this.config.interval = DEFAULT_INTERVAL;\n }\n\n public detectNewNfts() {\n const userAddress = this.userSelectedAddress;\n if (!userAddress) return;\n const currentChainId = this.config.chainId;\n const nftsToDetect: CustomNftInfo[] = []; // object[]\n if (!currentChainId) {\n this.update({ nfts: { [userAddress]: [...nftsToDetect] } });\n return;\n }\n\n if (this.getCustomNfts) {\n const customNfts = this.getCustomNfts(userAddress);\n\n const reducedNfts = customNfts.reduce(\n (acc, x) => {\n // first aggregate by contract address\n if (x.network === currentChainId) {\n const newAsset: CustomNftItemInfo = {\n description: \"\",\n image: \"\",\n name: \"\",\n tokenBalance: \"\",\n tokenId: x.nft_id,\n customNftId: x.id.toString(),\n };\n if (acc[x.nft_address]) {\n acc[x.nft_address].assets.push(newAsset);\n } else {\n const objToPush: CustomNftInfo = {\n assets: [newAsset],\n chainId: x.network,\n contractAddress: x.nft_address,\n contractName: \"\",\n contractSymbol: \"\",\n contractImage: \"\",\n nftStandard: x.nft_contract_standard,\n contractDescription: \"\",\n } as CustomNftInfo;\n acc[x.nft_address] = objToPush;\n }\n }\n return acc;\n },\n {} as Record<string, CustomNftInfo>\n );\n nftsToDetect.push(...Object.values(reducedNfts));\n }\n this.update({ nfts: { [userAddress]: [...nftsToDetect] } });\n }\n\n async refreshNftBalances() {\n const userAddress = this.userSelectedAddress;\n if (userAddress === \"\") return;\n const oldNfts = [...this.userNfts];\n const nonZeroNfts: CustomNftInfo[] = [];\n try {\n const currentChainId = this.config.chainId;\n if (SIMPLEHASH_SUPPORTED_CHAINS.includes(currentChainId)) {\n const simpleHashBalances = await this.getSimpleHashNfts(userAddress, currentChainId);\n nonZeroNfts.push(...simpleHashBalances);\n this.update({ nfts: { [userAddress]: nonZeroNfts } });\n }\n if (oldNfts.length > 0) {\n this.getNftBalancesUsingHandler(oldNfts);\n }\n } catch (error) {\n log.error(error, \"unable to fetch nft balances\");\n }\n }\n\n async getNftBalancesUsingHandler(customNfts: CustomNftInfo[]) {\n if (!this.userSelectedAddress) return;\n const userAddress = this.userSelectedAddress;\n const currentNetworkNfts = customNfts;\n const promiseSettledResult = await Promise.allSettled(\n currentNetworkNfts.map(async (x) => {\n try {\n const tokenInstance = new NftHandler({\n ...x,\n provider: this.ethersProvider,\n });\n const contractData = await tokenInstance.getContractMetadata();\n const assetData = await Promise.allSettled(x.assets.map((y) => tokenInstance.getNftMetadata(userAddress, y)));\n return {\n ...contractData,\n assets: assetData.filter((z) => z.status === \"fulfilled\").map((z) => (z as PromiseFulfilledResult<CustomNftItemInfo>).value),\n } as CustomNftInfo;\n } catch (error) {\n log.warn(\"Invalid contract address while fetching\", error);\n return undefined;\n }\n })\n );\n const nonZeroTokens = promiseSettledResult.filter((x) => x.status === \"fulfilled\").map((x) => (x as PromiseFulfilledResult<CustomNftInfo>).value);\n\n this.update({ nfts: { [userAddress]: merge(this.userNfts, nonZeroTokens) } });\n }\n}\n","import {\n ACTIVITY_ACTION_RECEIVE,\n ACTIVITY_ACTION_SEND,\n ACTIVITY_ACTION_TOPUP,\n BasePreferencesController,\n CustomNft,\n CustomToken,\n IPreferencesController,\n PreferencesConfig,\n PreferencesState,\n TransactionStatus,\n UserInfo,\n} from \"@toruslabs/base-controllers\";\nimport { get, patch, post, remove } from \"@toruslabs/http-helpers\";\nimport { SafeEventEmitterProvider } from \"@toruslabs/openlogin-jrpc\";\nimport { Mutex } from \"async-mutex\";\nimport log from \"loglevel\";\n\nimport PollingBlockTracker from \"../Block/PollingBlockTracker\";\nimport KeyringController from \"../Keyring/KeyringController\";\nimport NetworkController from \"../Network/NetworkController\";\nimport { SUPPORTED_NETWORKS } from \"../utils/constants\";\nimport { formatDate, formatPastTx, formatTime, getEthTxStatus } from \"../utils/helpers\";\nimport type {\n CustomNetworkPayload,\n CustomNetworks,\n CustomNftInfo,\n CustomTokenInfo,\n EthereumUser,\n ExtendedAddressPreferences,\n FetchCommonTransaction,\n FetchedTransaction,\n FormattedTransactionActivity,\n TransactionPayload,\n} from \"../utils/interfaces\";\n\ninterface IPreferencesControllerOptions {\n config?: Partial<PreferencesConfig> & Pick<PreferencesConfig, \"api\" | \"commonApiHost\" | \"signInPrefix\">;\n state?: Partial<PreferencesState<ExtendedAddressPreferences>>;\n provider: SafeEventEmitterProvider;\n // TODO: Require later\n blockTracker?: PollingBlockTracker;\n signAuthMessage?: KeyringController[\"signAuthMessage\"];\n getProviderConfig?: NetworkController[\"getProviderConfig\"];\n}\n\nexport default class PreferencesController\n extends BasePreferencesController<ExtendedAddressPreferences, PreferencesConfig, PreferencesState<ExtendedAddressPreferences>>\n implements IPreferencesController<ExtendedAddressPreferences, PreferencesConfig, PreferencesState<ExtendedAddressPreferences>>\n{\n private _handle?: number;\n\n private _mutex: Mutex = new Mutex();\n\n private getProviderConfig: NetworkController[\"getProviderConfig\"];\n\n private provider: SafeEventEmitterProvider;\n\n private blockTracker: PollingBlockTracker;\n\n constructor({ config, state, provider, blockTracker, signAuthMessage, getProviderConfig }: IPreferencesControllerOptions) {\n super({ config, state, defaultPreferences: { formattedPastTransactions: [], fetchedPastTx: [], paymentTx: [] }, signAuthMessage });\n this.provider = provider;\n this.getProviderConfig = getProviderConfig;\n this.blockTracker = blockTracker;\n log.info(this.blockTracker);\n }\n\n public async poll(interval?: number): Promise<void> {\n const releaseLock = await this._mutex.acquire();\n if (interval) this.configure({ pollInterval: interval });\n if (this._handle) window.clearTimeout(this._handle);\n // call here\n const storeSelectedAddress = this.state.selectedAddress;\n if (!storeSelectedAddress) return;\n if (!this.getAddressState(storeSelectedAddress)?.jwtToken) return;\n // This should never throw\n await this.sync(storeSelectedAddress);\n releaseLock();\n this._handle = window.setTimeout(() => {\n this.poll(this.config.pollInterval);\n }, this.config.pollInterval);\n }\n\n public async initPreferences(params: {\n address: string;\n jwtToken?: string;\n calledFromEmbed?: boolean;\n userInfo?: UserInfo;\n rehydrate?: boolean;\n locale?: string;\n type?: string;\n signatures?: string[];\n network?: string;\n }): Promise<void> {\n const { address, jwtToken, calledFromEmbed, userInfo, rehydrate, locale = \"en-US\", type, signatures, network } = params;\n await super.init(address, userInfo, jwtToken, { type, email: userInfo.email, signatures, network });\n const { aggregateVerifier, verifier, verifierId } = userInfo || {};\n const userExists = await this.sync(address);\n if (!userExists) {\n const accountState = this.getAddressState(address);\n await this.createUser({\n selectedCurrency: accountState.selectedCurrency,\n theme: accountState.theme,\n verifier: aggregateVerifier || verifier,\n verifierId,\n locale,\n address,\n });\n }\n if (!rehydrate)\n await this.storeUserLogin({ verifier: aggregateVerifier || verifier, verifierId, options: { calledFromEmbed, rehydrate }, address });\n }\n\n public getSelectedAddress(): string {\n return this.state.selectedAddress;\n }\n\n async sync(address: string): Promise<boolean> {\n try {\n const user = await this.getUser<EthereumUser>(address);\n if (user) {\n const {\n default_currency: defaultCurrency,\n contacts,\n theme,\n locale,\n public_address: userPublicAddress,\n default_public_address: defaultPublicAddress,\n customNetworks,\n customTokens,\n customNfts,\n } = user || {};\n\n // update latest data in state.\n this.updateState(\n {\n contacts,\n theme,\n selectedCurrency: defaultCurrency,\n locale,\n defaultPublicAddress: defaultPublicAddress || userPublicAddress,\n customTokens,\n customNfts,\n customNetworks,\n },\n address\n );\n return true;\n }\n return false;\n } catch (error) {\n log.error(error);\n return false;\n } finally {\n Promise.all([\n this.getWalletOrders<FetchedTransaction>(address).catch((error) => {\n log.error(\"unable to fetch wallet orders\", error);\n }),\n this.getTopUpOrders<FetchCommonTransaction>(address).catch((error) => {\n log.error(\"unable to fetch top up orders\", error);\n }),\n ])\n .then((data) => {\n const [walletTx, paymentTx] = data;\n if (paymentTx) {\n this.calculatePaymentTx(paymentTx, address);\n }\n // eslint-disable-next-line promise/always-return\n if (walletTx && walletTx.length > 0) {\n this.updateState({ fetchedPastTx: [...walletTx] }, address);\n this.calculatePastTx(walletTx, address);\n }\n })\n .catch((error) => log.error(error));\n }\n }\n\n public async patchNewTx(tx: TransactionPayload, address: string): Promise<void> {\n const formattedTx = formatPastTx(tx);\n const storePastTx = this.getAddressState(address)?.formattedPastTransactions;\n const duplicateIndex = storePastTx.findIndex((x) => x.transaction_hash === tx.transaction_hash && x.networkType === tx.network);\n if (tx.status === TransactionStatus.submitted || tx.status === TransactionStatus.confirmed) {\n if (duplicateIndex === -1) {\n // No duplicate found\n\n const finalTx = this.cancelTxCalculate([...storePastTx, formattedTx]);\n tx.is_cancel = formattedTx.is_cancel;\n tx.to = tx.to.toLowerCase();\n tx.from = tx.from.toLowerCase();\n\n this.updateState({ formattedPastTransactions: finalTx }, address);\n this.postPastTx<TransactionPayload>(tx, address);\n } else {\n // avoid overriding is_cancel\n formattedTx.is_cancel = storePastTx[duplicateIndex].is_cancel;\n storePastTx[duplicateIndex] = formattedTx;\n this.updateState({ formattedPastTransactions: this.cancelTxCalculate([...storePastTx]) }, address);\n }\n }\n }\n\n public recalculatePastTx(address?: string) {\n // This triggers store update which calculates past Tx status for that network\n const selectedAddress = address || this.state.selectedAddress;\n const state = this.getAddressState(selectedAddress);\n if (!state?.fetchedPastTx) return;\n this.calculatePastTx(state.fetchedPastTx, selectedAddress);\n }\n\n public async refetchEtherscanTx(address?: string) {\n const selectedAddress = address || this.state.selectedAddress;\n if (this.getAddressState(selectedAddress)?.jwtToken) {\n // const selectedNetwork = this.getProviderConfig().rpcTarget;\n // if (ETHERSCAN_SUPPORTED_NETWORKS.has(selectedNetwork)) {\n // const data = await this.fetchEtherscanTx({ selectedAddress, selectedNetwork });\n // if (data.length) {\n // this.emit(\"addEtherscanTransactions\", data, selectedNetwork);\n // }\n // }\n }\n }\n\n async fetchEtherscanTx<T>(parameters: { selectedAddress: string; selectedNetwork: string }): Promise<T[]> {\n try {\n const url = new URL(`${this.config.api}/etherscan`);\n Object.keys(parameters).forEach((key) => url.searchParams.append(key, parameters[key as keyof typeof parameters]));\n const response = await get<{ success: boolean; data: T[] }>(url.href, this.headers(parameters.selectedAddress));\n return response.success ? response.data : [];\n } catch (error) {\n log.error(\"unable to fetch etherscan tx\", error);\n return [];\n }\n }\n\n public async getEtherScanTokens(address: string, chainId: string): Promise<CustomTokenInfo[]> {\n const selectedAddress = address;\n const apiUrl = new URL(this.config.api);\n apiUrl.pathname = `/tokens`;\n apiUrl.searchParams.append(\"chainId\", chainId);\n apiUrl.searchParams.append(\"address\", selectedAddress);\n const result = await get<{ data: CustomTokenInfo[] }>(apiUrl.href, this.headers(this.state.selectedAddress));\n return result.data;\n }\n\n public async getSimpleHashNfts(address: string, chainId: string): Promise<CustomNftInfo[]> {\n const selectedAddress = address;\n const apiUrl = new URL(this.config.api);\n apiUrl.pathname = `/nfts`;\n apiUrl.searchParams.append(\"chainId\", chainId);\n apiUrl.searchParams.append(\"address\", selectedAddress);\n const result = await get<{ data: CustomNftInfo[] }>(apiUrl.href, this.headers(this.state.selectedAddress));\n return result.data;\n }\n\n public getCustomTokens(address?: string): CustomToken[] {\n return this.getAddressState(address)?.customTokens ?? [];\n }\n\n public getCustomNfts(address?: string): CustomNft[] {\n return this.getAddressState(address)?.customNfts ?? [];\n }\n\n // Custom Network methods\n public async addCustomNetwork({ type, network }: { type: string; network: CustomNetworkPayload }): Promise<number> {\n try {\n const apiUrl = new URL(this.config.api);\n apiUrl.pathname = `/customnetwork/${type}`;\n const { selectedAddress } = this.state;\n const payload = {\n network_name: network.displayName,\n rpc_url: network.rpcTarget,\n chain_id: network.chainId,\n symbol: network.ticker,\n block_explorer_url: network.blockExplorerUrl || undefined,\n is_test_net: network.isTestnet || false,\n };\n const res = await post<{ data: CustomNetworks }>(apiUrl.href, payload, this.headers(selectedAddress), { useAPIKey: true });\n await this.sync(selectedAddress);\n\n return res.data.id;\n } catch {\n log.error(\"error adding custom network\");\n return null;\n }\n }\n\n async deleteCustomNetwork(id: number) {\n try {\n const { selectedAddress } = this.state;\n const apiUrl = new URL(this.config.api);\n apiUrl.pathname = `/customnetwork/${id}`;\n await remove(apiUrl.href, {}, this.headers(selectedAddress), { useAPIKey: true });\n await this.sync(selectedAddress);\n return true;\n } catch {\n log.error(\"error deleting custom network\");\n return false;\n }\n }\n\n async editCustomNetwork({ network, id }: { network: CustomNetworkPayload; id: number | null }) {\n try {\n const { selectedAddress } = this.state;\n const apiUrl = new URL(this.config.api);\n apiUrl.pathname = `/customnetwork/${id}`;\n\n const payload = {\n network_name: network.displayName,\n rpc_url: network.rpcTarget,\n chain_id: network.chainId,\n symbol: network.ticker || undefined,\n block_explorer_url: network.blockExplorerUrl || undefined,\n is_test_net: network.isTestnet || false,\n };\n await patch(apiUrl.href, payload, this.headers(selectedAddress), { useAPIKey: true });\n await this.sync(selectedAddress);\n return true;\n } catch {\n log.error(\"error editing custom network\");\n return false;\n }\n }\n\n private calculatePaymentTx(txs: FetchCommonTransaction[], address: string) {\n const accumulator: FetchCommonTransaction[] = [];\n for (const x of txs) {\n let action = \"\";\n const lowerCaseAction = x.action.toLowerCase();\n if (ACTIVITY_ACTION_TOPUP.includes(lowerCaseAction)) action = ACTIVITY_ACTION_TOPUP;\n else if (ACTIVITY_ACTION_SEND.includes(lowerCaseAction)) action = ACTIVITY_ACTION_SEND;\n else if (ACTIVITY_ACTION_RECEIVE.includes(lowerCaseAction)) action = ACTIVITY_ACTION_RECEIVE;\n\n accumulator.push({\n id: x.id,\n date: new Date(x.date).toDateString(),\n from: x.from,\n slicedFrom: x.slicedFrom,\n action,\n to: x.to,\n slicedTo: x.slicedTo,\n totalAmount: x.totalAmount,\n totalAmountString: x.totalAmountString,\n currencyAmount: x.currencyAmount,\n currencyAmountString: x.currencyAmountString,\n amount: x.amount,\n ethRate: x.ethRate,\n status: x.status.toLowerCase(),\n etherscanLink: x.etherscanLink || \"\",\n blockExplorerLink: \"\",\n currencyUsed: x.currencyUsed,\n });\n }\n this.updateState({ paymentTx: accumulator }, address);\n }\n\n private async calculatePastTx(txs: FetchedTransaction[], address: string) {\n const pastTx = [];\n const pendingTx = [];\n const lowerCaseSelectedAddress = address.toLowerCase();\n for (const x of txs) {\n if (\n x.network === SUPPORTED_NETWORKS[this.getProviderConfig().chainId].chainId &&\n x.to &&\n x.from &&\n (lowerCaseSelectedAddress === x.from.toLowerCase() || lowerCaseSelectedAddress === x.to.toLowerCase())\n ) {\n if (x.status !== \"confirmed\") {\n pendingTx.push(x);\n } else {\n const finalObject = formatPastTx(x, lowerCaseSelectedAddress);\n pastTx.push(finalObject);\n }\n }\n }\n const pendingTxPromises = pendingTx.map((x) => getEthTxStatus(x.transaction_hash, this.provider).catch((error) => log.error(error)));\n const resolvedTxStatuses = await Promise.all(pendingTxPromises);\n for (const [index, element] of pendingTx.entries()) {\n const finalObject = formatPastTx(element, lowerCaseSelectedAddress);\n finalObject.status = resolvedTxStatuses[index] || TransactionStatus.submitted;\n pastTx.push(finalObject);\n if (lowerCaseSelectedAddress === element.from.toLowerCase() && finalObject.status && finalObject.status !== element.status)\n this.patchPastTx({ id: element.id, status: finalObject.status, updated_at: new Date().toISOString() }, address);\n }\n\n const finalTx = this.cancelTxCalculate(pastTx);\n\n this.updateState({ formattedPastTransactions: [...finalTx] }, address);\n }\n\n private cancelTxCalculate(pastTx: FormattedTransactionActivity[]) {\n const nonceMap: Record<string, FormattedTransactionActivity[]> = {};\n for (const x of pastTx) {\n if (!nonceMap[x.nonce]) nonceMap[x.nonce] = [x];\n else {\n nonceMap[x.nonce].push(x);\n }\n }\n\n for (const [, value] of Object.entries(nonceMap)) {\n // has duplicate\n if (value.length > 1) {\n // get latest and mark it as is_cancel\n const latestTxs = value.sort((a, b) => {\n const aDate = new Date(a.date).getTime();\n const bDate = new Date(b.date).getTime();\n return bDate - aDate;\n });\n const latestCancelTx = latestTxs[0];\n latestCancelTx.is_cancel = true;\n latestTxs.slice(1).forEach((x) => {\n x.hasCancel = true;\n x.status = latestCancelTx.status === \"confirmed\" ? TransactionStatus.cancelled : TransactionStatus.cancelling;\n x.cancelDateInitiated = `${formatTime(new Date(latestCancelTx.date).getTime())} - ${formatDate(latestCancelTx.date)}`;\n x.etherscanLink = latestCancelTx.etherscanLink;\n x.cancelGas = latestCancelTx.gas;\n x.cancelGasPrice = latestCancelTx.gasPrice;\n });\n }\n }\n\n return pastTx;\n }\n}\n","import BigNumber from \"bignumber.js\";\nimport { BrowserProvider, Contract } from \"ethers\";\nimport log from \"loglevel\";\n\nimport { ecr20Abi } from \"../utils/abis\";\n\nexport interface ITokenOptions {\n address: string;\n symbol: string;\n decimals: number;\n name: string;\n provider: BrowserProvider;\n}\n\nexport class TokenHandler {\n public address: string;\n\n public symbol: string;\n\n public decimals: number;\n\n public name: string;\n\n public contract: Contract;\n\n constructor({ address, symbol, decimals, name, provider }: ITokenOptions) {\n this.address = address;\n\n this.contract = new Contract(address, ecr20Abi, provider);\n this.symbol = symbol;\n this.decimals = decimals;\n this.name = name;\n }\n\n public async getSymbol(): Promise<string> {\n if (!this.symbol || this.symbol === \"ERC20\") this.symbol = await this.contract.symbol();\n return this.symbol;\n }\n\n public async getDecimals(): Promise<number> {\n try {\n if (!this.decimals) this.decimals = await this.contract.decimals();\n return this.decimals;\n } catch (error) {\n log.warn(`Could not get decimals for token ${this.address}`, error);\n return 0;\n }\n }\n\n public async getName(): Promise<string> {\n if (!this.name) this.name = await this.contract.name();\n return this.name;\n }\n\n public async getUserBalance(userAddress: string) {\n if (!this.decimals) await this.getDecimals();\n const balance = await this.contract.balanceOf(userAddress);\n return new BigNumber(balance).toString(16);\n }\n}\n","import { BaseConfig, BaseController, BaseState, PreferencesState } from \"@toruslabs/base-controllers\";\nimport { get } from \"@toruslabs/http-helpers\";\nimport log from \"loglevel\";\n\nimport { COINGECKO_PLATFORMS_CHAIN_CODE_MAP, COINGECKO_SUPPORTED_CURRENCIES } from \"../utils/constants\";\nimport { idleTimeTracker } from \"../utils/helpers\";\nimport { CustomTokenInfo, EthereumNetworkState, ExtendedAddressPreferences } from \"../utils/interfaces\";\nimport { TokensControllerState } from \"./ITokensController\";\n\nexport interface CoinGeckoResponse {\n [address: string]: {\n [currency: string]: number;\n };\n}\n\ntype ContractExchangeRates = Record<string, number | undefined>;\n\nexport const DEFAULT_CURRENCY = \"eth\";\n\nexport interface ITokenRatesControllerState extends BaseState {\n contractExchangeRates: ContractExchangeRates;\n}\n\nexport interface ITokenRatesControllerConfig extends BaseConfig {\n pollInterval: number;\n api: string;\n currencyApi: string;\n chainId: string;\n selectedAddress: string;\n nativeCurrency: string;\n tokens: CustomTokenInfo[];\n}\n\nexport interface TokenRatesControllerOptions {\n config: Partial<ITokenRatesControllerConfig>;\n state: Partial<ITokenRatesControllerState>;\n onPreferencesStateChange: (listener: (preferencesState: PreferencesState<ExtendedAddressPreferences>) => void) => void;\n onTokensStateChange: (listener: (tokensState: TokensControllerState) => void) => void;\n onNetworkStateChange: (listener: (networkState: EthereumNetworkState) => void) => void;\n}\n\nexport class TokenRatesController extends BaseController<ITokenRatesControllerConfig, ITokenRatesControllerState> {\n private conversionInterval: number;\n\n constructor({ config, state, onPreferencesStateChange, onNetworkStateChange, onTokensStateChange }: TokenRatesControllerOptions) {\n super({ config, state });\n this.defaultState = {\n ...this.defaultState,\n contractExchangeRates: {},\n };\n this.initialize();\n\n onPreferencesStateChange((preferencesState) => {\n const { selectedAddress } = preferencesState;\n this.configure({ selectedAddress });\n });\n\n onNetworkStateChange((networkState) => {\n const { chainId, ticker } = networkState.providerConfig;\n this.configure({ chainId, nativeCurrency: ticker });\n });\n\n onTokensStateChange((tokensState) => {\n const { tokens } = tokensState;\n const currentUserTokens = tokens[this.config.selectedAddress];\n if (currentUserTokens?.length > 0 && this.config.tokens !== tokens[this.config.selectedAddress]) {\n this.configure({ tokens: tokens[this.config.selectedAddress] });\n this.updateExchangeRates();\n }\n });\n }\n\n /**\n * Creates a new poll, using setInterval, to periodically call updateConversionRate. The id of the interval is\n * stored at the controller's conversionInterval property. If it is called and such an id already exists, the\n * previous interval is clear and a new one is created.\n */\n public scheduleConversionInterval(): void {\n if (this.conversionInterval) {\n window.clearInterval(this.conversionInterval);\n }\n this.conversionInterval = window.setInterval(() => {\n if (!idleTimeTracker.checkIfIdle()) {\n this.updateExchangeRates();\n }\n }, this.config.pollInterval);\n }\n\n public async updateExchangeRates() {\n const chainCodes = COINGECKO_PLATFORMS_CHAIN_CODE_MAP[this.config.chainId];\n let newContractExchangeRates: ContractExchangeRates = {};\n if (!chainCodes) {\n log.info(`ChainId ${this.config.chainId} not supported by coingecko`);\n this.config.tokens.forEach((token) => {\n newContractExchangeRates[token.tokenAddress] = undefined;\n });\n } else {\n newContractExchangeRates = await this.fetchExchangeRates(this.config.nativeCurrency, chainCodes);\n }\n this.update({ contractExchangeRates: newContractExchangeRates });\n }\n\n private async fetchExchangeRates(nativeCurrency: string, chainCodes: { platform: string; currency: string }): Promise<ContractExchangeRates> {\n const contractAddresses = this.config.tokens.map((token) => token.tokenAddress);\n\n const isNativeCurrencySupported = COINGECKO_SUPPORTED_CURRENCIES.has(nativeCurrency.toLowerCase());\n if (isNativeCurrencySupported) {\n const response = await get<CoinGeckoResponse>(\n `${this.config.api}/simple/token_price/${chainCodes.platform}?contract_addresses=${contractAddresses.join(\n \",\"\n )}&vs_currencies=${nativeCurrency.toLowerCase()}&include_market_cap=false&include_24hr_vol=false&include_24hr_change=false&include_last_updated_at=false`\n );\n const newContractExchangeRates: ContractExchangeRates = {};\n Object.keys(response).forEach((contractAddress) => {\n newContractExchangeRates[contractAddress] = response[contractAddress][nativeCurrency.toLowerCase()] || 0;\n });\n return newContractExchangeRates;\n }\n const [response, currencyResponse] = await Promise.all([\n get<CoinGeckoResponse>(\n `${this.config.api}/simple/token_price/${chainCodes.platform}?contract_addresses=${contractAddresses.join(\n \",\"\n )}&vs_currencies=${DEFAULT_CURRENCY}&include_market_cap=false&include_24hr_vol=false&include_24hr_change=false&include_last_updated_at=false`\n ),\n get<Record<string, string>>(`${this.config.currencyApi}/currency?fsym=${nativeCurrency.toUpperCase()}&tsyms=${DEFAULT_CURRENCY.toUpperCase()}`),\n ]);\n const newContractExchangeRates: ContractExchangeRates = {};\n Object.keys(response).forEach((contractAddress) => {\n newContractExchangeRates[contractAddress] =\n response[contractAddress][DEFAULT_CURRENCY] * Number.parseFloat(currencyResponse[DEFAULT_CURRENCY]) || 0;\n });\n return newContractExchangeRates;\n }\n}\n","import { BaseController, PreferencesState } from \"@toruslabs/base-controllers\";\nimport { SafeEventEmitterProvider } from \"@toruslabs/openlogin-jrpc\";\nimport { BrowserProvider, Contract, toQuantity } from \"ethers\";\nimport log from \"loglevel\";\n\nimport NetworkController from \"../Network/NetworkController\";\nimport PreferencesController from \"../Preferences/PreferencesController\";\nimport { singleBalanceCheckerAbi } from \"../utils/abis\";\nimport { ETHERSCAN_SUPPORTED_CHAINS } from \"../utils/constants\";\nimport { SINGLE_CALL_BALANCES_ADDRESSES } from \"../utils/contractAddresses\";\nimport { idleTimeTracker, toChecksumAddressByChainId } from \"../utils/helpers\";\nimport { CustomTokenInfo, EthereumNetworkState, ExtendedAddressPreferences } from \"../utils/interfaces\";\nimport { TokensControllerConfig, TokensControllerState } from \"./ITokensController\";\nimport { TokenHandler } from \"./TokenHandler\";\n\nexport interface ITokensControllerOptions {\n config?: Partial<TokensControllerConfig>;\n state?: Partial<TokensControllerState>;\n provider: SafeEventEmitterProvider;\n getCustomTokens?: PreferencesController[\"getCustomTokens\"];\n getEtherScanTokens: PreferencesController[\"getEtherScanTokens\"];\n getProviderConfig: NetworkController[\"getProviderConfig\"];\n onPreferencesStateChange: (listener: (preferencesState: PreferencesState<ExtendedAddressPreferences>) => void) => void;\n onNetworkStateChange: (listener: (networkState: EthereumNetworkState) => void) => void;\n}\n\nfunction getObjectFromArrayBasedonKey(oldArray: CustomTokenInfo[], key: string) {\n return oldArray.reduce((acc: Record<string, CustomTokenInfo>, x) => {\n const xkey = x[key as keyof CustomTokenInfo];\n if (typeof xkey === \"boolean\") return acc;\n acc[xkey] = x;\n return acc;\n }, {});\n}\n\nconst mergeTokenArrays = (oldArray: CustomTokenInfo[], newArray: CustomTokenInfo[]): CustomTokenInfo[] => {\n const oldMap = getObjectFromArrayBasedonKey(oldArray || [], \"tokenAddress\");\n const newMap = getObjectFromArrayBasedonKey(newArray || [], \"tokenAddress\");\n const finalArr = newArray;\n Object.keys(oldMap).forEach((x) => {\n if (!newMap[x] && oldMap[x].isEtherScan) finalArr.push(oldMap[x]);\n });\n return finalArr;\n};\n\nconst DEFAULT_INTERVAL = 180 * 1000;\n\nexport class TokensController extends BaseController<TokensControllerConfig, TokensControllerState> {\n name = \"TokensController\";\n\n private provider: SafeEventEmitterProvider;\n\n private ethersProvider: BrowserProvider;\n\n private _timer: number;\n\n private getProviderConfig: NetworkController[\"getProviderConfig\"];\n\n private getCustomTokens: PreferencesController[\"getCustomTokens\"];\n\n private getEtherScanTokens: PreferencesController[\"getEtherScanTokens\"];\n\n constructor({\n config,\n state,\n provider,\n getCustomTokens,\n getEtherScanTokens,\n getProviderConfig,\n onPreferencesStateChange,\n onNetworkStateChange,\n }: ITokensControllerOptions) {\n super({ config, state });\n\n this.provider = provider;\n this.ethersProvider = new BrowserProvider(this.provider, \"any\");\n\n this.getCustomTokens = getCustomTokens;\n this.getEtherScanTokens = getEtherScanTokens;\n this.getProviderConfig = getProviderConfig;\n\n this.defaultConfig = {\n interval: DEFAULT_INTERVAL,\n selectedAddress: \"\",\n chainId: \"\",\n };\n\n this.defaultState = {\n tokens: {},\n };\n this.initialize();\n\n onPreferencesStateChange((preferencesState) => {\n if (preferencesState.selectedAddress !== this.config.selectedAddress) {\n this.configure({ selectedAddress: preferencesState.selectedAddress });\n this.restartTokenDetection();\n }\n });\n\n onNetworkStateChange((networkState) => {\n const { chainId } = networkState.providerConfig;\n if (chainId !== this.config.chainId) {\n this.configure({ chainId });\n this.restartTokenDetection();\n }\n });\n }\n\n get userSelectedAddress(): string {\n return this.config.selectedAddress;\n }\n\n get userTokens() {\n if (!this.userSelectedAddress) return [];\n return this.state.tokens[this.userSelectedAddress] ?? [];\n }\n\n get interval(): number {\n return this.config.interval;\n }\n\n set interval(interval: number) {\n if (this._timer) window.clearInterval(this._timer);\n if (!interval) {\n return;\n }\n this._timer = window.setInterval(() => {\n if (!idleTimeTracker.checkIfIdle()) {\n this.detectNewTokens();\n this.refreshTokenBalances();\n }\n }, interval);\n }\n\n public startTokenDetection(selectedAddress: string) {\n this.configure({ selectedAddress });\n this.restartTokenDetection();\n }\n\n /**\n * Restart token detection polling period and call detectNewTokens\n * in case of address change or user session initialization.\n *\n */\n public restartTokenDetection() {\n if (!this.userSelectedAddress) {\n return;\n }\n this.detectNewTokens();\n this.refreshTokenBalances();\n this.config.interval = DEFAULT_INTERVAL;\n }\n\n public detectNewTokens() {\n const userAddress = this.userSelectedAddress;\n if (!userAddress) return;\n const currentChainId = this.config.chainId;\n const tokens: CustomTokenInfo[] = []; // object[]\n if (!currentChainId) {\n this.update({ tokens: { [userAddress]: [...tokens] } });\n return;\n }\n\n const networkConfig = this.getProviderConfig();\n\n if (networkConfig?.isErc20 && networkConfig?.tokenAddress) {\n tokens.push({\n tokenAddress: networkConfig.tokenAddress,\n name: networkConfig.tickerName,\n logo: networkConfig.logo,\n erc20: true,\n symbol: networkConfig.ticker,\n decimals: \"18\",\n chainId: currentChainId,\n });\n }\n if (this.getCustomTokens) {\n const customTokens = this.getCustomTokens(userAddress);\n tokens.push(\n ...customTokens.reduce((acc, x) => {\n if (x.network === currentChainId)\n acc.push({\n tokenAddress: x.token_address,\n name: x.token_name,\n logo: \"eth.svg\",\n erc20: true,\n symbol: x.token_symbol,\n decimals: x.decimals,\n balance: \"\",\n customTokenId: x.id.toString(),\n chainId: x.network,\n });\n return acc;\n }, [] as CustomTokenInfo[])\n );\n }\n this.update({ tokens: { [userAddress]: [...tokens] } });\n }\n\n async refreshTokenBalances() {\n const userAddress = this.userSelectedAddress;\n if (userAddress === \"\") return;\n const oldTokens = [...this.userTokens];\n const tokenAddresses = oldTokens.map((x) => x.tokenAddress);\n const nonZeroTokens: CustomTokenInfo[] = [];\n try {\n const currentChainId = this.config.chainId;\n if (ETHERSCAN_SUPPORTED_CHAINS.includes(currentChainId)) {\n const etherscanBalances = await this.getEtherScanTokens(userAddress, currentChainId);\n nonZeroTokens.push(...etherscanBalances);\n }\n if (tokenAddresses.length > 0) {\n const currentSingleCallAddress = SINGLE_CALL_BALANCES_ADDRESSES[currentChainId];\n if (currentSingleCallAddress) {\n const ethContract = new Contract(currentSingleCallAddress, singleBalanceCheckerAbi, this.ethersProvider);\n const result = await ethContract.balances([userAddress], tokenAddresses);\n tokenAddresses.forEach((_, index) => {\n const balance = toQuantity(result[index]);\n if (balance && balance !== \"0x0\") {\n nonZeroTokens.push({ ...oldTokens[index], balance, chainId: currentChainId });\n }\n });\n } else {\n this.getTokenBalancesUsingHandler(oldTokens);\n }\n }\n } catch (error) {\n log.error(error, \"unable to fetch token balances using single call balance address\");\n this.getTokenBalancesUsingHandler(oldTokens);\n } finally {\n this.update({ tokens: { [userAddress]: nonZeroTokens } });\n }\n }\n\n async getTokenBalancesUsingHandler(customTokens: CustomTokenInfo[]) {\n if (!this.userSelectedAddress) return;\n const currentNetworkTokens = customTokens;\n const promiseSettledResult = await Promise.allSettled(\n currentNetworkTokens.map(async (x) => {\n try {\n const tokenInstance = new TokenHandler({\n address: x.tokenAddress,\n decimals: Number.parseInt(x.decimals),\n name: x.name,\n symbol: x.symbol,\n provider: this.ethersProvider,\n });\n const balance = await tokenInstance.getUserBalance(this.userSelectedAddress);\n return {\n decimals: tokenInstance.decimals.toString(),\n erc20: true,\n logo: x.logo || \"eth.svg\",\n name: tokenInstance.name,\n symbol: tokenInstance.symbol,\n tokenAddress: toChecksumAddressByChainId(tokenInstance.address, x.chainId),\n balance: `0x${balance}`,\n customTokenId: x.customTokenId,\n network: x.chainId,\n chainId: x.chainId,\n } as CustomTokenInfo;\n } catch (error) {\n log.warn(\"Invalid contract address while fetching\", error);\n return undefined;\n }\n })\n );\n const nonZeroTokens = promiseSettledResult\n .filter((x) => x.status === \"fulfilled\")\n .map((x) => (x as PromiseFulfilledResult<CustomTokenInfo>).value);\n\n this.update({ tokens: { [this.userSelectedAddress]: mergeTokenArrays(this.userTokens, nonZeroTokens) } });\n }\n}\n","// import assert from 'assert'\nimport { SafeEventEmitterProvider } from \"@toruslabs/openlogin-jrpc\";\nimport { Mutex, MutexInterface } from \"async-mutex\";\n\nimport PollingBlockTracker from \"../Block/PollingBlockTracker\";\nimport { METHOD_TYPES } from \"../utils/constants\";\nimport { EthereumTransactionMeta, Nonce, NonceDetails, NonceLockRes } from \"../utils/interfaces\";\nimport TransactionStateManager from \"./TransactionStateManager\";\n\ninterface INonceTrackerOptions {\n provider: SafeEventEmitterProvider;\n blockTracker: PollingBlockTracker;\n getPendingTransactions: TransactionStateManager[\"getPendingTransactions\"];\n getConfirmedTransactions: TransactionStateManager[\"getConfirmedTransactions\"];\n}\n\nclass NonceTracker {\n private provider: SafeEventEmitterProvider;\n\n private blockTracker: PollingBlockTracker;\n\n private getPendingTransactions: TransactionStateManager[\"getPendingTransactions\"];\n\n private getConfirmedTransactions: TransactionStateManager[\"getConfirmedTransactions\"];\n\n private lockMap: Record<string, Mutex>;\n\n constructor({ provider, blockTracker, getPendingTransactions, getConfirmedTransactions }: INonceTrackerOptions) {\n this.provider = provider;\n this.blockTracker = blockTracker;\n this.getPendingTransactions = getPendingTransactions;\n this.getConfirmedTransactions = getConfirmedTransactions;\n this.lockMap = {};\n }\n\n public async getGlobalLock(): Promise<{ releaseLock: MutexInterface.Releaser }> {\n const globalMutex = this._lookupMutex(\"global\");\n // await global mutex free\n const releaseLock = await globalMutex.acquire();\n return { releaseLock };\n }\n\n /**\n this will return an object with the `nextNonce` \n `nonceDetails`, and the releaseLock.\n Note: releaseLock must be called after adding a signed tx \n to pending transactions (or discarding).\n */\n public async getNonceLock(address: string): Promise<NonceLockRes> {\n // await global mutex free\n await this._globalMutexFree();\n // await lock free, then take lock\n const releaseLock = await this._takeMutex(address);\n try {\n // evaluate multiple nextNonce strategies\n const nonceDetails = {} as NonceDetails;\n const networkNonceResult = await this._getNetworkNextNonce(address);\n\n const highestLocallyConfirmed = this._getHighestLocallyConfirmed(address);\n const nextNetworkNonce = networkNonceResult.nonce;\n const highestSuggested = Math.max(nextNetworkNonce, highestLocallyConfirmed);\n\n const pendingTxs = this.getPendingTransactions(address);\n const localNonceResult = this._getHighestContinuousFrom(pendingTxs, highestSuggested);\n\n nonceDetails.params = {\n highestLocallyConfirmed,\n highestSuggested,\n nextNetworkNonce,\n };\n nonceDetails.local = localNonceResult;\n nonceDetails.network = networkNonceResult;\n\n const nextNonce = Math.max(networkNonceResult.nonce, localNonceResult.nonce);\n\n // return nonce and release cb\n return { nextNonce, nonceDetails, releaseLock };\n } catch (error) {\n // release lock if we encounter an error\n releaseLock();\n throw error;\n }\n }\n\n private async _globalMutexFree() {\n const globalMutex = this._lookupMutex(\"global\");\n const releaseLock = await globalMutex.acquire();\n releaseLock();\n }\n\n private async _takeMutex(lockId: string) {\n const mutex = this._lookupMutex(lockId);\n const releaseLock = await mutex.acquire();\n return releaseLock;\n }\n\n private _lookupMutex(lockId: string): Mutex {\n let mutex = this.lockMap[lockId];\n if (!mutex) {\n mutex = new Mutex();\n this.lockMap[lockId] = mutex;\n }\n return mutex;\n }\n\n private async _getNetworkNextNonce(address: string) {\n // calculate next nonce\n // we need to make sure our base count\n // and pending count are from the same block\n const block = await this.blockTracker.getLatestBlock();\n const baseCountStr = await this.provider.request<[string, string], string>({\n method: METHOD_TYPES.ETH_GET_TRANSACTION_COUNT,\n params: [address, block.idempotencyKey],\n });\n const baseCount = Number.parseInt(baseCountStr, 16);\n const nonceDetails = { block, baseCount };\n return { name: \"network\", nonce: baseCount, details: nonceDetails };\n }\n\n private _getHighestLocallyConfirmed(address: string): number {\n const confirmedTransactions = this.getConfirmedTransactions(address);\n const highest = this._getHighestNonce(confirmedTransactions);\n return Number.isInteger(highest) ? highest + 1 : 0;\n }\n\n private _getHighestNonce(txList: EthereumTransactionMeta[]): number {\n const nonces = txList.map((txMeta) => {\n const { nonce } = txMeta.transaction;\n return Number.parseInt(nonce, 16);\n });\n const highestNonce = Math.max.apply(null, nonces);\n return highestNonce;\n }\n\n private _getHighestContinuousFrom(txList: EthereumTransactionMeta[], startPoint: number): Nonce {\n const nonces = new Set(\n txList.map((txMeta) => {\n const { nonce } = txMeta.transaction;\n return Number.parseInt(nonce, 16);\n })\n );\n\n let highest = startPoint;\n while (nonces.has(highest)) {\n highest += 1;\n }\n\n return { name: \"local\", nonce: highest, details: { startPoint, highest } };\n }\n}\n\nexport default NonceTracker;\n","import {\n BASE_TX_EVENT_TYPE,\n ITransactionController,\n TransactionStatus,\n TX_CONFIRMED_EVENT_TYPE,\n TX_DROPPED_EVENT_TYPE,\n TX_EVENTS,\n TX_FAILED_EVENT_TYPE,\n TX_WARNING_EVENT_TYPE,\n} from \"@toruslabs/base-controllers\";\nimport { SafeEventEmitter, SafeEventEmitterProvider } from \"@toruslabs/openlogin-jrpc\";\nimport log from \"loglevel\";\n\nimport { METHOD_TYPES } from \"../utils/constants\";\nimport { EthereumBlock, EthereumTransactionMeta, TransactionParams, TransactionReceipt } from \"../utils/interfaces\";\nimport NonceTracker from \"./NonceTracker\";\nimport TransactionStateManager from \"./TransactionStateManager\";\n\nexport default class PendingTransactionTracker extends SafeEventEmitter {\n DROPPED_BUFFER_COUNT = 3;\n\n private nonceTracker: NonceTracker;\n\n private provider: SafeEventEmitterProvider;\n\n private approveTransaction: ITransactionController<EthereumTransactionMeta>[\"approveTransaction\"];\n\n private droppedBlocksBufferByHash: Map<string, number>;\n\n private getConfirmedTransactions: TransactionStateManager[\"getConfirmedTransactions\"];\n\n private getPendingTransactions: TransactionStateManager[\"getPendingTransactions\"];\n\n private publishTransaction: (rawTx: string) => Promise<string>;\n\n constructor({\n provider,\n nonceTracker,\n approveTransaction,\n publishTransaction,\n getPendingTransactions,\n getConfirmedTransactions,\n }: {\n provider: SafeEventEmitterProvider;\n nonceTracker: NonceTracker;\n approveTransaction: ITransactionController<EthereumTransactionMeta>[\"approveTransaction\"];\n publishTransaction: (rawTx: string) => Promise<string>;\n getPendingTransactions: TransactionStateManager[\"getPendingTransactions\"];\n getConfirmedTransactions: TransactionStateManager[\"getConfirmedTransactions\"];\n }) {\n super();\n this.provider = provider;\n this.nonceTracker = nonceTracker;\n this.approveTransaction = approveTransaction;\n this.publishTransaction = publishTransaction;\n this.getPendingTransactions = getPendingTransactions;\n this.getConfirmedTransactions = getConfirmedTransactions;\n this.droppedBlocksBufferByHash = new Map();\n }\n\n /**\n checks the network for signed txs and releases the nonce global lock if it is\n */\n public async updatePendingTxs(): Promise<void> {\n // in order to keep the nonceTracker accurate we block it while updating pending transactions\n const nonceGlobalLock = await this.nonceTracker.getGlobalLock();\n try {\n const pendingTxs = this.getPendingTransactions();\n await Promise.all(pendingTxs.map((txMeta) => this._checkPendingTx(txMeta)));\n } catch (error) {\n log.error(\"PendingTransactionTracker - Error updating pending transactions\");\n log.error(error);\n }\n nonceGlobalLock.releaseLock();\n }\n\n public async resubmitPendingTxs(block: EthereumBlock) {\n const pending = this.getPendingTransactions();\n // only try resubmitting if their are transactions to resubmit\n if (pending.length === 0) return;\n // Keep this as a for loop because we want to wait for each item to be submitted\n for (const txMeta of pending) {\n try {\n await this._resubmitTx(txMeta, block.idempotencyKey);\n } catch (error: unknown) {\n /*\n Dont marked as failed if the error is a \"known\" transaction warning\n \"there is already a transaction with the same sender-nonce\n but higher/same gas price\"\n\n Also don't mark as failed if it has ever been broadcast successfully.\n A successful broadcast means it may still be mined.\n */\n const errorMessage = (error as { value: Error }).value?.message?.toLowerCase() || (error as Error).message.toLowerCase();\n const isKnownTx =\n // geth\n errorMessage.includes(\"replacement transaction underpriced\") ||\n errorMessage.includes(\"known transaction\") ||\n // parity\n errorMessage.includes(\"gas price too low to replace\") ||\n errorMessage.includes(\"transaction with the same hash was already imported\") ||\n // other\n errorMessage.includes(\"gateway timeout\") ||\n errorMessage.includes(\"nonce too low\");\n // ignore resubmit warnings, return early\n if (isKnownTx) return;\n // encountered real error - transition to error state\n txMeta.warning = {\n error: errorMessage,\n message: \"There was an error when resubmitting this transaction.\",\n };\n this.emit(TX_EVENTS.TX_WARNING, { txMeta, error, txId: txMeta.id } as TX_WARNING_EVENT_TYPE<TransactionParams, EthereumTransactionMeta>);\n }\n }\n }\n\n async _resubmitTx(txMeta: EthereumTransactionMeta, latestBlockNumber?: string) {\n if (!txMeta.firstRetryBlockNumber) {\n this.emit(TX_EVENTS.TX_BLOCK_UPDATE, { txMeta, latestBlockNumber, txId: txMeta.id } as BASE_TX_EVENT_TYPE);\n }\n\n const firstRetryBlockNumber = txMeta.firstRetryBlockNumber || latestBlockNumber;\n const txBlockDistance = Number.parseInt(latestBlockNumber, 16) - Number.parseInt(firstRetryBlockNumber, 16);\n\n const retryCount = txMeta.retryCount || 0;\n\n // Exponential backoff to limit retries at publishing (capped at last 15 mins)\n if (txBlockDistance <= Math.min(50, 2 ** retryCount)) return undefined;\n\n // Only auto-submit already-signed txs:\n if (!(\"rawTx\" in txMeta)) return this.approveTransaction(txMeta.id);\n\n const { rawTx } = txMeta;\n const txHash = await this.publishTransaction(rawTx as string);\n\n // Increment successful tries:\n this.emit(TX_EVENTS.TX_RETRY, { txMeta, txId: txMeta.id } as BASE_TX_EVENT_TYPE);\n return txHash;\n }\n\n async _checkPendingTx(foundTx: EthereumTransactionMeta): Promise<void> {\n const txMeta = foundTx;\n const txHash = txMeta.transactionHash;\n const txId = txMeta.id;\n\n // Only check submitted txs\n if (txMeta.status !== TransactionStatus.submitted) return;\n\n // extra check in case there was an uncaught error during the\n // signature and submission process\n if (!txHash) {\n const noTxHashError = new Error(\"We had an error while submitting this transaction, please try again.\");\n noTxHashError.name = \"NoTxHashError\";\n this.emit(TX_EVENTS.TX_FAILED, { txId, error: noTxHashError } as TX_FAILED_EVENT_TYPE);\n return;\n }\n\n // If another tx with the same nonce is mined, set as failed.\n if (this._checkIfNonceIsTaken(txMeta)) {\n this.emit(TX_EVENTS.TX_DROPPED, { txId } as TX_DROPPED_EVENT_TYPE);\n return;\n }\n\n try {\n const transactionReceipt = await this.provider.request<[string], TransactionReceipt>({\n method: METHOD_TYPES.ETH_GET_TRANSACTION_RECEIPT,\n params: [txHash],\n });\n if (transactionReceipt?.blockNumber) {\n const { baseFeePerGas, timestamp } = await this.provider.request<[string, boolean], EthereumBlock>({\n method: METHOD_TYPES.ETH_GET_BLOCK_BY_HASH,\n params: [transactionReceipt.blockHash, false],\n });\n this.emit(TX_EVENTS.TX_CONFIRMED, {\n txId,\n txReceipt: transactionReceipt,\n baseFeePerGas,\n blockTimestamp: timestamp,\n } as TX_CONFIRMED_EVENT_TYPE);\n return;\n }\n } catch (error) {\n log.error(\"error while loading tx\", error);\n txMeta.warning = {\n error: (error as Error).message,\n message: \"There was a problem loading this transaction.\",\n };\n this.emit(TX_EVENTS.TX_WARNING, { txMeta } as TX_WARNING_EVENT_TYPE<TransactionParams, EthereumTransactionMeta>);\n }\n\n if (await this._checkIfTxWasDropped(txMeta)) {\n this.emit(TX_EVENTS.TX_DROPPED, { txId } as TX_DROPPED_EVENT_TYPE);\n }\n }\n\n async _checkIfTxWasDropped(txMeta: EthereumTransactionMeta): Promise<boolean> {\n const {\n transactionHash: txHash,\n transaction: { nonce, from },\n } = txMeta;\n const networkNextNonce = await this.provider.request<[string, string], string>({\n method: METHOD_TYPES.ETH_GET_TRANSACTION_COUNT,\n params: [from, \"latest\"],\n });\n\n if (Number.parseInt(nonce, 16) >= Number.parseInt(networkNextNonce, 16)) {\n return false;\n }\n\n if (!this.droppedBlocksBufferByHash.has(txHash)) {\n this.droppedBlocksBufferByHash.set(txHash, 0);\n }\n\n const currentBlockBuffer = this.droppedBlocksBufferByHash.get(txHash);\n\n if (currentBlockBuffer < this.DROPPED_BUFFER_COUNT) {\n this.droppedBlocksBufferByHash.set(txHash, currentBlockBuffer + 1);\n return false;\n }\n\n this.droppedBlocksBufferByHash.delete(txHash);\n return true;\n }\n\n _checkIfNonceIsTaken(txMeta: EthereumTransactionMeta) {\n const address = txMeta.transaction.from;\n const completed = this.getConfirmedTransactions(address);\n return completed.some((otherMeta) => {\n if (otherMeta.id === txMeta.id) {\n return false;\n }\n return otherMeta.transaction.nonce === txMeta.transaction.nonce;\n });\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@ethereumjs/common\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@ethereumjs/tx\");","import { addHexPrefix, stripHexPrefix } from \"@ethereumjs/util\";\nimport { SafeEventEmitterProvider } from \"@toruslabs/openlogin-jrpc\";\nimport { BN } from \"bn.js\";\nimport { cloneDeep } from \"lodash\";\nimport log from \"loglevel\";\n\nimport PollingBlockTracker from \"../Block/PollingBlockTracker\";\nimport { EthereumTransactionMeta, TransactionParams } from \"../utils/interfaces\";\nexport default class TransactionGasUtil {\n provider: SafeEventEmitterProvider;\n\n blockTracker: PollingBlockTracker;\n\n constructor(provider: SafeEventEmitterProvider, blockTracker: PollingBlockTracker) {\n this.provider = provider;\n this.blockTracker = blockTracker;\n }\n\n public async analyzeGasUsage(txMeta: EthereumTransactionMeta) {\n const block = await this.blockTracker.getLatestBlock();\n // fallback to block gasLimit\n const blockGasLimitBN = new BN(stripHexPrefix(block.gasLimit), 16);\n const saferGasLimitBN = blockGasLimitBN.mul(new BN(19)).div(new BN(20));\n let estimatedGasHex = addHexPrefix(saferGasLimitBN.toString(\"hex\"));\n let simulationFails: Record<string, unknown>;\n\n try {\n estimatedGasHex = await this.estimateTxGas(txMeta);\n } catch (error) {\n log.warn(error);\n simulationFails = {\n reason: (error as Error).message,\n errorKey: (error as Error & { errorKey: string }).errorKey,\n debug: { blockNumber: block.idempotencyKey, blockGasLimit: block.gasLimit },\n };\n }\n return { blockGasLimit: block.gasLimit, estimatedGasHex, simulationFails };\n }\n\n /**\n Adds a gas buffer with out exceeding the block gas limit\n */\n public addGasBuffer(initialGasLimitHex: string, blockGasLimitHex: string, multiplier = 1.5): string {\n const initialGasLimitBn = new BN(stripHexPrefix(initialGasLimitHex), 16);\n const blockGasLimitBn = new BN(stripHexPrefix(blockGasLimitHex), 16);\n const upperGasLimitBn = blockGasLimitBn.muln(0.9);\n const bufferedGasLimitBn = initialGasLimitBn.muln(multiplier);\n\n // if initialGasLimit is above blockGasLimit, dont modify it\n if (initialGasLimitBn.gt(upperGasLimitBn)) return addHexPrefix(initialGasLimitBn.toString(\"hex\"));\n // if bufferedGasLimit is below blockGasLimit, use bufferedGasLimit\n if (bufferedGasLimitBn.lt(upperGasLimitBn)) return addHexPrefix(bufferedGasLimitBn.toString(\"hex\"));\n // otherwise use blockGasLimit\n return addHexPrefix(upperGasLimitBn.toString(\"hex\"));\n }\n\n /**\n Estimates the tx's gas usage\n */\n private async estimateTxGas(txMeta: EthereumTransactionMeta): Promise<string> {\n const txParams = cloneDeep(txMeta.transaction);\n\n // `eth_estimateGas` can fail if the user has insufficient balance for the\n // value being sent, or for the gas cost. We don't want to check their\n // balance here, we just want the gas estimate. The gas price is removed\n // to skip those balance checks. We check balance elsewhere. We also delete\n // maxFeePerGas and maxPriorityFeePerGas to support EIP-1559 txs.\n delete txParams.gasPrice;\n delete txParams.maxFeePerGas;\n delete txParams.maxPriorityFeePerGas;\n\n return this.provider.request<[TransactionParams], string>({ method: \"eth_estimateGas\", params: [txParams] });\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"fast-json-patch\");","import jsonDiffer, { Operation } from \"fast-json-patch\";\nimport { cloneDeep } from \"lodash\";\n\nimport { EthereumTransactionMeta } from \"../utils/interfaces\";\n\n/**\n Generates an array of history objects sense the previous state.\n The object has the keys\n op (the operation performed),\n path (the key and if a nested object then each key will be seperated with a `/`)\n value\n with the first entry having the note and a timestamp when the change took place\n*/\nfunction generateHistoryEntry(previousState: Record<string, unknown>, newState: Record<string, unknown>, note?: string): Record<string, unknown>[] {\n const entry = jsonDiffer.compare(previousState, newState) as unknown as Record<string, unknown>[];\n // Add a note to the first op, since it breaks if we append it to the entry\n if (entry[0]) {\n if (note) {\n entry[0].note = note;\n }\n\n entry[0].timestamp = Date.now();\n }\n return entry;\n}\n\n/**\n Recovers previous txMeta state obj\n*/\nfunction replayHistory(_shortHistory: Record<string, unknown>[]): Record<string, unknown> {\n const shortHistory = cloneDeep(_shortHistory);\n return shortHistory.reduce((val: Record<string, unknown>, entry: unknown) => jsonDiffer.applyPatch(val, entry as Operation[]).newDocument);\n}\n\nfunction snapshotFromTxMeta(txMeta: EthereumTransactionMeta): EthereumTransactionMeta {\n const shallow = { ...txMeta };\n delete shallow.history;\n return cloneDeep(shallow);\n}\n\nexport { generateHistoryEntry, replayHistory, snapshotFromTxMeta };\n","import { addHexPrefix, isHexString, isValidAddress } from \"@ethereumjs/util\";\nimport { rpcErrors } from \"@metamask/rpc-errors\";\nimport { randomId, TRANSACTION_TYPE, TRANSACTION_TYPES, TransactionStatus } from \"@toruslabs/base-controllers\";\nimport { SafeEventEmitterProvider } from \"@toruslabs/openlogin-jrpc\";\nimport { Interface } from \"ethers\";\nimport log from \"loglevel\";\n\nimport { ecr20Abi, erc721Abi, erc1155Abi } from \"../utils/abis\";\nimport {\n CONTRACT_TYPE_ERC20,\n CONTRACT_TYPE_ERC721,\n CONTRACT_TYPE_ERC1155,\n CONTRACT_TYPE_ETH,\n METHOD_TYPES,\n TRANSACTION_ENVELOPE_TYPES,\n} from \"../utils/constants\";\nimport { EthereumTransactionMeta, TRANSACTION_ENVELOPE_TYPES_TYPE, TransactionParams } from \"../utils/interfaces\";\n\nconst erc20Interface = new Interface(ecr20Abi);\nconst erc721Interface = new Interface(erc721Abi);\nconst erc1155Interface = new Interface(erc1155Abi);\n\n// functions that handle normalizing of that key in txParams\ntype NormalizableTransactionParams = keyof Omit<TransactionParams, \"accessList\">;\nconst normalizers: Partial<\n Record<\n NormalizableTransactionParams,\n (param: NormalizableTransactionParams, ...args: unknown[]) => TransactionParams[NormalizableTransactionParams]\n >\n> = {\n from: (from: string, LowerCase = true) => (LowerCase ? addHexPrefix(from).toLowerCase() : addHexPrefix(from)),\n to: (to: string, LowerCase = true) => (LowerCase ? addHexPrefix(to).toLowerCase() : addHexPrefix(to)),\n nonce: (nonce: string) => addHexPrefix(nonce),\n customNonceValue: (nonce: string) => addHexPrefix(nonce),\n value: (value: string) => addHexPrefix(value),\n data: (data: string) => addHexPrefix(data),\n gas: (gas: string) => addHexPrefix(gas),\n gasPrice: (gasPrice: string) => addHexPrefix(gasPrice),\n type: addHexPrefix as (str: string) => TRANSACTION_ENVELOPE_TYPES_TYPE,\n maxFeePerGas: addHexPrefix,\n maxPriorityFeePerGas: addHexPrefix,\n};\n\n/**\n * normalizes txParams\n */\nexport function normalizeTxParameters(txParameters: TransactionParams, lowerCase = true): TransactionParams {\n // apply only keys in the normalizers\n const normalizedTxParameters: TransactionParams = { id: txParameters.id || randomId(), from: txParameters.from };\n for (const key in normalizers) {\n const currentKey = key as NormalizableTransactionParams;\n if (txParameters[currentKey])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n normalizedTxParameters[currentKey] = normalizers[currentKey](txParameters[currentKey] as NormalizableTransactionParams, lowerCase) as any;\n }\n return normalizedTxParameters;\n}\n\nexport function transactionMatchesNetwork(transaction: EthereumTransactionMeta, chainId: string) {\n if (typeof transaction.chainId !== \"undefined\") {\n return transaction.chainId === chainId;\n }\n return false;\n}\n\n/**\n * Determines if the maxFeePerGas and maxPriorityFeePerGas fields are supplied\n * and valid inputs. This will return false for non hex string inputs.\n * the transaction to check\n * @returns true if transaction uses valid EIP1559 fields\n */\nexport function isEIP1559Transaction(transaction: Partial<EthereumTransactionMeta>) {\n return (\n isHexString(addHexPrefix(transaction?.transaction?.maxFeePerGas)) && isHexString(addHexPrefix(transaction?.transaction?.maxPriorityFeePerGas))\n );\n}\n\n/**\n * Determine if the maxFeePerGas and maxPriorityFeePerGas fields are not\n * supplied and that the gasPrice field is valid if it is provided. This will\n * return false if gasPrice is a non hex string.\n * transaction -\n * the transaction to check\n * @returns true if transaction uses valid Legacy fields OR lacks\n * EIP1559 fields\n */\nexport function isLegacyTransaction(transaction: EthereumTransactionMeta) {\n return (\n typeof transaction.transaction.maxFeePerGas === \"undefined\" &&\n typeof transaction.transaction.maxPriorityFeePerGas === \"undefined\" &&\n (typeof transaction.transaction.gasPrice === \"undefined\" || isHexString(addHexPrefix(transaction.transaction.gasPrice)))\n );\n}\n\n/**\n * Given two fields, ensure that the second field is not included in txParams,\n * and if it is throw an invalidParams error.\n */\nexport function ensureMutuallyExclusiveFieldsNotProvided(\n txParams: TransactionParams,\n fieldBeingValidated: NormalizableTransactionParams,\n mutuallyExclusiveField: NormalizableTransactionParams\n) {\n if (typeof txParams[mutuallyExclusiveField] !== \"undefined\") {\n throw rpcErrors.invalidParams(\n `Invalid transaction params: specified ${fieldBeingValidated} but also included ${mutuallyExclusiveField}, these cannot be mixed`\n );\n }\n}\n\n/**\n * Ensures that the provided value for field is a string, throws an\n * invalidParams error if field is not a string.\n */\nexport function ensureFieldIsString(txParams: TransactionParams, field: NormalizableTransactionParams) {\n if (typeof txParams[field] !== \"string\") {\n throw rpcErrors.invalidParams(`Invalid transaction params: ${field} is not a string. got: (${txParams[field]})`);\n }\n}\n\n/**\n * Ensures that the provided txParams has the proper 'type' specified for the\n * given field, if it is provided. If types do not match throws an\n * invalidParams error.\n */\nfunction ensureProperTransactionEnvelopeTypeProvided(txParams: TransactionParams, field: NormalizableTransactionParams) {\n switch (field) {\n case \"maxFeePerGas\":\n case \"maxPriorityFeePerGas\":\n if (txParams.type && txParams.type !== TRANSACTION_ENVELOPE_TYPES.FEE_MARKET) {\n throw rpcErrors.invalidParams(\n `Invalid transaction envelope type: specified type \"${txParams.type}\" but ` +\n `including maxFeePerGas and maxPriorityFeePerGas requires type: \"${TRANSACTION_ENVELOPE_TYPES.FEE_MARKET}\"`\n );\n }\n break;\n case \"gasPrice\":\n default:\n if (txParams.type && txParams.type === TRANSACTION_ENVELOPE_TYPES.FEE_MARKET) {\n throw rpcErrors.invalidParams(\n `Invalid transaction envelope type: specified type \"${txParams.type}\" but ` +\n \"included a gasPrice instead of maxFeePerGas and maxPriorityFeePerGas\"\n );\n }\n }\n}\n\n/**\n * validates the from field in txParams\n */\nexport function validateFrom(txParams: TransactionParams) {\n if (!(typeof txParams.from === \"string\")) {\n throw rpcErrors.invalidParams(`Invalid \"from\" address \"${txParams.from}\": not a string.`);\n }\n if (!isValidAddress(txParams.from)) {\n throw rpcErrors.invalidParams('Invalid \"from\" address.');\n }\n}\n\n/**\n * validates the to field in txParams\n */\nexport function validateRecipient(txParameters: TransactionParams) {\n if (txParameters.to === \"0x\" || txParameters.to === null) {\n if (txParameters.data) {\n delete txParameters.to;\n } else {\n throw rpcErrors.invalidParams('Invalid \"to\" address.');\n }\n } else if (txParameters.to !== undefined && !isValidAddress(txParameters.to)) {\n throw rpcErrors.invalidParams('Invalid \"to\" address.');\n }\n return txParameters;\n}\n\n/**\n * Validates the given tx parameters\n * @throws if the tx params contains invalid fields\n */\nexport function validateTxParameters(txParams: TransactionParams, eip1559Compatibility = true) {\n if (!txParams || typeof txParams !== \"object\" || Array.isArray(txParams)) {\n throw rpcErrors.invalidParams(\"Invalid transaction params: must be an object.\");\n }\n if (!txParams.to && !txParams.data) {\n throw rpcErrors.invalidParams(\n 'Invalid transaction params: must specify \"data\" for contract deployments, or \"to\" (and optionally \"data\") for all other types of transactions.'\n );\n }\n\n if (isEIP1559Transaction({ transaction: txParams }) && !eip1559Compatibility) {\n throw rpcErrors.invalidParams(\n \"Invalid transaction params: params specify an EIP-1559 transaction but the current network does not support EIP-1559\"\n );\n }\n\n Object.entries(txParams).forEach(([key, value]) => {\n // validate types\n switch (key) {\n case \"from\":\n validateFrom(txParams);\n break;\n case \"to\":\n validateRecipient(txParams);\n break;\n case \"gasPrice\":\n ensureProperTransactionEnvelopeTypeProvided(txParams, \"gasPrice\");\n ensureMutuallyExclusiveFieldsNotProvided(txParams, \"gasPrice\", \"maxFeePerGas\");\n ensureMutuallyExclusiveFieldsNotProvided(txParams, \"gasPrice\", \"maxPriorityFeePerGas\");\n ensureFieldIsString(txParams, \"gasPrice\");\n break;\n case \"maxFeePerGas\":\n ensureProperTransactionEnvelopeTypeProvided(txParams, \"maxFeePerGas\");\n ensureMutuallyExclusiveFieldsNotProvided(txParams, \"maxFeePerGas\", \"gasPrice\");\n ensureFieldIsString(txParams, \"maxFeePerGas\");\n break;\n case \"maxPriorityFeePerGas\":\n ensureProperTransactionEnvelopeTypeProvided(txParams, \"maxPriorityFeePerGas\");\n ensureMutuallyExclusiveFieldsNotProvided(txParams, \"maxPriorityFeePerGas\", \"gasPrice\");\n ensureFieldIsString(txParams, \"maxPriorityFeePerGas\");\n break;\n case \"value\":\n ensureFieldIsString(txParams, \"value\");\n if (value.toString().includes(\"-\")) {\n throw rpcErrors.invalidParams(`Invalid transaction value \"${value}\": not a positive number.`);\n }\n\n if (value.toString().includes(\".\")) {\n throw rpcErrors.invalidParams(`Invalid transaction value of \"${value}\": number must be in wei.`);\n }\n break;\n case \"chainId\":\n if (typeof value !== \"number\" && typeof value !== \"string\") {\n throw rpcErrors.invalidParams(`Invalid transaction params: ${key} is not a Number or hex string. got: (${value})`);\n }\n break;\n default:\n ensureFieldIsString(txParams, key as NormalizableTransactionParams);\n }\n });\n}\n\nexport function normalizeAndValidateTxParams(txParams: TransactionParams, lowerCase = true) {\n const normalizedTxParams = normalizeTxParameters(txParams, lowerCase);\n validateTxParameters(normalizedTxParams);\n return normalizedTxParams;\n}\n\n/**\n * @returns an array of states that can be considered final\n */\nexport function getFinalStates() {\n return [\n TransactionStatus.rejected, // the user has responded no!\n TransactionStatus.confirmed, // the tx has been included in a block.\n TransactionStatus.failed, // the tx failed for some reason, included on tx data.\n TransactionStatus.dropped, // the tx nonce was already used\n ];\n}\n\nexport function parseStandardTokenTransactionData(data: string) {\n try {\n const txDesc = erc20Interface.parseTransaction({ data });\n if (txDesc) return { name: txDesc.name, methodParams: txDesc.args.toArray(), type: CONTRACT_TYPE_ERC20 };\n } catch {\n // ignore and next try to parse with erc721 ABI\n }\n\n try {\n const txDesc = erc721Interface.parseTransaction({ data });\n if (txDesc) return { name: txDesc.name, methodParams: txDesc.args.toArray(), type: CONTRACT_TYPE_ERC721 };\n } catch {\n // ignore and next try to parse with erc1155 ABI\n }\n\n try {\n const txDesc = erc1155Interface.parseTransaction({ data });\n if (txDesc) return { name: txDesc.name, methodParams: txDesc.args.toArray(), type: CONTRACT_TYPE_ERC1155 };\n } catch {\n // ignore and return undefined\n }\n\n return undefined;\n}\n\nexport const readAddressAsContract = async (\n provider: SafeEventEmitterProvider,\n address: string\n): Promise<{ contractCode: string; isContractAddress: boolean }> => {\n let contractCode;\n try {\n contractCode = await provider.request<[string, string], string>({ method: METHOD_TYPES.ETH_GET_CODE, params: [address, \"latest\"] });\n } catch (e) {\n contractCode = null;\n }\n\n const isContractAddress = contractCode ? contractCode !== \"0x\" && contractCode !== \"0x0\" : false;\n return { contractCode, isContractAddress };\n};\n\nexport async function determineTransactionType(txParams: TransactionParams, provider: SafeEventEmitterProvider) {\n const { data, to } = txParams;\n let name: string = \"\";\n let methodParams = [];\n let type = \"\";\n try {\n ({ name, methodParams, type } = (data && parseStandardTokenTransactionData(data)) || {});\n } catch (error) {\n log.debug(\"Failed to parse transaction data\", error);\n }\n let result: TRANSACTION_TYPE;\n let contractCode = \"\";\n if (data && !to) {\n result = TRANSACTION_TYPES.DEPLOY_CONTRACT;\n } else {\n const { contractCode: resultCode, isContractAddress } = await readAddressAsContract(provider, to);\n contractCode = resultCode;\n if (isContractAddress) {\n const valueExists = txParams.value && Number(txParams.value) !== 0;\n const tokenMethodName: TRANSACTION_TYPE = [\n TRANSACTION_TYPES.TOKEN_METHOD_APPROVE,\n TRANSACTION_TYPES.TOKEN_METHOD_TRANSFER,\n TRANSACTION_TYPES.TOKEN_METHOD_TRANSFER_FROM,\n TRANSACTION_TYPES.COLLECTIBLE_METHOD_SAFE_TRANSFER_FROM,\n TRANSACTION_TYPES.SET_APPROVAL_FOR_ALL,\n ].find((x) => x.toLowerCase() === name?.toLowerCase());\n\n result = data && tokenMethodName && !valueExists ? tokenMethodName : TRANSACTION_TYPES.CONTRACT_INTERACTION;\n } else {\n result = TRANSACTION_TYPES.SENT_ETHER;\n }\n }\n return { type: type || CONTRACT_TYPE_ETH, category: result, methodParams, getCodeResponse: contractCode };\n}\n","import {\n BaseTransactionStateManager,\n ITransactionStateManager,\n randomId,\n TransactionConfig,\n transactionMatchesNetwork,\n TransactionState,\n TransactionStatus,\n TX_EVENTS,\n TX_STATUS_UPDATE_EVENT_TYPE,\n} from \"@toruslabs/base-controllers\";\nimport { keyBy, mapValues, omitBy, pickBy, sortBy } from \"lodash\";\n\nimport NetworkController from \"../Network/NetworkController\";\nimport { DappSuggestedGasFees, EthereumTransactionMeta, TransactionParams } from \"../utils/interfaces\";\nimport { generateHistoryEntry, replayHistory, snapshotFromTxMeta } from \"./TransactionStateHistoryHelper\";\nimport { getFinalStates, normalizeAndValidateTxParams } from \"./TransactionUtils\";\n\nexport default class TransactionStateManager\n extends BaseTransactionStateManager<TransactionParams, EthereumTransactionMeta>\n implements ITransactionStateManager<TransactionParams>\n{\n constructor({\n config,\n state,\n getCurrentChainId,\n }: {\n config?: Partial<TransactionConfig>;\n state?: Partial<TransactionState<TransactionParams, EthereumTransactionMeta>>;\n getCurrentChainId: NetworkController[\"getNetworkIdentifier\"];\n }) {\n super({ config, state, getCurrentChainId });\n }\n\n generateTxMeta(opts: Partial<EthereumTransactionMeta> = {}): EthereumTransactionMeta {\n const chainId = this.getCurrentChainId();\n if (chainId === \"loading\") throw new Error(\"Torus is having trouble connecting to the network\");\n let dappSuggestedGasFees: DappSuggestedGasFees = null;\n\n // If we are dealing with a transaction suggested by a dapp and not\n // an internally created transaction, we need to keep record of\n // the originally submitted gasParams.\n if (opts.transaction && typeof opts.origin === \"string\" && opts.origin !== \"torus\") {\n if (typeof opts.transaction.gasPrice !== \"undefined\") {\n dappSuggestedGasFees = {\n gasPrice: opts.transaction.gasPrice,\n };\n } else if (typeof opts.transaction.maxFeePerGas !== \"undefined\" || typeof opts.transaction.maxPriorityFeePerGas !== \"undefined\") {\n dappSuggestedGasFees = {\n maxPriorityFeePerGas: opts.transaction.maxPriorityFeePerGas,\n maxFeePerGas: opts.transaction.maxFeePerGas,\n };\n }\n\n if (typeof opts.transaction.gas !== \"undefined\") {\n dappSuggestedGasFees = {\n ...dappSuggestedGasFees,\n gas: opts.transaction.gas,\n };\n }\n }\n\n return {\n id: opts.transaction.id || randomId(),\n time: Date.now(),\n status: TransactionStatus.unapproved,\n loadingDefaults: true,\n chainId,\n dappSuggestedGasFees,\n ...opts,\n } as EthereumTransactionMeta;\n }\n\n addTransactionToState(txMeta: EthereumTransactionMeta): EthereumTransactionMeta {\n if (txMeta.transaction) {\n txMeta.transaction = normalizeAndValidateTxParams(txMeta.transaction, false);\n }\n this.once(`${txMeta.id}:signed`, () => {\n this.removeAllListeners(`${txMeta.id}:rejected`);\n });\n this.once(`${txMeta.id}:rejected`, () => {\n this.removeAllListeners(`${txMeta.id}:signed`);\n });\n // initialize history\n txMeta.history = [];\n // capture initial snapshot of txMeta for history\n const snapshot = snapshotFromTxMeta(txMeta);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n txMeta.history.push(snapshot as any);\n\n const transactions = this.getTransactions({\n filterToCurrentNetwork: false,\n });\n const { txHistoryLimit } = this.config;\n\n // checks if the length of the tx history is longer then desired persistence\n // limit and then if it is removes the oldest confirmed or rejected tx.\n // Pending or unapproved transactions will not be removed by this\n // operation. For safety of presenting a fully functional transaction UI\n // representation, this function will not break apart transactions with the\n // same nonce, per network. Not accounting for transactions of the same\n // nonce and network combo can result in confusing or broken experiences\n // in the UI.\n //\n // we will send UI only collected groups of transactions *per page* so at\n // some point in the future, this persistence limit can be adjusted. When\n // we do that I think we should figure out a better storage solution for\n // transaction history entries.\n const nonceNetworkSet = new Set();\n\n const txsToDelete = transactions\n .reverse()\n .filter((tx) => {\n const { nonce } = tx.transaction;\n const { chainId, status } = tx;\n const key = `${nonce}-${chainId}`;\n if (nonceNetworkSet.has(key)) {\n return false;\n }\n if (nonceNetworkSet.size < txHistoryLimit - 1 || getFinalStates().includes(status) === false) {\n nonceNetworkSet.add(key);\n return false;\n }\n return true;\n })\n .map((tx) => tx.id);\n\n this._deleteTransactions(txsToDelete);\n this._addTransactionsToState([txMeta]);\n return txMeta;\n }\n\n /**\n Removes transaction from the given address for the current network\n from the txList\n */\n wipeTransactions(address: string): void {\n const { transactions } = this.state;\n const chainId = this.getCurrentChainId();\n\n this.update({\n transactions: omitBy(transactions, (txMeta: EthereumTransactionMeta) => {\n const transactionMatch = transactionMatchesNetwork(txMeta, chainId);\n return txMeta.transaction.from === address && transactionMatch;\n }),\n });\n }\n\n getTransactions({\n searchCriteria = {},\n initialList = undefined,\n filterToCurrentNetwork = true,\n limit = undefined,\n }: {\n searchCriteria?: Record<string, (val: unknown) => boolean> | Record<string, unknown>;\n initialList?: EthereumTransactionMeta[];\n filterToCurrentNetwork?: boolean;\n limit?: number;\n } = {}): EthereumTransactionMeta[] {\n const chainId = this.getCurrentChainId();\n // searchCriteria is an object that might have values that aren't predicate\n // methods. When providing any other value type (string, number, etc), we\n // consider this shorthand for \"check the value at key for strict equality\n // with the provided value\". To conform this object to be only methods, we\n // mapValues (lodash) such that every value on the object is a method that\n // returns a boolean.\n const predicateMethods: unknown = mapValues(searchCriteria, (predicate) =>\n typeof predicate === \"function\" ? predicate : (v: unknown) => v === predicate\n );\n\n // If an initial list is provided we need to change it back into an object\n // first, so that it matches the shape of our state. This is done by the\n // lodash keyBy method. This is the edge case for this method, typically\n // initialList will be undefined.\n const transactionsToFilter = initialList ? keyBy(initialList, \"id\") : this.state.transactions;\n\n // Combine sortBy and pickBy to transform our state object into an array of\n // matching transactions that are sorted by time.\n const filteredTransactions = sortBy(\n pickBy(transactionsToFilter, (txMeta) => {\n // default matchesCriteria to the value of transactionMatchesNetwork\n // when filterToCurrentNetwork is true.\n const transactionMatches = transactionMatchesNetwork(txMeta, chainId);\n if (filterToCurrentNetwork && !transactionMatches) {\n return false;\n }\n // iterate over the predicateMethods keys to check if the transaction\n // matches the searchCriteria\n for (const [key, predicate] of Object.entries(predicateMethods)) {\n // We return false early as soon as we know that one of the specified\n // search criteria do not match the transaction. This prevents\n // needlessly checking all criteria when we already know the criteria\n // are not fully satisfied. We check both txParams and the base\n // object as predicate keys can be either.\n if (key in txMeta.transaction) {\n if (predicate(txMeta.transaction[key as keyof TransactionParams]) === false) {\n return false;\n }\n } else if (predicate(txMeta[key as keyof EthereumTransactionMeta]) === false) {\n return false;\n }\n }\n\n return true;\n }),\n \"time\"\n );\n\n if (limit !== undefined) {\n // We need to have all transactions of a given nonce in order to display\n // necessary details in the UI. We use the size of this set to determine\n // whether we have reached the limit provided, thus ensuring that all\n // transactions of nonces we include will be sent to the UI.\n const nonces = new Set();\n const txs = [];\n // By default, the transaction list we filter from is sorted by time ASC.\n // To ensure that filtered results prefers the newest transactions we\n // iterate from right to left, inserting transactions into front of a new\n // array. The original order is preserved, but we ensure that newest txs\n // are preferred.\n for (let i = filteredTransactions.length - 1; i > -1; i -= 1) {\n const txMeta = filteredTransactions[i];\n const { nonce } = txMeta.transaction;\n if (!nonces.has(nonce)) {\n if (nonces.size < limit) {\n nonces.add(nonce);\n } else {\n continue;\n }\n }\n // Push transaction into the beginning of our array to ensure the\n // original order is preserved.\n txs.unshift(txMeta);\n }\n return txs;\n }\n\n return filteredTransactions;\n }\n\n getApprovedTransactions(address?: string): EthereumTransactionMeta[] {\n const searchCriteria: { status: TransactionStatus; from?: string } = { status: TransactionStatus.approved };\n if (address) {\n searchCriteria.from = address;\n }\n return this.getTransactions({ searchCriteria });\n }\n\n getSubmittedTransactions(address?: string): EthereumTransactionMeta[] {\n const searchCriteria: { status: TransactionStatus; from?: string } = { status: TransactionStatus.submitted };\n if (address) {\n searchCriteria.from = address;\n }\n return this.getTransactions({ searchCriteria });\n }\n\n getPendingTransactions(address?: string): EthereumTransactionMeta[] {\n const submitted = this.getSubmittedTransactions(address);\n const approved = this.getApprovedTransactions(address);\n return [...submitted, ...approved];\n }\n\n getConfirmedTransactions(address?: string): EthereumTransactionMeta[] {\n const searchCriteria: { status: TransactionStatus; from?: string } = { status: TransactionStatus.confirmed };\n if (address) {\n searchCriteria.from = address;\n }\n return this.getTransactions({ searchCriteria });\n }\n\n getUnapprovedTxList(): Record<string, EthereumTransactionMeta> {\n const chainId = this.getCurrentChainId();\n\n return pickBy(this.state.transactions, (transaction) => {\n const transactionMatches = transactionMatchesNetwork(transaction, chainId);\n return transaction.status === TransactionStatus.unapproved && transactionMatches;\n });\n }\n\n updateTransactionInState(txMeta: EthereumTransactionMeta, note?: string) {\n // validate txParams\n if (txMeta.transaction) {\n txMeta.transaction = normalizeAndValidateTxParams(txMeta.transaction, false);\n }\n\n // create txMeta snapshot for history\n const currentState = snapshotFromTxMeta(txMeta);\n // recover previous tx state obj\n const previousState = replayHistory(txMeta.history);\n // generate history entry and add to history\n const entry = generateHistoryEntry(previousState, currentState as unknown as Record<string, unknown>, note);\n if (entry.length > 0) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n txMeta.history.push(entry as any);\n }\n\n // commit txMeta to state\n this.updateTransaction(txMeta);\n }\n\n protected override _setTransactionStatus(txId: string, status: TransactionStatus, isFinalStep?: boolean): void {\n const txMeta = this.getTransaction(txId);\n if (!txMeta) {\n return;\n }\n txMeta.status = status;\n this.updateTransactionInState(txMeta);\n this.emit(TX_EVENTS.TX_STATUS_UPDATE, { txId, status } as TX_STATUS_UPDATE_EVENT_TYPE);\n if (this.isFinalState(status) || isFinalStep) {\n this.emit(`${txMeta.id}:finished`, txMeta);\n } else {\n this.emit(`${txMeta.id}:${status}`, txId);\n }\n }\n}\n","import { Common, Hardfork } from \"@ethereumjs/common\";\nimport { TransactionFactory, TypedTransaction } from \"@ethereumjs/tx\";\nimport { addHexPrefix, stripHexPrefix } from \"@ethereumjs/util\";\nimport { providerErrors, rpcErrors } from \"@metamask/rpc-errors\";\nimport {\n ITransactionController,\n TRANSACTION_TYPES,\n TransactionConfig,\n TransactionState,\n TransactionStatus,\n TX_CONFIRMED_EVENT_TYPE,\n TX_DROPPED_EVENT_TYPE,\n TX_EVENTS,\n TX_FAILED_EVENT_TYPE,\n TX_WARNING_EVENT_TYPE,\n} from \"@toruslabs/base-controllers\";\nimport { JRPCRequest, SafeEventEmitterProvider } from \"@toruslabs/openlogin-jrpc\";\nimport BigNumber from \"bignumber.js\";\nimport { keccak256 } from \"ethers\";\nimport log from \"loglevel\";\n\nimport PollingBlockTracker from \"../Block/PollingBlockTracker\";\nimport GasFeeController from \"../Gas/GasFeeController\";\nimport { type EthereumGasFeeEstimates, EthereumLegacyGasFeeEstimates } from \"../Gas/IGasFeeController\";\nimport KeyringController from \"../Keyring/KeyringController\";\nimport NetworkController from \"../Network/NetworkController\";\nimport PreferencesController from \"../Preferences/PreferencesController\";\nimport { CHAIN_ID_TO_GAS_LIMIT_BUFFER_MAP, GAS_ESTIMATE_TYPES, METHOD_TYPES, TRANSACTION_ENVELOPE_TYPES } from \"../utils/constants\";\nimport { decGWEIToHexWEI } from \"../utils/conversionUtils\";\nimport { bnLessThan, GAS_LIMITS, getChainType } from \"../utils/helpers\";\nimport {\n EthereumBlock,\n EthereumTransactionMeta,\n NonceLockRes,\n TransactionParams,\n TransactionReceipt,\n UserRequestApprovalParams,\n} from \"../utils/interfaces\";\nimport NonceTracker from \"./NonceTracker\";\nimport PendingTransactionTracker from \"./PendingTransactionTracker\";\nimport TransactionGasUtil from \"./TransactionGasUtil\";\nimport TransactionStateManager from \"./TransactionStateManager\";\nimport { determineTransactionType, isEIP1559Transaction, normalizeTxParameters, validateTxParameters } from \"./TransactionUtils\";\n\nexport default class TransactionController extends TransactionStateManager implements ITransactionController<TransactionParams> {\n getSelectedAddress: PreferencesController[\"getSelectedAddress\"];\n\n getEIP1559GasFeeEstimates: GasFeeController[\"fetchGasFeeEstimates\"];\n\n public nonceTracker: NonceTracker;\n\n public pendingTxTracker: PendingTransactionTracker;\n\n public txGasUtil: TransactionGasUtil;\n\n private _getCurrentNetworkEIP1559Compatibility: NetworkController[\"getEIP1559Compatibility\"];\n\n private _getCurrentAccountEIP1559Compatibility: (address?: string) => Promise<boolean>;\n\n private getProviderConfig: NetworkController[\"getProviderConfig\"];\n\n private signEthTx: KeyringController[\"signTransaction\"];\n\n private provider: SafeEventEmitterProvider;\n\n private blockTracker: PollingBlockTracker;\n\n private inProcessOfSigning: Set<string> = new Set();\n\n constructor({\n config,\n state,\n provider,\n blockTracker,\n signEthTx,\n getCurrentChainId,\n getCurrentNetworkEIP1559Compatibility,\n getProviderConfig,\n getCurrentAccountEIP1559Compatibility,\n getSelectedAddress,\n getEIP1559GasFeeEstimates,\n }: {\n config?: Partial<TransactionConfig>;\n state?: Partial<TransactionState<TransactionParams, EthereumTransactionMeta>>;\n provider: SafeEventEmitterProvider;\n blockTracker: PollingBlockTracker;\n signEthTx: KeyringController[\"signTransaction\"];\n getCurrentChainId: NetworkController[\"getNetworkIdentifier\"];\n getProviderConfig: NetworkController[\"getProviderConfig\"];\n getCurrentNetworkEIP1559Compatibility: NetworkController[\"getEIP1559Compatibility\"];\n getCurrentAccountEIP1559Compatibility: (address?: string) => Promise<boolean>; // used only if keyring supports EIP-1559\n getSelectedAddress: PreferencesController[\"getSelectedAddress\"];\n getEIP1559GasFeeEstimates: GasFeeController[\"fetchGasFeeEstimates\"];\n }) {\n super({ config, state, getCurrentChainId });\n this.blockTracker = blockTracker;\n this.getProviderConfig = getProviderConfig;\n this._getCurrentNetworkEIP1559Compatibility = getCurrentNetworkEIP1559Compatibility;\n this._getCurrentAccountEIP1559Compatibility = getCurrentAccountEIP1559Compatibility;\n this.getSelectedAddress = getSelectedAddress;\n this.getEIP1559GasFeeEstimates = getEIP1559GasFeeEstimates;\n this.signEthTx = signEthTx;\n this.provider = provider;\n this.txGasUtil = new TransactionGasUtil(this.provider, this.blockTracker);\n this.nonceTracker = new NonceTracker({\n provider,\n blockTracker,\n getConfirmedTransactions: this.getConfirmedTransactions.bind(this),\n getPendingTransactions: this.getSubmittedTransactions.bind(this), // nonce tracker should only care about submitted transactions\n });\n this.pendingTxTracker = new PendingTransactionTracker({\n provider,\n nonceTracker: this.nonceTracker,\n getPendingTransactions: this.getPendingTransactions.bind(this), // pending tx tracker should only care about submitted and approved transactions\n getConfirmedTransactions: this.getConfirmedTransactions.bind(this),\n approveTransaction: this.approveTransaction.bind(this),\n publishTransaction: (rawTx) => this.provider.request<[string], string>({ method: METHOD_TYPES.ETH_SEND_RAW_TRANSACTION, params: [rawTx] }),\n });\n this._setupListeners();\n }\n\n addTransactionUnapproved(txMeta: EthereumTransactionMeta) {\n this.addTransactionToState(txMeta);\n this.emit(`${txMeta.id}:unapproved`, txMeta);\n }\n\n async addNewUnapprovedTransaction(\n txParams: TransactionParams,\n req: JRPCRequest<TransactionParams> & UserRequestApprovalParams & { origin: string }\n ): Promise<string> {\n const txMeta = await this.createTransaction(txParams, req);\n return this.processApproval(txMeta);\n }\n\n async processApproval(txMeta: EthereumTransactionMeta): Promise<string> {\n return new Promise((resolve, reject) => {\n const handleFinished = (msg: EthereumTransactionMeta) => {\n if (msg.status === TransactionStatus.rejected) {\n return reject(providerErrors.userRejectedRequest(`Transaction Signature: User denied message signature`));\n }\n if (msg.status === TransactionStatus.failed) {\n return reject(rpcErrors.internal(`Transaction Signature: failed to sign message ${msg.error}`));\n }\n if (msg.status === TransactionStatus.submitted) {\n return resolve(msg.transactionHash);\n }\n\n return reject(rpcErrors.internal(`Transaction Signature: Unknown problem: ${JSON.stringify(txMeta.transaction)}`));\n };\n this.once(`${txMeta.id}:finished`, handleFinished);\n });\n }\n\n async approveTransaction(transactionID: string): Promise<void> {\n const txMeta = this.getTransaction(transactionID);\n if (this.inProcessOfSigning.has(transactionID)) {\n return;\n }\n this.inProcessOfSigning.add(transactionID);\n let nonceLock: NonceLockRes;\n try {\n this.setTxStatusApproved(transactionID);\n const fromAddress = txMeta.transaction.from;\n const { customNonceValue } = txMeta.transaction;\n const customNonceValueNumber = Number(customNonceValue);\n nonceLock = await this.nonceTracker.getNonceLock(fromAddress);\n // add nonce to txParams\n // if txMeta has previousGasParams then it is a retry at same nonce with\n // higher gas settings and therefor the nonce should not be recalculated\n const nonce = nonceLock.nextNonce;\n const customOrNonce = customNonceValueNumber === 0 ? customNonceValue : customNonceValue || nonce;\n txMeta.transaction.nonce = addHexPrefix(customOrNonce.toString(16));\n // add nonce debugging information to txMeta\n txMeta.nonceDetails = nonceLock.nonceDetails;\n this.updateTransactionInState(txMeta, \"transactions#approveTransaction\");\n // sign transaction\n const rawTx = await this.signTransaction(transactionID);\n await this.publishTransaction(transactionID, rawTx);\n nonceLock.releaseLock();\n } catch (err) {\n try {\n this.setTxStatusFailed(transactionID, err as Error);\n } catch (err2) {\n log.error(err2);\n }\n // must set transaction to submitted/failed before releasing lock\n if (nonceLock) {\n nonceLock.releaseLock();\n }\n // continue with error chain\n throw err;\n } finally {\n this.inProcessOfSigning.delete(transactionID);\n }\n }\n\n async signTransaction(txId: string): Promise<string> {\n const txMeta = this.getTransaction(txId);\n const chainId = this.getCurrentChainId();\n const type = isEIP1559Transaction(txMeta) ? TRANSACTION_ENVELOPE_TYPES.FEE_MARKET : TRANSACTION_ENVELOPE_TYPES.LEGACY;\n const txParams: TransactionParams = {\n ...txMeta.transaction,\n type,\n chainId,\n gasLimit: txMeta.transaction.gas,\n };\n const fromAddress = txParams.from;\n const common = await this.getCommonConfiguration(fromAddress);\n const unsignedEthTx = TransactionFactory.fromTxData(txParams, { common });\n const signedEthTx = await this.signEthTx<TypedTransaction, TypedTransaction>(unsignedEthTx, fromAddress);\n txMeta.r = addHexPrefix(signedEthTx.r.toString(16));\n txMeta.s = addHexPrefix(signedEthTx.s.toString(16));\n txMeta.v = addHexPrefix(signedEthTx.v.toString(16));\n this.updateTransactionInState(txMeta, \"transactions#signTransaction: add r, s, v values\");\n this.setTxStatusSigned(txId);\n const rawTx = addHexPrefix(Buffer.from(signedEthTx.serialize()).toString(\"hex\"));\n return rawTx;\n }\n\n async publishTransaction(txId: string, rawTx: string): Promise<void> {\n const txMeta = this.getTransaction(txId);\n txMeta.rawTransaction = rawTx;\n this.updateTransactionInState(txMeta, \"transactions#publishTransaction\");\n let txHash: string;\n try {\n txHash = await this.provider.request<[string], string>({ method: METHOD_TYPES.ETH_SEND_RAW_TRANSACTION, params: [rawTx] });\n } catch (error) {\n if ((error as Error).message.toLowerCase().includes(\"known transaction\")) {\n txHash = keccak256(addHexPrefix(rawTx));\n txHash = addHexPrefix(txHash);\n } else {\n throw error;\n }\n }\n this.setTxHash(txId, txHash);\n this.setTxStatusSubmitted(txId);\n }\n\n async confirmTransaction(params: TX_CONFIRMED_EVENT_TYPE): Promise<void> {\n const { txId, txReceipt } = params as TX_CONFIRMED_EVENT_TYPE & {\n baseFeePerGas?: string;\n blockTimestamp?: string;\n txReceipt: TransactionReceipt;\n };\n log.info(params, \"confirm params\");\n const txMeta = this.getTransaction(txId);\n if (!txMeta) return;\n try {\n txMeta.txReceipt = {\n ...txReceipt,\n };\n this.setTxStatusConfirmed(txId);\n this.markNonceDuplicatesDropped(txId);\n this.updateTransactionInState(txMeta, \"transactions#confirmTransaction - add txReceipt\");\n } catch (error) {\n log.error(error);\n }\n }\n\n cancelTransaction?(transactionID: string): Promise<void> {\n throw new Error(`Method not implemented. ${transactionID}`);\n }\n\n async getEIP1559Compatibility(fromAddress?: string) {\n const currentNetworkIsCompatible = await this._getCurrentNetworkEIP1559Compatibility();\n const fromAccountIsCompatible = await this._getCurrentAccountEIP1559Compatibility(fromAddress);\n return currentNetworkIsCompatible && fromAccountIsCompatible;\n }\n\n async addTransactionGasDefaults(txMeta: EthereumTransactionMeta) {\n let updateTxMeta = txMeta;\n try {\n updateTxMeta = await this.addTxGasDefaults(txMeta);\n } catch (error) {\n log.warn(error);\n updateTxMeta = this.getTransaction(txMeta.id);\n updateTxMeta.loadingDefaults = false;\n this.updateTransactionInState(txMeta, \"Failed to calculate gas defaults.\");\n throw error;\n }\n updateTxMeta.loadingDefaults = false;\n\n this.updateTransactionInState(updateTxMeta, \"Added new unapproved transaction.\");\n\n return updateTxMeta;\n }\n\n async addTxGasDefaults(txMeta: EthereumTransactionMeta) {\n const eip1559Compatibility = txMeta.transaction.type !== TRANSACTION_ENVELOPE_TYPES.LEGACY && (await this.getEIP1559Compatibility());\n\n const {\n gasPrice: defaultGasPrice,\n maxFeePerGas: defaultMaxFeePerGas,\n maxPriorityFeePerGas: defaultMaxPriorityFeePerGas,\n } = await this.getDefaultGasFees(txMeta, eip1559Compatibility);\n const { gasLimit: defaultGasLimit, simulationFails } = await this.getDefaultGasLimit(txMeta);\n\n txMeta = this.getTransaction(txMeta.id);\n if (simulationFails) {\n txMeta.simulationFails = simulationFails;\n }\n\n if (eip1559Compatibility) {\n // If the dapp has suggested a gas price, but no maxFeePerGas or maxPriorityFeePerGas\n // then we set maxFeePerGas and maxPriorityFeePerGas to the suggested gasPrice.\n if (txMeta.transaction.gasPrice && !txMeta.transaction.maxFeePerGas && !txMeta.transaction.maxPriorityFeePerGas) {\n txMeta.transaction.maxFeePerGas = txMeta.transaction.gasPrice;\n // If the dapp has suggested a gas price, but no maxFeePerGas or maxPriorityFeePerGas\n // then we set maxFeePerGas to the suggested gasPrice.\n\n txMeta.transaction.maxPriorityFeePerGas = bnLessThan(\n typeof defaultMaxPriorityFeePerGas === \"string\" ? stripHexPrefix(defaultMaxPriorityFeePerGas) : defaultMaxPriorityFeePerGas,\n typeof txMeta.transaction.gasPrice === \"string\" ? stripHexPrefix(txMeta.transaction.gasPrice) : txMeta.transaction.gasPrice\n )\n ? defaultMaxPriorityFeePerGas\n : txMeta.transaction.gasPrice;\n } else {\n if (defaultMaxFeePerGas && !txMeta.transaction.maxFeePerGas) {\n // If the dapp has not set the gasPrice or the maxFeePerGas, then we set maxFeePerGas\n // with the one returned by the gasFeeController, if that is available.\n txMeta.transaction.maxFeePerGas = defaultMaxFeePerGas;\n }\n\n if (defaultMaxPriorityFeePerGas && !txMeta.transaction.maxPriorityFeePerGas) {\n // If the dapp has not set the gasPrice or the maxPriorityFeePerGas, then we set maxPriorityFeePerGas\n // with the one returned by the gasFeeController, if that is available.\n txMeta.transaction.maxPriorityFeePerGas = defaultMaxPriorityFeePerGas;\n }\n\n if (defaultGasPrice && !txMeta.transaction.maxFeePerGas) {\n // If the dapp has not set the gasPrice or the maxFeePerGas, and no maxFeePerGas is available\n // from the gasFeeController, then we set maxFeePerGas to the defaultGasPrice, assuming it is\n // available.\n txMeta.transaction.maxFeePerGas = defaultGasPrice;\n }\n\n if (txMeta.transaction.maxFeePerGas && !txMeta.transaction.maxPriorityFeePerGas) {\n // If the dapp has not set the gasPrice or the maxPriorityFeePerGas, and no maxPriorityFeePerGas is\n // available from the gasFeeController, then we set maxPriorityFeePerGas to\n // txMeta.transaction.maxFeePerGas, which will either be the gasPrice from the controller, the maxFeePerGas\n // set by the dapp, or the maxFeePerGas from the controller.\n txMeta.transaction.maxPriorityFeePerGas = txMeta.transaction.maxFeePerGas;\n }\n }\n\n // We remove the gasPrice param entirely when on an eip1559 compatible network\n\n delete txMeta.transaction.gasPrice;\n } else {\n // We ensure that maxFeePerGas and maxPriorityFeePerGas are not in the transaction params\n // when not on a EIP1559 compatible network\n\n delete txMeta.transaction.maxPriorityFeePerGas;\n delete txMeta.transaction.maxFeePerGas;\n }\n\n // If we have gotten to this point, and none of gasPrice, maxPriorityFeePerGas or maxFeePerGas are\n // set on transaction, it means that either we are on a non-EIP1559 network and the dapp didn't suggest\n // a gas price, or we are on an EIP1559 network, and none of gasPrice, maxPriorityFeePerGas or maxFeePerGas\n // were available from either the dapp or the network.\n if (defaultGasPrice && !txMeta.transaction.gasPrice && !txMeta.transaction.maxPriorityFeePerGas && !txMeta.transaction.maxFeePerGas) {\n txMeta.transaction.gasPrice = defaultGasPrice;\n }\n\n if (defaultGasLimit && !txMeta.transaction.gas) {\n txMeta.transaction.gas = defaultGasLimit;\n }\n return txMeta;\n }\n\n setTxHash(txId: string, txHash: string) {\n // Add the tx hash to the persisted meta-tx object\n const txMeta = this.getTransaction(txId);\n txMeta.transactionHash = txHash;\n this.updateTransactionInState(txMeta, \"transactions#setTxHash\");\n }\n\n getUnapprovedTxCount = () => Object.keys(this.getUnapprovedTxList()).length;\n\n getPendingTxCount = (account?: string) => this.getPendingTransactions(account).length;\n\n async getDefaultGasFees(\n txMeta: EthereumTransactionMeta,\n eip1559Compatibility: boolean\n ): Promise<{ maxFeePerGas?: string; maxPriorityFeePerGas?: string; gasPrice?: string }> {\n if (\n (!eip1559Compatibility && txMeta.transaction.gasPrice) ||\n (eip1559Compatibility && txMeta.transaction.maxFeePerGas && txMeta.transaction.maxPriorityFeePerGas)\n ) {\n return {};\n }\n\n try {\n const { gasFeeEstimates, gasEstimateType } = await this.getEIP1559GasFeeEstimates();\n if (eip1559Compatibility && gasEstimateType === GAS_ESTIMATE_TYPES.FEE_MARKET) {\n // this is in dec gwei\n const { medium: { suggestedMaxPriorityFeePerGas, suggestedMaxFeePerGas } = {} } = <EthereumGasFeeEstimates>gasFeeEstimates;\n\n if (suggestedMaxPriorityFeePerGas && suggestedMaxFeePerGas) {\n return {\n // send to controller in hex wei\n maxFeePerGas: addHexPrefix(decGWEIToHexWEI(new BigNumber(suggestedMaxFeePerGas)).toString(16)),\n maxPriorityFeePerGas: addHexPrefix(decGWEIToHexWEI(new BigNumber(suggestedMaxPriorityFeePerGas)).toString(16)),\n };\n }\n } else if (gasEstimateType === GAS_ESTIMATE_TYPES.LEGACY) {\n const { medium } = <EthereumLegacyGasFeeEstimates>gasFeeEstimates;\n // The LEGACY type includes low, medium and high estimates of\n // gas price values.\n return {\n gasPrice: addHexPrefix(decGWEIToHexWEI(new BigNumber(medium)).toString(16)),\n };\n } else if (gasEstimateType === GAS_ESTIMATE_TYPES.ETH_GASPRICE) {\n const { gasPrice } = <{ gasPrice?: string }>gasFeeEstimates;\n // The ETH_GASPRICE type just includes a single gas price property,\n // which we can assume was retrieved from eth_gasPrice\n return {\n gasPrice: addHexPrefix(decGWEIToHexWEI(new BigNumber(gasPrice)).toString(16)),\n };\n }\n } catch (error) {\n log.error(error);\n }\n\n const gasPrice = await this.provider.request<never, string>({ method: METHOD_TYPES.ETH_GET_GAS_PRICE });\n\n return { gasPrice: gasPrice && addHexPrefix(gasPrice) };\n }\n\n private async getDefaultGasLimit(txMeta: EthereumTransactionMeta) {\n const chainId = this.getCurrentChainId();\n const customNetworkGasBuffer = CHAIN_ID_TO_GAS_LIMIT_BUFFER_MAP[chainId];\n const chainType = getChainType(chainId);\n\n if (txMeta.transaction.gas) {\n return {};\n }\n if (txMeta.transaction.to && txMeta.transactionCategory === TRANSACTION_TYPES.SENT_ETHER && chainType !== \"custom\" && !txMeta.transaction.data) {\n // This is a standard ether simple send, gas requirement is exactly 21k\n return { gasLimit: GAS_LIMITS.SIMPLE };\n }\n\n const { blockGasLimit, estimatedGasHex, simulationFails } = await this.txGasUtil.analyzeGasUsage(txMeta);\n\n // add additional gas buffer to our estimation for safety\n const gasLimit = this.txGasUtil.addGasBuffer(addHexPrefix(estimatedGasHex), blockGasLimit, customNetworkGasBuffer);\n return { gasLimit, simulationFails };\n }\n\n private async createTransaction(\n txParameters: TransactionParams,\n req: JRPCRequest<TransactionParams> & UserRequestApprovalParams\n ): Promise<EthereumTransactionMeta> {\n const normalizedTxParameters = normalizeTxParameters(txParameters);\n const eip1559Compatibility = await this.getEIP1559Compatibility(txParameters.from);\n validateTxParameters(normalizedTxParameters, eip1559Compatibility);\n\n let txMeta = this.generateTxMeta({\n transaction: normalizedTxParameters,\n origin: req.origin,\n });\n\n const { type, category, methodParams } = await determineTransactionType(txParameters, this.provider);\n txMeta.type = type;\n txMeta.transactionCategory = category;\n txMeta.methodParams = methodParams;\n txMeta.transaction.value = txMeta.transaction.value ? addHexPrefix(txMeta.transaction.value) : \"0x0\";\n this.emit(`${txMeta.id}:unapproved`, txMeta);\n txMeta = this.addTransactionToState(txMeta);\n txMeta = await this.addTransactionGasDefaults(txMeta);\n\n this.emit(TX_EVENTS.TX_UNAPPROVED, { txMeta, req });\n\n return txMeta;\n }\n\n private _setupListeners() {\n this.setupBlockTrackerListener();\n this.pendingTxTracker.on(TX_EVENTS.TX_WARNING, (data: TX_WARNING_EVENT_TYPE<TransactionParams, EthereumTransactionMeta>) => {\n this.updateTransactionInState(data.txMeta);\n });\n this.pendingTxTracker.on(TX_EVENTS.TX_DROPPED, (data: TX_DROPPED_EVENT_TYPE) => this.setTxStatusDropped(data.txId));\n this.pendingTxTracker.on(\n TX_EVENTS.TX_BLOCK_UPDATE,\n ({ txMeta, latestBlockNumber }: { txMeta: EthereumTransactionMeta; latestBlockNumber: string; txId: string }) => {\n if (!txMeta.firstRetryBlockNumber) {\n txMeta.firstRetryBlockNumber = latestBlockNumber;\n this.updateTransactionInState(txMeta);\n }\n }\n );\n this.pendingTxTracker.on(TX_EVENTS.TX_RETRY, (txMeta) => {\n if (!(\"retryCount\" in txMeta)) {\n txMeta.retryCount = 0;\n }\n txMeta.retryCount += 1;\n this.updateTransactionInState(txMeta);\n });\n\n this.pendingTxTracker.on(TX_EVENTS.TX_FAILED, (data: TX_FAILED_EVENT_TYPE) => {\n this.setTxStatusFailed(data.txId, data.error);\n });\n this.pendingTxTracker.on(TX_EVENTS.TX_CONFIRMED, (data: TX_CONFIRMED_EVENT_TYPE) => this.confirmTransaction(data));\n }\n\n private setupBlockTrackerListener() {\n let listenersAreActive = false;\n const latestBlockHandler = this.onLatestBlock.bind(this);\n this.on(TX_EVENTS.TX_STATUS_UPDATE, () => {\n const pendingTxs = this.getPendingTransactions();\n if (!listenersAreActive && pendingTxs.length > 0) {\n this.blockTracker.on(\"latest\", latestBlockHandler);\n listenersAreActive = true;\n } else if (listenersAreActive && !pendingTxs.length) {\n this.blockTracker.removeListener(\"latest\", latestBlockHandler);\n listenersAreActive = false;\n }\n });\n }\n\n private async onLatestBlock(blockNumber: EthereumBlock) {\n try {\n await this.pendingTxTracker.updatePendingTxs();\n } catch (error) {\n log.error(error);\n }\n\n try {\n await this.pendingTxTracker.resubmitPendingTxs(blockNumber);\n } catch (error) {\n log.error(error);\n }\n }\n\n private async getCommonConfiguration(fromAddress: string) {\n const { chainId, displayName } = this.getProviderConfig();\n const supportsEIP1559 = await this.getEIP1559Compatibility(fromAddress);\n const hardfork = supportsEIP1559 ? Hardfork.Paris : Hardfork.Berlin;\n return Common.custom({\n chainId: chainId === \"loading\" ? 0 : Number.parseInt(chainId, 16),\n defaultHardfork: hardfork,\n name: displayName,\n networkId: chainId === \"loading\" ? 0 : Number.parseInt(chainId, 16),\n });\n }\n\n private markNonceDuplicatesDropped(txId: string) {\n const txMeta = this.getTransaction(txId);\n const { nonce, from } = txMeta.transaction;\n const sameNonceTxs = this.getTransactions({ searchCriteria: { from, nonce } });\n if (!sameNonceTxs.length) return;\n sameNonceTxs.forEach((tx) => {\n if (tx.id === txId) return;\n this.updateTransactionInState(txMeta, \"transactions/pending-tx-tracker#event: tx:confirmed reference to confirmed txHash with same nonce\");\n if (tx.status !== TransactionStatus.failed) this.setTxStatusDropped(tx.id);\n });\n }\n}\n","export { default as AccountTrackerController } from \"./Account/AccountTrackerController\";\nexport { default as PollingBlockTracker } from \"./Block/PollingBlockTracker\";\nexport { default as CurrencyController } from \"./Currency/CurrencyController\";\nexport { default as GasFeeController } from \"./Gas/GasFeeController\";\nexport * from \"./Gas/IGasFeeController\";\nexport { default as KeyringController } from \"./Keyring/KeyringController\";\nexport * from \"./Message/AbstractMessageController\";\nexport * from \"./Message/DecryptMessageController\";\nexport * from \"./Message/EncryptionPublicKeyController\";\nexport * from \"./Message/MessageController\";\nexport * from \"./Message/PersonalMessageController\";\nexport * from \"./Message/TypedMessageController\";\nexport * from \"./Message/utils\";\nexport * from \"./Network/createEthereumMiddleware\";\nexport * from \"./Network/createJsonRpcClient\";\nexport { default as NetworkController } from \"./Network/NetworkController\";\nexport * from \"./Nfts/INftsController\";\nexport * from \"./Nfts/NftHandler\";\nexport * from \"./Nfts/NftsController\";\nexport { default as PreferencesController } from \"./Preferences/PreferencesController\";\nexport * from \"./Tokens/ITokensController\";\nexport * from \"./Tokens/TokenHandler\";\nexport * from \"./Tokens/TokenRatesController\";\nexport * from \"./Tokens/TokensController\";\nexport { default as NonceTracker } from \"./Transaction/NonceTracker\";\nexport { default as PendingTransactionTracker } from \"./Transaction/PendingTransactionTracker\";\nexport { default as TransactionController } from \"./Transaction/TransactionController\";\nexport { default as TransactionGasUtil } from \"./Transaction/TransactionGasUtil\";\nexport * from \"./Transaction/TransactionStateHistoryHelper\";\nexport { default as TransactionStateManager } from \"./Transaction/TransactionStateManager\";\nexport * from \"./Transaction/TransactionUtils\";\nexport * from \"./utils/constants\";\nexport * from \"./utils/helpers\";\nexport * from \"./utils/interfaces\";\n\n/**\n * Pending controllers\n * - Transaction Controllers\n// * - AA Controller\n */\n\n/**\n * Backend apis\n * - Preferences Controller\n */\n"],"names":["ecr20Abi","constant","inputs","name","outputs","type","payable","erc721Abi","stateMutability","erc1155Abi","internalType","singleBalanceCheckerAbi","LOCALHOST","CONTRACT_TYPE_ETH","CONTRACT_TYPE_ERC20","CONTRACT_TYPE_ERC721","CONTRACT_TYPE_ERC1155","ERC1155_INTERFACE_ID","ERC721_INTERFACE_ID","ERC721_METADATA_INTERFACE_ID","ERC721_ENUMERABLE_INTERFACE_ID","MAINNET_CHAIN_ID","POLYGON_CHAIN_ID","BSC_MAINNET_CHAIN_ID","AVALANCHE_MAINNET_CHAIN_ID","XDAI_CHAIN_ID","ARBITRUM_MAINNET_CHAIN_ID","OPTIMISM_MAINNET_CHAIN_ID","CELO_MAINNET_CHAIN_ID","GOERLI_CHAIN_ID","SEPOLIA_CHAIN_ID","POLYGON_MUMBAI_CHAIN_ID","BSC_TESTNET_CHAIN_ID","AVALANCHE_TESTNET_CHAIN_ID","ARBITRUM_TESTNET_CHAIN_ID","OPTIMISM_TESTNET_CHAIN_ID","SUPPORTED_NETWORKS","blockExplorerUrl","chainId","displayName","logo","rpcTarget","process","env","VITE_APP_INFURA_PROJECT_KEY","ticker","tickerName","isTestnet","METHOD_TYPES","GET_ACCOUNTS","ETH_TRANSACTION","ETH_REQUEST_ACCOUNTS","ETH_SEND_RAW_TRANSACTION","ETH_SIGN","ETH_SIGN_TYPED_DATA","ETH_SIGN_TYPED_DATA_V3","ETH_SIGN_TYPED_DATA_V4","PERSONAL_SIGN","ETH_GET_TRANSACTION_COUNT","ETH_GET_TRANSACTION_BY_HASH","ETH_GET_ENCRYPTION_PUBLIC_KEY","ETH_DECRYPT","ETH_GET_TRANSACTION_RECEIPT","WATCH_ASSET","ETH_GET_BLOCK_BY_HASH","ETH_GET_CODE","ETH_GET_GAS_PRICE","TRANSACTION_ENVELOPE_TYPES","LEGACY","ACCESS_LIST","FEE_MARKET","GAS_ESTIMATE_TYPES","ETH_GASPRICE","NONE","CHAIN_ID_TO_GAS_LIMIT_BUFFER_MAP","OLD_ERC721_LIST","erc20","symbol","decimals","TEST_CHAINS","ETHERSCAN_SUPPORTED_CHAINS","SIMPLEHASH_SUPPORTED_CHAINS","COINGECKO_SUPPORTED_CURRENCIES","Set","COINGECKO_PLATFORMS_CHAIN_CODE_MAP","platform","currency","MessageStatus","UNAPPROVED","SIGNED","PENDING","APPROVED","REJECTED","FAILED","MESSAGE_EVENTS","UNAPPROVED_MESSAGE","SINGLE_CALL_BALANCES_ADDRESSES","BaseController","Mutex","BrowserProvider","Contract","toQuantity","log","ZERO_ADDRESS","AccountTrackerController","constructor","_ref","config","state","provider","blockTracker","getIdentities","onPreferencesStateChange","getCurrentChainId","_defineProperty","defaultState","accounts","defaultConfig","_currentBlock","initialize","ethersProvider","on","block","configure","refresh","info","refreshNeeded","syncAccounts","addresses","Object","keys","existing","newAddresses","filter","address","indexOf","oldAddresses","isUpdated","forEach","balance","update","_objectSpread","releaseLock","mutex","acquire","currentBlock","_updateAccounts","error","length","_updateAccountsViaBalanceChecker","Promise","all","map","x","_updateAccount","request","method","params","deployedContractAddress","ethContract","result","balances","index","warn","addHexPrefix","isValidAddress","toChecksumAddress","ACTIVITY_ACTION_RECEIVE","ACTIVITY_ACTION_SEND","addressSlicer","formatSmallNumbers","significantDigits","TransactionStatus","BigNumber","getEtherScanHashLink","txHash","formatPastTx","lowerCaseSelectedAddress","_x$to","totalAmountString","Number","parseFloat","total_amount","type_name","currencyAmountString","currency_amount","selected_currency","finalObject","id","created_at","toString","date","Date","from","from_aa_address","slicedFrom","to","slicedTo","action","toLowerCase","totalAmount","currencyAmount","amount","status","etherscanLink","transaction_hash","network","networkType","ethRate","currencyUsed","type_image_link","transaction_category","contract_address","nonce","is_cancel","gas","gasPrice","getEthTxStatus","hash","submitted","confirmed","rejected","undefined","err","formatDate","inputDate","monthList","day","getDate","month","getMonth","year","getFullYear","formatTime","time","toTimeString","slice","idleTimeTracker","activityThresholdTime","isIdle","idleTimeout","resetTimer","window","clearTimeout","setTimeout","addEventListener","document","checkIfIdle","isAddressByChainId","_chainId","toChecksumAddressByChainId","GAS_LIMITS","SIMPLE","BASE_TOKEN_ESTIMATE","bnLessThan","a","b","lt","getIpfsEndpoint","path","sanitizeNftMetdataUrl","url","finalUri","startsWith","ipfsPath","split","getChainType","includes","BaseBlockTracker","timeout","DEFAULT_POLLING_INTERVAL","DEFAULT_RETRY_TIMEOUT","SEC","PollingBlockTracker","Error","pollingInterval","retryTimeout","setSkipCacheFlag","checkForLatestBlock","_updateLatestBlock","getLatestBlock","_start","_synchronize","catch","emit","_isRunning","newErr","stack","emitErr","latestBlock","_fetchLatestBlock","_newPotentialLatest","blockHash","idempotencyKey","number","timestamp","baseFeePerGas","gasLimit","message","BaseCurrencyController","get","CurrencyController","onNetworkChanged","commonDenomination","commonDenominatorPrice","networkState","providerConfig","toUpperCase","nativeCurrency","setNativeCurrency","updateConversionRate","setCommonDenomination","getCommonDenomination","setCommonDenominatorPrice","getCommonDenominatorPrice","scheduleConversionInterval","conversionInterval","clearInterval","setInterval","pollInterval","currentCurrency","getCurrentCurrency","getNativeCurrency","conversionRate","retrieveConversionRate","currentCurrencyRate","commonDenominationRate","setConversionRate","setConversionDate","Math","floor","now","fromCurrency","toCurrency","apiUrl","api","parsedResponse","stripHexPrefix","BN","BIG_NUMBER_WEI_MULTIPLIER","BIG_NUMBER_GWEI_MULTIPLIER","BIG_NUMBER_ETH_MULTIPLIER","toBigNumber","hex","n","dec","String","toNormalizedDenomination","WEI","bigNumber","div","GWEI","ETH","toSpecifiedDenomination","times","dp","ROUND_HALF_UP","baseChange","isValidBase","base","isInteger","converter","value","fromNumericBase","fromDenomination","toNumericBase","toDenomination","numberOfDecimals","invertConversionRate","roundDown","convertedValue","rate","ROUND_HALF_DOWN","ROUND_DOWN","conversionUtil","_ref2","getBigNumber","addCurrencies","options","arguments","aBase","bBase","conversionOptions","_objectWithoutProperties","_excluded","plus","subtractCurrencies","_excluded2","minus","multiplyCurrencies","multiplicandBase","multiplierBase","_excluded3","conversionGreaterThan","_ref3","_ref4","secondProps","assign","_objectDestructuringEmpty","firstProps","firstValue","secondValue","gt","conversionLessThan","_ref5","_ref6","conversionMax","_ref7","_ref8","firstIsGreater","conversionGTE","_ref9","_ref10","isGreaterThanOrEqualTo","conversionLTE","_ref11","_ref12","isLessThanOrEqualTo","toNegative","decGWEIToHexWEI","decGWEI","hexWEIToDecGWEI","normalizeGWEIDecimalNumbers","numberAsWEIHex","numberAsGWEI","fetchGasEstimates","estimates","normalizedEstimates","estimatedBaseFee","low","suggestedMaxPriorityFeePerGas","suggestedMaxFeePerGas","medium","high","fetchGasEstimatesViaEthFeeHistory","noOfBlocks","newestBlock","percentileValues","feeHistory","finalBaseFeePerGas","priorityFeeCalcs","reward","reduce","acc","curr","slow","average","fast","maxWaitTimeEstimate","minWaitTimeEstimate","fetchLegacyGasPriceEstimates","referrer","referrerPolicy","SafeGasPrice","ProposeGasPrice","FastGasPrice","fetchEthGasPriceEstimate","calculateTimeEstimate","maxPriorityFeePerGas","maxFeePerGas","gasFeeEstimates","maxPriorityFeePerGasInWEI","maxFeePerGasInWEI","estimatedBaseFeeInWEI","effectiveMaxPriorityFee","min","lowMaxPriorityFeeInWEI","mediumMaxPriorityFeeInWEI","highMaxPriorityFeeInWEI","lowerTimeBound","upperTimeBound","gte","eq","isHexString","cloneDeep","defaultFetchEthGasPriceEstimate","defaultFetchGasEstimates","defaultFetchGasEstimatesViaEthFeeHistory","defaultFetchLegacyGasPriceEstimates","GAS_FEE_API","LEGACY_GAS_PRICES_API_URL","GasFeeController","getNetworkIdentifier","getProvider","getCurrentNetworkLegacyGasAPICompatibility","getCurrentNetworkEIP1559Compatibility","getCurrentAccountEIP1559Compatibility","onNetworkStateChange","interval","legacyAPIEndpoint","EIP1559APIEndpoint","estimatedGasFeeTimeBounds","gasEstimateType","currentChainId","newChainId","resetPolling","stopPolling","getGasFeeEstimatesAndStartPolling","fetchGasFeeEstimates","_fetchGasFeeEstimateData","_startPolling","disconnectPoller","destroy","intervalId","resetState","isEIP1559Compatible","isLegacyGasAPICompatible","chainIdInt","parseInt","getEIP1559Compatibility","newState","replace","getTimeEstimate","_poll","_this$getCurrentAccou","_this$getCurrentAccou2","currentNetworkIsEIP1559Compatible","currentAccountIsEIP1559Compatible","call","bigIntToBytes","ecsign","concatSig","decrypt","getEncryptionPublicKey","personalSign","signTypedData","BaseKeyringController","SigningKey","Wallet","KeyringController","wallets","signTransaction","tx","txPayload","wallet","_getWalletForAccount","privKey","getBufferPrivateKey","privateKey","signedTx","sign","getAccounts","w","publicKey","importAccount","accountPrivateKey","hexPrivateKey","signingKey","existingWallet","find","removeAccount","newWallets","idx","findIndex","splice","stripped","Buffer","signMessage","data","messageSig","sig","v","r","s","signPersonalMessage","typedData","version","signEncryptionPublicKey","decryptMessage","encryptedData","account","providerErrors","rpcErrors","AbstractMessageController","unapprovedMessages","unapprovedMessagesCount","messages","getMessage","messageId","getAllMessages","setMetadata","metadata","updateMessage","getUnapprovedMessages","addMessage","push","saveMessageList","approveMessage","messageParams","setMessageStatus","prepMessageForSigning","waitForFinishStatus","msgParams","messageName","resolve","reject","handleFinished","msg","userRejectedRequest","internal","rawSig","JSON","stringify","once","bytesToHex","TYPED_MESSAGE_SCHEMA","typedSignatureHash","validate","hexRe","validateAddress","propertyName","validateSignMessageData","messageData","normalizeMessageData","match","e","validateTypedSignMessageDataV1","Array","isArray","validateTypedSignMessageDataV3V4","parse","validation","errors","domain","activeChainId","isNaN","validateEncryptionPublicKeyMessageData","validateDecryptedMessageData","parseDecryptMessageData","buffer","randomId","DecryptMessageController","processDecryptMessage","msgObject","cleanMsgParams","parsedData","addNewUnapprovedMessage","req","addUnapprovedMessage","origin","EncryptionPublicKeyController","processGetEncryptionPublicKey","MessageController","processSignMessage","PersonalMessageController","processPersonalSignMessage","SignTypedDataVersion","getMessageType","V1","V3","V4","TypedMessageController","msgData","PROVIDER_JRPC_METHODS","createAsyncMiddleware","createScaffoldMiddleware","mergeMiddleware","createGetAccountsMiddleware","response","next","createProcessTransactionMiddleware","processTransaction","createProcessEthSignMessage","processEthSignMessage","createProcessTypedMessage","processTypedMessage","createProcessTypedMessageV3","processTypedMessageV3","createProcessTypedMessageV4","processTypedMessageV4","createProcessPersonalMessage","processPersonalMessage","createPendingNonceMiddleware","getPendingNonce","blockReference","formatTxMetaForRpcResult","txMeta","txReceipt","transaction","transactionHash","accessList","formattedTxMeta","input","blockNumber","transactionIndex","createPendingTxMiddleware","getPendingTransactionByHash","createProcessEncryptionPublicKeyMiddleware","processEncryptionPublicKey","createProcessDecryptMessageMiddleware","createRequestAccountsMiddleware","requestAccounts","createEthereumMiddleware","providerHandlers","getProviderState","GET_PROVIDER_STATE","createFetchMiddleware","providerFromMiddleware","createChainIdMiddleware","res","end","createProviderConfigMiddleware","createJsonRpcClient","fetchMiddleware","blockProvider","networkMiddleware","createEventEmitterProxy","createSwappableProxy","JRPCEngine","providerFromEngine","NetworkController","properties","EIPS_1559","mainnet","getNetworkRPCUrl","initializeProvider","baseProviderHandlers","configureProvider","lookupNetwork","providerProxy","getBlockTracker","blockTrackerProxy","getProviderConfig","setProviderConfig","refreshNetwork","supportsEIP1559","networkChainId","_this$getProviderConf","rest","configureStandardProvider","setNetworkClient","ethereumMiddleware","engine","setProvider","setTarget","eventFilter","setMaxListeners","networkClient","NftHandler","contractAddress","contractImage","contractName","contractSymbol","nftStandard","contractDescription","contractFallbackLogo","contractSupply","getNftMetadata","userAddress","tokenInfo","returnNftItem","description","image","tokenBalance","tokenId","tokenURI","getCollectibleTokenURI","fetchNftBalance","object","finalTokenMetaUri","getContractMetadata","returnNft","standard","isSpecial","checkNftStandard","abi","contract","balanceOf","owner","ownerOf","prototype","hasOwnProperty","isErc721","contractSupportsInterface","isErc1155","interfaceId","supportsInterface","merge","DEFAULT_INTERVAL","NftsController","getCustomNfts","getSimpleHashNfts","selectedAddress","nfts","preferencesState","restartNftDetection","userSelectedAddress","userNfts","_this$state$nfts$this","_timer","detectNewNfts","refreshNftBalances","startNftDetection","nftsToDetect","customNfts","reducedNfts","newAsset","nft_id","customNftId","nft_address","assets","objToPush","nft_contract_standard","values","oldNfts","nonZeroNfts","simpleHashBalances","getNftBalancesUsingHandler","currentNetworkNfts","promiseSettledResult","allSettled","tokenInstance","contractData","assetData","y","z","nonZeroTokens","ACTIVITY_ACTION_TOPUP","BasePreferencesController","patch","post","remove","PreferencesController","signAuthMessage","defaultPreferences","formattedPastTransactions","fetchedPastTx","paymentTx","poll","_this$getAddressState","_mutex","_handle","storeSelectedAddress","getAddressState","jwtToken","sync","initPreferences","calledFromEmbed","userInfo","rehydrate","locale","signatures","init","email","aggregateVerifier","verifier","verifierId","userExists","accountState","createUser","selectedCurrency","theme","storeUserLogin","getSelectedAddress","user","getUser","default_currency","defaultCurrency","contacts","public_address","userPublicAddress","default_public_address","defaultPublicAddress","customNetworks","customTokens","updateState","getWalletOrders","getTopUpOrders","then","walletTx","calculatePaymentTx","calculatePastTx","patchNewTx","_this$getAddressState2","formattedTx","storePastTx","duplicateIndex","finalTx","cancelTxCalculate","postPastTx","recalculatePastTx","refetchEtherscanTx","_this$getAddressState3","fetchEtherscanTx","parameters","URL","key","searchParams","append","href","headers","success","getEtherScanTokens","pathname","getCustomTokens","_this$getAddressState4","_this$getAddressState5","_this$getAddressState6","_this$getAddressState7","addCustomNetwork","payload","network_name","rpc_url","chain_id","block_explorer_url","is_test_net","useAPIKey","deleteCustomNetwork","editCustomNetwork","txs","accumulator","lowerCaseAction","toDateString","blockExplorerLink","pastTx","pendingTx","pendingTxPromises","resolvedTxStatuses","element","entries","patchPastTx","updated_at","toISOString","nonceMap","latestTxs","sort","aDate","getTime","bDate","latestCancelTx","hasCancel","cancelled","cancelling","cancelDateInitiated","cancelGas","cancelGasPrice","TokenHandler","getSymbol","getDecimals","getName","getUserBalance","DEFAULT_CURRENCY","TokenRatesController","onTokensStateChange","contractExchangeRates","tokensState","tokens","currentUserTokens","updateExchangeRates","chainCodes","newContractExchangeRates","token","tokenAddress","fetchExchangeRates","contractAddresses","isNativeCurrencySupported","has","join","currencyResponse","currencyApi","getObjectFromArrayBasedonKey","oldArray","xkey","mergeTokenArrays","newArray","oldMap","newMap","finalArr","isEtherScan","TokensController","restartTokenDetection","userTokens","_this$state$tokens$th","detectNewTokens","refreshTokenBalances","startTokenDetection","networkConfig","isErc20","token_address","token_name","token_symbol","customTokenId","oldTokens","tokenAddresses","etherscanBalances","currentSingleCallAddress","_","getTokenBalancesUsingHandler","currentNetworkTokens","NonceTracker","getPendingTransactions","getConfirmedTransactions","lockMap","getGlobalLock","globalMutex","_lookupMutex","getNonceLock","_globalMutexFree","_takeMutex","nonceDetails","networkNonceResult","_getNetworkNextNonce","highestLocallyConfirmed","_getHighestLocallyConfirmed","nextNetworkNonce","highestSuggested","max","pendingTxs","localNonceResult","_getHighestContinuousFrom","local","nextNonce","lockId","baseCountStr","baseCount","details","confirmedTransactions","highest","_getHighestNonce","txList","nonces","highestNonce","apply","startPoint","TX_EVENTS","SafeEventEmitter","PendingTransactionTracker","nonceTracker","approveTransaction","publishTransaction","droppedBlocksBufferByHash","Map","updatePendingTxs","nonceGlobalLock","_checkPendingTx","resubmitPendingTxs","pending","_resubmitTx","_value","errorMessage","isKnownTx","warning","TX_WARNING","txId","latestBlockNumber","firstRetryBlockNumber","TX_BLOCK_UPDATE","txBlockDistance","retryCount","rawTx","TX_RETRY","foundTx","noTxHashError","TX_FAILED","_checkIfNonceIsTaken","TX_DROPPED","transactionReceipt","TX_CONFIRMED","blockTimestamp","_checkIfTxWasDropped","networkNextNonce","set","currentBlockBuffer","DROPPED_BUFFER_COUNT","delete","completed","some","otherMeta","TransactionGasUtil","analyzeGasUsage","blockGasLimitBN","saferGasLimitBN","mul","estimatedGasHex","simulationFails","estimateTxGas","reason","errorKey","debug","blockGasLimit","addGasBuffer","initialGasLimitHex","blockGasLimitHex","multiplier","initialGasLimitBn","blockGasLimitBn","upperGasLimitBn","muln","bufferedGasLimitBn","txParams","jsonDiffer","generateHistoryEntry","previousState","note","entry","compare","replayHistory","_shortHistory","shortHistory","val","applyPatch","newDocument","snapshotFromTxMeta","shallow","history","TRANSACTION_TYPES","Interface","erc20Interface","erc721Interface","erc1155Interface","normalizers","LowerCase","customNonceValue","normalizeTxParameters","txParameters","lowerCase","normalizedTxParameters","currentKey","transactionMatchesNetwork","isEIP1559Transaction","_transaction$transact","_transaction$transact2","isLegacyTransaction","ensureMutuallyExclusiveFieldsNotProvided","fieldBeingValidated","mutuallyExclusiveField","invalidParams","ensureFieldIsString","field","ensureProperTransactionEnvelopeTypeProvided","validateFrom","validateRecipient","validateTxParameters","eip1559Compatibility","normalizeAndValidateTxParams","normalizedTxParams","getFinalStates","failed","dropped","parseStandardTokenTransactionData","txDesc","parseTransaction","methodParams","args","toArray","readAddressAsContract","contractCode","isContractAddress","determineTransactionType","DEPLOY_CONTRACT","resultCode","valueExists","tokenMethodName","TOKEN_METHOD_APPROVE","TOKEN_METHOD_TRANSFER","TOKEN_METHOD_TRANSFER_FROM","COLLECTIBLE_METHOD_SAFE_TRANSFER_FROM","SET_APPROVAL_FOR_ALL","_name","CONTRACT_INTERACTION","SENT_ETHER","category","getCodeResponse","BaseTransactionStateManager","keyBy","mapValues","omitBy","pickBy","sortBy","TransactionStateManager","generateTxMeta","opts","dappSuggestedGasFees","unapproved","loadingDefaults","addTransactionToState","removeAllListeners","snapshot","transactions","getTransactions","filterToCurrentNetwork","txHistoryLimit","nonceNetworkSet","txsToDelete","reverse","size","add","_deleteTransactions","_addTransactionsToState","wipeTransactions","transactionMatch","searchCriteria","initialList","limit","predicateMethods","predicate","transactionsToFilter","filteredTransactions","transactionMatches","i","unshift","getApprovedTransactions","approved","getSubmittedTransactions","getUnapprovedTxList","updateTransactionInState","currentState","updateTransaction","_setTransactionStatus","isFinalStep","getTransaction","TX_STATUS_UPDATE","isFinalState","Common","Hardfork","TransactionFactory","keccak256","TransactionController","signEthTx","getEIP1559GasFeeEstimates","_getCurrentNetworkEIP1559Compatibility","_getCurrentAccountEIP1559Compatibility","txGasUtil","bind","pendingTxTracker","_setupListeners","addTransactionUnapproved","addNewUnapprovedTransaction","createTransaction","processApproval","transactionID","inProcessOfSigning","nonceLock","setTxStatusApproved","fromAddress","customNonceValueNumber","customOrNonce","setTxStatusFailed","err2","common","getCommonConfiguration","unsignedEthTx","fromTxData","signedEthTx","setTxStatusSigned","serialize","rawTransaction","setTxHash","setTxStatusSubmitted","confirmTransaction","setTxStatusConfirmed","markNonceDuplicatesDropped","cancelTransaction","currentNetworkIsCompatible","fromAccountIsCompatible","addTransactionGasDefaults","updateTxMeta","addTxGasDefaults","defaultGasPrice","defaultMaxFeePerGas","defaultMaxPriorityFeePerGas","getDefaultGasFees","defaultGasLimit","getDefaultGasLimit","customNetworkGasBuffer","chainType","transactionCategory","TX_UNAPPROVED","setupBlockTrackerListener","setTxStatusDropped","listenersAreActive","latestBlockHandler","onLatestBlock","removeListener","hardfork","Paris","Berlin","custom","defaultHardfork","networkId","sameNonceTxs","default"],"sourceRoot":""}