thirdweb 5.29.6 → 5.30.0-nightly-33777df88fb190c2af8ad25e4930040884996f1e-20240620000630

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 (363) hide show
  1. package/dist/cjs/exports/extensions/erc1155.js +3 -1
  2. package/dist/cjs/exports/extensions/erc1155.js.map +1 -1
  3. package/dist/cjs/exports/wallets/wallet-connect.js +1 -1
  4. package/dist/cjs/extensions/erc1155/__generated__/BatchMintMetadata/events/BatchMetadataUpdate.js +28 -0
  5. package/dist/cjs/extensions/erc1155/__generated__/BatchMintMetadata/events/BatchMetadataUpdate.js.map +1 -0
  6. package/dist/cjs/extensions/erc1155/__generated__/BatchMintMetadata/read/getBaseURICount.js +71 -0
  7. package/dist/cjs/extensions/erc1155/__generated__/BatchMintMetadata/read/getBaseURICount.js.map +1 -0
  8. package/dist/cjs/extensions/erc1155/__generated__/BatchMintMetadata/read/getBatchIdAtIndex.js +115 -0
  9. package/dist/cjs/extensions/erc1155/__generated__/BatchMintMetadata/read/getBatchIdAtIndex.js.map +1 -0
  10. package/dist/cjs/extensions/erc1155/__generated__/DropERC1155/write/freezeBatchBaseURI.js +116 -0
  11. package/dist/cjs/extensions/erc1155/__generated__/DropERC1155/write/freezeBatchBaseURI.js.map +1 -0
  12. package/dist/cjs/extensions/erc1155/__generated__/DropERC1155/write/setMaxTotalSupply.js +126 -0
  13. package/dist/cjs/extensions/erc1155/__generated__/DropERC1155/write/setMaxTotalSupply.js.map +1 -0
  14. package/dist/cjs/extensions/erc1155/__generated__/DropERC1155/write/setSaleRecipientForToken.js +126 -0
  15. package/dist/cjs/extensions/erc1155/__generated__/DropERC1155/write/setSaleRecipientForToken.js.map +1 -0
  16. package/dist/cjs/extensions/erc1155/__generated__/DropERC1155/write/updateBatchBaseURI.js +123 -0
  17. package/dist/cjs/extensions/erc1155/__generated__/DropERC1155/write/updateBatchBaseURI.js.map +1 -0
  18. package/dist/cjs/extensions/erc1155/drops/write/updateMetadata.js +89 -0
  19. package/dist/cjs/extensions/erc1155/drops/write/updateMetadata.js.map +1 -0
  20. package/dist/cjs/pay/buyWithCrypto/getQuote.js +19 -21
  21. package/dist/cjs/pay/buyWithCrypto/getQuote.js.map +1 -1
  22. package/dist/cjs/pay/buyWithCrypto/getStatus.js.map +1 -1
  23. package/dist/cjs/pay/buyWithFiat/getQuote.js +19 -20
  24. package/dist/cjs/pay/buyWithFiat/getQuote.js.map +1 -1
  25. package/dist/cjs/pay/buyWithFiat/getStatus.js.map +1 -1
  26. package/dist/cjs/react/core/hooks/contract/useContractEvents.js +1 -1
  27. package/dist/cjs/react/core/hooks/transaction/useSendTransaction.js.map +1 -1
  28. package/dist/cjs/react/native/hooks/wallets/useActiveWalletChain.js +1 -1
  29. package/dist/cjs/react/web/hooks/transaction/useSendTransaction.js +1 -0
  30. package/dist/cjs/react/web/hooks/transaction/useSendTransaction.js.map +1 -1
  31. package/dist/cjs/react/web/hooks/wallets/useActiveWalletChain.js +1 -1
  32. package/dist/cjs/react/web/ui/ConnectWallet/Details.js +63 -118
  33. package/dist/cjs/react/web/ui/ConnectWallet/Details.js.map +1 -1
  34. package/dist/cjs/react/web/ui/ConnectWallet/MenuButton.js +53 -0
  35. package/dist/cjs/react/web/ui/ConnectWallet/MenuButton.js.map +1 -0
  36. package/dist/cjs/react/web/ui/ConnectWallet/icons/CoinsIcon.js +12 -0
  37. package/dist/cjs/react/web/ui/ConnectWallet/icons/CoinsIcon.js.map +1 -0
  38. package/dist/cjs/react/web/ui/ConnectWallet/icons/{WalletIcon.js → GenericWalletIcon.js} +4 -4
  39. package/dist/cjs/react/web/ui/ConnectWallet/icons/GenericWalletIcon.js.map +1 -0
  40. package/dist/cjs/react/web/ui/ConnectWallet/icons/OutlineWalletIcon.js +12 -0
  41. package/dist/cjs/react/web/ui/ConnectWallet/icons/OutlineWalletIcon.js.map +1 -0
  42. package/dist/cjs/react/web/ui/ConnectWallet/icons/WalletConnectIcon.js +12 -0
  43. package/dist/cjs/react/web/ui/ConnectWallet/icons/WalletConnectIcon.js.map +1 -0
  44. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/BuyScreen.js +3 -0
  45. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/BuyScreen.js.map +1 -1
  46. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/PayWithCrypto.js +2 -2
  47. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/PayWithCrypto.js.map +1 -1
  48. package/dist/cjs/react/web/ui/ConnectWallet/screens/ManageWalletScreen.js +57 -0
  49. package/dist/cjs/react/web/ui/ConnectWallet/screens/ManageWalletScreen.js.map +1 -0
  50. package/dist/cjs/react/web/ui/ConnectWallet/screens/SignatureScreen.js +3 -1
  51. package/dist/cjs/react/web/ui/ConnectWallet/screens/SignatureScreen.js.map +1 -1
  52. package/dist/cjs/react/web/ui/ConnectWallet/screens/WalletConnectReceiverScreen.js +78 -0
  53. package/dist/cjs/react/web/ui/ConnectWallet/screens/WalletConnectReceiverScreen.js.map +1 -0
  54. package/dist/cjs/react/web/ui/ConnectWallet/screens/WalletLogoSpinner.js +2 -4
  55. package/dist/cjs/react/web/ui/ConnectWallet/screens/WalletLogoSpinner.js.map +1 -1
  56. package/dist/cjs/react/web/ui/ConnectWallet/useConnectModal.js.map +1 -1
  57. package/dist/cjs/react/web/ui/components/CopyIcon.js +2 -1
  58. package/dist/cjs/react/web/ui/components/CopyIcon.js.map +1 -1
  59. package/dist/cjs/react/web/utils/canFitWideModal.js +1 -1
  60. package/dist/cjs/react/web/wallets/in-app/InputSelectionUI.js +2 -2
  61. package/dist/cjs/react/web/wallets/in-app/InputSelectionUI.js.map +1 -1
  62. package/dist/cjs/react/web/wallets/shared/ConnectingScreen.js +2 -2
  63. package/dist/cjs/react/web/wallets/shared/ConnectingScreen.js.map +1 -1
  64. package/dist/cjs/transaction/read-contract.js +1 -1
  65. package/dist/cjs/version.js +1 -1
  66. package/dist/cjs/version.js.map +1 -1
  67. package/dist/cjs/wallets/injected/index.js +7 -0
  68. package/dist/cjs/wallets/injected/index.js.map +1 -1
  69. package/dist/cjs/wallets/wallet-connect/controller.js +6 -6
  70. package/dist/cjs/wallets/wallet-connect/controller.js.map +1 -1
  71. package/dist/cjs/wallets/wallet-connect/{consumer → receiver}/index.js +17 -4
  72. package/dist/cjs/wallets/wallet-connect/receiver/index.js.map +1 -0
  73. package/dist/cjs/wallets/wallet-connect/{consumer → receiver}/request-handlers/send-raw-transaction.js.map +1 -1
  74. package/dist/cjs/wallets/wallet-connect/{consumer → receiver}/request-handlers/send-transaction.js.map +1 -1
  75. package/dist/cjs/wallets/wallet-connect/{consumer → receiver}/request-handlers/sign-transaction.js.map +1 -1
  76. package/dist/cjs/wallets/wallet-connect/{consumer → receiver}/request-handlers/sign-typed-data.js.map +1 -1
  77. package/dist/cjs/wallets/wallet-connect/{consumer → receiver}/request-handlers/sign.js +1 -1
  78. package/dist/cjs/wallets/wallet-connect/{consumer → receiver}/request-handlers/sign.js.map +1 -1
  79. package/dist/cjs/wallets/wallet-connect/receiver/request-handlers/switch-chain.js +20 -0
  80. package/dist/cjs/wallets/wallet-connect/receiver/request-handlers/switch-chain.js.map +1 -0
  81. package/dist/cjs/wallets/wallet-connect/{consumer → receiver}/session-proposal.js +13 -10
  82. package/dist/cjs/wallets/wallet-connect/receiver/session-proposal.js.map +1 -0
  83. package/dist/cjs/wallets/wallet-connect/{consumer → receiver}/session-request.js +28 -0
  84. package/dist/cjs/wallets/wallet-connect/receiver/session-request.js.map +1 -0
  85. package/dist/cjs/wallets/wallet-connect/{consumer → receiver}/session-store.js.map +1 -1
  86. package/dist/cjs/wallets/wallet-connect/receiver/types.js.map +1 -0
  87. package/dist/cjs/wallets/wallet-connect/{consumer → receiver}/utils.js +2 -1
  88. package/dist/cjs/wallets/wallet-connect/receiver/utils.js.map +1 -0
  89. package/dist/esm/exports/extensions/erc1155.js +1 -0
  90. package/dist/esm/exports/extensions/erc1155.js.map +1 -1
  91. package/dist/esm/exports/wallets/wallet-connect.js +1 -1
  92. package/dist/esm/extensions/erc1155/__generated__/BatchMintMetadata/events/BatchMetadataUpdate.js +24 -0
  93. package/dist/esm/extensions/erc1155/__generated__/BatchMintMetadata/events/BatchMetadataUpdate.js.map +1 -0
  94. package/dist/esm/extensions/erc1155/__generated__/BatchMintMetadata/read/getBaseURICount.js +65 -0
  95. package/dist/esm/extensions/erc1155/__generated__/BatchMintMetadata/read/getBaseURICount.js.map +1 -0
  96. package/dist/esm/extensions/erc1155/__generated__/BatchMintMetadata/read/getBatchIdAtIndex.js +107 -0
  97. package/dist/esm/extensions/erc1155/__generated__/BatchMintMetadata/read/getBatchIdAtIndex.js.map +1 -0
  98. package/dist/esm/extensions/erc1155/__generated__/DropERC1155/write/freezeBatchBaseURI.js +109 -0
  99. package/dist/esm/extensions/erc1155/__generated__/DropERC1155/write/freezeBatchBaseURI.js.map +1 -0
  100. package/dist/esm/extensions/erc1155/__generated__/DropERC1155/write/setMaxTotalSupply.js +119 -0
  101. package/dist/esm/extensions/erc1155/__generated__/DropERC1155/write/setMaxTotalSupply.js.map +1 -0
  102. package/dist/esm/extensions/erc1155/__generated__/DropERC1155/write/setSaleRecipientForToken.js +119 -0
  103. package/dist/esm/extensions/erc1155/__generated__/DropERC1155/write/setSaleRecipientForToken.js.map +1 -0
  104. package/dist/esm/extensions/erc1155/__generated__/DropERC1155/write/updateBatchBaseURI.js +116 -0
  105. package/dist/esm/extensions/erc1155/__generated__/DropERC1155/write/updateBatchBaseURI.js.map +1 -0
  106. package/dist/esm/extensions/erc1155/drops/write/updateMetadata.js +84 -0
  107. package/dist/esm/extensions/erc1155/drops/write/updateMetadata.js.map +1 -0
  108. package/dist/esm/pay/buyWithCrypto/getQuote.js +19 -21
  109. package/dist/esm/pay/buyWithCrypto/getQuote.js.map +1 -1
  110. package/dist/esm/pay/buyWithCrypto/getStatus.js.map +1 -1
  111. package/dist/esm/pay/buyWithFiat/getQuote.js +19 -20
  112. package/dist/esm/pay/buyWithFiat/getQuote.js.map +1 -1
  113. package/dist/esm/pay/buyWithFiat/getStatus.js.map +1 -1
  114. package/dist/esm/react/core/hooks/contract/useContractEvents.js +1 -1
  115. package/dist/esm/react/core/hooks/transaction/useSendTransaction.js.map +1 -1
  116. package/dist/esm/react/native/hooks/wallets/useActiveWalletChain.js +1 -1
  117. package/dist/esm/react/web/hooks/transaction/useSendTransaction.js +1 -0
  118. package/dist/esm/react/web/hooks/transaction/useSendTransaction.js.map +1 -1
  119. package/dist/esm/react/web/hooks/wallets/useActiveWalletChain.js +1 -1
  120. package/dist/esm/react/web/ui/ConnectWallet/Details.js +23 -78
  121. package/dist/esm/react/web/ui/ConnectWallet/Details.js.map +1 -1
  122. package/dist/esm/react/web/ui/ConnectWallet/MenuButton.js +50 -0
  123. package/dist/esm/react/web/ui/ConnectWallet/MenuButton.js.map +1 -0
  124. package/dist/esm/react/web/ui/ConnectWallet/icons/CoinsIcon.js +8 -0
  125. package/dist/esm/react/web/ui/ConnectWallet/icons/CoinsIcon.js.map +1 -0
  126. package/dist/esm/react/web/ui/ConnectWallet/icons/{WalletIcon.js → GenericWalletIcon.js} +2 -2
  127. package/dist/esm/react/web/ui/ConnectWallet/icons/GenericWalletIcon.js.map +1 -0
  128. package/dist/esm/react/web/ui/ConnectWallet/icons/OutlineWalletIcon.js +8 -0
  129. package/dist/esm/react/web/ui/ConnectWallet/icons/OutlineWalletIcon.js.map +1 -0
  130. package/dist/esm/react/web/ui/ConnectWallet/icons/WalletConnectIcon.js +8 -0
  131. package/dist/esm/react/web/ui/ConnectWallet/icons/WalletConnectIcon.js.map +1 -0
  132. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/BuyScreen.js +3 -0
  133. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/BuyScreen.js.map +1 -1
  134. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/PayWithCrypto.js +2 -2
  135. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/PayWithCrypto.js.map +1 -1
  136. package/dist/esm/react/web/ui/ConnectWallet/screens/ManageWalletScreen.js +53 -0
  137. package/dist/esm/react/web/ui/ConnectWallet/screens/ManageWalletScreen.js.map +1 -0
  138. package/dist/esm/react/web/ui/ConnectWallet/screens/SignatureScreen.js +3 -1
  139. package/dist/esm/react/web/ui/ConnectWallet/screens/SignatureScreen.js.map +1 -1
  140. package/dist/esm/react/web/ui/ConnectWallet/screens/WalletConnectReceiverScreen.js +74 -0
  141. package/dist/esm/react/web/ui/ConnectWallet/screens/WalletConnectReceiverScreen.js.map +1 -0
  142. package/dist/esm/react/web/ui/ConnectWallet/screens/WalletLogoSpinner.js +2 -4
  143. package/dist/esm/react/web/ui/ConnectWallet/screens/WalletLogoSpinner.js.map +1 -1
  144. package/dist/esm/react/web/ui/ConnectWallet/useConnectModal.js.map +1 -1
  145. package/dist/esm/react/web/ui/components/CopyIcon.js +2 -1
  146. package/dist/esm/react/web/ui/components/CopyIcon.js.map +1 -1
  147. package/dist/esm/react/web/utils/canFitWideModal.js +1 -1
  148. package/dist/esm/react/web/wallets/in-app/InputSelectionUI.js +2 -2
  149. package/dist/esm/react/web/wallets/in-app/InputSelectionUI.js.map +1 -1
  150. package/dist/esm/react/web/wallets/shared/ConnectingScreen.js +2 -2
  151. package/dist/esm/react/web/wallets/shared/ConnectingScreen.js.map +1 -1
  152. package/dist/esm/transaction/read-contract.js +1 -1
  153. package/dist/esm/version.js +1 -1
  154. package/dist/esm/version.js.map +1 -1
  155. package/dist/esm/wallets/injected/index.js +7 -0
  156. package/dist/esm/wallets/injected/index.js.map +1 -1
  157. package/dist/esm/wallets/wallet-connect/controller.js +6 -6
  158. package/dist/esm/wallets/wallet-connect/controller.js.map +1 -1
  159. package/dist/esm/wallets/wallet-connect/{consumer → receiver}/index.js +15 -3
  160. package/dist/esm/wallets/wallet-connect/receiver/index.js.map +1 -0
  161. package/dist/esm/wallets/wallet-connect/{consumer → receiver}/request-handlers/send-raw-transaction.js.map +1 -1
  162. package/dist/esm/wallets/wallet-connect/{consumer → receiver}/request-handlers/send-transaction.js.map +1 -1
  163. package/dist/esm/wallets/wallet-connect/{consumer → receiver}/request-handlers/sign-transaction.js.map +1 -1
  164. package/dist/esm/wallets/wallet-connect/{consumer → receiver}/request-handlers/sign-typed-data.js.map +1 -1
  165. package/dist/esm/wallets/wallet-connect/{consumer → receiver}/request-handlers/sign.js +1 -1
  166. package/dist/esm/wallets/wallet-connect/{consumer → receiver}/request-handlers/sign.js.map +1 -1
  167. package/dist/esm/wallets/wallet-connect/receiver/request-handlers/switch-chain.js +16 -0
  168. package/dist/esm/wallets/wallet-connect/receiver/request-handlers/switch-chain.js.map +1 -0
  169. package/dist/esm/wallets/wallet-connect/{consumer → receiver}/session-proposal.js +13 -10
  170. package/dist/esm/wallets/wallet-connect/receiver/session-proposal.js.map +1 -0
  171. package/dist/esm/wallets/wallet-connect/{consumer → receiver}/session-request.js +28 -0
  172. package/dist/esm/wallets/wallet-connect/receiver/session-request.js.map +1 -0
  173. package/dist/esm/wallets/wallet-connect/{consumer → receiver}/session-store.js.map +1 -1
  174. package/dist/esm/wallets/wallet-connect/receiver/types.js.map +1 -0
  175. package/dist/esm/wallets/wallet-connect/{consumer → receiver}/utils.js +2 -1
  176. package/dist/esm/wallets/wallet-connect/receiver/utils.js.map +1 -0
  177. package/dist/types/exports/extensions/erc1155.d.ts +1 -0
  178. package/dist/types/exports/extensions/erc1155.d.ts.map +1 -1
  179. package/dist/types/exports/wallets/wallet-connect.d.ts +2 -2
  180. package/dist/types/extensions/erc1155/__generated__/BatchMintMetadata/events/BatchMetadataUpdate.d.ts +29 -0
  181. package/dist/types/extensions/erc1155/__generated__/BatchMintMetadata/events/BatchMetadataUpdate.d.ts.map +1 -0
  182. package/dist/types/extensions/erc1155/__generated__/BatchMintMetadata/read/getBaseURICount.d.ts +46 -0
  183. package/dist/types/extensions/erc1155/__generated__/BatchMintMetadata/read/getBaseURICount.d.ts.map +1 -0
  184. package/dist/types/extensions/erc1155/__generated__/BatchMintMetadata/read/getBatchIdAtIndex.d.ts +85 -0
  185. package/dist/types/extensions/erc1155/__generated__/BatchMintMetadata/read/getBatchIdAtIndex.d.ts.map +1 -0
  186. package/dist/types/extensions/erc1155/__generated__/DropERC1155/write/freezeBatchBaseURI.d.ts +80 -0
  187. package/dist/types/extensions/erc1155/__generated__/DropERC1155/write/freezeBatchBaseURI.d.ts.map +1 -0
  188. package/dist/types/extensions/erc1155/__generated__/DropERC1155/write/setMaxTotalSupply.d.ts +87 -0
  189. package/dist/types/extensions/erc1155/__generated__/DropERC1155/write/setMaxTotalSupply.d.ts.map +1 -0
  190. package/dist/types/extensions/erc1155/__generated__/DropERC1155/write/setSaleRecipientForToken.d.ts +87 -0
  191. package/dist/types/extensions/erc1155/__generated__/DropERC1155/write/setSaleRecipientForToken.d.ts.map +1 -0
  192. package/dist/types/extensions/erc1155/__generated__/DropERC1155/write/updateBatchBaseURI.d.ts +87 -0
  193. package/dist/types/extensions/erc1155/__generated__/DropERC1155/write/updateBatchBaseURI.d.ts.map +1 -0
  194. package/dist/types/extensions/erc1155/drops/write/updateMetadata.d.ts +37 -0
  195. package/dist/types/extensions/erc1155/drops/write/updateMetadata.d.ts.map +1 -0
  196. package/dist/types/pay/buyWithCrypto/getQuote.d.ts +6 -0
  197. package/dist/types/pay/buyWithCrypto/getQuote.d.ts.map +1 -1
  198. package/dist/types/pay/buyWithCrypto/getStatus.d.ts +1 -0
  199. package/dist/types/pay/buyWithCrypto/getStatus.d.ts.map +1 -1
  200. package/dist/types/pay/buyWithFiat/getQuote.d.ts +11 -1
  201. package/dist/types/pay/buyWithFiat/getQuote.d.ts.map +1 -1
  202. package/dist/types/pay/buyWithFiat/getStatus.d.ts +4 -0
  203. package/dist/types/pay/buyWithFiat/getStatus.d.ts.map +1 -1
  204. package/dist/types/react/core/hooks/contract/useContractEvents.d.ts +1 -1
  205. package/dist/types/react/core/hooks/transaction/useSendTransaction.d.ts +1 -0
  206. package/dist/types/react/core/hooks/transaction/useSendTransaction.d.ts.map +1 -1
  207. package/dist/types/react/native/hooks/wallets/useActiveWalletChain.d.ts +1 -1
  208. package/dist/types/react/web/hooks/transaction/useSendTransaction.d.ts.map +1 -1
  209. package/dist/types/react/web/hooks/wallets/useActiveWalletChain.d.ts +1 -1
  210. package/dist/types/react/web/ui/ConnectWallet/ConnectButtonProps.d.ts +44 -4
  211. package/dist/types/react/web/ui/ConnectWallet/ConnectButtonProps.d.ts.map +1 -1
  212. package/dist/types/react/web/ui/ConnectWallet/Details.d.ts.map +1 -1
  213. package/dist/types/react/web/ui/ConnectWallet/MenuButton.d.ts +10 -0
  214. package/dist/types/react/web/ui/ConnectWallet/MenuButton.d.ts.map +1 -0
  215. package/dist/types/react/web/ui/ConnectWallet/icons/CoinsIcon.d.ts +6 -0
  216. package/dist/types/react/web/ui/ConnectWallet/icons/CoinsIcon.d.ts.map +1 -0
  217. package/dist/types/react/web/ui/ConnectWallet/icons/GenericWalletIcon.d.ts +6 -0
  218. package/dist/types/react/web/ui/ConnectWallet/icons/GenericWalletIcon.d.ts.map +1 -0
  219. package/dist/types/react/web/ui/ConnectWallet/icons/OutlineWalletIcon.d.ts +6 -0
  220. package/dist/types/react/web/ui/ConnectWallet/icons/OutlineWalletIcon.d.ts.map +1 -0
  221. package/dist/types/react/web/ui/ConnectWallet/icons/WalletConnectIcon.d.ts +6 -0
  222. package/dist/types/react/web/ui/ConnectWallet/icons/WalletConnectIcon.d.ts.map +1 -0
  223. package/dist/types/react/web/ui/ConnectWallet/screens/ManageWalletScreen.d.ts +14 -0
  224. package/dist/types/react/web/ui/ConnectWallet/screens/ManageWalletScreen.d.ts.map +1 -0
  225. package/dist/types/react/web/ui/ConnectWallet/screens/SignatureScreen.d.ts.map +1 -1
  226. package/dist/types/react/web/ui/ConnectWallet/screens/WalletConnectReceiverScreen.d.ts +12 -0
  227. package/dist/types/react/web/ui/ConnectWallet/screens/WalletConnectReceiverScreen.d.ts.map +1 -0
  228. package/dist/types/react/web/ui/ConnectWallet/screens/WalletLogoSpinner.d.ts +3 -0
  229. package/dist/types/react/web/ui/ConnectWallet/screens/WalletLogoSpinner.d.ts.map +1 -1
  230. package/dist/types/react/web/ui/ConnectWallet/screens/types.d.ts +1 -0
  231. package/dist/types/react/web/ui/ConnectWallet/screens/types.d.ts.map +1 -1
  232. package/dist/types/react/web/ui/ConnectWallet/useConnectModal.d.ts +1 -1
  233. package/dist/types/react/web/ui/components/CopyIcon.d.ts.map +1 -1
  234. package/dist/types/react/web/utils/canFitWideModal.d.ts +1 -1
  235. package/dist/types/react/web/wallets/in-app/InputSelectionUI.d.ts +1 -0
  236. package/dist/types/react/web/wallets/in-app/InputSelectionUI.d.ts.map +1 -1
  237. package/dist/types/react/web/wallets/shared/ConnectingScreen.d.ts.map +1 -1
  238. package/dist/types/transaction/read-contract.d.ts +1 -1
  239. package/dist/types/version.d.ts +1 -1
  240. package/dist/types/version.d.ts.map +1 -1
  241. package/dist/types/wallets/injected/index.d.ts.map +1 -1
  242. package/dist/types/wallets/interfaces/wallet.d.ts +21 -0
  243. package/dist/types/wallets/interfaces/wallet.d.ts.map +1 -1
  244. package/dist/types/wallets/wallet-connect/controller.d.ts.map +1 -1
  245. package/dist/types/wallets/wallet-connect/{consumer → receiver}/index.d.ts +7 -1
  246. package/dist/types/wallets/wallet-connect/receiver/index.d.ts.map +1 -0
  247. package/dist/types/wallets/wallet-connect/{consumer → receiver}/request-handlers/send-raw-transaction.d.ts.map +1 -1
  248. package/dist/types/wallets/wallet-connect/{consumer → receiver}/request-handlers/send-transaction.d.ts.map +1 -1
  249. package/dist/types/wallets/wallet-connect/{consumer → receiver}/request-handlers/sign-transaction.d.ts.map +1 -1
  250. package/dist/types/wallets/wallet-connect/{consumer → receiver}/request-handlers/sign-typed-data.d.ts.map +1 -1
  251. package/dist/types/wallets/wallet-connect/{consumer → receiver}/request-handlers/sign.d.ts.map +1 -1
  252. package/dist/types/wallets/wallet-connect/receiver/request-handlers/switch-chain.d.ts +11 -0
  253. package/dist/types/wallets/wallet-connect/receiver/request-handlers/switch-chain.d.ts.map +1 -0
  254. package/dist/types/wallets/wallet-connect/{consumer → receiver}/session-proposal.d.ts +4 -1
  255. package/dist/types/wallets/wallet-connect/receiver/session-proposal.d.ts.map +1 -0
  256. package/dist/types/wallets/wallet-connect/receiver/session-request.d.ts.map +1 -0
  257. package/dist/types/wallets/wallet-connect/{consumer → receiver}/session-store.d.ts.map +1 -1
  258. package/dist/types/wallets/wallet-connect/{consumer → receiver}/types.d.ts +25 -3
  259. package/dist/types/wallets/wallet-connect/receiver/types.d.ts.map +1 -0
  260. package/dist/types/wallets/wallet-connect/{consumer → receiver}/utils.d.ts +1 -1
  261. package/dist/types/wallets/wallet-connect/receiver/utils.d.ts.map +1 -0
  262. package/package.json +3 -3
  263. package/src/exports/extensions/erc1155.ts +5 -0
  264. package/src/exports/wallets/wallet-connect.ts +2 -2
  265. package/src/extensions/erc1155/__generated__/BatchMintMetadata/events/BatchMetadataUpdate.ts +25 -0
  266. package/src/extensions/erc1155/__generated__/BatchMintMetadata/read/getBaseURICount.ts +74 -0
  267. package/src/extensions/erc1155/__generated__/BatchMintMetadata/read/getBatchIdAtIndex.ts +131 -0
  268. package/src/extensions/erc1155/__generated__/DropERC1155/write/freezeBatchBaseURI.ts +141 -0
  269. package/src/extensions/erc1155/__generated__/DropERC1155/write/setMaxTotalSupply.ts +155 -0
  270. package/src/extensions/erc1155/__generated__/DropERC1155/write/setSaleRecipientForToken.ts +157 -0
  271. package/src/extensions/erc1155/__generated__/DropERC1155/write/updateBatchBaseURI.ts +149 -0
  272. package/src/extensions/erc1155/drops/write/claimTo.test.ts +73 -0
  273. package/src/extensions/erc1155/drops/write/updateMetadata.test.ts +127 -0
  274. package/src/extensions/erc1155/drops/write/updateMetadata.ts +125 -0
  275. package/src/extensions/erc721/write/mintTo.test.ts +67 -0
  276. package/src/pay/buyWithCrypto/getQuote.ts +27 -27
  277. package/src/pay/buyWithCrypto/getStatus.ts +1 -0
  278. package/src/pay/buyWithFiat/getQuote.ts +33 -27
  279. package/src/pay/buyWithFiat/getStatus.ts +5 -0
  280. package/src/react/core/hooks/contract/useContractEvents.ts +1 -1
  281. package/src/react/core/hooks/transaction/useSendTransaction.ts +1 -0
  282. package/src/react/native/hooks/wallets/useActiveWalletChain.ts +1 -1
  283. package/src/react/web/hooks/transaction/useSendTransaction.tsx +1 -0
  284. package/src/react/web/hooks/wallets/useActiveWalletChain.ts +1 -1
  285. package/src/react/web/ui/ConnectWallet/ConnectButtonProps.ts +45 -4
  286. package/src/react/web/ui/ConnectWallet/Details.tsx +46 -145
  287. package/src/react/web/ui/ConnectWallet/MenuButton.tsx +55 -0
  288. package/src/react/web/ui/ConnectWallet/icons/CoinsIcon.tsx +46 -0
  289. package/src/react/web/ui/ConnectWallet/icons/{WalletIcon.tsx → GenericWalletIcon.tsx} +1 -1
  290. package/src/react/web/ui/ConnectWallet/icons/OutlineWalletIcon.tsx +32 -0
  291. package/src/react/web/ui/ConnectWallet/icons/WalletConnectIcon.tsx +22 -0
  292. package/src/react/web/ui/ConnectWallet/screens/Buy/BuyScreen.tsx +3 -0
  293. package/src/react/web/ui/ConnectWallet/screens/Buy/swap/PayWithCrypto.tsx +2 -2
  294. package/src/react/web/ui/ConnectWallet/screens/ManageWalletScreen.tsx +122 -0
  295. package/src/react/web/ui/ConnectWallet/screens/SignatureScreen.tsx +7 -1
  296. package/src/react/web/ui/ConnectWallet/screens/WalletConnectReceiverScreen.tsx +165 -0
  297. package/src/react/web/ui/ConnectWallet/screens/WalletLogoSpinner.tsx +30 -24
  298. package/src/react/web/ui/ConnectWallet/screens/types.ts +13 -0
  299. package/src/react/web/ui/ConnectWallet/useConnectModal.tsx +1 -1
  300. package/src/react/web/ui/components/CopyIcon.tsx +5 -6
  301. package/src/react/web/utils/canFitWideModal.ts +1 -1
  302. package/src/react/web/wallets/in-app/InputSelectionUI.tsx +3 -0
  303. package/src/react/web/wallets/shared/ConnectingScreen.tsx +2 -1
  304. package/src/transaction/read-contract.ts +1 -1
  305. package/src/version.ts +1 -1
  306. package/src/wallets/injected/index.ts +10 -0
  307. package/src/wallets/interfaces/wallet.ts +22 -0
  308. package/src/wallets/smart/smart-wallet-integration.test.ts +1 -2
  309. package/src/wallets/wallet-connect/controller.ts +6 -5
  310. package/src/wallets/wallet-connect/{consumer → receiver}/index.ts +29 -4
  311. package/src/wallets/wallet-connect/{consumer/consumer.test.ts → receiver/receiver.test.ts} +5 -0
  312. package/src/wallets/wallet-connect/{consumer → receiver}/request-handlers/sign.ts +1 -1
  313. package/src/wallets/wallet-connect/receiver/request-handlers/switch-chain.ts +21 -0
  314. package/src/wallets/wallet-connect/{consumer → receiver}/session-proposal.test.ts +37 -18
  315. package/src/wallets/wallet-connect/{consumer → receiver}/session-proposal.ts +23 -15
  316. package/src/wallets/wallet-connect/{consumer → receiver}/session-request.test.ts +85 -0
  317. package/src/wallets/wallet-connect/{consumer → receiver}/session-request.ts +39 -1
  318. package/src/wallets/wallet-connect/{consumer → receiver}/types.ts +27 -3
  319. package/src/wallets/wallet-connect/{consumer → receiver}/utils.ts +2 -2
  320. package/dist/cjs/react/web/ui/ConnectWallet/icons/WalletIcon.js.map +0 -1
  321. package/dist/cjs/wallets/wallet-connect/consumer/index.js.map +0 -1
  322. package/dist/cjs/wallets/wallet-connect/consumer/session-proposal.js.map +0 -1
  323. package/dist/cjs/wallets/wallet-connect/consumer/session-request.js.map +0 -1
  324. package/dist/cjs/wallets/wallet-connect/consumer/types.js.map +0 -1
  325. package/dist/cjs/wallets/wallet-connect/consumer/utils.js.map +0 -1
  326. package/dist/esm/react/web/ui/ConnectWallet/icons/WalletIcon.js.map +0 -1
  327. package/dist/esm/wallets/wallet-connect/consumer/index.js.map +0 -1
  328. package/dist/esm/wallets/wallet-connect/consumer/session-proposal.js.map +0 -1
  329. package/dist/esm/wallets/wallet-connect/consumer/session-request.js.map +0 -1
  330. package/dist/esm/wallets/wallet-connect/consumer/types.js.map +0 -1
  331. package/dist/esm/wallets/wallet-connect/consumer/utils.js.map +0 -1
  332. package/dist/types/react/web/ui/ConnectWallet/icons/WalletIcon.d.ts +0 -6
  333. package/dist/types/react/web/ui/ConnectWallet/icons/WalletIcon.d.ts.map +0 -1
  334. package/dist/types/wallets/wallet-connect/consumer/index.d.ts.map +0 -1
  335. package/dist/types/wallets/wallet-connect/consumer/session-proposal.d.ts.map +0 -1
  336. package/dist/types/wallets/wallet-connect/consumer/session-request.d.ts.map +0 -1
  337. package/dist/types/wallets/wallet-connect/consumer/types.d.ts.map +0 -1
  338. package/dist/types/wallets/wallet-connect/consumer/utils.d.ts.map +0 -1
  339. /package/dist/cjs/wallets/wallet-connect/{consumer → receiver}/request-handlers/send-raw-transaction.js +0 -0
  340. /package/dist/cjs/wallets/wallet-connect/{consumer → receiver}/request-handlers/send-transaction.js +0 -0
  341. /package/dist/cjs/wallets/wallet-connect/{consumer → receiver}/request-handlers/sign-transaction.js +0 -0
  342. /package/dist/cjs/wallets/wallet-connect/{consumer → receiver}/request-handlers/sign-typed-data.js +0 -0
  343. /package/dist/cjs/wallets/wallet-connect/{consumer → receiver}/session-store.js +0 -0
  344. /package/dist/cjs/wallets/wallet-connect/{consumer → receiver}/types.js +0 -0
  345. /package/dist/esm/wallets/wallet-connect/{consumer → receiver}/request-handlers/send-raw-transaction.js +0 -0
  346. /package/dist/esm/wallets/wallet-connect/{consumer → receiver}/request-handlers/send-transaction.js +0 -0
  347. /package/dist/esm/wallets/wallet-connect/{consumer → receiver}/request-handlers/sign-transaction.js +0 -0
  348. /package/dist/esm/wallets/wallet-connect/{consumer → receiver}/request-handlers/sign-typed-data.js +0 -0
  349. /package/dist/esm/wallets/wallet-connect/{consumer → receiver}/session-store.js +0 -0
  350. /package/dist/esm/wallets/wallet-connect/{consumer → receiver}/types.js +0 -0
  351. /package/dist/types/wallets/wallet-connect/{consumer → receiver}/request-handlers/send-raw-transaction.d.ts +0 -0
  352. /package/dist/types/wallets/wallet-connect/{consumer → receiver}/request-handlers/send-transaction.d.ts +0 -0
  353. /package/dist/types/wallets/wallet-connect/{consumer → receiver}/request-handlers/sign-transaction.d.ts +0 -0
  354. /package/dist/types/wallets/wallet-connect/{consumer → receiver}/request-handlers/sign-typed-data.d.ts +0 -0
  355. /package/dist/types/wallets/wallet-connect/{consumer → receiver}/request-handlers/sign.d.ts +0 -0
  356. /package/dist/types/wallets/wallet-connect/{consumer → receiver}/session-request.d.ts +0 -0
  357. /package/dist/types/wallets/wallet-connect/{consumer → receiver}/session-store.d.ts +0 -0
  358. /package/src/wallets/wallet-connect/{consumer → receiver}/request-handlers/send-raw-transaction.ts +0 -0
  359. /package/src/wallets/wallet-connect/{consumer → receiver}/request-handlers/send-transaction.ts +0 -0
  360. /package/src/wallets/wallet-connect/{consumer → receiver}/request-handlers/sign-transaction.ts +0 -0
  361. /package/src/wallets/wallet-connect/{consumer → receiver}/request-handlers/sign-typed-data.ts +0 -0
  362. /package/src/wallets/wallet-connect/{consumer → receiver}/session-store.test.ts +0 -0
  363. /package/src/wallets/wallet-connect/{consumer → receiver}/session-store.ts +0 -0
