@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,176 @@
1
+ import {
2
+ type Address,
3
+ type EIP1193RequestFn,
4
+ type Hex,
5
+ RpcRequestError,
6
+ SwitchChainError,
7
+ type Transport,
8
+ UserRejectedRequestError,
9
+ type WalletRpcSchema,
10
+ custom,
11
+ fromHex,
12
+ getAddress,
13
+ numberToHex,
14
+ } from 'viem'
15
+ import { rpc } from 'viem/utils'
16
+
17
+ import {
18
+ ChainNotConfiguredError,
19
+ ConnectorNotConnectedError,
20
+ } from '../errors/config.js'
21
+ import { normalizeChainId } from '../utils/normalizeChainId.js'
22
+ import { createConnector } from './createConnector.js'
23
+
24
+ export type MockParameters = {
25
+ accounts: readonly [Address, ...Address[]]
26
+ features?:
27
+ | {
28
+ connectError?: boolean | Error | undefined
29
+ switchChainError?: boolean | Error | undefined
30
+ signMessageError?: boolean | Error | undefined
31
+ signTypedDataError?: boolean | Error | undefined
32
+ reconnect?: boolean | undefined
33
+ }
34
+ | undefined
35
+ }
36
+
37
+ mock.type = 'mock' as const
38
+ export function mock(parameters: MockParameters) {
39
+ const features = parameters.features ?? {}
40
+
41
+ type Provider = ReturnType<
42
+ Transport<'custom', {}, EIP1193RequestFn<WalletRpcSchema>>
43
+ >
44
+ let connected = false
45
+ let connectedChainId: number
46
+
47
+ return createConnector<Provider>((config) => ({
48
+ id: 'mock',
49
+ name: 'Mock Connector',
50
+ type: mock.type,
51
+ async setup() {
52
+ connectedChainId = config.chains[0].id
53
+ },
54
+ async connect({ chainId } = {}) {
55
+ if (features.connectError) {
56
+ if (typeof features.connectError === 'boolean')
57
+ throw new UserRejectedRequestError(new Error('Failed to connect.'))
58
+ throw features.connectError
59
+ }
60
+
61
+ const provider = await this.getProvider()
62
+ const accounts = await provider.request({
63
+ method: 'eth_requestAccounts',
64
+ })
65
+
66
+ let currentChainId = await this.getChainId()
67
+ if (chainId && currentChainId !== chainId) {
68
+ const chain = await this.switchChain!({ chainId })
69
+ currentChainId = chain.id
70
+ }
71
+
72
+ connected = true
73
+
74
+ return { accounts, chainId: currentChainId }
75
+ },
76
+ async disconnect() {
77
+ connected = false
78
+ },
79
+ async getAccounts() {
80
+ if (!connected) throw new ConnectorNotConnectedError()
81
+ const provider = await this.getProvider()
82
+ const accounts = await provider.request({ method: 'eth_accounts' })
83
+ return accounts.map(getAddress)
84
+ },
85
+ async getChainId() {
86
+ const provider = await this.getProvider()
87
+ const hexChainId = await provider.request({ method: 'eth_chainId' })
88
+ return fromHex(hexChainId, 'number')
89
+ },
90
+ async isAuthorized() {
91
+ if (!features.reconnect) return false
92
+ if (!connected) return false
93
+ const accounts = await this.getAccounts()
94
+ return !!accounts.length
95
+ },
96
+ async switchChain({ chainId }) {
97
+ const provider = await this.getProvider()
98
+ const chain = config.chains.find((x) => x.id === chainId)
99
+ if (!chain) throw new SwitchChainError(new ChainNotConfiguredError())
100
+
101
+ await provider.request({
102
+ method: 'wallet_switchEthereumChain',
103
+ params: [{ chainId: numberToHex(chainId) }],
104
+ })
105
+ return chain
106
+ },
107
+ onAccountsChanged(accounts) {
108
+ if (accounts.length === 0) this.onDisconnect()
109
+ else config.emitter.emit('change', { accounts: accounts.map(getAddress) })
110
+ },
111
+ onChainChanged(chain) {
112
+ const chainId = normalizeChainId(chain)
113
+ config.emitter.emit('change', { chainId })
114
+ },
115
+ async onDisconnect(_error) {
116
+ config.emitter.emit('disconnect')
117
+ connected = false
118
+ },
119
+ async getProvider({ chainId } = {}) {
120
+ const chain =
121
+ config.chains.find((x) => x.id === chainId) ?? config.chains[0]
122
+ const url = chain.rpcUrls.default.http[0]!
123
+
124
+ const request: EIP1193RequestFn = async ({ method, params }) => {
125
+ // eth methods
126
+ if (method === 'eth_chainId') return numberToHex(connectedChainId)
127
+ if (method === 'eth_requestAccounts') return parameters.accounts
128
+ if (method === 'eth_signTypedData_v4')
129
+ if (features.signTypedDataError) {
130
+ if (typeof features.signTypedDataError === 'boolean')
131
+ throw new UserRejectedRequestError(
132
+ new Error('Failed to sign typed data.'),
133
+ )
134
+ throw features.signTypedDataError
135
+ }
136
+
137
+ // wallet methods
138
+ if (method === 'wallet_switchEthereumChain') {
139
+ if (features.switchChainError) {
140
+ if (typeof features.switchChainError === 'boolean')
141
+ throw new UserRejectedRequestError(
142
+ new Error('Failed to switch chain.'),
143
+ )
144
+ throw features.switchChainError
145
+ }
146
+ type Params = [{ chainId: Hex }]
147
+ connectedChainId = fromHex((params as Params)[0].chainId, 'number')
148
+ this.onChainChanged(connectedChainId.toString())
149
+ return
150
+ }
151
+
152
+ // other methods
153
+ if (method === 'personal_sign') {
154
+ if (features.signMessageError) {
155
+ if (typeof features.signMessageError === 'boolean')
156
+ throw new UserRejectedRequestError(
157
+ new Error('Failed to sign message.'),
158
+ )
159
+ throw features.signMessageError
160
+ }
161
+ // Change `personal_sign` to `eth_sign` and swap params
162
+ method = 'eth_sign'
163
+ type Params = [data: Hex, address: Address]
164
+ params = [(params as Params)[1], (params as Params)[0]]
165
+ }
166
+
167
+ const body = { method, params }
168
+ const { error, result } = await rpc.http(url, { body })
169
+ if (error) throw new RpcRequestError({ body, error, url })
170
+
171
+ return result
172
+ }
173
+ return custom({ request })({ retryCount: 0 })
174
+ },
175
+ }))
176
+ }
@@ -1,18 +1,24 @@
1
+ import {
2
+ type EIP6963ProviderDetail,
3
+ type Store as MipdStore,
4
+ createStore as createMipd,
5
+ } from 'mipd'
1
6
  import {
2
7
  type Address,
3
8
  type Chain,
4
9
  type Client,
5
10
  type ClientConfig as viem_ClientConfig,
6
- type Transport,
11
+ type Transport as viem_Transport,
7
12
  createClient,
8
13
  } from 'viem'
