@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.
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 +402 -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 +556 -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,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
+ }