@@ -196,6 +196,16 @@ function createAccount(provider: Ethereum, address: string) {
196
196
  params: [account.address, stringifiedData],
197
197
  });
198
198
  },
199
+ async watchAsset(asset) {
200
+ const result = await provider.request(
201
+ {
202
+ method: "wallet_watchAsset",
203
+ params: asset,
204
+ },
205
+ { retryCount: 0 },
206
+ );
207
+ return result;
208
+ },
199
209
  };
200
210
 
201
211
  return account;
@@ -26,6 +26,16 @@ export type SendRawTransactionOptions = {
26
26
  chainId: number;
27
27
  };
28
28
 
29
+ export type WatchAssetParams = {
30
+ type: "ERC20";
31
+ options: {
32
+ address: Address;
33
+ symbol: string;
34
+ decimals: number;
35
+ image?: string | undefined;
36
+ };
37
+ };
38
+
29
39
  /**
30
40
  * Wallet interface
31
41
  */
@@ -238,4 +248,16 @@ export type Account = {
238
248
  // biome-ignore lint/suspicious/noExplicitAny: any transaction type is allowed here
239
249
  transaction: PreparedTransaction<any>,
240
250
  ) => Promise<void>;
251
+ /**
252
+ * Add an asset to the wallet's watchlist.
253
+ * @param asset - The asset to watch.
254
+ *
255
+ * @example
256
+ * ```ts
257
+ * if (account.watchAsset) {
258
+ * const success = await account.watchAsset({ type: "ERC20", options: { address: "0x...", symbol: "...", decimals: 18 } });
259
+ * }
260
+ * ```
261
+ */
262
+ watchAsset?: (asset: WatchAssetParams) => Promise<boolean>;
241
263
  };