9
14
  import { persist, subscribeWithSelector } from 'zustand/middleware'
10
- import { createStore } from 'zustand/vanilla'
15
+ import { type Mutate, type StoreApi, createStore } from 'zustand/vanilla'
11
16
 
12
17
  import {
13
18
  type ConnectorEventMap,
14
19
  type CreateConnectorFn,
15
- } from './createConnector.js'
20
+ } from './connectors/createConnector.js'
21
+ import { injected } from './connectors/injected.js'
16
22
  import { Emitter, type EventData, createEmitter } from './createEmitter.js'
17
23
  import { type Storage, createStorage, noopStorage } from './createStorage.js'
18
24
  import { ChainNotConfiguredError } from './errors/config.js'
@@ -29,8 +35,9 @@ export type CreateConfigParameters<
29
35
  {
30
36
  chains: chains
31
37
  connectors?: CreateConnectorFn[] | undefined
32
- reconnectOnMount?: boolean | undefined
38
+ multiInjectedProviderDiscovery?: boolean | undefined
33
39
  storage?: Storage | null | undefined
40
+ ssr?: boolean | undefined
34
41
  syncConnectedChain?: boolean | undefined
35
42
  } & OneOf<
36
43
  | ({ transports: transports } & {
@@ -45,57 +52,9 @@ export type CreateConfigParameters<
45
52
  chains[number]
46
53
  >
47
54
  }
48
- > &
49
- OneOf<
50
- | {
51
- /** @deprecated Use `reconnectOnMount` instead */
52
- autoConnect?: boolean | undefined
53
- }
54
- | { reconnectOnMount?: boolean | undefined }
55
- >
55
+ >
56
56
  >
57
57
 
58
- export type Config<
59
- chains extends readonly [Chain, ...Chain[]] = readonly [Chain, ...Chain[]],
60
- transports extends Record<chains[number]['id'], Transport> = Record<
61
- chains[number]['id'],
62
- Transport
63
- >,
64
- > = {
65
- readonly chains: chains
66
- readonly connectors: readonly Connector[]
67
- readonly state: State<chains>
68
- readonly storage: Storage | null
69
-
70
- getClient<chainId extends chains[number]['id']>(parameters?: {
71
- chainId?: chainId | chains[number]['id'] | undefined
72
- }): Client<transports[chainId], Extract<chains[number], { id: chainId }>>
73
- setState<tchains extends readonly [Chain, ...Chain[]] = chains>(
74
- value: State<tchains> | ((state: State<tchains>) => State<tchains>),
75
- ): void
76
- subscribe<state>(
77
- selector: (state: State<chains>) => state,
78
- listener: (selectedState: state, previousSelectedState: state) => void,
79
- options?:
80
- | {
81
- equalityFn?: ((a: state, b: state) => boolean) | undefined
82
- fireImmediately?: boolean | undefined
83
- }
84
- | undefined,
85
- ): () => void
86
-
87
- _internal: {
88
- readonly reconnectOnMount: boolean
89
- readonly syncConnectedChain: boolean
90
- readonly transports: transports
91
-
92
- change(data: EventData<ConnectorEventMap, 'change'>): void
93
- connect(data: EventData<ConnectorEventMap, 'connect'>): void
94
- disconnect(data: EventData<ConnectorEventMap, 'disconnect'>): void
95
- setup(connectorFn: CreateConnectorFn): Connector
96
- }
97
- }
98
-
99
58
  export function createConfig<
100
59
  const chains extends readonly [Chain, ...Chain[]],
101
60
  transports extends Record<chains[number]['id'], Transport>,
@@ -103,9 +62,8 @@ export function createConfig<
103
62
  parameters: CreateConfigParameters<chains, transports>,
104
63
  ): Config<chains, transports> {
105
64
  const {
106
- autoConnect,
107
65
  chains,
108
- reconnectOnMount = autoConnect ?? true,
66
+ multiInjectedProviderDiscovery = true,
109
67
  storage = createStorage({
110
68
  storage:
111
69
  typeof window !== 'undefined' && window.localStorage
@@ -113,6 +71,7 @@ export function createConfig<
113
71
  : noopStorage,
114
72
  }),
115
73
  syncConnectedChain = true,
74
+ ssr,
116
75
  ...rest
117
76
  } = parameters
118
77
 
@@ -120,8 +79,20 @@ export function createConfig<
120
79
  // Set up connectors, clients, etc.
121
80
  /////////////////////////////////////////////////////////////////////////////////////////////////
122
81
 
123
- const connectors = (rest.connectors ?? []).map(setup)
124
- function setup(connectorFn: CreateConnectorFn) {
82
+ const mipd =
83
+ typeof window !== 'undefined' && multiInjectedProviderDiscovery
84
+ ? createMipd()
85
+ : undefined
86
+
87
+ const connectors = createStore(() =>
88
+ [
89
+ ...(rest.connectors ?? []),
90
+ ...(!ssr
91
+ ? mipd?.getProviders().map(providerDetailToConnector) ?? []
92
+ : []),
93
+ ].map(setup),
94
+ )
95
+ function setup(connectorFn: CreateConnectorFn): Connector {
125
96
  // Set up emitter with uid and add to connector so they are "linked" together.
126
97
  const emitter = createEmitter<ConnectorEventMap>(uid())
127
98
  const connector = {
@@ -130,13 +101,19 @@ export function createConfig<
130
101
  uid: emitter.uid,
131
102
  }
132
103
 
133
- // Start listening for `connect` events if `reconnectOnMount` is switched on.
104
+ // Start listening for `connect` events on connector setup
134
105
  // This allows connectors to "connect" themselves without user interaction (e.g. MetaMask's "Manually connect to current site")
135
- if (reconnectOnMount) emitter.on('connect', connect)
106
+ emitter.on('connect', connect)
136
107
  connector.setup?.()
137
108
 
138
109
  return connector
139
110
  }
111
+ function providerDetailToConnector(providerDetail: EIP6963ProviderDetail) {
112
+ const { info, provider } = providerDetail
113
+ return injected({
114
+ target: { ...info, id: info.rdns, provider: provider as any },
115
+ })
116
+ }
140
117
 
141
118
  const clients = new Map<number, Client<Transport, chains[number]>>()
142
119
  function getClient<chainId extends chains[number]['id']>(
@@ -146,7 +123,6 @@ export function createConfig<
146
123
  const chain = chains.find((x) => x.id === chainId)
147
124
 
148
125
  // If the target chain is not configured, use the client of the current chain.
149
- // TODO: should we error instead? idk. figure out later.
150
126
  type Return = Client<Transport, Extract<chains[number], { id: chainId }>>
151
127
  {
152
128
  const client = clients.get(store.getState().chainId)
@@ -179,7 +155,11 @@ export function createConfig<
179
155
  ...properties,
180
156
  chain,
181
157
  batch: properties.batch ?? { multicall: true },
182
- transport: rest.transports[chainId],
158
+ transport: (parameters) =>
159
+ rest.transports[chainId]({
160
+ ...parameters,
161
+ connectors,
162
+ }),
183
163
  })
184
164
  }
185
165
 
@@ -206,13 +186,12 @@ export function createConfig<
206
186
  name: 'store',
207
187
  partialize(state) {
208
188
  return {
209
- chainId: state.chainId,
210
189
  connections: state.connections,
190
+ chainId: state.chainId,
211
191
  current: state.current,
212
- status: state.status,
213
192
  } satisfies PartializedState
214
193
  },
215
- skipHydration: !reconnectOnMount,
194
+ skipHydration: ssr,
216
195
  storage: storage as Storage<Record<string, unknown>>,
217
196
  version: 1,
218
197
  })
