@wagmi/core 2.0.0 → 2.0.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.
- package/README.md +13 -0
- package/actions/package.json +5 -0
- package/chains/package.json +5 -0
- package/dist/esm/actions/codegen/createReadContract.js +31 -0
- package/dist/esm/actions/codegen/createReadContract.js.map +1 -0
- package/dist/esm/actions/codegen/createSimulateContract.js +33 -0
- package/dist/esm/actions/codegen/createSimulateContract.js.map +1 -0
- package/dist/esm/actions/codegen/createWatchContractEvent.js +31 -0
- package/dist/esm/actions/codegen/createWatchContractEvent.js.map +1 -0
- package/dist/esm/actions/codegen/createWriteContract.js +43 -0
- package/dist/esm/actions/codegen/createWriteContract.js.map +1 -0
- package/dist/esm/actions/connect.js +15 -19
- package/dist/esm/actions/connect.js.map +1 -1
- package/dist/esm/actions/disconnect.js +10 -12
- package/dist/esm/actions/disconnect.js.map +1 -1
- package/dist/esm/actions/estimateFeesPerGas.js +3 -0
- package/dist/esm/actions/estimateFeesPerGas.js.map +1 -1
- package/dist/esm/actions/estimateGas.js +2 -2
- package/dist/esm/actions/estimateGas.js.map +1 -1
- package/dist/esm/actions/estimateMaxPriorityFeePerGas.js +12 -0
- package/dist/esm/actions/estimateMaxPriorityFeePerGas.js.map +1 -0
- package/dist/esm/actions/getAccount.js +6 -1
- package/dist/esm/actions/getAccount.js.map +1 -1
- package/dist/esm/actions/getBalance.js +14 -5
- package/dist/esm/actions/getBalance.js.map +1 -1
- package/dist/esm/actions/getBlock.js +15 -0
- package/dist/esm/actions/getBlock.js.map +1 -0
- package/dist/esm/actions/getBlockNumber.js +3 -1
- package/dist/esm/actions/getBlockNumber.js.map +1 -1
- package/dist/esm/actions/getBlockTransactionCount.js +11 -0
- package/dist/esm/actions/getBlockTransactionCount.js.map +1 -0
- package/dist/esm/actions/getChainId.js +2 -1
- package/dist/esm/actions/getChainId.js.map +1 -1
- package/dist/esm/actions/getClient.js +3 -0
- package/dist/esm/actions/getClient.js.map +1 -1
- package/dist/esm/actions/getConnections.js +2 -1
- package/dist/esm/actions/getConnections.js.map +1 -1
- package/dist/esm/actions/getConnectorClient.js +7 -3
- package/dist/esm/actions/getConnectorClient.js.map +1 -1
- package/dist/esm/actions/getConnectors.js +11 -0
- package/dist/esm/actions/getConnectors.js.map +1 -0
- package/dist/esm/actions/getEnsAddress.js +3 -1
- package/dist/esm/actions/getEnsAddress.js.map +1 -1
- package/dist/esm/actions/getEnsAvatar.js +3 -1
- package/dist/esm/actions/getEnsAvatar.js.map +1 -1
- package/dist/esm/actions/getEnsName.js +3 -1
- package/dist/esm/actions/getEnsName.js.map +1 -1
- package/dist/esm/actions/getEnsResolver.js +3 -1
- package/dist/esm/actions/getEnsResolver.js.map +1 -1
- package/dist/esm/actions/getFeeHistory.js +11 -0
- package/dist/esm/actions/getFeeHistory.js.map +1 -0
- package/dist/esm/actions/getGasPrice.js +11 -0
- package/dist/esm/actions/getGasPrice.js.map +1 -0
- package/dist/esm/actions/getPublicClient.js +3 -0
- package/dist/esm/actions/getPublicClient.js.map +1 -1
- package/dist/esm/actions/getToken.js +5 -0
- package/dist/esm/actions/getToken.js.map +1 -1
- package/dist/esm/actions/getTransaction.js +2 -1
- package/dist/esm/actions/getTransaction.js.map +1 -1
- package/dist/esm/actions/getTransactionCount.js +11 -0
- package/dist/esm/actions/getTransactionCount.js.map +1 -0
- package/dist/esm/actions/getWalletClient.js +4 -0
- package/dist/esm/actions/getWalletClient.js.map +1 -1
- package/dist/esm/actions/multicall.js +2 -0
- package/dist/esm/actions/multicall.js.map +1 -1
- package/dist/esm/actions/readContract.js +2 -1
- package/dist/esm/actions/readContract.js.map +1 -1
- package/dist/esm/actions/readContracts.js.map +1 -1
- package/dist/esm/actions/reconnect.js +13 -7
- package/dist/esm/actions/reconnect.js.map +1 -1
- package/dist/esm/actions/sendTransaction.js +5 -8
- package/dist/esm/actions/sendTransaction.js.map +1 -1
- package/dist/esm/actions/signMessage.js +4 -2
- package/dist/esm/actions/signMessage.js.map +1 -1
- package/dist/esm/actions/signTypedData.js +2 -2
- package/dist/esm/actions/signTypedData.js.map +1 -1
- package/dist/esm/actions/simulateContract.js +6 -7
- package/dist/esm/actions/simulateContract.js.map +1 -1
- package/dist/esm/actions/switchAccount.js +3 -2
- package/dist/esm/actions/switchAccount.js.map +1 -1
- package/dist/esm/actions/switchChain.js +5 -5
- package/dist/esm/actions/switchChain.js.map +1 -1
- package/dist/esm/actions/verifyMessage.js +11 -0
- package/dist/esm/actions/verifyMessage.js.map +1 -0
- package/dist/esm/actions/verifyTypedData.js +12 -0
- package/dist/esm/actions/verifyTypedData.js.map +1 -0
- package/dist/esm/actions/waitForTransactionReceipt.js +7 -1
- package/dist/esm/actions/waitForTransactionReceipt.js.map +1 -1
- package/dist/esm/actions/watchAccount.js +1 -1
- package/dist/esm/actions/watchAccount.js.map +1 -1
- package/dist/esm/actions/watchBlockNumber.js +2 -4
- package/dist/esm/actions/watchBlockNumber.js.map +1 -1
- package/dist/esm/actions/watchBlocks.js +26 -0
- package/dist/esm/actions/watchBlocks.js.map +1 -0
- package/dist/esm/actions/watchChainId.js +2 -1
- package/dist/esm/actions/watchChainId.js.map +1 -1
- package/dist/esm/actions/watchClient.js +2 -1
- package/dist/esm/actions/watchClient.js.map +1 -1
- package/dist/esm/actions/watchConnections.js +2 -1
- package/dist/esm/actions/watchConnections.js.map +1 -1
- package/dist/esm/actions/watchConnectors.js +10 -0
- package/dist/esm/actions/watchConnectors.js.map +1 -0
- package/dist/esm/actions/watchContractEvent.js +6 -4
- package/dist/esm/actions/watchContractEvent.js.map +1 -1
- package/dist/esm/actions/watchPendingTransactions.js +3 -4
- package/dist/esm/actions/watchPendingTransactions.js.map +1 -1
- package/dist/esm/actions/watchPublicClient.js +2 -1
- package/dist/esm/actions/watchPublicClient.js.map +1 -1
- package/dist/esm/actions/writeContract.js +9 -11
- package/dist/esm/actions/writeContract.js.map +1 -1
- package/dist/esm/connectors/createConnector.js +8 -0
- package/dist/esm/connectors/createConnector.js.map +1 -0
- package/dist/esm/connectors/injected.js +402 -0
- package/dist/esm/connectors/injected.js.map +1 -0
- package/dist/esm/connectors/mock.js +131 -0
- package/dist/esm/connectors/mock.js.map +1 -0
- package/dist/esm/createConfig.js +65 -23
- package/dist/esm/createConfig.js.map +1 -1
- package/dist/esm/createStorage.js +4 -2
- package/dist/esm/createStorage.js.map +1 -1
- package/dist/esm/errors/base.js +1 -1
- package/dist/esm/errors/base.js.map +1 -1
- package/dist/esm/errors/config.js +3 -15
- package/dist/esm/errors/config.js.map +1 -1
- package/dist/esm/errors/connector.js.map +1 -1
- package/dist/esm/exports/actions.js +43 -11
- package/dist/esm/exports/actions.js.map +1 -1
- package/dist/esm/exports/chains.js +1 -0
- package/dist/esm/exports/chains.js.map +1 -1
- package/dist/esm/exports/codegen.js +5 -0
- package/dist/esm/exports/codegen.js.map +1 -0
- package/dist/esm/exports/index.js +67 -18
- package/dist/esm/exports/index.js.map +1 -1
- package/dist/esm/exports/internal.js +5 -0
- package/dist/esm/exports/internal.js.map +1 -1
- package/dist/esm/exports/query.js +10 -0
- package/dist/esm/exports/query.js.map +1 -1
- package/dist/esm/hydrate.js +34 -0
- package/dist/esm/hydrate.js.map +1 -0
- package/dist/esm/query/disconnect.js +1 -0
- package/dist/esm/query/disconnect.js.map +1 -1
- package/dist/esm/query/estimateFeesPerGas.js +1 -0
- package/dist/esm/query/estimateFeesPerGas.js.map +1 -1
- package/dist/esm/query/estimateGas.js +1 -0
- package/dist/esm/query/estimateGas.js.map +1 -1
- package/dist/esm/query/estimateMaxPriorityFeePerGas.js +19 -0
- package/dist/esm/query/estimateMaxPriorityFeePerGas.js.map +1 -0
- package/dist/esm/query/getBalance.js +6 -4
- package/dist/esm/query/getBalance.js.map +1 -1
- package/dist/esm/query/getBlock.js +18 -0
- package/dist/esm/query/getBlock.js.map +1 -0
- package/dist/esm/query/getBlockNumber.js +1 -0
- package/dist/esm/query/getBlockNumber.js.map +1 -1
- package/dist/esm/query/getBlockTransactionCount.js +20 -0
- package/dist/esm/query/getBlockTransactionCount.js.map +1 -0
- package/dist/esm/query/getConnectorClient.js +2 -0
- package/dist/esm/query/getConnectorClient.js.map +1 -1
- package/dist/esm/query/getEnsAddress.js +1 -0
- package/dist/esm/query/getEnsAddress.js.map +1 -1
- package/dist/esm/query/getEnsAvatar.js +1 -0
- package/dist/esm/query/getEnsAvatar.js.map +1 -1
- package/dist/esm/query/getEnsName.js +1 -0
- package/dist/esm/query/getEnsName.js.map +1 -1
- package/dist/esm/query/getEnsResolver.js +1 -0
- package/dist/esm/query/getEnsResolver.js.map +1 -1
- package/dist/esm/query/getFeeHistory.js +27 -0
- package/dist/esm/query/getFeeHistory.js.map +1 -0
- package/dist/esm/query/getGasPrice.js +20 -0
- package/dist/esm/query/getGasPrice.js.map +1 -0
- package/dist/esm/query/getToken.js +1 -0
- package/dist/esm/query/getToken.js.map +1 -1
- package/dist/esm/query/getTransaction.js +4 -2
- package/dist/esm/query/getTransaction.js.map +1 -1
- package/dist/esm/query/getTransactionCount.js +23 -0
- package/dist/esm/query/getTransactionCount.js.map +1 -0
- package/dist/esm/query/getWalletClient.js +2 -0
- package/dist/esm/query/getWalletClient.js.map +1 -1
- package/dist/esm/query/infiniteReadContracts.js +25 -0
- package/dist/esm/query/infiniteReadContracts.js.map +1 -0
- package/dist/esm/query/readContract.js +7 -2
- package/dist/esm/query/readContract.js.map +1 -1
- package/dist/esm/query/readContracts.js +5 -3
- package/dist/esm/query/readContracts.js.map +1 -1
- package/dist/esm/query/reconnect.js +2 -0
- package/dist/esm/query/reconnect.js.map +1 -1
- package/dist/esm/query/sendTransaction.js +1 -0
- package/dist/esm/query/sendTransaction.js.map +1 -1
- package/dist/esm/query/signTypedData.js +1 -0
- package/dist/esm/query/signTypedData.js.map +1 -1
- package/dist/esm/query/simulateContract.js +6 -1
- package/dist/esm/query/simulateContract.js.map +1 -1
- package/dist/esm/query/switchAccount.js +3 -0
- package/dist/esm/query/switchAccount.js.map +1 -1
- package/dist/esm/query/switchChain.js +2 -0
- package/dist/esm/query/switchChain.js.map +1 -1
- package/dist/esm/query/types.js +2 -1
- package/dist/esm/query/types.js.map +1 -1
- package/dist/esm/query/utils.js +13 -0
- package/dist/esm/query/utils.js.map +1 -1
- package/dist/esm/query/verifyMessage.js +21 -0
- package/dist/esm/query/verifyMessage.js.map +1 -0
- package/dist/esm/query/verifyTypedData.js +38 -0
- package/dist/esm/query/verifyTypedData.js.map +1 -0
- package/dist/esm/query/waitForTransactionReceipt.js +3 -0
- package/dist/esm/query/waitForTransactionReceipt.js.map +1 -1
- package/dist/esm/query/writeContract.js +3 -0
- package/dist/esm/query/writeContract.js.map +1 -1
- package/dist/esm/transports/connector.js +37 -0
- package/dist/esm/transports/connector.js.map +1 -0
- package/dist/esm/transports/fallback.js +6 -0
- package/dist/esm/transports/fallback.js.map +1 -0
- package/dist/esm/tsconfig.build.tsbuildinfo +1 -1
- package/dist/esm/types/chain.js +3 -1
- package/dist/esm/types/chain.js.map +1 -1
- package/dist/esm/types/properties.js +1 -1
- package/dist/esm/types/properties.js.map +1 -1
- package/dist/esm/types/register.js +1 -1
- package/dist/esm/types/register.js.map +1 -1
- package/dist/esm/utils/cookie.js +37 -0
- package/dist/esm/utils/cookie.js.map +1 -0
- package/dist/esm/version.js +1 -1
- package/dist/types/actions/codegen/createReadContract.d.ts +16 -0
- package/dist/types/actions/codegen/createReadContract.d.ts.map +1 -0
- package/dist/types/actions/codegen/createSimulateContract.d.ts +20 -0
- package/dist/types/actions/codegen/createSimulateContract.d.ts.map +1 -0
- package/dist/types/actions/codegen/createWatchContractEvent.d.ts +14 -0
- package/dist/types/actions/codegen/createWatchContractEvent.d.ts.map +1 -0
- package/dist/types/actions/codegen/createWriteContract.d.ts +22 -0
- package/dist/types/actions/codegen/createWriteContract.d.ts.map +1 -0
- package/dist/types/actions/connect.d.ts +10 -11
- package/dist/types/actions/connect.d.ts.map +1 -1
- package/dist/types/actions/disconnect.d.ts +7 -6
- package/dist/types/actions/disconnect.d.ts.map +1 -1
- package/dist/types/actions/estimateFeesPerGas.d.ts +7 -5
- package/dist/types/actions/estimateFeesPerGas.d.ts.map +1 -1
- package/dist/types/actions/estimateGas.d.ts +7 -5
- package/dist/types/actions/estimateGas.d.ts.map +1 -1
- package/dist/types/actions/estimateMaxPriorityFeePerGas.d.ts +11 -0
- package/dist/types/actions/estimateMaxPriorityFeePerGas.d.ts.map +1 -0
- package/dist/types/actions/getAccount.d.ts +6 -2
- package/dist/types/actions/getAccount.d.ts.map +1 -1
- package/dist/types/actions/getBalance.d.ts +7 -5
- package/dist/types/actions/getBalance.d.ts.map +1 -1
- package/dist/types/actions/getBlock.d.ts +16 -0
- package/dist/types/actions/getBlock.d.ts.map +1 -0
- package/dist/types/actions/getBlockNumber.d.ts +7 -7
- package/dist/types/actions/getBlockNumber.d.ts.map +1 -1
- package/dist/types/actions/getBlockTransactionCount.d.ts +10 -0
- package/dist/types/actions/getBlockTransactionCount.d.ts.map +1 -0
- package/dist/types/actions/getChainId.d.ts +2 -2
- package/dist/types/actions/getChainId.d.ts.map +1 -1
- package/dist/types/actions/getClient.d.ts +3 -3
- package/dist/types/actions/getClient.d.ts.map +1 -1
- package/dist/types/actions/getConnections.d.ts +2 -2
- package/dist/types/actions/getConnections.d.ts.map +1 -1
- package/dist/types/actions/getConnectorClient.d.ts +6 -5
- package/dist/types/actions/getConnectorClient.d.ts.map +1 -1
- package/dist/types/actions/getConnectors.d.ts +5 -0
- package/dist/types/actions/getConnectors.d.ts.map +1 -0
- package/dist/types/actions/getEnsAddress.d.ts +5 -5
- package/dist/types/actions/getEnsAddress.d.ts.map +1 -1
- package/dist/types/actions/getEnsAvatar.d.ts +5 -5
- package/dist/types/actions/getEnsAvatar.d.ts.map +1 -1
- package/dist/types/actions/getEnsName.d.ts +5 -5
- package/dist/types/actions/getEnsName.d.ts.map +1 -1
- package/dist/types/actions/getEnsResolver.d.ts +5 -5
- package/dist/types/actions/getEnsResolver.d.ts.map +1 -1
- package/dist/types/actions/getFeeHistory.d.ts +10 -0
- package/dist/types/actions/getFeeHistory.d.ts.map +1 -0
- package/dist/types/actions/getGasPrice.d.ts +10 -0
- package/dist/types/actions/getGasPrice.d.ts.map +1 -0
- package/dist/types/actions/getPublicClient.d.ts +3 -3
- package/dist/types/actions/getPublicClient.d.ts.map +1 -1
- package/dist/types/actions/getToken.d.ts +10 -8
- package/dist/types/actions/getToken.d.ts.map +1 -1
- package/dist/types/actions/getTransaction.d.ts +8 -6
- package/dist/types/actions/getTransaction.d.ts.map +1 -1
- package/dist/types/actions/getTransactionCount.d.ts +10 -0
- package/dist/types/actions/getTransactionCount.d.ts.map +1 -0
- package/dist/types/actions/getWalletClient.d.ts +5 -4
- package/dist/types/actions/getWalletClient.d.ts.map +1 -1
- package/dist/types/actions/multicall.d.ts +5 -4
- package/dist/types/actions/multicall.d.ts.map +1 -1
- package/dist/types/actions/readContract.d.ts +4 -4
- package/dist/types/actions/readContract.d.ts.map +1 -1
- package/dist/types/actions/readContracts.d.ts +3 -1
- package/dist/types/actions/readContracts.d.ts.map +1 -1
- package/dist/types/actions/reconnect.d.ts +5 -4
- package/dist/types/actions/reconnect.d.ts.map +1 -1
- package/dist/types/actions/sendTransaction.d.ts +7 -5
- package/dist/types/actions/sendTransaction.d.ts.map +1 -1
- package/dist/types/actions/signMessage.d.ts +7 -5
- package/dist/types/actions/signMessage.d.ts.map +1 -1
- package/dist/types/actions/signTypedData.d.ts +7 -4
- package/dist/types/actions/signTypedData.d.ts.map +1 -1
- package/dist/types/actions/simulateContract.d.ts +15 -11
- package/dist/types/actions/simulateContract.d.ts.map +1 -1
- package/dist/types/actions/switchAccount.d.ts +5 -4
- package/dist/types/actions/switchAccount.d.ts.map +1 -1
- package/dist/types/actions/switchChain.d.ts +9 -8
- package/dist/types/actions/switchChain.d.ts.map +1 -1
- package/dist/types/actions/verifyMessage.d.ts +10 -0
- package/dist/types/actions/verifyMessage.d.ts.map +1 -0
- package/dist/types/actions/verifyTypedData.d.ts +11 -0
- package/dist/types/actions/verifyTypedData.d.ts.map +1 -0
- package/dist/types/actions/waitForTransactionReceipt.d.ts +9 -6
- package/dist/types/actions/waitForTransactionReceipt.d.ts.map +1 -1
- package/dist/types/actions/watchAccount.d.ts +1 -1
- package/dist/types/actions/watchAccount.d.ts.map +1 -1
- package/dist/types/actions/watchBlockNumber.d.ts +1 -1
- package/dist/types/actions/watchBlockNumber.d.ts.map +1 -1
- package/dist/types/actions/watchBlocks.d.ts +13 -0
- package/dist/types/actions/watchBlocks.d.ts.map +1 -0
- package/dist/types/actions/watchChainId.d.ts +2 -2
- package/dist/types/actions/watchChainId.d.ts.map +1 -1
- package/dist/types/actions/watchClient.d.ts +2 -2
- package/dist/types/actions/watchClient.d.ts.map +1 -1
- package/dist/types/actions/watchConnections.d.ts +2 -2
- package/dist/types/actions/watchConnections.d.ts.map +1 -1
- package/dist/types/actions/watchConnectors.d.ts +9 -0
- package/dist/types/actions/watchConnectors.d.ts.map +1 -0
- package/dist/types/actions/watchContractEvent.d.ts +5 -5
- package/dist/types/actions/watchContractEvent.d.ts.map +1 -1
- package/dist/types/actions/watchPendingTransactions.d.ts +2 -2
- package/dist/types/actions/watchPendingTransactions.d.ts.map +1 -1
- package/dist/types/actions/watchPublicClient.d.ts +2 -2
- package/dist/types/actions/watchPublicClient.d.ts.map +1 -1
- package/dist/types/actions/writeContract.d.ts +14 -10
- package/dist/types/actions/writeContract.d.ts.map +1 -1
- package/dist/types/{createConnector.d.ts → connectors/createConnector.d.ts} +7 -4
- package/dist/types/connectors/createConnector.d.ts.map +1 -0
- package/dist/types/connectors/injected.d.ts +356 -0
- package/dist/types/connectors/injected.d.ts.map +1 -0
- package/dist/types/connectors/mock.d.ts +20 -0
- package/dist/types/connectors/mock.d.ts.map +1 -0
- package/dist/types/createConfig.d.ts +30 -20
- package/dist/types/createConfig.d.ts.map +1 -1
- package/dist/types/createStorage.d.ts +4 -4
- package/dist/types/createStorage.d.ts.map +1 -1
- package/dist/types/errors/base.d.ts +13 -7
- package/dist/types/errors/base.d.ts.map +1 -1
- package/dist/types/errors/config.d.ts +17 -9
- package/dist/types/errors/config.d.ts.map +1 -1
- package/dist/types/errors/connector.d.ts +6 -0
- package/dist/types/errors/connector.d.ts.map +1 -1
- package/dist/types/exports/actions.d.ts +56 -25
- package/dist/types/exports/actions.d.ts.map +1 -1
- package/dist/types/exports/chains.d.ts.map +1 -1
- package/dist/types/exports/codegen.d.ts +5 -0
- package/dist/types/exports/codegen.d.ts.map +1 -0
- package/dist/types/exports/index.d.ts +67 -29
- package/dist/types/exports/index.d.ts.map +1 -1
- package/dist/types/exports/internal.d.ts +3 -1
- package/dist/types/exports/internal.d.ts.map +1 -1
- package/dist/types/exports/query.d.ts +9 -0
- package/dist/types/exports/query.d.ts.map +1 -1
- package/dist/types/hydrate.d.ts +10 -0
- package/dist/types/hydrate.d.ts.map +1 -0
- package/dist/types/query/connect.d.ts +4 -4
- package/dist/types/query/connect.d.ts.map +1 -1
- package/dist/types/query/disconnect.d.ts +4 -4
- package/dist/types/query/disconnect.d.ts.map +1 -1
- package/dist/types/query/estimateFeesPerGas.d.ts +2 -2
- package/dist/types/query/estimateFeesPerGas.d.ts.map +1 -1
- package/dist/types/query/estimateGas.d.ts +2 -2
- package/dist/types/query/estimateGas.d.ts.map +1 -1
- package/dist/types/query/estimateMaxPriorityFeePerGas.d.ts +27 -0
- package/dist/types/query/estimateMaxPriorityFeePerGas.d.ts.map +1 -0
- package/dist/types/query/getBalance.d.ts +2 -2
- package/dist/types/query/getBalance.d.ts.map +1 -1
- package/dist/types/query/getBlock.d.ts +19 -0
- package/dist/types/query/getBlock.d.ts.map +1 -0
- package/dist/types/query/getBlockNumber.d.ts +9 -12
- package/dist/types/query/getBlockNumber.d.ts.map +1 -1
- package/dist/types/query/getBlockTransactionCount.d.ts +18 -0
- package/dist/types/query/getBlockTransactionCount.d.ts.map +1 -0
- package/dist/types/query/getConnectorClient.d.ts +12 -3
- package/dist/types/query/getConnectorClient.d.ts.map +1 -1
- package/dist/types/query/getEnsAddress.d.ts +2 -2
- package/dist/types/query/getEnsAddress.d.ts.map +1 -1
- package/dist/types/query/getEnsAvatar.d.ts +2 -2
- package/dist/types/query/getEnsAvatar.d.ts.map +1 -1
- package/dist/types/query/getEnsName.d.ts +2 -2
- package/dist/types/query/getEnsName.d.ts.map +1 -1
- package/dist/types/query/getEnsResolver.d.ts +2 -2
- package/dist/types/query/getEnsResolver.d.ts.map +1 -1
- package/dist/types/query/getFeeHistory.d.ts +39 -0
- package/dist/types/query/getFeeHistory.d.ts.map +1 -0
- package/dist/types/query/getGasPrice.d.ts +27 -0
- package/dist/types/query/getGasPrice.d.ts.map +1 -0
- package/dist/types/query/getToken.d.ts +5 -5
- package/dist/types/query/getToken.d.ts.map +1 -1
- package/dist/types/query/getTransaction.d.ts +7 -95
- package/dist/types/query/getTransaction.d.ts.map +1 -1
- package/dist/types/query/getTransactionCount.d.ts +36 -0
- package/dist/types/query/getTransactionCount.d.ts.map +1 -0
- package/dist/types/query/getWalletClient.d.ts +27 -256
- package/dist/types/query/getWalletClient.d.ts.map +1 -1
- package/dist/types/query/infiniteReadContracts.d.ts +60 -0
- package/dist/types/query/infiniteReadContracts.d.ts.map +1 -0
- package/dist/types/query/readContract.d.ts +6 -6
- package/dist/types/query/readContract.d.ts.map +1 -1
- package/dist/types/query/readContracts.d.ts +15 -15
- package/dist/types/query/readContracts.d.ts.map +1 -1
- package/dist/types/query/reconnect.d.ts +5 -5
- package/dist/types/query/reconnect.d.ts.map +1 -1
- package/dist/types/query/sendTransaction.d.ts +4 -4
- package/dist/types/query/sendTransaction.d.ts.map +1 -1
- package/dist/types/query/signMessage.d.ts +3 -3
- package/dist/types/query/signMessage.d.ts.map +1 -1
- package/dist/types/query/signTypedData.d.ts +224 -211
- package/dist/types/query/signTypedData.d.ts.map +1 -1
- package/dist/types/query/simulateContract.d.ts +5 -5
- package/dist/types/query/simulateContract.d.ts.map +1 -1
- package/dist/types/query/switchAccount.d.ts +5 -5
- package/dist/types/query/switchAccount.d.ts.map +1 -1
- package/dist/types/query/switchChain.d.ts +6 -6
- package/dist/types/query/switchChain.d.ts.map +1 -1
- package/dist/types/query/types.d.ts +12 -5
- package/dist/types/query/types.d.ts.map +1 -1
- package/dist/types/query/utils.d.ts +1 -1
- package/dist/types/query/utils.d.ts.map +1 -1
- package/dist/types/query/verifyMessage.d.ts +42 -0
- package/dist/types/query/verifyMessage.d.ts.map +1 -0
- package/dist/types/query/verifyTypedData.d.ts +19 -0
- package/dist/types/query/verifyTypedData.d.ts.map +1 -0
- package/dist/types/query/waitForTransactionReceipt.d.ts +9 -97
- package/dist/types/query/waitForTransactionReceipt.d.ts.map +1 -1
- package/dist/types/query/writeContract.d.ts +12 -8
- package/dist/types/query/writeContract.d.ts.map +1 -1
- package/dist/types/transports/connector.d.ts +15 -0
- package/dist/types/transports/connector.d.ts.map +1 -0
- package/dist/types/transports/fallback.d.ts +4 -0
- package/dist/types/transports/fallback.d.ts.map +1 -0
- package/dist/types/types/chain.d.ts +3 -3
- package/dist/types/types/chain.d.ts.map +1 -1
- package/dist/types/types/properties.d.ts +4 -1
- package/dist/types/types/properties.d.ts.map +1 -1
- package/dist/types/types/register.d.ts +1 -1
- package/dist/types/types/register.d.ts.map +1 -1
- package/dist/types/types/utils.d.ts +9 -3
- package/dist/types/types/utils.d.ts.map +1 -1
- package/dist/types/utils/cookie.d.ts +9 -0
- package/dist/types/utils/cookie.d.ts.map +1 -0
- package/dist/types/version.d.ts +1 -1
- package/internal/package.json +5 -0
- package/package.json +25 -27
- package/query/package.json +5 -0
- package/src/actions/codegen/createReadContract.ts +100 -0
- package/src/actions/codegen/createSimulateContract.ts +122 -0
- package/src/actions/codegen/createWatchContractEvent.ts +87 -0
- package/src/actions/codegen/createWriteContract.ts +142 -0
- package/src/actions/connect.ts +32 -32
- package/src/actions/disconnect.ts +23 -20
- package/src/actions/estimateFeesPerGas.ts +7 -4
- package/src/actions/estimateGas.ts +16 -4
- package/src/actions/estimateMaxPriorityFeePerGas.ts +41 -0
- package/src/actions/getAccount.ts +11 -2
- package/src/actions/getBalance.ts +19 -8
- package/src/actions/getBlock.ts +71 -0
- package/src/actions/getBlockNumber.ts +14 -9
- package/src/actions/getBlockTransactionCount.ts +36 -0
- package/src/actions/getChainId.ts +2 -2
- package/src/actions/getClient.ts +3 -3
- package/src/actions/getConnections.ts +2 -2
- package/src/actions/getConnectorClient.ts +18 -9
- package/src/actions/getConnectors.ts +14 -0
- package/src/actions/getEnsAddress.ts +5 -4
- package/src/actions/getEnsAvatar.ts +5 -4
- package/src/actions/getEnsName.ts +5 -4
- package/src/actions/getEnsResolver.ts +5 -4
- package/src/actions/getFeeHistory.ts +32 -0
- package/src/actions/getGasPrice.ts +31 -0
- package/src/actions/getPublicClient.ts +3 -3
- package/src/actions/getToken.ts +10 -9
- package/src/actions/getTransaction.ts +8 -5
- package/src/actions/getTransactionCount.ts +31 -0
- package/src/actions/getWalletClient.ts +13 -4
- package/src/actions/multicall.ts +6 -3
- package/src/actions/readContract.ts +4 -3
- package/src/actions/readContracts.ts +4 -4
- package/src/actions/reconnect.ts +15 -10
- package/src/actions/sendTransaction.ts +20 -13
- package/src/actions/signMessage.ts +17 -5
- package/src/actions/signTypedData.ts +22 -5
- package/src/actions/simulateContract.ts +38 -31
- package/src/actions/switchAccount.ts +12 -4
- package/src/actions/switchChain.ts +27 -16
- package/src/actions/verifyMessage.ts +28 -0
- package/src/actions/verifyTypedData.ts +38 -0
- package/src/actions/waitForTransactionReceipt.ts +22 -16
- package/src/actions/watchAccount.ts +2 -1
- package/src/actions/watchBlockNumber.ts +4 -6
- package/src/actions/watchBlocks.ts +85 -0
- package/src/actions/watchChainId.ts +2 -2
- package/src/actions/watchClient.ts +2 -2
- package/src/actions/watchConnections.ts +2 -2
- package/src/actions/watchConnectors.ts +22 -0
- package/src/actions/watchContractEvent.ts +9 -10
- package/src/actions/watchPendingTransactions.ts +3 -5
- package/src/actions/watchPublicClient.ts +2 -2
- package/src/actions/writeContract.ts +52 -44
- package/src/{createConnector.ts → connectors/createConnector.ts} +12 -16
- package/src/connectors/injected.ts +556 -0
- package/src/connectors/mock.ts +176 -0
- package/src/createConfig.ts +153 -76
- package/src/createStorage.ts +7 -6
- package/src/errors/base.ts +9 -6
- package/src/errors/config.ts +20 -18
- package/src/errors/connector.ts +6 -0
- package/src/exports/actions.ts +121 -29
- package/src/exports/chains.ts +1 -0
- package/src/exports/codegen.ts +7 -0
- package/src/exports/index.ts +177 -47
- package/src/exports/internal.ts +12 -0
- package/src/exports/query.ts +82 -0
- package/src/hydrate.ts +42 -0
- package/src/query/connect.ts +4 -4
- package/src/query/disconnect.ts +5 -5
- package/src/query/estimateFeesPerGas.ts +4 -4
- package/src/query/estimateGas.ts +5 -5
- package/src/query/estimateMaxPriorityFeePerGas.ts +51 -0
- package/src/query/getBalance.ts +9 -17
- package/src/query/getBlock.ts +84 -0
- package/src/query/getBlockNumber.ts +22 -17
- package/src/query/getBlockTransactionCount.ts +62 -0
- package/src/query/getConnectorClient.ts +5 -4
- package/src/query/getEnsAddress.ts +4 -4
- package/src/query/getEnsAvatar.ts +4 -4
- package/src/query/getEnsName.ts +4 -4
- package/src/query/getEnsResolver.ts +4 -4
- package/src/query/getFeeHistory.ts +69 -0
- package/src/query/getGasPrice.ts +54 -0
- package/src/query/getToken.ts +4 -4
- package/src/query/getTransaction.ts +7 -13
- package/src/query/getTransactionCount.ts +55 -0
- package/src/query/getWalletClient.ts +5 -4
- package/src/query/infiniteReadContracts.ts +129 -0
- package/src/query/readContract.ts +14 -12
- package/src/query/readContracts.ts +16 -16
- package/src/query/reconnect.ts +6 -6
- package/src/query/sendTransaction.ts +5 -5
- package/src/query/signMessage.ts +4 -4
- package/src/query/signTypedData.ts +20 -8
- package/src/query/simulateContract.ts +12 -8
- package/src/query/switchAccount.ts +7 -7
- package/src/query/switchChain.ts +6 -6
- package/src/query/types.ts +63 -34
- package/src/query/utils.ts +16 -1
- package/src/query/verifyMessage.ts +54 -0
- package/src/query/verifyTypedData.ts +81 -0
- package/src/query/waitForTransactionReceipt.ts +6 -6
- package/src/query/writeContract.ts +39 -10
- package/src/transports/connector.ts +87 -0
- package/src/transports/fallback.ts +10 -0
- package/src/types/chain.ts +5 -4
- package/src/types/properties.ts +3 -1
- package/src/types/register.ts +1 -1
- package/src/types/utils.ts +10 -2
- package/src/utils/cookie.ts +34 -0
- package/src/version.ts +1 -1
- package/dist/esm/createConnector.js +0 -8
- package/dist/esm/createConnector.js.map +0 -1
- package/dist/esm/utils/assertActiveChain.js +0 -14
- package/dist/esm/utils/assertActiveChain.js.map +0 -1
- package/dist/types/createConnector.d.ts.map +0 -1
- package/dist/types/utils/assertActiveChain.d.ts +0 -8
- package/dist/types/utils/assertActiveChain.d.ts.map +0 -1
- package/src/utils/assertActiveChain.ts +0 -26
|
@@ -0,0 +1,556 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type Address,
|
|
3
|
+
type EIP1193Provider,
|
|
4
|
+
type ProviderConnectInfo,
|
|
5
|
+
ProviderRpcError,
|
|
6
|
+
ResourceUnavailableRpcError,
|
|
7
|
+
RpcError,
|
|
8
|
+
SwitchChainError,
|
|
9
|
+
UserRejectedRequestError,
|
|
10
|
+
getAddress,
|
|
11
|
+
numberToHex,
|
|
12
|
+
withRetry,
|
|
13
|
+
withTimeout,
|
|
14
|
+
} from 'viem'
|
|
15
|
+
|
|
16
|
+
import { ChainNotConfiguredError } from '../errors/config.js'
|
|
17
|
+
import { ProviderNotFoundError } from '../errors/connector.js'
|
|
18
|
+
import { type Evaluate } from '../types/utils.js'
|
|
19
|
+
import { normalizeChainId } from '../utils/normalizeChainId.js'
|
|
20
|
+
import { createConnector } from './createConnector.js'
|
|
21
|
+
|
|
22
|
+
export type InjectedParameters = {
|
|
23
|
+
/**
|
|
24
|
+
* MetaMask and other injected providers do not support programmatic disconnect.
|
|
25
|
+
* This flag simulates the disconnect behavior by keeping track of connection status in storage. See [GitHub issue](https://github.com/MetaMask/metamask-extension/issues/10353) for more info.
|
|
26
|
+
* @default true
|
|
27
|
+
*/
|
|
28
|
+
shimDisconnect?: boolean | undefined
|
|
29
|
+
unstable_shimAsyncInject?: boolean | number | undefined
|
|
30
|
+
/**
|
|
31
|
+
* [EIP-1193](https://eips.ethereum.org/EIPS/eip-1193) Ethereum Provider to target
|
|
32
|
+
*/
|
|
33
|
+
target?: TargetId | Target | (() => Target | undefined) | undefined
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const targetMap = {
|
|
37
|
+
coinbaseWallet: {
|
|
38
|
+
id: 'coinbaseWallet',
|
|
39
|
+
name: 'Coinbase Wallet',
|
|
40
|
+
provider(window) {
|
|
41
|
+
if (window?.coinbaseWalletExtension) return window.coinbaseWalletExtension
|
|
42
|
+
return findProvider(window, 'isCoinbaseWallet')
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
metaMask: {
|
|
46
|
+
id: 'metaMask',
|
|
47
|
+
name: 'MetaMask',
|
|
48
|
+
provider(window) {
|
|
49
|
+
return findProvider(window, (provider) => {
|
|
50
|
+
if (!provider.isMetaMask) return false
|
|
51
|
+
// Brave tries to make itself look like MetaMask
|
|
52
|
+
// Could also try RPC `web3_clientVersion` if following is unreliable
|
|
53
|
+
if (provider.isBraveWallet && !provider._events && !provider._state)
|
|
54
|
+
return false
|
|
55
|
+
// Other wallets that try to look like MetaMask
|
|
56
|
+
const flags: WalletProviderFlags[] = [
|
|
57
|
+
'isApexWallet',
|
|
58
|
+
'isAvalanche',
|
|
59
|
+
'isBitKeep',
|
|
60
|
+
'isBlockWallet',
|
|
61
|
+
'isKuCoinWallet',
|
|
62
|
+
'isMathWallet',
|
|
63
|
+
'isOkxWallet',
|
|
64
|
+
'isOKExWallet',
|
|
65
|
+
'isOneInchIOSWallet',
|
|
66
|
+
'isOneInchAndroidWallet',
|
|
67
|
+
'isOpera',
|
|
68
|
+
'isPortal',
|
|
69
|
+
'isRabby',
|
|
70
|
+
'isTokenPocket',
|
|
71
|
+
'isTokenary',
|
|
72
|
+
'isZerion',
|
|
73
|
+
]
|
|
74
|
+
for (const flag of flags) if (provider[flag]) return false
|
|
75
|
+
return true
|
|
76
|
+
})
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
phantom: {
|
|
80
|
+
id: 'phantom',
|
|
81
|
+
name: 'Phantom',
|
|
82
|
+
provider(window) {
|
|
83
|
+
if (window?.phantom?.ethereum) return window.phantom?.ethereum
|
|
84
|
+
return findProvider(window, 'isPhantom')
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
} as const satisfies TargetMap
|
|
88
|
+
|
|
89
|
+
injected.type = 'injected' as const
|
|
90
|
+
export function injected(parameters: InjectedParameters = {}) {
|
|
91
|
+
const { shimDisconnect = true, unstable_shimAsyncInject } = parameters
|
|
92
|
+
|
|
93
|
+
function getTarget(): Evaluate<Target & { id: string }> {
|
|
94
|
+
const target = parameters.target
|
|
95
|
+
if (typeof target === 'function') {
|
|
96
|
+
const result = target()
|
|
97
|
+
if (result) return result
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if (typeof target === 'object') return target
|
|
101
|
+
|
|
102
|
+
if (typeof target === 'string')
|
|
103
|
+
return {
|
|
104
|
+
...(targetMap[target as keyof typeof targetMap] ?? {
|
|
105
|
+
id: target,
|
|
106
|
+
name: `${target[0]!.toUpperCase()}${target.slice(1)}`,
|
|
107
|
+
provider: `is${target[0]!.toUpperCase()}${target.slice(1)}`,
|
|
108
|
+
}),
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
return {
|
|
112
|
+
id: 'injected',
|
|
113
|
+
name: 'Injected',
|
|
114
|
+
provider(window) {
|
|
115
|
+
return window?.ethereum
|
|
116
|
+
},
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
type Provider = WalletProvider | undefined
|
|
121
|
+
type Properties = {
|
|
122
|
+
onConnect(connectInfo: ProviderConnectInfo): void
|
|
123
|
+
}
|
|
124
|
+
type StorageItem = {
|
|
125
|
+
[_ in 'injected.connected' | `${string}.disconnected`]: true
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
return createConnector<Provider, Properties, StorageItem>((config) => ({
|
|
129
|
+
get icon() {
|
|
130
|
+
return getTarget().icon
|
|
131
|
+
},
|
|
132
|
+
get id() {
|
|
133
|
+
return getTarget().id
|
|
134
|
+
},
|
|
135
|
+
get name() {
|
|
136
|
+
return getTarget().name
|
|
137
|
+
},
|
|
138
|
+
type: injected.type,
|
|
139
|
+
async setup() {
|
|
140
|
+
const provider = await this.getProvider()
|
|
141
|
+
// Only start listening for events if `target` is set, otherwise `injected()` will also receive events
|
|
142
|
+
if (provider && parameters.target)
|
|
143
|
+
provider.on('connect', this.onConnect.bind(this))
|
|
144
|
+
},
|
|
145
|
+
async connect({ chainId, isReconnecting } = {}) {
|
|
146
|
+
const provider = await this.getProvider()
|
|
147
|
+
if (!provider) throw new ProviderNotFoundError()
|
|
148
|
+
|
|
149
|
+
let accounts: readonly Address[] | null = null
|
|
150
|
+
if (!isReconnecting) {
|
|
151
|
+
accounts = await this.getAccounts().catch(() => null)
|
|
152
|
+
const isAuthorized = !!accounts?.length
|
|
153
|
+
if (isAuthorized)
|
|
154
|
+
// Attempt to show another prompt for selecting account if already connected
|
|
155
|
+
try {
|
|
156
|
+
const permissions = await provider.request({
|
|
157
|
+
method: 'wallet_requestPermissions',
|
|
158
|
+
params: [{ eth_accounts: {} }],
|
|
159
|
+
})
|
|
160
|
+
accounts = permissions[0]?.caveats?.[0]?.value?.map(getAddress)
|
|
161
|
+
} catch (err) {
|
|
162
|
+
const error = err as RpcError
|
|
163
|
+
// Not all injected providers support `wallet_requestPermissions` (e.g. MetaMask iOS).
|
|
164
|
+
// Only bubble up error if user rejects request
|
|
165
|
+
if (error.code === UserRejectedRequestError.code)
|
|
166
|
+
throw new UserRejectedRequestError(error)
|
|
167
|
+
// Or prompt is already open
|
|
168
|
+
if (error.code === ResourceUnavailableRpcError.code) throw error
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
try {
|
|
173
|
+
if (!accounts?.length) {
|
|
174
|
+
const requestedAccounts = await provider.request({
|
|
175
|
+
method: 'eth_requestAccounts',
|
|
176
|
+
})
|
|
177
|
+
accounts = requestedAccounts.map(getAddress)
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
provider.removeListener('connect', this.onConnect.bind(this))
|
|
181
|
+
provider.on('accountsChanged', this.onAccountsChanged.bind(this))
|
|
182
|
+
provider.on('chainChanged', this.onChainChanged)
|
|
183
|
+
provider.on('disconnect', this.onDisconnect.bind(this))
|
|
184
|
+
|
|
185
|
+
// Switch to chain if provided
|
|
186
|
+
let currentChainId = await this.getChainId()
|
|
187
|
+
if (chainId && currentChainId !== chainId) {
|
|
188
|
+
const chain = await this.switchChain!({ chainId }).catch((error) => {
|
|
189
|
+
if (error.code === UserRejectedRequestError.code) throw error
|
|
190
|
+
return { id: currentChainId }
|
|
191
|
+
})
|
|
192
|
+
currentChainId = chain?.id ?? currentChainId
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
if (shimDisconnect) {
|
|
196
|
+
// Remove disconnected shim if it exists
|
|
197
|
+
await config.storage?.removeItem(`${this.id}.disconnected`)
|
|
198
|
+
// Add connected shim if no target exists
|
|
199
|
+
if (!parameters.target)
|
|
200
|
+
await config.storage?.setItem('injected.connected', true)
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
return { accounts, chainId: currentChainId }
|
|
204
|
+
} catch (err) {
|
|
205
|
+
const error = err as RpcError
|
|
206
|
+
if (error.code === UserRejectedRequestError.code)
|
|
207
|
+
throw new UserRejectedRequestError(error)
|
|
208
|
+
if (error.code === ResourceUnavailableRpcError.code)
|
|
209
|
+
throw new ResourceUnavailableRpcError(error)
|
|
210
|
+
throw error
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
async disconnect() {
|
|
214
|
+
const provider = await this.getProvider()
|
|
215
|
+
if (!provider) throw new ProviderNotFoundError()
|
|
216
|
+
|
|
217
|
+
provider.removeListener(
|
|
218
|
+
'accountsChanged',
|
|
219
|
+
this.onAccountsChanged.bind(this),
|
|
220
|
+
)
|
|
221
|
+
provider.removeListener('chainChanged', this.onChainChanged)
|
|
222
|
+
provider.removeListener('disconnect', this.onDisconnect.bind(this))
|
|
223
|
+
provider.on('connect', this.onConnect.bind(this))
|
|
224
|
+
|
|
225
|
+
// Add shim signalling connector is disconnected
|
|
226
|
+
if (shimDisconnect) {
|
|
227
|
+
await config.storage?.setItem(`${this.id}.disconnected`, true)
|
|
228
|
+
if (!parameters.target)
|
|
229
|
+
await config.storage?.removeItem('injected.connected')
|
|
230
|
+
}
|
|
231
|
+
},
|
|
232
|
+
async getAccounts() {
|
|
233
|
+
const provider = await this.getProvider()
|
|
234
|
+
if (!provider) throw new ProviderNotFoundError()
|
|
235
|
+
const accounts = await provider.request({ method: 'eth_accounts' })
|
|
236
|
+
return accounts.map(getAddress)
|
|
237
|
+
},
|
|
238
|
+
async getChainId() {
|
|
239
|
+
const provider = await this.getProvider()
|
|
240
|
+
if (!provider) throw new ProviderNotFoundError()
|
|
241
|
+
const hexChainId = await provider.request({ method: 'eth_chainId' })
|
|
242
|
+
return normalizeChainId(hexChainId)
|
|
243
|
+
},
|
|
244
|
+
async getProvider() {
|
|
245
|
+
if (typeof window === 'undefined') return undefined
|
|
246
|
+
const target = getTarget()
|
|
247
|
+
if (typeof target.provider === 'function')
|
|
248
|
+
return target.provider(window as Window | undefined)
|
|
249
|
+
if (typeof target.provider === 'string')
|
|
250
|
+
return findProvider(window, target.provider)
|
|
251
|
+
return target.provider
|
|
252
|
+
},
|
|
253
|
+
async isAuthorized() {
|
|
254
|
+
try {
|
|
255
|
+
const isDisconnected =
|
|
256
|
+
shimDisconnect &&
|
|
257
|
+
// If shim exists in storage, connector is disconnected
|
|
258
|
+
(await config.storage?.getItem(`${this.id}.disconnected`))
|
|
259
|
+
if (isDisconnected) return false
|
|
260
|
+
|
|
261
|
+
// Don't allow injected connector to connect if no target is set and it hasn't already connected
|
|
262
|
+
// (e.g. flag in storage is not set). This prevents a targetless injected connector from connecting
|
|
263
|
+
// automatically whenever there is a targeted connector configured.
|
|
264
|
+
if (!parameters.target) {
|
|
265
|
+
const connected = await config.storage?.getItem('injected.connected')
|
|
266
|
+
if (!connected) return false
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
const provider = await this.getProvider()
|
|
270
|
+
if (!provider) {
|
|
271
|
+
if (
|
|
272
|
+
unstable_shimAsyncInject !== undefined &&
|
|
273
|
+
unstable_shimAsyncInject !== false
|
|
274
|
+
) {
|
|
275
|
+
// If no provider is found, check for async injection
|
|
276
|
+
// https://github.com/wevm/references/issues/167
|
|
277
|
+
// https://github.com/MetaMask/detect-provider
|
|
278
|
+
const handleEthereum = async () => {
|
|
279
|
+
if (typeof window !== 'undefined')
|
|
280
|
+
window.removeEventListener(
|
|
281
|
+
'ethereum#initialized',
|
|
282
|
+
handleEthereum,
|
|
283
|
+
)
|
|
284
|
+
const provider = await this.getProvider()
|
|
285
|
+
return !!provider
|
|
286
|
+
}
|
|
287
|
+
const timeout =
|
|
288
|
+
typeof unstable_shimAsyncInject === 'number'
|
|
289
|
+
? unstable_shimAsyncInject
|
|
290
|
+
: 1_000
|
|
291
|
+
const res = await Promise.race([
|
|
292
|
+
...(typeof window !== 'undefined'
|
|
293
|
+
? [
|
|
294
|
+
new Promise<boolean>((resolve) =>
|
|
295
|
+
window.addEventListener(
|
|
296
|
+
'ethereum#initialized',
|
|
297
|
+
() => resolve(handleEthereum()),
|
|
298
|
+
{ once: true },
|
|
299
|
+
),
|
|
300
|
+
),
|
|
301
|
+
]
|
|
302
|
+
: []),
|
|
303
|
+
new Promise<boolean>((resolve) =>
|
|
304
|
+
setTimeout(() => resolve(handleEthereum()), timeout),
|
|
305
|
+
),
|
|
306
|
+
])
|
|
307
|
+
if (res) return true
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
throw new ProviderNotFoundError()
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
// We are applying a retry & timeout strategy here as some injected wallets (ie. MetaMask) fail to
|
|
314
|
+
// immediately resolve a JSON-RPC request on page load.
|
|
315
|
+
const accounts = await withRetry(() =>
|
|
316
|
+
withTimeout(() => this.getAccounts(), {
|
|
317
|
+
timeout: 100,
|
|
318
|
+
}),
|
|
319
|
+
)
|
|
320
|
+
return !!accounts.length
|
|
321
|
+
} catch {
|
|
322
|
+
return false
|
|
323
|
+
}
|
|
324
|
+
},
|
|
325
|
+
async switchChain({ chainId }) {
|
|
326
|
+
const provider = await this.getProvider()
|
|
327
|
+
if (!provider) throw new ProviderNotFoundError()
|
|
328
|
+
|
|
329
|
+
const chain = config.chains.find((x) => x.id === chainId)
|
|
330
|
+
if (!chain) throw new SwitchChainError(new ChainNotConfiguredError())
|
|
331
|
+
|
|
332
|
+
try {
|
|
333
|
+
await Promise.all([
|
|
334
|
+
provider.request({
|
|
335
|
+
method: 'wallet_switchEthereumChain',
|
|
336
|
+
params: [{ chainId: numberToHex(chainId) }],
|
|
337
|
+
}),
|
|
338
|
+
new Promise<void>((resolve) =>
|
|
339
|
+
config.emitter.once('change', ({ chainId: currentChainId }) => {
|
|
340
|
+
if (currentChainId === chainId) resolve()
|
|
341
|
+
}),
|
|
342
|
+
),
|
|
343
|
+
])
|
|
344
|
+
return chain
|
|
345
|
+
} catch (err) {
|
|
346
|
+
const error = err as RpcError
|
|
347
|
+
|
|
348
|
+
// Indicates chain is not added to provider
|
|
349
|
+
if (
|
|
350
|
+
error.code === 4902 ||
|
|
351
|
+
// Unwrapping for MetaMask Mobile
|
|
352
|
+
// https://github.com/MetaMask/metamask-mobile/issues/2944#issuecomment-976988719
|
|
353
|
+
(error as ProviderRpcError<{ originalError?: { code: number } }>)
|
|
354
|
+
?.data?.originalError?.code === 4902
|
|
355
|
+
) {
|
|
356
|
+
try {
|
|
357
|
+
const { default: blockExplorer, ...blockExplorers } =
|
|
358
|
+
chain.blockExplorers ?? {}
|
|
359
|
+
let blockExplorerUrls: string[] = []
|
|
360
|
+
if (blockExplorer)
|
|
361
|
+
blockExplorerUrls = [
|
|
362
|
+
blockExplorer.url,
|
|
363
|
+
...Object.values(blockExplorers).map((x) => x.url),
|
|
364
|
+
]
|
|
365
|
+
|
|
366
|
+
await provider.request({
|
|
367
|
+
method: 'wallet_addEthereumChain',
|
|
368
|
+
params: [
|
|
369
|
+
{
|
|
370
|
+
chainId: numberToHex(chainId),
|
|
371
|
+
chainName: chain.name,
|
|
372
|
+
nativeCurrency: chain.nativeCurrency,
|
|
373
|
+
rpcUrls: [chain.rpcUrls.default?.http[0] ?? ''],
|
|
374
|
+
blockExplorerUrls,
|
|
375
|
+
},
|
|
376
|
+
],
|
|
377
|
+
})
|
|
378
|
+
|
|
379
|
+
const currentChainId = await this.getChainId()
|
|
380
|
+
if (currentChainId !== chainId)
|
|
381
|
+
throw new UserRejectedRequestError(
|
|
382
|
+
new Error('User rejected switch after adding network.'),
|
|
383
|
+
)
|
|
384
|
+
|
|
385
|
+
return chain
|
|
386
|
+
} catch (error) {
|
|
387
|
+
throw new UserRejectedRequestError(error as Error)
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
if (error.code === UserRejectedRequestError.code)
|
|
392
|
+
throw new UserRejectedRequestError(error)
|
|
393
|
+
throw new SwitchChainError(error)
|
|
394
|
+
}
|
|
395
|
+
},
|
|
396
|
+
async onAccountsChanged(accounts) {
|
|
397
|
+
// Disconnect if there are no accounts
|
|
398
|
+
if (accounts.length === 0) this.onDisconnect()
|
|
399
|
+
// Connect if emitter is listening for connect event (e.g. is disconnected and connects through wallet interface)
|
|
400
|
+
else if (config.emitter.listenerCount('connect')) {
|
|
401
|
+
const chainId = (await this.getChainId()).toString()
|
|
402
|
+
this.onConnect({ chainId })
|
|
403
|
+
// Remove disconnected shim if it exists
|
|
404
|
+
if (shimDisconnect)
|
|
405
|
+
await config.storage?.removeItem(`${this.id}.disconnected`)
|
|
406
|
+
}
|
|
407
|
+
// Regular change event
|
|
408
|
+
else config.emitter.emit('change', { accounts: accounts.map(getAddress) })
|
|
409
|
+
},
|
|
410
|
+
onChainChanged(chain) {
|
|
411
|
+
const chainId = normalizeChainId(chain)
|
|
412
|
+
config.emitter.emit('change', { chainId })
|
|
413
|
+
},
|
|
414
|
+
async onConnect(connectInfo) {
|
|
415
|
+
const accounts = await this.getAccounts()
|
|
416
|
+
if (accounts.length === 0) return
|
|
417
|
+
|
|
418
|
+
const chainId = normalizeChainId(connectInfo.chainId)
|
|
419
|
+
config.emitter.emit('connect', { accounts, chainId })
|
|
420
|
+
|
|
421
|
+
const provider = await this.getProvider()
|
|
422
|
+
if (provider) {
|
|
423
|
+
provider.removeListener('connect', this.onConnect.bind(this))
|
|
424
|
+
provider.on('accountsChanged', this.onAccountsChanged.bind(this))
|
|
425
|
+
provider.on('chainChanged', this.onChainChanged)
|
|
426
|
+
provider.on('disconnect', this.onDisconnect.bind(this))
|
|
427
|
+
}
|
|
428
|
+
},
|
|
429
|
+
async onDisconnect(error) {
|
|
430
|
+
const provider = await this.getProvider()
|
|
431
|
+
|
|
432
|
+
// If MetaMask emits a `code: 1013` error, wait for reconnection before disconnecting
|
|
433
|
+
// https://github.com/MetaMask/providers/pull/120
|
|
434
|
+
if (error && (error as RpcError<1013>).code === 1013) {
|
|
435
|
+
if (provider && !!(await this.getAccounts()).length) return
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
// No need to remove `${this.id}.disconnected` from storage because `onDisconnect` is typically
|
|
439
|
+
// only called when the wallet is disconnected through the wallet's interface, meaning the wallet
|
|
440
|
+
// actually disconnected and we don't need to simulate it.
|
|
441
|
+
config.emitter.emit('disconnect')
|
|
442
|
+
|
|
443
|
+
if (provider) {
|
|
444
|
+
provider.removeListener(
|
|
445
|
+
'accountsChanged',
|
|
446
|
+
this.onAccountsChanged.bind(this),
|
|
447
|
+
)
|
|
448
|
+
provider.removeListener('chainChanged', this.onChainChanged)
|
|
449
|
+
provider.removeListener('disconnect', this.onDisconnect.bind(this))
|
|
450
|
+
provider.on('connect', this.onConnect.bind(this))
|
|
451
|
+
}
|
|
452
|
+
},
|
|
453
|
+
}))
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
type Target = {
|
|
457
|
+
icon?: string | undefined
|
|
458
|
+
id: string
|
|
459
|
+
name: string
|
|
460
|
+
provider:
|
|
461
|
+
| WalletProviderFlags
|
|
462
|
+
| WalletProvider
|
|
463
|
+
| ((window?: Window | undefined) => WalletProvider | undefined)
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
/** @deprecated */
|
|
467
|
+
type TargetId = Evaluate<WalletProviderFlags> extends `is${infer name}`
|
|
468
|
+
? name extends `${infer char}${infer rest}`
|
|
469
|
+
? `${Lowercase<char>}${rest}`
|
|
470
|
+
: never
|
|
471
|
+
: never
|
|
472
|
+
|
|
473
|
+
type TargetMap = { [_ in TargetId]?: Target | undefined }
|
|
474
|
+
|
|
475
|
+
/** @deprecated */
|
|
476
|
+
type WalletProviderFlags =
|
|
477
|
+
| 'isApexWallet'
|
|
478
|
+
| 'isAvalanche'
|
|
479
|
+
| 'isBackpack'
|
|
480
|
+
| 'isBifrost'
|
|
481
|
+
| 'isBitKeep'
|
|
482
|
+
| 'isBitski'
|
|
483
|
+
| 'isBlockWallet'
|
|
484
|
+
| 'isBraveWallet'
|
|
485
|
+
| 'isCoinbaseWallet'
|
|
486
|
+
| 'isDawn'
|
|
487
|
+
| 'isEnkrypt'
|
|
488
|
+
| 'isExodus'
|
|
489
|
+
| 'isFrame'
|
|
490
|
+
| 'isFrontier'
|
|
491
|
+
| 'isGamestop'
|
|
492
|
+
| 'isHyperPay'
|
|
493
|
+
| 'isImToken'
|
|
494
|
+
| 'isKuCoinWallet'
|
|
495
|
+
| 'isMathWallet'
|
|
496
|
+
| 'isMetaMask'
|
|
497
|
+
| 'isOkxWallet'
|
|
498
|
+
| 'isOKExWallet'
|
|
499
|
+
| 'isOneInchAndroidWallet'
|
|
500
|
+
| 'isOneInchIOSWallet'
|
|
501
|
+
| 'isOpera'
|
|
502
|
+
| 'isPhantom'
|
|
503
|
+
| 'isPortal'
|
|
504
|
+
| 'isRabby'
|
|
505
|
+
| 'isRainbow'
|
|
506
|
+
| 'isStatus'
|
|
507
|
+
| 'isTally'
|
|
508
|
+
| 'isTokenPocket'
|
|
509
|
+
| 'isTokenary'
|
|
510
|
+
| 'isTrust'
|
|
511
|
+
| 'isTrustWallet'
|
|
512
|
+
| 'isXDEFI'
|
|
513
|
+
| 'isZerion'
|
|
514
|
+
|
|
515
|
+
type WalletProvider = Evaluate<
|
|
516
|
+
EIP1193Provider & {
|
|
517
|
+
[key in WalletProviderFlags]?: true | undefined
|
|
518
|
+
} & {
|
|
519
|
+
providers?: WalletProvider[] | undefined
|
|
520
|
+
/** Only exists in MetaMask as of 2022/04/03 */
|
|
521
|
+
_events?: { connect?: (() => void) | undefined } | undefined
|
|
522
|
+
/** Only exists in MetaMask as of 2022/04/03 */
|
|
523
|
+
_state?:
|
|
524
|
+
| {
|
|
525
|
+
accounts?: string[]
|
|
526
|
+
initialized?: boolean
|
|
527
|
+
isConnected?: boolean
|
|
528
|
+
isPermanentlyDisconnected?: boolean
|
|
529
|
+
isUnlocked?: boolean
|
|
530
|
+
}
|
|
531
|
+
| undefined
|
|
532
|
+
}
|
|
533
|
+
>
|
|
534
|
+
|
|
535
|
+
type Window = {
|
|
536
|
+
coinbaseWalletExtension?: WalletProvider | undefined
|
|
537
|
+
ethereum?: WalletProvider | undefined
|
|
538
|
+
phantom?: { ethereum: WalletProvider } | undefined
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
function findProvider(
|
|
542
|
+
window: globalThis.Window | Window | undefined,
|
|
543
|
+
select?: WalletProviderFlags | ((provider: WalletProvider) => boolean),
|
|
544
|
+
) {
|
|
545
|
+
function isProvider(provider: WalletProvider) {
|
|
546
|
+
if (typeof select === 'function') return select(provider)
|
|
547
|
+
if (typeof select === 'string') return provider[select]
|
|
548
|
+
return true
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
const ethereum = (window as Window).ethereum
|
|
552
|
+
if (ethereum?.providers)
|
|
553
|
+
return ethereum.providers.find((provider) => isProvider(provider))
|
|
554
|
+
if (ethereum && isProvider(ethereum)) return ethereum
|
|
555
|
+
return undefined
|
|
556
|
+
}
|