@@ -6,6 +6,7 @@ import { arbitrumSepolia } from "../../chains/chain-definitions/arbitrum-sepolia
6
6
  import { type ThirdwebContract, getContract } from "../../contract/contract.js";
7
7
  import { parseEventLogs } from "../../event/actions/parse-logs.js";
8
8
  import { baseSepolia } from "../../exports/chains.js";
9
+
9
10
  import {
10
11
  addAdmin,
11
12
  adminUpdatedEvent,
@@ -189,7 +190,6 @@ describe.runIf(process.env.TW_SECRET_KEY)(
189
190
  events: [adminUpdatedEvent()],
190
191
  logs: receipt.logs,
191
192
  });
192
- expect(logs.length).toBe(1);
193
193
  expect(logs[0]?.args.signer).toBe(newAdmin.address);
194
194
  expect(logs[0]?.args.isAdmin).toBe(true);
195
195
  });
@@ -255,7 +255,6 @@ describe.runIf(process.env.TW_SECRET_KEY)(
255
255
  events: [adminUpdatedEvent()],
256
256
  logs: receipt.logs,
257
257
  });
258
- expect(logs.length).toBe(1);
259
258
  expect(logs[0]?.args.signer).toBe(newAdmin.address);
260
259
  expect(logs[0]?.args.isAdmin).toBe(true);