@@ -241,6 +220,23 @@ export function createConfig<
241
220
  },
242
221
  )
243
222
 
223
+ // EIP-6963 subscribe for new wallet providers
224
+ mipd?.subscribe((providerDetails) => {
225
+ const currentConnectorIds = new Map()
226
+ for (const connector of connectors.getState()) {
227
+ currentConnectorIds.set(connector.id, true)
228
+ }
229
+
230
+ const newConnectors: Connector[] = []
231
+ for (const providerDetail of providerDetails) {
232
+ const connector = setup(providerDetailToConnector(providerDetail))
233
+ if (currentConnectorIds.has(connector.id)) continue
234
+ newConnectors.push(connector)
235
+ }
236
+
237
+ connectors.setState((x) => [...x, ...newConnectors], true)
238
+ })
239
+
244
240
  /////////////////////////////////////////////////////////////////////////////////////////////////
245
241
  // Emitter listeners
246
242
  /////////////////////////////////////////////////////////////////////////////////////////////////
@@ -261,11 +257,15 @@ export function createConfig<
261
257
  })
262
258
  }
263
259
  function connect(data: EventData<ConnectorEventMap, 'connect'>) {
264
- // Disable handling if reconnecting
265
- if (store.getState().status === 'reconnecting') return
260
+ // Disable handling if reconnecting/connecting
261
+ if (
262
+ store.getState().status === 'connecting' ||
263
+ store.getState().status === 'reconnecting'
264
+ )
265
+ return
266
266
 
267
267
  store.setState((x) => {
268
- const connector = connectors.find((x) => x.uid === data.uid)
268
+ const connector = connectors.getState().find((x) => x.uid === data.uid)
269
269
  if (!connector) return x
270
270
  return {
271
271
  ...x,
@@ -309,13 +309,15 @@ export function createConfig<
309
309
 
310
310
  return {
311
311
  chains: chains as chains,
312
- connectors,
313
- get state() {
314
- return store.getState() as unknown as State<chains>
312
+ get connectors() {
313
+ return connectors.getState()
315
314
  },
316
315
  storage,
317
316
 
318
317
  getClient,
318
+ get state() {
319
+ return store.getState() as unknown as State<chains>
320
+ },
319
321
  setState(value) {
320
322
  let newState: State
321
323
  if (typeof value === 'function') newState = value(store.getState() as any)
@@ -332,18 +334,29 @@ export function createConfig<
332
334
  return store.subscribe(
333
335
  selector as unknown as (state: State) => any,
334
336
  listener,
335
- options,
337
+ options
338
+ ? { ...options, fireImmediately: options.emitImmediately }
339
+ : undefined,
336
340
  )
337
341
  },
338
342
 
339
343
  _internal: {
340
- reconnectOnMount,
344
+ mipd,
345
+ store,
346
+ ssr: Boolean(ssr),
341
347
  syncConnectedChain,
342
348
  transports: rest.transports as transports,
343
- change,
344
- connect,
345
- disconnect,
346
- setup,
349
+ connectors: {
350
+ providerDetailToConnector,
351
+ setup,
352
+ setState: (value) =>
353
+ connectors.setState(
354
+ typeof value === 'function' ? value(connectors.getState()) : value,
355
+ true,
356
+ ),
357
+ subscribe: (listener) => connectors.subscribe(listener),
358
+ },
359
+ events: { change, connect, disconnect },
347
360
  },
348
361
  }
349
362
  }
@@ -352,6 +365,64 @@ export function createConfig<
352
365
  // Types
353
366
  /////////////////////////////////////////////////////////////////////////////////////////////////
354
367
 
368
+ export type Config<
369
+ chains extends readonly [Chain, ...Chain[]] = readonly [Chain, ...Chain[]],
370
+ transports extends Record<chains[number]['id'], Transport> = Record<
371
+ chains[number]['id'],
372
+ Transport
373
+ >,
374
+ > = {
375
+ readonly chains: chains
376
+ readonly connectors: readonly Connector[]
377
+ readonly storage: Storage | null
378
+
379
+ readonly state: State<chains>
380
+ setState<tchains extends readonly [Chain, ...Chain[]] = chains>(
381
+ value: State<tchains> | ((state: State<tchains>) => State<tchains>),
382
+ ): void
383
+ subscribe<state>(
384
+ selector: (state: State<chains>) => state,
385
+ listener: (state: state, previousState: state) => void,
386
+ options?:
387
+ | {
388
+ emitImmediately?: boolean | undefined
389
+ equalityFn?: ((a: state, b: state) => boolean) | undefined
390
+ }
391
+ | undefined,
392
+ ): () => void
393
+
394
+ getClient<chainId extends chains[number]['id']>(parameters?: {
395
+ chainId?: chainId | chains[number]['id'] | undefined
396
+ }): Client<transports[chainId], Extract<chains[number], { id: chainId }>>
397
+
398
+ _internal: {
399
+ readonly mipd: MipdStore | undefined
400
+ readonly store: Mutate<StoreApi<any>, [['zustand/persist', any]]>
401
+ readonly ssr: boolean
402
+ readonly syncConnectedChain: boolean
403
+ readonly transports: transports
404
+
405
+ connectors: {
406
+ providerDetailToConnector(
407
+ providerDetail: EIP6963ProviderDetail,
408
+ ): CreateConnectorFn
409
+ setup(connectorFn: CreateConnectorFn): Connector
410
+ setState(value: Connector[] | ((state: Connector[]) => Connector[])): void
411
+ subscribe(
412
+ listener: (
413
+ state: readonly Connector[],
414
+ prevState: readonly Connector[],
415
+ ) => void,
416
+ ): () => void
417
+ }
418
+ events: {
419
+ change(data: EventData<ConnectorEventMap, 'change'>): void
420
+ connect(data: EventData<ConnectorEventMap, 'connect'>): void
421
+ disconnect(data: EventData<ConnectorEventMap, 'disconnect'>): void
422
+ }
423
+ }
424
+ }
425
+
355
426
  export type State<
356
427
  chains extends readonly [Chain, ...Chain[]] = readonly [Chain, ...Chain[]],
357
428
  > = {
@@ -376,6 +447,12 @@ export type Connector = ReturnType<CreateConnectorFn> & {
376
447
  uid: string
377
448
  }
378
449
 
450
+ export type Transport = (
451
+ params: Parameters<viem_Transport>[0] & {
452
+ connectors?: StoreApi<Connector[]>
453
+ },
454
+ ) => ReturnType<viem_Transport>
455
+
379
456
  type ClientConfig = LooseOmit<
380
457
  viem_ClientConfig,
381
458
  'account' | 'chain' | 'key' | 'name' | 'transport' | 'type'
@@ -1,5 +1,5 @@
1
1
  import { type PartializedState } from './createConfig.js'
2
- import type { Evaluate } from './types/utils.js'
2
+ import { type Evaluate } from './types/utils.js'
3
3
  import { deserialize as deserialize_ } from './utils/deserialize.js'
4
4
  import { serialize as serialize_ } from './utils/serialize.js'
5
5
 
@@ -14,6 +14,7 @@ export type Storage<
14
14
  ///
15
15
  storageItemMap extends StorageItemMap = StorageItemMap & itemMap,
16
16
  > = {
17
+ key: string
17
18
  getItem<
18
19
  key extends keyof storageItemMap,
19
20
  value extends storageItemMap[key],
@@ -31,7 +32,7 @@ export type Storage<
31
32
  removeItem(key: keyof storageItemMap): void | Promise<void>
32
33
  }
33
34
 
34
- type BaseStorage = {
35
+ export type BaseStorage = {
35
36
  getItem(
36
37
  key: string,
37
38
  ): string | null | undefined | Promise<string | null | undefined>
@@ -43,7 +44,7 @@ export type CreateStorageParameters = {
43
44
  deserialize?: (<T>(value: string) => T) | undefined
44
45
  key?: string | undefined
45
46
  serialize?: (<T>(value: T) => string) | undefined
46
- storage: Evaluate<BaseStorage>
47
+ storage?: Evaluate<BaseStorage> | undefined
47
48
  }
48
49
 
49
50
  export function createStorage<
@@ -54,17 +55,17 @@ export function createStorage<
54
55
  deserialize = deserialize_,
55
56
  key: prefix = 'wagmi',
56
57
  serialize = serialize_,
57
- storage,
58
+ storage = noopStorage,
58
59
  } = parameters
59
60
 
60
61
  function unwrap<type>(value: type): type | Promise<type> {
61
- if (value instanceof Promise)
62
- return value.then((x) => x).catch(() => undefined)
62
+ if (value instanceof Promise) return value.then((x) => x).catch(() => null)
63
63
  return value
64
64
  }
65
65
 
66
66
  return {
67
67
  ...storage,
68
+ key: prefix,
68
69
  async getItem(key, defaultValue) {
69
70
  const value = storage.getItem(`${prefix}.${key as string}`)
70
71
  const unwrapped = await unwrap(value)
@@ -1,14 +1,17 @@
1
1
  import type { Evaluate, OneOf } from '../types/utils.js'
2
2
  import { getVersion } from '../utils/getVersion.js'
3
3
 
4
+ export type ErrorType<name extends string = 'Error'> = Error & { name: name }
5
+
4
6
  type BaseErrorOptions = Evaluate<
5
- {
6
- docsPath?: string
7
- docsSlug?: string
8
- metaMessages?: string[]
9
- } & OneOf<{ details?: string } | { cause: BaseError | Error }>
7
+ OneOf<{ details?: string | undefined } | { cause: BaseError | Error }> & {
8
+ docsPath?: string | undefined
9
+ docsSlug?: string | undefined
10
+ metaMessages?: string[] | undefined
11
+ }
10
12
  >
11
13
 
14
+ export type BaseErrorType = BaseError & { name: 'WagmiCoreError' }
12
15
  export class BaseError extends Error {
13
16
  details: string
14
17
  docsPath?: string | undefined
@@ -17,7 +20,7 @@ export class BaseError extends Error {
17
20
 
18
21
  override name = 'WagmiCoreError'
19
22
  get docsBaseUrl() {
20
- return 'https://alpha.wagmi.sh/core'
23
+ return 'https://wagmi.sh/core'
21
24
  }
22
25
  get version() {
23
26
  return getVersion()