@wagmi/core 2.0.0 → 2.0.1

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