261
260
 
@@ -92,7 +92,7 @@ export async function connectWC(
92
92
  let { onDisplayUri } = wcOptions || {};
93
93
 
94
94
  // use default sessionHandler unless onDisplayUri is explicitly provided
95
- if (!onDisplayUri && sessionHandler) {
95
+ if (!onDisplayUri && sessionHandler && walletId !== "walletConnect") {
96
96
  const walletInfo = await getWalletInfo(walletId);
97
97
  const deeplinkHandler = (uri: string) => {
98
98
  const appUrl = walletInfo.mobile.native || walletInfo.mobile.universal;
@@ -235,10 +235,11 @@ async function initProvider(
235
235
  });
236
236
 
237
237
  const provider = await EthereumProvider.init({
238
- showQrModal: sessionRequestHandler
239
- ? false
240
- : wcOptions?.showQrModal === undefined
241
- ? defaultShowQrModal
238
+ showQrModal:
239
+ wcOptions?.showQrModal === undefined
240
+ ? sessionRequestHandler
241
+ ? false
242
+ : defaultShowQrModal
242
243
  : wcOptions.showQrModal,
243
244
  projectId: wcOptions?.projectId || DEFAULT_PROJECT_ID,
244
245
  optionalMethods: OPTIONAL_METHODS,
@@ -1,7 +1,8 @@
1
1
  import { SignClient } from "@walletconnect/sign-client";
2
+ import type { Chain } from "../../../chains/types.js";
2
3
  import type { ThirdwebClient } from "../../../client/client.js";
3
4
  import type { Prettify } from "../../../utils/type-utils.js";
4
- import type { Wallet } from "../../../wallets/interfaces/wallet.js";
5
+ import type { Wallet } from "../../interfaces/wallet.js";
5
6
  import { getDefaultAppMetadata } from "../../utils/defaultDappMetadata.js";
6
7
  import { DEFAULT_PROJECT_ID } from "../constants.js";
7
8
  import {
@@ -31,6 +32,11 @@ export type CreateWalletConnectClientOptions = Prettify<
31
32
  */
32
33
  wallet: Wallet;
33
34
 
35
+ /**
36
+ * Any chains to enable for the wallet. Apps can request access to specific chains, but this list will always be available for use with the wallet.
37
+ */
38
+ chains?: Chain[];
39
+
34
40
  /**
35
41
  * Custom RPC handlers to override the defaults. Useful when creating a custom approval UI.
36
42
  */
@@ -65,6 +71,18 @@ export type CreateWalletConnectSessionOptions = {
65
71
  onConnect?: (session: WalletConnectSession) => void;
66
72
  };
67
73
 
74
+ let walletConnectClientCache = new WeakMap<
75
+ ThirdwebClient,
76
+ WalletConnectClient
77
+ >();
78
+
79
+ /*
80
+ * @internal
81
+ */
82
+ export const clearWalletConnectClientCache = () => {
83
+ walletConnectClientCache = new WeakMap<ThirdwebClient, WalletConnectClient>();
84
+ };
85
+
68
86
  /**
69
87
  * Creates a new WalletConnect client for interacting with another application.
70
88
  * @param options - The options to use to create the WalletConnect client.
@@ -113,7 +131,11 @@ export type CreateWalletConnectSessionOptions = {
113
131
  export async function createWalletConnectClient(
114
132
  options: CreateWalletConnectClientOptions,
115
133
  ): Promise<WalletConnectClient> {
116
- const { wallet, requestHandlers, onConnect, onDisconnect } = options;
134
+ const { wallet, requestHandlers, chains, onConnect, onDisconnect } = options;
135
+
136
+ if (walletConnectClientCache.has(options.client)) {
137
+ return walletConnectClientCache.get(options.client) as WalletConnectClient;
138
+ }
117
139
 
118
140
  initializeSessionStore({ clientId: options.client.clientId });
119
141
 
@@ -136,6 +158,7 @@ export async function createWalletConnectClient(
136
158
  wallet,
137
159
  walletConnectClient,
138
160
  event,
161
+ chains,
139
162
  onConnect,
140
163
  });
141
164
  },
@@ -157,7 +180,7 @@ export async function createWalletConnectClient(
157
180
  walletConnectClient.on(
158
181
  "session_event",
159
182
  async (_event: WalletConnectSessionEvent) => {
160
- // TODO
183
+ // TODO (accountsChanged, chainChanged)
161
184
  },
162
185
  );
163
186
 
@@ -188,6 +211,8 @@ export async function createWalletConnectClient(
188
211
  return result;
189
212
  };
190
213
 
214
+ walletConnectClientCache.set(options.client, walletConnectClient);
215
+
191
216
  return walletConnectClient;
192
217
  }
193
218
 
@@ -258,7 +283,7 @@ export async function disconnectWalletConnectSession(options: {
258
283
  topic: options.session.topic,
259
284
  reason: {
260
285
  code: 6000,
261
- message: "Replaced by new session",
286
+ message: "Disconnected",
262
287
  },
263
288
  });
264
289
  } catch {
@@ -5,6 +5,7 @@ import { TEST_IN_APP_WALLET_A } from "../../../../test/src/test-wallets.js";
5
5
  import { getDefaultAppMetadata } from "../../utils/defaultDappMetadata.js";
6
6
  import { DEFAULT_PROJECT_ID } from "../constants.js";
7
7
  import {
8
+ clearWalletConnectClientCache,
8
9
  createWalletConnectClient,
9
10
  createWalletConnectSession,
10
11
  disconnectWalletConnectSession,
@@ -64,6 +65,10 @@ beforeEach(() => {
64
65
  });
65
66
 
66
67
  describe("createWalletConnectClient", () => {
68
+ beforeEach(() => {
69
+ clearWalletConnectClientCache();
70
+ });
71
+
67
72
  it("creates a client with provided metadata", async () => {
68
73
  const client = await createWalletConnectClient({
69
74
  projectId: "test",
@@ -13,5 +13,5 @@ export async function handleSignRequest(options: {
13
13
  const { account, params } = options;
14
14
 
15
15
  validateAccountAddress(account, params[1]);
16
- return account.signMessage({ message: params[0] });
16
+ return account.signMessage({ message: { raw: params[0] as Hex } });
17
17
  }
@@ -0,0 +1,21 @@
1
+ import { defineChain } from "../../../../chains/utils.js";
2
+ import { type Hex, hexToNumber } from "../../../../utils/encoding/hex.js";
3
+ import type { Wallet } from "../../../interfaces/wallet.js";
4
+ import type { WalletConnectSwitchEthereumChainRequestParams } from "../types.js";
5
+
6
+ /**
7
+ * @internal
8
+ */
9
+ export async function handleSwitchChain(options: {
10
+ wallet: Wallet;
11
+ params: WalletConnectSwitchEthereumChainRequestParams;
12
+ }): Promise<Hex> {
13
+ const { wallet, params } = options;
14
+
15
+ if (wallet.getChain()?.id === hexToNumber(params[0].chainId)) {
16
+ return "0x1";
17
+ } else {
18
+ await wallet.switchChain(defineChain(hexToNumber(params[0].chainId)));
19
+ return "0x1";
20
+ }
21
+ }
@@ -1,5 +1,6 @@
1
1
  import { beforeEach } from "node:test";
2
2
  import { afterAll, describe, expect, it, vi } from "vitest";
3
+ import { ANVIL_CHAIN } from "../../../../test/src/chains.js";
3
4
  import {
4
5
  TEST_ACCOUNT_A,
5
6
  TEST_IN_APP_WALLET_A,
@@ -125,6 +126,39 @@ describe("session_proposal", () => {
125
126
  });
126
127
  });
127
128
 
129
+ it("should connect new session with custom chains", async () => {
130
+ await onSessionProposal({
131
+ walletConnectClient: signClientMock,
132
+ wallet: walletMock,
133
+ event: PROPOSAL_EVENT_MOCK,
134
+ chains: [ANVIL_CHAIN],
135
+ });
136
+
137
+ expect(signClientMock.approve).toHaveBeenCalledWith({
138
+ id: PROPOSAL_EVENT_MOCK.id,
139
+ namespaces: {
140
+ eip155: {
141
+ accounts: [
142
+ `eip155:1:${TEST_ACCOUNT_A.address}`,
143
+ `eip155:31337:${TEST_ACCOUNT_A.address}`,
144
+ ],
145
+ methods: [
146
+ ...(PROPOSAL_EVENT_MOCK.params.requiredNamespaces?.eip155
147
+ ?.methods ?? []),
148
+ ...(PROPOSAL_EVENT_MOCK.params.optionalNamespaces?.eip155
149
+ ?.methods ?? []),
150
+ ],
151
+ events: [
152
+ ...(PROPOSAL_EVENT_MOCK.params.requiredNamespaces?.eip155?.events ??
153
+ []),
154
+ ...(PROPOSAL_EVENT_MOCK.params.optionalNamespaces?.eip155?.events ??
155
+ []),
156
+ ],
157
+ },
158
+ },
159
+ });
160
+ });
161
+
128
162
  it("should disconnect existing session", async () => {
129
163
  vi.spyOn(SessionStore, "getSessions").mockResolvedValueOnce([
130
164
  {
@@ -151,27 +185,12 @@ describe("session_proposal", () => {
151
185
  });
152
186
 
153
187
  it("should throw if no eip155 namespace provided", async () => {
154
- const proposal = {
155
- ...PROPOSAL_EVENT_MOCK,
156
- params: { ...PROPOSAL_EVENT_MOCK.params, requiredNamespaces: {} },
157
- };
158
-
159
- const promise = onSessionProposal({
160
- walletConnectClient: signClientMock,
161
- wallet: walletMock,
162
- event: proposal,
163
- });
164
- await expect(promise).rejects.toThrow(
165
- "[WalletConnect] No EIP155 namespace found in Wallet Connect session proposal",
166
- );
167
- });
168
-
169
- it("should throw if no eip155 chains provided", async () => {
170
188
  const proposal = {
171
189
  ...PROPOSAL_EVENT_MOCK,
172
190
  params: {
173
191
  ...PROPOSAL_EVENT_MOCK.params,
174
- requiredNamespaces: { eip155: { methods: [], events: [] } },
192
+ requiredNamespaces: {},
193
+ optionalNamespaces: {},
175
194
  },
176
195
  };
177
196
 
@@ -181,7 +200,7 @@ describe("session_proposal", () => {
181
200
  event: proposal,
182
201
  });
183
202
  await expect(promise).rejects.toThrow(
184
- "[WalletConnect] No chains found in EIP155 Wallet Connect session proposal namespace",
203
+ "[WalletConnect] No EIP155 namespace found in Wallet Connect session proposal",
185
204
  );
186
205
  });
187
206
 
@@ -1,3 +1,4 @@
1
+ import type { Chain } from "../../../chains/types.js";
1
2
  import type { Account, Wallet } from "../../interfaces/wallet.js";
2
3
  import { disconnectWalletConnectSession } from "./index.js";
3
4
  import { getSessions, saveSession } from "./session-store.js";
@@ -14,9 +15,10 @@ export async function onSessionProposal(options: {
14
15
  wallet: Wallet;
15
16
  walletConnectClient: WalletConnectClient;
16
17
  event: WalletConnectSessionProposalEvent;
18
+ chains?: Chain[];
17
19
  onConnect?: (session: WalletConnectSession) => void;
18
20
  }) {
19
- const { wallet, walletConnectClient, event, onConnect } = options;
21
+ const { wallet, walletConnectClient, event, chains, onConnect } = options;
20
22
 
21
23
  const account = wallet.getAccount();
22
24
  if (!account) {
@@ -31,6 +33,7 @@ export async function onSessionProposal(options: {
31
33
  account,
32
34
  walletConnectClient,
33
35
  sessionProposal: event,
36
+ chains,
34
37
  });
35
38
 
36
39
  await saveSession(session);
@@ -64,38 +67,43 @@ export async function acceptSessionProposal({
64
67
  account,
65
68
  walletConnectClient,
66
69
  sessionProposal,
70
+ chains,
67
71
  }: {
68
72
  account: Account;
69
73
  walletConnectClient: WalletConnectClient;
70
74
  sessionProposal: WalletConnectSessionProposalEvent;
75
+ chains?: Chain[];
71
76
  }): Promise<WalletConnectSession> {
72
- if (!sessionProposal.params.requiredNamespaces.eip155) {
77
+ if (
78
+ !sessionProposal.params.requiredNamespaces?.eip155 &&
79
+ !sessionProposal.params.optionalNamespaces?.eip155
80
+ ) {
73
81
  throw new Error(
74
82
  "[WalletConnect] No EIP155 namespace found in Wallet Connect session proposal",
75
83
  );
76
84
  }
77
85
 
78
- if (!sessionProposal.params.requiredNamespaces.eip155.chains) {
79
- throw new Error(
80
- "[WalletConnect] No chains found in EIP155 Wallet Connect session proposal namespace",
81
- );
82
- }
83
-
84
86
  const namespaces = {
85
87
  chains: [
86
- ...sessionProposal.params.requiredNamespaces.eip155.chains.map(
87
- (chain: string) => `${chain}:${account.address}`,
88
+ ...Array.from(
89
+ new Set([
90
+ ...(sessionProposal.params.requiredNamespaces?.eip155?.chains?.map(
91
+ (chain: string) => `${chain}:${account.address}`,
92
+ ) ?? []),
93
+ ...(sessionProposal.params.optionalNamespaces?.eip155?.chains?.map(
94
+ (chain: string) => `${chain}:${account.address}`,
95
+ ) ?? []),
96
+ ...(chains?.map((chain) => `eip155:${chain.id}:${account.address}`) ??
97
+ []),
98
+ ]),
88
99
  ),
89
- ...(sessionProposal.params.optionalNamespaces?.eip155?.chains?.map(
90
- (chain: string) => `${chain}:${account.address}`,
91
- ) ?? []),
92
100
  ],
93
101
  methods: [
94
- ...sessionProposal.params.requiredNamespaces.eip155.methods,
102
+ ...(sessionProposal.params.requiredNamespaces?.eip155?.methods ?? []),
95
103
  ...(sessionProposal.params.optionalNamespaces?.eip155?.methods ?? []),
96
104
  ],
97
105
  events: [
98
- ...sessionProposal.params.requiredNamespaces.eip155.events,
106
+ ...(sessionProposal.params.requiredNamespaces?.eip155?.events ?? []),
99
107
  ...(sessionProposal.params.optionalNamespaces?.eip155?.events ?? []),
100
108
  ],
101
109
  };
@@ -6,13 +6,16 @@ import {
6
6
  } from "../../../../test/src/test-wallets.js";
7
7
  import { typedData } from "../../../../test/src/typed-data.js";
8
8
  import { cloneObject } from "../../../../test/src/utils.js";
9
+ import { defineChain } from "../../../chains/utils.js";
9
10
  import { fulfillRequest } from "./session-request.js";
10
11
  import type {
12
+ WalletConnectAddEthereumChainRequestParams,
11
13
  WalletConnectClient,
12
14
  WalletConnectRawTransactionRequestParams,
13
15
  WalletConnectSessionRequestEvent,
14
16
  WalletConnectSignRequestPrams,
15
17
  WalletConnectSignTypedDataRequestParams,
18
+ WalletConnectSwitchEthereumChainRequestParams,
16
19
  WalletConnectTransactionRequestParams,
17
20
  } from "./types.js";
18
21
 
@@ -40,6 +43,8 @@ const REQUEST_EVENT_MOCK: WalletConnectSessionRequestEvent = {
40
43
  const walletMock = {
41
44
  ...TEST_IN_APP_WALLET_A,
42
45
  getAccount: vi.fn().mockReturnValue(TEST_IN_APP_WALLET_A.getAccount()),
46
+ switchChain: vi.fn(),
47
+ getChain: vi.fn(),
43
48
  };
44
49
 
45
50
  const mocks = vi.hoisted(() => ({
@@ -711,4 +716,84 @@ describe("session_request", () => {
711
716
  });
712
717
  });
713
718
  });
719
+
720
+ describe("wallet_addEthereumChain", () => {
721
+ let addEthereumChainRequest: WalletConnectSessionRequestEvent;
722
+ beforeEach(() => {
723
+ addEthereumChainRequest = cloneObject(REQUEST_EVENT_MOCK);
724
+ addEthereumChainRequest.params.request.method = "wallet_addEthereumChain";
725
+ addEthereumChainRequest.params.request.params = [
726
+ {
727
+ chainId: "0x1",
728
+ blockExplorerUrls: ["https://etherscan.io"],
729
+ chainName: "Ethereum",
730
+ nativeCurrency: {
731
+ name: "Ether",
732
+ symbol: "ETH",
733
+ decimals: 18,
734
+ },
735
+ rpcUrls: ["https://rpc.ethereum.org"],
736
+ },
737
+ ] as WalletConnectAddEthereumChainRequestParams;
738
+ });
739
+
740
+ it("is not supported", async () => {
741
+ await fulfillRequest({
742
+ walletConnectClient: signClientMock,
743
+ wallet: walletMock,
744
+ event: addEthereumChainRequest,
745
+ });
746
+
747
+ expect(signClientMock.respond).toHaveBeenCalledWith({
748
+ topic: REQUEST_EVENT_MOCK.topic,
749
+ response: {
750
+ id: REQUEST_EVENT_MOCK.id,
751
+ jsonrpc: "2.0",
752
+ result: {
753
+ code: 500,
754
+ message: "[WalletConnect] wallet_addEthereumChain is not supported",
755
+ },
756
+ },
757
+ });
758
+ });
759
+ });
760
+
761
+ describe("wallet_switchEthereumChain", () => {
762
+ let switchEthereumChainRequest: WalletConnectSessionRequestEvent;
763
+ beforeEach(() => {
764
+ switchEthereumChainRequest = cloneObject(REQUEST_EVENT_MOCK);
765
+ switchEthereumChainRequest.params.request.method =
766
+ "wallet_switchEthereumChain";
767
+ switchEthereumChainRequest.params.request.params = [
768
+ {
769
+ chainId: "0x1",
770
+ },
771
+ ] as WalletConnectSwitchEthereumChainRequestParams;
772
+ });
773
+
774
+ it("switches the chain", async () => {
775
+ await fulfillRequest({
776
+ walletConnectClient: signClientMock,
777
+ wallet: walletMock,
778
+ event: switchEthereumChainRequest,
779
+ });
780
+
781
+ expect(walletMock.switchChain).toHaveBeenCalledWith(
782
+ expect.objectContaining({
783
+ id: 1,
784
+ }),
785
+ );
786
+ });
787
+
788
+ it("does not switch the chain if already set", async () => {
789
+ walletMock.getChain.mockReturnValue(defineChain(1));
790
+ await fulfillRequest({
791
+ walletConnectClient: signClientMock,
792
+ wallet: walletMock,
793
+ event: switchEthereumChainRequest,
794
+ });
795
+
796
+ expect(walletMock.switchChain).not.toHaveBeenCalled();
797
+ });
798
+ });
714
799
  });
@@ -1,6 +1,10 @@
1
1
  import type { Hex } from "../../../utils/encoding/hex.js";
2
2
  import type { Wallet } from "../../interfaces/wallet.js";
3
- import type { WalletConnectClient } from "./types.js";
3
+ import type {
4
+ WalletConnectAddEthereumChainRequestParams,
5
+ WalletConnectClient,
6
+ WalletConnectSwitchEthereumChainRequestParams,
7
+ } from "./types.js";
4
8
  import type {
5
9
  WalletConnectRawTransactionRequestParams,
6
10
  WalletConnectRequestError,
@@ -151,6 +155,40 @@ export async function fulfillRequest(options: {
151
155
  }
152
156
  break;
153
157
  }
158
+ case "wallet_addEthereumChain": {
159
+ if (handlers?.wallet_addEthereumChain) {
160
+ result = await handlers.wallet_addEthereumChain({
161
+ wallet,
162
+ params:
163
+ request.params as WalletConnectAddEthereumChainRequestParams,
164
+ });
165
+ } else {
166
+ throw new Error(
167
+ "[WalletConnect] wallet_addEthereumChain is not supported",
168
+ );
169
+ }
170
+ break;
171
+ }
172
+ case "wallet_switchEthereumChain": {
173
+ if (handlers?.wallet_switchEthereumChain) {
174
+ result = await handlers.wallet_switchEthereumChain({
175
+ wallet,
176
+ params:
177
+ request.params as WalletConnectSwitchEthereumChainRequestParams,
178
+ });
179
+ } else {
180
+ const { handleSwitchChain } = await import(
181
+ "./request-handlers/switch-chain.js"
182
+ );
183
+
184
+ result = await handleSwitchChain({
185
+ wallet,
186
+ params:
187
+ request.params as WalletConnectSwitchEthereumChainRequestParams,
188
+ });
189
+ }
190
+ break;
191
+ }
154
192
  default: {
155
193
  const potentialHandler = handlers?.[request.method];
156
194
  if (potentialHandler) {
@@ -3,7 +3,7 @@ import type { TypedDataDefinition } from "viem";
3
3
  import type { Address } from "../../../utils/address.js";
4
4
  import type { Hex } from "../../../utils/encoding/hex.js";
5
5
  import type { Prettify } from "../../../utils/type-utils.js";
6
- import type { Account } from "../../interfaces/wallet.js";
6
+ import type { Account, Wallet } from "../../interfaces/wallet.js";
7
7
 
8
8
  export type { WalletConnectConfig } from "../types.js"; // re-exporting for use in this module
9
9
  export type WalletConnectSession = {
@@ -31,7 +31,7 @@ export type WalletConnectSessionProposalEvent = {
31
31
  icons: string[];
32
32
  };
33
33
  };
34
- requiredNamespaces: Record<
34
+ requiredNamespaces?: Record<
35
35
  string,
36
36
  {
37
37
  chains?: string[];
@@ -96,6 +96,14 @@ export type WalletConnectRequestHandlers = Prettify<
96
96
  chainId: number;
97
97
  params: WalletConnectTransactionRequestParams;
98
98
  }) => Promise<Hex | WalletConnectRequestError>;
99
+ wallet_addEthereumChain?: (_: {
100
+ wallet: Wallet;
101
+ params: WalletConnectAddEthereumChainRequestParams;
102
+ }) => Promise<Hex>;
103
+ wallet_switchEthereumChain?: (_: {
104
+ wallet: Wallet;
105
+ params: WalletConnectSwitchEthereumChainRequestParams;
106
+ }) => Promise<Hex>;
99
107
  } & {
100
108
  [code: string]: (_: {
101
109
  account: Account;
@@ -114,7 +122,9 @@ type WalletConnectRequestParams =
114
122
  | WalletConnectSignRequestPrams
115
123
  | WalletConnectSignTypedDataRequestParams
116
124
  | WalletConnectTransactionRequestParams
117
- | WalletConnectRawTransactionRequestParams;
125
+ | WalletConnectRawTransactionRequestParams
126
+ | WalletConnectAddEthereumChainRequestParams
127
+ | WalletConnectSwitchEthereumChainRequestParams;
118
128
 
119
129
  export type WalletConnectSessionRequestEvent = {
120
130
  id: number;
@@ -146,3 +156,17 @@ export type WalletConnectTransactionRequestParams = [
146
156
  },
147
157
  ];
148
158
  export type WalletConnectRawTransactionRequestParams = [Hex];
159
+
160
+ export type WalletConnectAddEthereumChainRequestParams = {
161
+ chainId: string;
162
+ blockExplorerUrls: string[];
163
+ chainName: string;
164
+ nativeCurrency: {
165
+ name: string;
166
+ symbol: string;
167
+ decimals: number;
168
+ };
169
+ rpcUrls: string[];
170
+ }[];
171
+
172
+ export type WalletConnectSwitchEthereumChainRequestParams = [{ chainId: Hex }];
@@ -1,11 +1,11 @@
1
- import type { Address } from "../../../utils/address.js";
1
+ import { type Address, checksumAddress } from "../../../utils/address.js";
2
2
  import type { Account } from "../../interfaces/wallet.js";
3
3
 
4
4
  /**
5
5
  * @internal
6
6
  */
7
7
  export function validateAccountAddress(account: Account, address: Address) {
8
- if (account.address !== address) {
8
+ if (checksumAddress(account.address) !== checksumAddress(address)) {
9
9
  throw new Error(
10
10
  `[WalletConnect] Failed to validate account address (${account.address}), differs from ${address}`,
11
11
  );
@@ -1 +0,0 @@
1
- {"version":3,"file":"WalletIcon.js","sourceRoot":"","sources":["../../../../../../../src/react/web/ui/ConnectWallet/icons/WalletIcon.tsx"],"names":[],"mappings":";;;;AAEA;;GAEG;AACI,MAAM,UAAU,GAAW,CAAC,KAAK,EAAE,EAAE;IAC1C,OAAO,CACL,gCACE,KAAK,EAAC,4BAA4B,EAClC,IAAI,EAAC,MAAM,EACX,OAAO,EAAC,WAAW,EACnB,KAAK,EAAE,KAAK,CAAC,IAAI,EACjB,MAAM,EAAE,KAAK,CAAC,IAAI,EAClB,IAAI,EAAC,cAAc,YAEnB,iCACE,IAAI,EAAC,cAAc,EACnB,CAAC,EAAC,qPAAqP,GACvP,GACE,CACP,CAAC;AACJ,CAAC,CAAC;AAhBW,QAAA,UAAU,cAgBrB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/wallets/wallet-connect/consumer/index.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-proposal.js","sourceRoot":"","sources":["../../../../../src/wallets/wallet-connect/consumer/session-proposal.ts"],"names":[],"mappings":"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"}